1. 程式人生 > >Matlab對鋼板表面缺陷檢測:幾何校正、分割、填充紅色、計算面積

Matlab對鋼板表面缺陷檢測:幾何校正、分割、填充紅色、計算面積

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');