主要内容

确定圆的对象

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

步骤1:读取图像

读到Pills_etc.png.

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

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

步骤2:设置图像的阈值

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

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

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

第三步:去除噪音

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

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

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

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

把笔帽上的一个缺口填上。

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

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

填满所有的洞,这样regionprops就可以用来估计每个边界所包围的区域

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

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

第四步:找到界限

只关注外部边界。选项“无孔”将通过防止加速处理bwboundaries从寻找内部轮廓。

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

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

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

图中包含一个轴。轴类包含图像、线等7个对象。

第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 '、指标);%用黑色圆圈标记高于阈值的对象如果metric > threshold centroid = stats(k).Centroid;情节(质心(1),重心(2),'ko');结束文本(-35年边界(1、2),边界(1,1)+ 13日metric_string,“颜色”“y”...“字形大小”14岁的“FontWeight”“大胆”结束标题([“指标接近1表示”...'对象大致圆'])

图中包含一个轴。具有较近1的标题指标的轴表示对象近似圆形包含型图像,行,文本的15个对象。

另请参阅

|||||||

相关话题