确定圆的对象

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

第一步:阅读图像

读到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)

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

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

第四步:找到界限

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

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

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

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

步骤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的指标表明”..."物体近似为圆形"])

另请参阅

|||||||

相关的话题