如果图像中的白色背景上有黑色矩形,我们如何在MATLAB中找到矩形的四个角坐标?具体来说,我们如何找到这个矩形的左上角,右上角,左下角和右下角?
答案 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;
上述代码可以分为四个步骤:
第一步是在图片的反向上使用find
。这样做的原因是您要搜索所有黑色的行和列位置。这些位置会存储到rows
和cols
。
下一步是找到我们之前谈到的最小和最大行和列坐标。这些对应于矩形的左上角和右下角。
要确定其他坐标,您需要知道框的宽度和高度,因此可以通过简单地减去左右列坐标来找到宽度,并且可以通过减去底部和顶部来找到高度行坐标分别。
最后一步是确定右上角和左下角。对于右上角,行坐标保持不变,但列坐标移动宽度。同样,要获得左下角,列坐标保持不变,但行坐标向下移动高度。
因此,您所需的变量根据上面代码中矩形的位置命名。
祝你好运!