主要内容

识别圆形对象

此示例显示如何根据其圆度对对象进行分类Bwboundaries.,一个边界跟踪程序。

第1步:读取图像

阅读Pills_etc.png.

rgb = imread('pillsetc.png');imshow(RGB)

第2步:阈值图像

将图像转换为黑白,以便使用边界跟踪Bwboundaries.

i = RGB2GRAY(RGB);bw = imbinarize(i);imshow(bw)

第3步:消除噪音

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

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

BW = Bwareaopen(BW,30);imshow(bw)

填补笔帽的差距。

se = strel('盘',2);bw = imclose(bw,se);imshow(bw)

填充任何漏洞,以便可以使用区域分植来估计每个边界包围的区域

bw = imfill(bw,'洞');imshow(bw)

第4步:找到边界

仅限于外界。选项'Noholes'将通过防止加速处理Bwboundaries.寻找内部轮廓。

[b,l] = bwboundaries(bw,'noholes');

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

imshow(Label2RGB(L,@ Jet,[5.5 .5]))保持为了k = 1:长度(b)边界= b {k};绘图(边界(:,2),边界(:,1),'W''行宽'2)结尾

第五步:确定哪些对象是圆形的

估计每个对象的区域和周边。使用这些结果形成一个简单的度量标准,指示对象的圆度:

公制 = 4. π * 区域 周长 2

该度量仅为圆的仅为1,并且对于任何其他形状小于一个。可以通过设置适当的阈值来控制歧视过程。在该示例中,使用0.94的阈值,因此只有药丸将被归类为圆形。

使用区域植物获取所有对象的区域的估计值。请注意,标签矩阵返回Bwboundaries.可以重用区域植物

统计= RegionProps(L,'区域''质心');阈值= 0.94;%循环边界为了k = 1:长度(b)%获得(x,y)边界坐标对应标签'k'边界= B {k};%计算对象的周边的简单估计delta_sq = diff(边界)。^ 2;周边= sum(sqrt(sum(delta__sq,2)));%获得对应于标签'k'的区域计算面积= (k) .Area统计数据;%计算舍入度量度量= 4 * Pi *区域/周边^ 2;%显示结果metric_string = sprintf('%2.2f',公制);用黑色圆圈高于阈值的%标记对象如果公制>阈值Centroid =统计数据(k).Centroid;绘图(质心(1),质心(2),'ko');结尾文本(边界(1,2)-35,边界(1,1)+ 13,Metric_String,'颜色''是'......'字体大小',14,'fontweight''大胆的'结尾标题([“较近1的指标表明了”......"物体大致是圆的"])

也可以看看

|||||||

相关的话题