概述
**
利用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的值越大,即腐蚀膨胀的程度越厉害。
最后
以上就是疯狂小丸子为你收集整理的利用MATLAB对图像中物体进行计数的全部内容,希望文章能够帮你解决利用MATLAB对图像中物体进行计数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复