如何定位blob边缘

时间:2014-08-22 14:00:50

标签: matlab image-processing

我试图找到一种方法来定位我在BW图像中的某些斑点的边缘。你知道Matlab是否有一些功能能够a)将一个blob放在一个矩形中b)找到矩形边的坐标?

1 个答案:

答案 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);

enter image description here

在这种情况下,每个“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

这就是我得到的:

enter image description here