在 MATLAB 中查找矩形的角坐标

Find the corner coordinates of a rectangle in MATLAB

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

假设你的图片只包含一个对象,是白底黑矩形,假设你的图片是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 步

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


因此,您想要的变量是根据它们位于上述代码中矩形的哪个角来命名的。

祝你好运!