如何识别要在matlab中裁剪的二进制图像的边界? 即。输入二进制图像没有噪音。在白色背景中只有一个黑色物体。
答案 0 :(得分:1)
您可以在MATLAB中使用edge
命令。
E = edge(I);
I
将是输入灰度或二进制图像。这将返回仅包含边缘的二进制图像。
这可以提供进一步的帮助:
答案 1 :(得分:0)
答案 2 :(得分:0)
您也可以反转图像,然后执行regionprops
以提取单独对象的所有属性。您需要将图像反转为regionprops
,假设对象为白色,而背景为黑色。这种方法的一个好处是它可以推广多个对象,你只需要几行代码即可。
举个例子,让我们在你建议的白色背景上人工创建一个黑色图像中心的圆圈。我们假设这也是一个二进制图像。
im = true(200, 200);
[X,Y] = meshgrid(1:200, 1:200);
ind = (X-100).^2 + (Y-100).^2 <= 1000;
im(ind) = false;
imshow(im);
这就是你的圈子的样子:
现在让我们继续并将其反转,使其成为黑色背景上的白色圆圈:
imInvert = ~im;
imshow(imInvert);
这就是你的倒圆圈的样子:
现在,调用regionprops
来查找图像中所有对象的属性。在这种情况下,应该只有一个。
s = regionProps(imInvert, 'BoundingBox');
因此,s
包含一个长度为1个元素的结构,并且具有一个名为BoundingBox
的字段。该字段是一个4元素数组,其结构如下:
[x y w h]
x
表示列/垂直坐标,而y
表示边界框的左上角的行/水平坐标。 w,h
是矩形的宽度和高度。我们上面代码的输出是:
s =
BoundingBox: [68.5000 68.5000 63 63]
这意味着我们的边界框的左上角位于(x,y) = (68.5,68.5)
,宽度和高度各为63。因此,我们的边界框的范围来自行(68.5,131.5)
和列(68.5,131.5)
。为了确保我们有正确的边界框,您可以使用矩形命令在我们的形状周围绘制一个矩形。
imshow(im);
rectangle('Position', s.BoundingBox);
这是您的图像在对象周围绘制的矩形的样子。如您所见,regionprops
给出的边界框是完全封装对象所需的最小跨越边界框。
如果您想裁剪对象,可以执行以下操作:
imCrop = imcrop(imInvert, s.BoundingBox);
这应该为您提供由我们之前讨论的边界框定义的裁剪图像。
希望这就是你要找的东西。祝你好运!