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 + -
显示快捷键?