yyf004.m

来自「对MATLAB7.0中的示例RICE.PNG图象进行米粒自动记数,输出米粒个数.」· M 代码 · 共 151 行

M
151
字号
i=imread('rice.png');
imwrite(i,'c:\rice.bmp');
subplot(231);
imshow(i);
i1=im2bw(i,0.5);
subplot(232);
imshow(i1);
subplot(233);
imhist(i);
i2=im2bw(i,116/256);
subplot(234);
imshow(i2);
s=size(i2);
x=s(1);
y=s(2);
for i=1:x;
    for j=1:y-3
        a1=i2(i,j);
        a2=i2(i,j+1);
        a3=i2(i,j+2);
        if (a1==0&&a2==1&&a3==0)
            i2(i,j+1)=0;
        end  
    end
end
for j=1:y;
    for i=1:x-3
        a1=i2(i,j);
        a2=i2(i+1,j);
        a3=i2(i+2,j);
        if (a1==0&&a2==1&&a3==0)
            i2(i+1,j)=0;
        end  
    end
end
for i=1:x;
    for j=1:y-4
        a1=i2(i,j);
        a2=i2(i,j+1);
        a3=i2(i,j+2);
        a4=i2(i,j+3);
        if (a1==0&&a2==1&&a3==1&&a4==0)
            i2(i,j+1)=0;
            i2(i,j+2)=0;
        end  
    end
end
for j=1:y;
    for i=1:x-4
        a1=i2(i,j);
        a2=i2(i+1,j);
        a3=i2(i+2,j);
        a4=i2(i+3,j);
        if (a1==0&&a2==1&&a3==1&&a4==0)
            i2(i+1,j)=0;
            i2(i+2,j)=0;
        end  
    end
end
%
for i=1:x;
    for j=1:y-5
        a1=i2(i,j);
        a2=i2(i,j+1);
        a3=i2(i,j+2);
        a4=i2(i,j+3);
        a5=i2(i,j+4);
        if (a1==0&&a2==1&&a3==1&&a4==1&&a5==0)
            i2(i,j+1)=0;
            i2(i,j+2)=0;
            i2(i,j+3)=0;
        end  
    end
end
for j=1:y;
    for i=1:x-5
        a1=i2(i,j);
        a2=i2(i+1,j);
        a3=i2(i+2,j);
        a4=i2(i+3,j);
        a5=i2(i+4,j);
        if (a1==0&&a2==1&&a3==1&&a4==1&&a5==0)
            i2(i+1,j)=0;
            i2(i+2,j)=0;
            i2(i+3,j)=0;
        end  
    end
end
%
for i=1:x;
    for j=1:y-3
        a1=i2(i,j);
        a2=i2(i,j+1);
        a3=i2(i,j+2);
        if (a1==0&&a2==1&&a3==0)
            i2(i,j+1)=0;
        end  
    end
end
for j=1:y;
    for i=1:x-3
        a1=i2(i,j);
        a2=i2(i+1,j);
        a3=i2(i+2,j);
        if (a1==0&&a2==1&&a3==0)
            i2(i+1,j)=0;
        end  
    end
end


%i2=medfilt2(i2);
subplot(235);
imshow(i2);


[l,num]=bwlabel(i2);
count=0;
for i=1:x
    for j=1:y
        if(i2(i,j)==1)
            count=count+1;
        end
    end
end
avr=count/num;
num1=num;
for k=1:num
    cnum=0;
for i=1:x
    for j=1:y
        if(l(i,j)==k)
            cnum=cnum+1;
        end
    end
end
    if(cnum>1.8*avr)
        num1=num1+1;
    end
end



        

            
            
    


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?