matlab圖像分割算法源碼.doc
《matlab圖像分割算法源碼.doc》由會員分享,可在線閱讀,更多相關《matlab圖像分割算法源碼.doc(14頁珍藏版)》請在裝配圖網上搜索。
matlab 圖像分割算法源碼 1.圖像反轉 MATLAB程序實現如下: I=imread(xian.bmp); J=double(I); J=-J+(256-1); %圖像反轉線性變換 H=uint8(J); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(H); 2.灰度線性變換 MATLAB程序實現如下: I=imread(xian.bmp); subplot(2,2,1),imshow(I); title(原始圖像); axis([50,250,50,200]); axis on; %顯示坐標系 I1=rgb2gray(I); subplot(2,2,2),imshow(I1); title(灰度圖像); axis([50,250,50,200]); axis on; %顯示坐標系 J=imadjust(I1,[0.1 0.5],[]); %局部拉伸,把[0.1 0.5]內的灰度拉伸為[0 1] subplot(2,2,3),imshow(J); title(線性變換圖像[0.1 0.5]); axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 K=imadjust(I1,[0.3 0.7],[]); %局部拉伸,把[0.3 0.7]內的灰度拉伸為[0 1] subplot(2,2,4),imshow(K); title(線性變換圖像[0.3 0.7]); axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 3.非線性變換 MATLAB程序實現如下: I=imread(xian.bmp); I1=rgb2gray(I); subplot(1,2,1),imshow(I1); title(灰度圖像); axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 J=double(I1); J=40*(log(J+1)); H=uint8(J); subplot(1,2,2),imshow(H); title(對數變換圖像); axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 4.直方圖均衡化 MATLAB程序實現如下: I=imread(xian.bmp); I=rgb2gray(I); figure; subplot(2,2,1); imshow(I); subplot(2,2,2); imhist(I); I1=histeq(I); figure; subplot(2,2,1); imshow(I1); subplot(2,2,2); imhist(I1); 5.線性平滑濾波器 用MATLAB實現領域平均法抑制噪聲程序: I=imread(xian.bmp); subplot(231) imshow(I) title(原始圖像) I=rgb2gray(I); I1=imnoise(I,salt & pepper,0.02); subplot(232) imshow(I1) title(添加椒鹽噪聲的圖像) k1=filter2(fspecial(average,3),I1)/255; %進行3*3模板平滑濾波 k2=filter2(fspecial(average,5),I1)/255; %進行5*5模板平滑濾波k3=filter2(fspecial(average,7),I1)/255; %進行7*7模板平滑濾波 k4=filter2(fspecial(average,9),I1)/255; %進行9*9模板平滑濾波 subplot(233),imshow(k1);title(3*3模板平滑濾波); subplot(234),imshow(k2);title(5*5模板平滑濾波); subplot(235),imshow(k3);title(7*7模板平滑濾波); subplot(236),imshow(k4);title(9*9模板平滑濾波); 6.中值濾波器 用MATLAB實現中值濾波程序如下: I=imread(xian.bmp); I=rgb2gray(I); J=imnoise(I,salt&pepper,0.02); subplot(231),imshow(I);title(原圖像); subplot(232),imshow(J);title(添加椒鹽噪聲圖像); k1=medfilt2(J); %進行3*3模板中值濾波 k2=medfilt2(J,[5,5]); %進行5*5模板中值濾波 k3=medfilt2(J,[7,7]); %進行7*7模板中值濾波 k4=medfilt2(J,[9,9]); %進行9*9模板中值濾波 subplot(233),imshow(k1);title(3*3模板中值濾波); subplot(234),imshow(k2);title(5*5模板中值濾波); subplot(235),imshow(k3);title(7*7模板中值濾波); subplot(236),imshow(k4);title(9*9模板中值濾波); 7.用Sobel算子和拉普拉斯對圖像銳化: I=imread(xian.bmp); subplot(2,2,1),imshow(I); title(原始圖像); axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 I1=im2bw(I); subplot(2,2,2),imshow(I1); title(二值圖像); axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 H=fspecial(sobel); %選擇sobel算子 J=filter2(H,I1); %卷積運算 subplot(2,2,3),imshow(J); title(sobel算子銳化圖像); axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 h=[0 1 0,1 -4 1,0 1 0]; %拉普拉斯算子 J1=conv2(I1,h,same); %卷積運算 subplot(2,2,4),imshow(J1); title(拉普拉斯算子銳化圖像); axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 8.梯度算子檢測邊緣 用MATLAB實現如下: I=imread(xian.bmp); subplot(2,3,1); imshow(I); title(原始圖像); axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 I1=im2bw(I); subplot(2,3,2); imshow(I1); title(二值圖像); axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 I2=edge(I1,roberts); figure; subplot(2,3,3); imshow(I2); title(roberts算子分割結果); axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 I3=edge(I1,sobel); subplot(2,3,4); imshow(I3); title(sobel算子分割結果); axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 I4=edge(I1,Prewitt); subplot(2,3,5); imshow(I4); title(Prewitt算子分割結果); axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 9.LOG算子檢測邊緣 用MATLAB程序實現如下: I=imread(xian.bmp); subplot(2,2,1); imshow(I); title(原始圖像); I1=rgb2gray(I); subplot(2,2,2); imshow(I1); title(灰度圖像); I2=edge(I1,log); subplot(2,2,3); imshow(I2); title(log算子分割結果); 10.Canny算子檢測邊緣 用MATLAB程序實現如下: I=imread(xian.bmp); subplot(2,2,1); imshow(I); title(原始圖像) I1=rgb2gray(I); subplot(2,2,2); imshow(I1); title(灰度圖像); I2=edge(I1,canny); subplot(2,2,3); imshow(I2); title(canny算子分割結果); 11.邊界跟蹤(bwtraceboundary函數) clc clear all I=imread(xian.bmp); figure imshow(I); title(原始圖像); I1=rgb2gray(I); %將彩色圖像轉化灰度圖像 threshold=graythresh(I1); %計算將灰度圖像轉化為二值圖像所需的門限 BW=im2bw(I1, threshold); %將灰度圖像轉化為二值圖像 figure imshow(BW); title(二值圖像); dim=size(BW); col=round(dim(2)/2)-90; %計算起始點列坐標 row=find(BW(:,col),1); %計算起始點行坐標 connectivity=8; num_points=180; contour=bwtraceboundary(BW,[row,col],N,connectivity,num_points); %提取邊界 figure imshow(I1); hold on; plot(contour(:,2),contour(:,1), g,LineWidth ,2); title(邊界跟蹤圖像); 12.Hough變換 I= imread(xian.bmp); rotI=rgb2gray(I); subplot(2,2,1); imshow(rotI); title(灰度圖像); axis([50,250,50,200]); grid on; axis on; BW=edge(rotI,prewitt); subplot(2,2,2); imshow(BW); title(prewitt算子邊緣檢測后圖像); axis([50,250,50,200]); grid on; axis on; [H,T,R]=hough(BW); subplot(2,2,3); imshow(H,[],XData,T,YData,R,InitialMagnification,fit); title(霍夫變換圖); xlabel(\theta),ylabel(\rho); axis on , axis normal, hold on; P=houghpeaks(H,5,threshold,ceil(0.3*max(H(:)))); x=T(P(:,2));y=R(P(:,1)); plot(x,y,s,color,white); lines=houghlines(BW,T,R,P,FillGap,5,MinLength,7); subplot(2,2,4);,imshow(rotI); title(霍夫變換圖像檢測); axis([50,250,50,200]); grid on; axis on; hold on; max_len=0; for k=1:length(lines) xy=[lines(k).point1;lines(k).point2]; plot(xy(:,1),xy(:,2),LineWidth,2,Color,green); plot(xy(1,1),xy(1,2),x,LineWidth,2,Color,yellow); plot(xy(2,1),xy(2,2),x,LineWidth,2,Color,red); len=norm(lines(k).point1-lines(k).point2); if(len>max_len) max_len=len; xy_long=xy; end end plot(xy_long(:,1),xy_long(:,2),LineWidth,2,Color,cyan); 13.直方圖閾值法 用MATLAB實現直方圖閾值法: I=imread(xian.bmp); I1=rgb2gray(I); figure; subplot(2,2,1); imshow(I1); title(灰度圖像) axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 [m,n]=size(I1); %測量圖像尺寸參數 GP=zeros(1,256); %預創(chuàng)建存放灰度出現概率的向量 for k=0:255 GP(k+1)=length(find(I1==k))/(m*n); %計算每級灰度出現的概率,將其存入GP中相應位置 end subplot(2,2,2),bar(0:255,GP,g) %繪制直方圖 title(灰度直方圖) xlabel(灰度值) ylabel(出現概率) I2=im2bw(I,150/255); subplot(2,2,3),imshow(I2); title(閾值150的分割圖像) axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 I3=im2bw(I,200/255); % subplot(2,2,4),imshow(I3); title(閾值200的分割圖像) axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 14. 自動閾值法:Otsu法 用MATLAB實現Otsu算法: clc clear all I=imread(xian.bmp); subplot(1,2,1),imshow(I); title(原始圖像) axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 level=graythresh(I); %確定灰度閾值 BW=im2bw(I,level); subplot(1,2,2),imshow(BW); title(Otsu法閾值分割圖像) axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 15.膨脹操作 I=imread(xian.bmp); %載入圖像 I1=rgb2gray(I); subplot(1,2,1); imshow(I1); title(灰度圖像) axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 se=strel(disk,1); %生成圓形結構元素 I2=imdilate(I1,se); %用生成的結構元素對圖像進行膨脹 subplot(1,2,2); imshow(I2); title(膨脹后圖像); axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 16.腐蝕操作 MATLAB實現腐蝕操作 I=imread(xian.bmp); %載入圖像 I1=rgb2gray(I); subplot(1,2,1); imshow(I1); title(灰度圖像) axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 se=strel(disk,1); %生成圓形結構元素 I2=imerode(I1,se); %用生成的結構元素對圖像進行腐蝕 subplot(1,2,2); imshow(I2); title(腐蝕后圖像); axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 17.開啟和閉合操作 用MATLAB實現開啟和閉合操作 I=imread(xian.bmp); %載入圖像 subplot(2,2,1),imshow(I); title(原始圖像); axis([50,250,50,200]); axis on; %顯示坐標系 I1=rgb2gray(I); subplot(2,2,2),imshow(I1); title(灰度圖像); axis([50,250,50,200]); axis on; %顯示坐標系 se=strel(disk,1); %采用半徑為1的圓作為結構元素 I2=imopen(I1,se); %開啟操作 I3=imclose(I1,se); %閉合操作 subplot(2,2,3),imshow(I2); title(開啟運算后圖像); axis([50,250,50,200]); axis on; %顯示坐標系 subplot(2,2,4),imshow(I3); title(閉合運算后圖像); axis([50,250,50,200]); axis on; %顯示坐標系 18.開啟和閉合組合操作 I=imread(xian.bmp); %載入圖像 subplot(3,2,1),imshow(I); title(原始圖像); axis([50,250,50,200]); axis on; %顯示坐標系 I1=rgb2gray(I); subplot(3,2,2),imshow(I1); title(灰度圖像); axis([50,250,50,200]); axis on; %顯示坐標系 se=strel(disk,1); I2=imopen(I1,se); %開啟操作 I3=imclose(I1,se); %閉合操作 subplot(3,2,3),imshow(I2); title(開啟運算后圖像); axis([50,250,50,200]); axis on; %顯示坐標系 subplot(3,2,4),imshow(I3); title(閉合運算后圖像); axis([50,250,50,200]); axis on; %顯示坐標系 se=strel(disk,1); I4=imopen(I1,se); I5=imclose(I4,se); subplot(3,2,5),imshow(I5); %開—閉運算圖像 title(開—閉運算圖像); axis([50,250,50,200]); axis on; %顯示坐標系 I6=imclose(I1,se); I7=imopen(I6,se); subplot(3,2,6),imshow(I7); %閉—開運算圖像 title(閉—開運算圖像); axis([50,250,50,200]); axis on; %顯示坐標系 19.形態(tài)學邊界提取 利用MATLAB實現如下: I=imread(xian.bmp); %載入圖像 subplot(1,3,1),imshow(I); title(原始圖像); axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 I1=im2bw(I); subplot(1,3,2),imshow(I1); title(二值化圖像); axis([50,250,50,200]); grid on; %顯示網格線 axis on; %顯示坐標系 I2=bwperim(I1); %獲取區(qū)域的周長 subplot(1,3,3),imshow(I2); title(邊界周長的二值圖像); axis([50,250,50,200]); grid on; axis on; 20.形態(tài)學骨架提取 利用MATLAB實現如下: I=imread(xian.bmp); subplot(2,2,1),imshow(I); title(原始圖像); axis([50,250,50,200]); axis on; I1=im2bw(I); subplot(2,2,2),imshow(I1); title(二值圖像); axis([50,250,50,200]); axis on; I2=bwmorph(I1,skel,1); subplot(2,2,3),imshow(I2); title(1次骨架提取); axis([50,250,50,200]); axis on; I3=bwmorph(I1,skel,2); subplot(2,2,4),imshow(I3); title(2次骨架提取); axis([50,250,50,200]); axis on; 21.直接提取四個頂點坐標 I = imread(xian.bmp); I = I(:,:,1); BW=im2bw(I); figure imshow(~BW) [x,y]=getpts- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- matlab 圖像 分割 算法 源碼
裝配圖網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
鏈接地址:http://m.italysoccerbets.com/p-6623221.html