www.pudn.com > erode.rar > erode.m


  clear all; 
clc; 
M=6; 
N=9; %solarcell的行数与列数 
%I=imread('.\testpic\milkdrop.gif'); 
%I=imread('.\testpic\peppers.gif'); 
%I=imread('.\testpic\left.png'); 
%I=imread('.\testpic\lena.bmp'); 
%I = imread('.\testpic\finger_g.BMP'); 
%I = imread('.\testpic\bacteria.BMP'); 
%I = imread('.\use\IMAGE15.bmp'); 
I = imread('.\IRPIC\IR_all_s_g.BMP'); 
[m,n]=size(I); 
imshow(I); 
title('原图'); 
 
%中值滤波 
R=zeros(m,n); 
for i=2:m-1 
    for j=2:n-1 
       aa=[I(i-1,j-1) I(i-1,j) I(i-1,j+1) I(i,j-1) I(i,j) I(i,j+1) I(i+1,j-1) I(i+1,j) I(i+1,j+1)]; 
       ii=0; 
       for jj=1:9-ii 
           for ii=1:8 
               if(aa(ii)>aa(ii+1)) 
                   cc=aa(ii); 
                   aa(ii)=aa(ii+1); 
                   aa(ii+1)=cc; 
               end 
           end 
       end 
       R(i,j)=aa(5); 
     end 
end 
S=uint8(R); 
figure; 
imshow(S); 
title('中值滤波后的图像'); 
 
%otsu 自动阈值计算 
Y=zeros(1,256); 
thresholdValue=1; %阈值初值 
for i=2:m-1 
    for j=2:n-1 
        k=S(i,j); 
        Y(1,k+1)=Y(1,k+1)+1; 
    end 
end 
sum=0; 
csum=0; 
n0=0; 
for k=1:256 
    sum=sum+k*double(Y(1,k)); 
    n0=n0+Y(k); 
end 
 
fmax=-1; 
n1=0; 
for k=1:256 
    n1=n1+Y(k); 
      if(n1==0) 
          continue; 
      end 
    n2=n0-n1; 
      if(n2==0) 
          break; 
      end 
    csum=csum+k*double(Y(k)); 
    m1=csum/n1; 
    m2=(sum-csum)/n2; 
    sb=n1*n2*(m1-m2)^2; 
    if(sb>fmax) 
        fmax=sb; 
        thresholdValue=k; 
    end 
end 
%利用4个方向的roberts和进行边缘提取,并二值化 
Q=zeros(m,n); 
for i=2:m-1 
    for j=2:n-1 
        sideling=abs(S(i-1,j-1)-S(i,j))+abs(S(i-1,j+1)-S(i,j))+abs(S(i+1,j-1)-S(i,j))+abs(S(i+1,j+1)-S(i,j)); 
        verical=abs(S(i-1,j)-S(i,j))+abs(S(i+1,j)-S(i,j))+abs(S(i,j-1)-S(i,j))+abs(S(i,j+1)-S(i,j)); 
        x=sideling+verical; 
        if(x<0.5*thresholdValue) 
            Q(i,j)=1; 
        end 
    end 
end 
figure; 
imshow(255*Q); 
title('二值化后的图像'); 
 
%腐蚀处理 
B=[1 1;1 1]; 
qsum=0; 
QQ=zeros(m,n); 
for i=1:m-1 
    for j=1:n-1 
        for ii=1:2 
            for jj=1:2 
                qsum=qsum+~xor(B(ii,jj),(1-Q(i+ii-1,j+jj-1))); 
            end 
        end 
        if(qsum==4) 
            QQ(i,j)=0; 
        else 
            QQ(i,j)=1; 
        end 
        qsum=0; 
    end 
end 
SS=255*QQ; 
figure; 
imshow(SS); 
title('腐蚀处理后的图像'); 
Err=255*abs(Q-QQ); 
figure; 
imshow(Err); 
title('膨腐蚀前后相差的图像');