查找米粒个数代码
I=imread('rice.png');## 读取图像数据
BG=imopen(I,strel('disk',15));
##开运算属于形态学图像处理,是先腐蚀后膨胀,在这里是将rice图像中的背景矩阵提取出来。
I2=imsubstract(I,BG);##将I的像素矩阵与背景像素矩阵相减,得相对准确的前景矩阵
level=graythresh(I2);
##在这个函数中,是使用最大类间方差法找到图片的一个合适的阈值(threshold)。再利用im2bw(将灰度图像转换为二值图像)函数,将找到的阈值输入,就可以把原图变为一个二值图。
BW=im2bw(I2,level);##大于level输出1,小于level输出0
[labeled,numObjects]=bwlabel(BW,8);
##8的位置代表该函数为八连通查找,指的是从区域内每一象素出发,可通过八个方向,即上、下、左、右、左上、右上、左下、右下这八个方向的移动的组合,在不越出区域的前提下,到达区域内的任意象素。而4连通则是上下左右
在[L,num] = bwlabel(BW,n)中,
L是一个和BW大小相同的L矩阵,包含了标记了BW中每个连通区域的类别标签,这些标签的值为1、2、num。
num里保存的是输入图像中连通区域的总数。可见这篇文章
将米粒标上颜色
添加代码RGB_label=label2rgb(labeled); imshow(RGB_label);
结果如下
将米粒变为红色
代码
for i=1:size(BW,1)
for j=1:size(BW,2)
if(BW(i,j)==1)
im(i,j,1)=255;
im(i,j,2)=0;
im(i,j,3)=0;
else
im(i,j,1)=0;
im(i,j,2)=0;
im(i,j,3)=0;
end
end
end
imshow(im);
结果如下