确定使用imclearborder或regionprops Border-Touching对象
我见过一些请求和问题识别事物有关的感人的二进制图像图像边界。有时问题与使用
imclearborder
,有时问题是什么
regionprops
。今天,我将向您展示如何解决两方面的问题。
使用imclearborder
我将使用这个二进制版本的大米。png样本图像的图像处理工具箱。
url =“https://blogs.mathworks.com/steve/files/rice - bw - 1. - png”;
一个= imread (url);
imshow (A)
这个函数
imclearborder
删除所有对象接触边界。
B = imclearborder(一个);
imshow (B)
这似乎是我们想要的相反。然而,我们可以把它转换成所需的结果通过使用MATLAB element-wise逻辑运算符,例如
&
(和)
|
(或)
~
(不)。话说,我们想要的前景像素
一个
和不
B
。MATLAB的表情,看起来像这样:
C = & ~ B;
imshow (C)
使用regionprops
这个函数
regionprops
可以计算二进制图像对象的各种属性。这是一个简单的例子,计算每个对象的面积和重心在我们的样例图像。我用的形式
regionprops
返回一个表。
道具= regionprops (“表”,,“面积”“重心”])
我的技术寻找border-touching对象
regionprops
使用
BoundingBox
产权,包括属性以及任何其他你想测量的属性。
道具= regionprops (“表”,,“边界框(“重心”“面积大小)])
对于任何特定的对象,
BoundingBox
是研制出向量包含左、前边界框的宽度和高度。例如,在这里是20的边界框对象:
:props.BoundingBox(20日)
通过比较这些值图像的大小,我们可以确定哪些对象接触图像边界。
首先确定对象,联系具体的边界。
left_coordinate = props.BoundingBox (: 1);
道具。TouchesLeftBorder = (left_coordinate = = 0.5);
top_coordinate = props.BoundingBox (:, 2);
道具。TouchesTopBorder = (top_coordinate = = 0.5);
right_coordinate = left_coordinate + props.BoundingBox (:, 3);
bottom_coordinate = top_coordinate + props.BoundingBox (:, 4);
[M, N] =大小(一个);
道具。TouchesRightBorder = (right_coordinate = = (N + 0.5));
props.TouchesBottomBorder= (bottom_coordinate == (M+0.5))
最后,计算是否触摸对象边界
|
element-wise或运营商。
道具。TouchesAnyBorder =道具。TouchesLeftBorder |…
道具。TouchesTopBorder |…
道具。TouchesRightBorder |…
props.TouchesBottomBorder
我将完成快速的视觉检查结果。
L = bwlabel(一个);
L_touches_border = ismember (L,找到(props.TouchesAnyBorder));
L_touches_border imshowpair(一个)
评论
留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。