利用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<=180|R>=220)|(G<=180|G>=200)|(B<=140|B>=160))=255;
G1((R<=180|R>=220)|(G<=180|G>=200)|(B<=140|B>=160))=255;
B1((R<=180|R>=220)|(G<=180|G>=200)|(B<=140|B>=160))=255;
lot(:,:,1)=R1;
lot(:,:,2)=G1;
lot(:,:,3)=B1;

在这里插入图片描述
此时我们将得到药片彼此独立的图片,但由于药片表面为颗粒状并且图像存在噪声,因此我们需要除噪。
在这里我选择除噪的方法是将此图像二值化后进行腐蚀膨胀的操作。

I1=rgb2gray(lot);
subplot(152);imshow(I1);
thresh=graythresh(I1);
I2=im2bw(I1,thresh);
subplot(153);imshow(I2)
SE=strel('disk',2);
I3=imerode(I2,SE);
subplot(154);imshow(I3)
I3=~I3;                              %取反后腐蚀相当于膨胀
SE1=strel('disk',5);
I4=imerode(I3,SE1);
subplot(155);imshow(I4)

腐蚀是指黑色腐蚀白色,即黑色向周围扩张。
在这里插入图片描述
最后得到此图像,利用计数语句即可完成对白色区域的计数。
在这里插入图片描述在这里插入图片描述
腐蚀膨胀的程度可通过参数SE控制。
SE=strel(‘disk’,XX);
XX的值越大,即腐蚀膨胀的程度越厉害。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值