主要内容

识别圆形物体

这个例子展示了如何根据圆度对对象进行分类bwboundaries,边界跟踪例程。

第一步:读取图像

读到pills_etc.png

RGB = imread(“pillsetc.png”);imshow (RGB)

图中包含一个轴对象。axis对象包含一个image类型的对象。

步骤2:阈值图像

将图像转换为黑色和白色,以便为边界跟踪使用做准备bwboundaries

I = rgb2gray(RGB);bw = imbinalize (I);imshow (bw)

图中包含一个轴对象。axis对象包含一个image类型的对象。

第三步:去除杂音

使用形态学函数,删除不属于感兴趣的对象的像素。

删除所有包含小于30像素的对象。

Bw = bwareaopen(Bw,30);imshow (bw)

图中包含一个轴对象。axis对象包含一个image类型的对象。

把笔帽上的空隙填上。

Se = strel(“磁盘”2);Bw = imclose(Bw,se);imshow (bw)

图中包含一个轴对象。axis对象包含一个image类型的对象。

填满所有的洞,这样regionprops可以用来估计每个边界所包围的面积吗

Bw =填充(Bw,“黑洞”);imshow (bw)

图中包含一个轴对象。axis对象包含一个image类型的对象。

第四步:找到界限

只关注外部边界。指定“noholes”选项将通过阻止加速处理bwboundaries从寻找内在轮廓开始。

[B,L] = bwboundaries(bw,“noholes”);

显示标签矩阵并绘制每个边界。

imshow (label2rgb (L, @jet,。5 .5 .5])等一下k = 1:长度(B)边界= B{k};情节(边界(:,2),边界(:1),' w '“线宽”,2)结束

图中包含一个轴对象。axis对象包含7个image、line类型的对象。

步骤5:确定哪些对象是圆形的

估计每个物体的面积和周长。使用这些结果来形成一个简单的度量,表明一个物体的圆度:

度规 4 π 区域 周长 2

这个度规只对圆等于1,对任何其他形状都小于1。可以通过设置适当的阈值来控制识别过程。在本例中使用的阈值为0.94所以只有药片才会被归类为圆形。

使用regionprops以获得所有物体的面积估计值。注意由返回的标签矩阵bwboundaries可由regionprops

stats = regionprops(L,“区域”“重心”);阈值= 0.94;越界k = 1:长度(B)%获取标签“k”对应的(X,Y)边界坐标boundary = B{k};计算出物体周长的简单估计。Delta_sq = diff(边界).^2;周长= sum(√(sum(delta_sq,2)));获得标签‘k’对应的面积计算area = stats(k).Area;计算圆度度量度量= 4*pi*面积/周长^2;%显示结果字符串= sprintf(' % 2.2 f '、指标);%用黑圈标记高于阈值的对象如果度量>阈值centroid = stats(k).Centroid;情节(质心(1),重心(2),“柯”);结束文本(-35年边界(1、2),边界(1,1)+ 13日metric_string,“颜色”“y”...“字形大小”14岁的“FontWeight”“大胆”结束标题([“接近1的指标表明”...“物体近似圆”])

图中包含一个轴对象。标题Metrics趋近于1的坐标轴对象表示对象近似圆形,包含图像、直线、文本类型的15个对象。

另请参阅

|||||||

相关的话题