在MATLAB中找到矩形的角坐标

时间:2015-01-28 17:04:33

标签: matlab image-processing

如果图像中的白色背景上有黑色矩形,我们如何在MATLAB中找到矩形的四个角坐标?具体来说,我们如何找到这个矩形的左上角,右上角,左下角和右下角?

1 个答案:

答案 0 :(得分:1)

假设您的图片只包含一个对象,这是一个白色背景上的黑色矩形,并假设您的图片是logical,您所要做的就是找到坐标这些都是黑色/ false,然后编写代码,找到围绕这些点的最小跨越边界框。具体来说,如果找到最小的行和列坐标,则这对应于左上角,如果找到最大的行和列坐标,则这对应于右下角。如果要查找其他两个角(右上角和左下角),只需确定边界框的宽度和高度,并将相应的坐标添加到相应的尺寸。

假设您的图片存储在A中,您可以执行以下操作:

[rows,cols] = find(~A); %// Step #1

top_left_row = min(rows);  %// Step #2
top_left_col = min(cols);
bottom_right_row = max(rows);
bottom_right_col = max(cols);

width = bottom_right_col - top_left_col + 1; %// Step #3
height = bottom_right_row - top_left_row + 1;

top_right_row = top_left_row; %// Step #4
top_right_col = top_left_col + width;

bottom_left_row = top_left_row + height;
bottom_left_col = top_left_col;

上述代码可以分为四个步骤:

第1步

第一步是在图片的反向上使用find。这样做的原因是您要搜索所有黑色的行和列位置。这些位置会存储到rowscols

步骤#2

下一步是找到我们之前谈到的最小和最大行和列坐标。这些对应于矩形的左上角和右下角。

步骤#3

要确定其他坐标,您需要知道框的宽度和高度,因此可以通过简单地减去左右列坐标来找到宽度,并且可以通过减去底部和顶部来找到高度行坐标分别。

步骤#4

最后一步是确定右上角和左下角。对于右上角,行坐标保持不变,但列坐标移动宽度。同样,要获得左下角,列坐标保持不变,但行坐标向下移动高度。


因此,您所需的变量根据上面代码中矩形的位置命名。

祝你好运!