我如何在一个点周围放置一个正方形?

时间:2017-03-18 23:10:43

标签: matlab image-processing

假设我有下面的图片,

I = [1 1 1 3 3 3 3 3
     1 1 1 1 3 3 3 3
     1 1 1 1 3 3 3 3
     1 1 1 1 2 2 2 3
     1 1 1 1 2 2 2 3
     1 1 1 1 2 2 2 3
     1 1 1 1 2 2 2 2];

如何在two pixels点附近放置(4,6)的正方形?

我能够使用公式找到顶点:

center = [4,6];
Lowerleftvertex  = center - [-2, 2];
Upperrightvertex = center - [2, -2];

我不确定这是否是正确的方法。我很感激任何帮助,建议或建议。谢谢!

2 个答案:

答案 0 :(得分:0)

您可以从顶点到顶点添加4条边(通过替换I的值)。

在以下示例中,我将I的边值设置为零:

I = [1 1 1 3 3 3 3 3
     1 1 1 1 3 3 3 3
     1 1 1 1 3 3 3 3
     1 1 1 1 2 2 2 3
     1 1 1 1 2 2 2 3
     1 1 1 1 2 2 2 3
     1 1 1 1 2 2 2 2];

center = [4, 6];

I(center(1)-2:center(1)-2, center(2)-2:center(2)+2) = 0; %Top edge.
I(center(1)+2:center(1)+2, center(2)-2:center(2)+2) = 0; %Bottom edge.
I(center(1)-2:center(1)+2, center(2)-2:center(2)-2) = 0; %Left edge.
I(center(1)-2:center(1)+2, center(2)+2:center(2)+2) = 0; %Right edge.

imagesc(I); %Display matrix I as image (zeros are blue).  

结果:
enter image description here

答案 1 :(得分:0)

这个怎么样:

[x_length, y_length] = size(I);
center = [4, 6];
width = 2;
x_min = max((center(1) - width), 1);
x_max = min((center(1) + width), x_length);
y_min = max((center(2) - width), 1);
y_max = min((center(2) + width), y_length);
I_new = I(x_min:x_max, y_min:y_max);

这样您就可以确保不会越过I的边界。