使用imclearborder或regionprops识别边界接触对象
我看到过一些与识别二值图像中接触图像边界的对象有关的请求和问题。有时这个问题与…的用法有关
imclearborder
,有时问题是关于
regionprops
.今天,我将向您展示如何以两种方式解决这个问题。
使用imclearborder
我将使用图像处理工具箱中的rice.png样本图像的二进制版本。
url =“https://blogs.mathworks.com/steve/files/rice - bw - 1. - png”;
A = imread(url);
imshow (A)
这个函数
imclearborder
移除所有接触边界的对象。
B =不透明(A);
imshow (B)
这似乎与我们想要的正好相反。但是,我们可以通过使用MATLAB元素逻辑运算符将其转换为所需的结果,例如
&
(和)
|
(或)
~
(不)。换句话说,我们想要的是前景像素
一个
而不是在
B
.作为MATLAB表达式,它看起来像这样:
C = a & ~ b;
imshow (C)
使用regionprops
这个函数
regionprops
可以计算二进制图像对象的各种属性。下面是一个简单的例子,计算样本图像中每个物体的面积和质心。我用的形式是
regionprops
返回一个表。
道具=区域道具(“表”,,“面积”“重心”])
我的寻找边界接触物体的技巧
regionprops
使用
BoundingBox
属性,因此包括该属性以及您想要度量的任何其他属性。
道具=区域道具(“表”,,区域,质心,边界框])
对于任何特定的物体,
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] = size(A);
道具。TouchesRightBorder = (right_coordinate == (N+0.5));
道具。TouchesBottomBorder =(底部坐标= (M+0.5))
最后,计算对象是否接触任何边界使用
|
,即按元素的OR运算符。
道具。TouchesAnyBorder = props。TouchesLeftBorder |...
道具。TouchesTopBorder |...
道具。TouchesRightBorder |...
道具。TouchesBottomBorder
最后,我将对结果进行快速的可视化检查。
L = bwlabel(A);
L_touches_border = ismember(L,find(props.TouchesAnyBorder));
L_touches_border imshowpair(一个)
댓글
댓글을남기려면링크를클릭하여MathWorks계정에로그하거나계정을새로만드십시오。