Matlab對鋼板表面缺陷檢測:幾何校正、分割、填充紅色、計算面積
阿新 • • 發佈:2019-01-29
init=imread('D:\MyDocuments\picture analysis\lab three\41524617\1.jpg'); %讀入圖片 G=rgb2gray(init);%轉換成灰度圖 subplot(521) , imshow(init), title('原圖'); subplot(522) , imshow(G), title('原灰度圖'); %radon變換實現影象矯正 E=edge(G); theta=1:180; [R,xp]=radon(E,theta); [E,J]=find(R>=max(max(R)));%記錄角度 Q=90-J; %求出傾斜角 I=imrotate(G,Q,'bilinear','crop'); %旋轉矯正 subplot(512) , imshow(I), title('矯正後的影象'); %otsu閾值分割 bw=graythresh(I); %自動獲取合適閾值 new=im2bw(I,bw);%進行閾值分割 subplot(513) , imshow(new), title('分割出來的圖形') %閉運算降噪 newI = bwmorph(new,'close'); subplot(514) ,imshow(newI),title('閉運算降噪後的影象'); %影象疊加&計算面積 newII = I; I3(:,:,1)=I; I3(:,:,2)=I; I3(:,:,3)=I; count=0; for i = 1:400 for j = 1:800 if(newI(i,j)==0) newII(i,j) = 0; %將中間殘缺部分變成純黑色 end if(I(i,j)-newII(i,j)~=0) %改變值的部分就是中間殘缺 count=count+1; %對殘缺進行計算求面積和標記為紅色 I3(i,j,1)=255; I3(i,j,2)=0; I3(i,j,3)=0; end end end mianji =count ; subplot(515),imshow(I3),title('分割後新增到原圖'); %計算缺陷面積 %輸出影象 imwrite(newI,'分割.jpg'); imwrite(I3,'分割後疊加到原圖.jpg');