主要内容

确定圆的对象

这个例子展示了如何根据对象的圆度使用bwboundaries,一个边界跟踪例程。

第一步:读取图像

读到pills_etc.png

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

图中包含一个axes对象。坐标轴对象包含一个image类型的对象。

步骤2:阈值图像

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

I = rgb2gray (RGB);bw = imbinarize(我);imshow (bw)

图中包含一个axes对象。坐标轴对象包含一个image类型的对象。

步骤3:去除噪音

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

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

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

图中包含一个axes对象。坐标轴对象包含一个image类型的对象。

把笔帽的空隙填满。

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

图中包含一个axes对象。坐标轴对象包含一个image类型的对象。

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

bw = imfill (bw,“黑洞”);imshow (bw)

图中包含一个axes对象。坐标轴对象包含一个image类型的对象。

第四步:找到界限

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

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

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

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

图中包含一个axes对象。坐标轴对象包含7个类型为image, line的对象。

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

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

度规 4 π 区域 周长 2

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

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

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

图中包含一个axes对象。标题Metrics接近1表示对象近似为圆形的axes对象包含15个类型为图像、直线、文本的对象。

另请参阅

|||||||

相关的话题

Baidu
map