利用利用MATLAB对图像中物体进行计数对图像中物体进行计数
**
利用利用MATLAB对一张图片中相同得物体进行计数。对一张图片中相同得物体进行计数。
**
MATLAB中已有函数可对二值化中的白色区域进行计数。
[labeled,numObjects]=bwlabel(‘图像名’,8);
运行后numObjects(即物体个数)的值会显示在右侧的工作区中。
因此我们需要做的是对图像进行处理,包括二值化,除噪等。
若直接将图像转化为二值图像进行计数,则无法得到正确数据。
如
clc;
close all;
clear all;
I=imread('pro2.png');
I1=rgb2gray(I);
subplot(152);imshow(I1);
thresh=graythresh(I1);
I2=im2bw(I1,thresh);
subplot(153);imshow(I2);
[labeled,numObjects]=bwlabel(I2,8);
显然计数错误。
这幅图片中药片的摆放无重叠,但不独立,颜色都为浅黄色,因此可以利用取色工具提取RGB颜色分量来使药片分离开来。
经过提取后药片的R分量为170-220,G为180-200,B为130-160。因此将这些区间以外的区域置为255,即为白色。(由于药
片面积不小,建议置白的区域尽可能大,更容易让药片相互独立)。
clc;
close all;
clear all;
I=imread('pro2.png');
lot=I;
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
R1=R;
G1=G;
B1=B;
R1((R=220)|(G=200)|(B=160))=255;
G1((R=220)|(G=200)|(B=160))=255;
B1((R=220)|(G=200)|(B=160))=255;
lot(:,:,1)=R1;
lot(:,:,2)=G1;
lot(:,:,3)=B1;
此时我们将得到药片彼此独立的图片,但由于药片表面为颗粒状并且图像存在噪声,因此我们需要除噪。
在这里我选择除噪的方法是将此图像二值化后进行腐蚀膨胀的操作。
评论0