主要内容

确定圆的对象

这个例子展示了如何根据圆度分类对象使用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)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

第四步:找到边界

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

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

每个边界显示标签矩阵和画。

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

图包含一个坐标轴对象。坐标轴对象包含7图像类型的对象,线。

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

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

度规 = 4 π * 区域 周长 2

这个指标等于1只有一圈,这是不到一个其他的形状。歧视过程可以通过设定合适的阈值来控制。在这个例子中使用一个阈值0.94所以,只有药片将归类为圆形。

使用regionprops获得的估计区域的所有对象。注意标签返回的矩阵bwboundaries可以重复使用regionprops

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

图包含一个坐标轴对象。坐标轴对象与标题指标接近1表明对象是大约轮包含15图像类型的对象,线,文本。

另请参阅

|||||||

相关的话题