我试图找到一种方法来定位我在BW图像中的某些斑点的边缘。你知道Matlab是否有一些功能能够a)将一个blob放在一个矩形中b)找到矩形边的坐标?
答案 0 :(得分:1)
要自成一体,并继续进行Divakar的评论,让我们举一个例子。您当然可以将BoundingBox
属性与regionprops
一起使用。对于使用regionprops
检测到的每个blob,BoundingBox
属性将返回包含每个blob的边界框。对于每个blob,我们将有一个1 x 4
数组,结构如下:
[x y w h]
x,y
表示上方的列(x
坐标)和行(y
坐标)矩形的左角和w,h
表示矩形本身的宽度和高度。我们可以使用MATLAB系统路径中给出的示例图像:text.png
。这就是图像的样子:
im = imread('text.png');
imshow(im);
在这种情况下,每个“blob”都是图像(或字符)中的字母。然后我们可以像这样得到边界框:
s = regionprops(im, 'BoundingBox');
rects = reshape([s.BoundingBox], 4, []).';
rects
将包含N x 4
矩阵,其中每行对于我们拥有的每个blob都是一个矩形。必须完成重新整形,因为这是以矢量化方式从结构数组中提取矩形的唯一方法。
现在有了这个,迭代我们的坐标列表并在每个blob周围放置矩形非常简单。我要放一个黄色的矩形,这样你就可以看到它们。您可以使用rectangle
命令,将Position
标志指定为第一个元素,并为我们刚刚讨论过的每个blob使用4个元素数组来执行此操作。就这样:
imshow(im);
hold on;
for idx = 1 : numel(s)
rectangle('Position', rects(idx,:), 'EdgeColor', 'yellow');
end
这就是我得到的: