史蒂夫与MATLAB图像处理

图像处理的概念、算法和MATLAB

确定使用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 (“表”,,“面积”“重心”])
t = 97×2表
区域 重心
1 138年 5.9855 35.0870
2 121年 6.4463 62.0579
3 67年 2.1045 85.1940
4 178年 4.5056 117.5674
5 157年 9.4650 141.2675
6 286年 11.8007 168.5350
7 195年 12.0872 205.2974
8 135年 9.4296 223.0296
9 176年 21.3693 95.9716
10 208年 24.1971 26.3125
11 199年 28.1859 48.2563
12 188年 22.1011 122.6011
13 216年 28.2778 179.4630
14 143年 28.3427 251.9720
我的技术寻找border-touching对象 regionprops 使用 BoundingBox 产权,包括属性以及任何其他你想测量的属性。
道具= regionprops (“表”,,“边界框(“重心”“面积大小)])
t = 97×3表
区域 重心 BoundingBox
1 138年 5.9855 35.0870 0.5000 22.5000 13 22
2 121年 6.4463 62.0579 0.5000 53.5000 13 16
3 67年 2.1045 85.1940 0.5000 73.5000 4 23
4 178年 4.5056 117.5674 0.5000 102.5000 10 28
5 157年 9.4650 141.2675 0.5000 132.5000 20. 16
6 286年 11.8007 168.5350 0.5000 152.5000 26 33
7 195年 12.0872 205.2974 0.5000 199.5000 24 12
8 135年 9.4296 223.0296 0.5000 218.5000 20. 10
9 176年 21.3693 95.9716 9.5000 86.5000 25 17
10 208年 24.1971 26.3125 10.5000 18.5000 26 16
11 199年 28.1859 48.2563 17.5000 37.5000 19 23
12 188年 22.1011 122.6011 17.5000 108.5000 10 29日
13 216年 28.2778 179.4630 17.5000 166.5000 20. 24
14 143年 28.3427 251.9720 18.5000 245.5000 23 11
对于任何特定的对象, BoundingBox 是研制出向量包含左、前边界框的宽度和高度。例如,在这里是20的边界框对象:
:props.BoundingBox(20日)
ans = 1×4
35.5000 113.5000 9.0000 28.0000
通过比较这些值图像的大小,我们可以确定哪些对象接触图像边界。
首先确定对象,联系具体的边界。
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))
t = 97×7表
区域 重心 BoundingBox TouchesLeftBorder TouchesTopBorder TouchesRightBorder TouchesBottomBorder
1 138年 5.9855 35.0870 0.5000 22.5000 13 22 1 0 0 0
2 121年 6.4463 62.0579 0.5000 53.5000 13 16 1 0 0 0
3 67年 2.1045 85.1940 0.5000 73.5000 4 23 1 0 0 0
4 178年 4.5056 117.5674 0.5000 102.5000 10 28 1 0 0 0
5 157年 9.4650 141.2675 0.5000 132.5000 20. 16 1 0 0 0
6 286年 11.8007 168.5350 0.5000 152.5000 26 33 1 0 0 0
7 195年 12.0872 205.2974 0.5000 199.5000 24 12 1 0 0 0
8 135年 9.4296 223.0296 0.5000 218.5000 20. 10 1 0 0 0
9 176年 21.3693 95.9716 9.5000 86.5000 25 17 0 0 0 0
10 208年 24.1971 26.3125 10.5000 18.5000 26 16 0 0 0 0
11 199年 28.1859 48.2563 17.5000 37.5000 19 23 0 0 0 0
12 188年 22.1011 122.6011 17.5000 108.5000 10 29日 0 0 0 0
13 216年 28.2778 179.4630 17.5000 166.5000 20. 24 0 0 0 0
14 143年 28.3427 251.9720 18.5000 245.5000 23 11 0 0 0 1
最后,计算是否触摸对象边界 | element-wise或运营商。
道具。TouchesAnyBorder =道具。TouchesLeftBorder |
道具。TouchesTopBorder |
道具。TouchesRightBorder |
props.TouchesBottomBorder
t = 97×8表
区域 重心 BoundingBox TouchesLeftBorder TouchesTopBorder TouchesRightBorder TouchesBottomBorder TouchesAnyBorder
1 138年 5.9855 35.0870 0.5000 22.5000 13 22 1 0 0 0 1
2 121年 6.4463 62.0579 0.5000 53.5000 13 16 1 0 0 0 1
3 67年 2.1045 85.1940 0.5000 73.5000 4 23 1 0 0 0 1
4 178年 4.5056 117.5674 0.5000 102.5000 10 28 1 0 0 0 1
5 157年 9.4650 141.2675 0.5000 132.5000 20. 16 1 0 0 0 1
6 286年 11.8007 168.5350 0.5000 152.5000 26 33 1 0 0 0 1
7 195年 12.0872 205.2974 0.5000 199.5000 24 12 1 0 0 0 1
8 135年 9.4296 223.0296 0.5000 218.5000 20. 10 1 0 0 0 1
9 176年 21.3693 95.9716 9.5000 86.5000 25 17 0 0 0 0 0
10 208年 24.1971 26.3125 10.5000 18.5000 26 16 0 0 0 0 0
11 199年 28.1859 48.2563 17.5000 37.5000 19 23 0 0 0 0 0
12 188年 22.1011 122.6011 17.5000 108.5000 10 29日 0 0 0 0 0
13 216年 28.2778 179.4630 17.5000 166.5000 20. 24 0 0 0 0 0
14 143年 28.3427 251.9720 18.5000 245.5000 23 11 0 0 0 1 1
我将完成快速的视觉检查结果。
L = bwlabel(一个);
L_touches_border = ismember (L,找到(props.TouchesAnyBorder));
L_touches_border imshowpair(一个)
|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。