Matlab矩形属性 - 绘图时“位置”描述混乱

时间:2017-06-08 14:49:46

标签: matlab matlab-figure

我正在运行Matlab R2014b,并在给定特定坐标的图像上绘制一个矩形。

要清楚,比如画一个矩形[100,100,200,50]正在绘制一个矩形,其左角在水平和垂直方向上偏离图像左上角100个像素,宽度为200,身高是50。 以下代码有效:

figure;
imshow(im);
rectangle('Position',[100, 100, 200, 50],'edgeColor','r');

但在我获得上述正确的方法之前,我运行doc rectangle并且该命令使用rectangle('Position',[x,y,w,h])之类的用法,然后我检查了Rectangle Properties页面,它说

  

x和y元素定义矩形左下角的坐标。 width和height元素定义矩形的尺寸。

然而,上述描述与y方向上的上述正确代码不匹配,即左下角或左上角是否为(0,0)点。我猜它们适用于不同的场景。需要说明。

- **编辑:为遇到此上翻问题的任何人添加一段代码来测试** -

im = imread('e:/_Photos/2.jpg'); %load your local image file

%Original version, correct to draw rectangles
figure;
subplot(1,3,1);
imshow(im);
rectangle('Position',[100, 100, 200, 50],'edgeColor','g');

%flip once using `axis xy`, need to set y_new = height-y
subplot(1,3,2);
imshow(im);
axis xy;
rectangle('Position',[100, size(im,1)-100, 200, 50],'edgeColor','r');
rectangle('Position',[100, 100, 200, 50],'edgeColor','g');

%flip twice using `flipud` and `axis xy`,
%note we still need to recalculate the new y
subplot(1,3,3);
im = flipud(im);
imshow(im);
axis xy;
rectangle('Position',[100, size(im,1)-100, 200, 50],'edgeColor','g');
rectangle('Position',[100, 100, 200, 50],'edgeColor','r');

1 个答案:

答案 0 :(得分:1)

矩形属性的完整说明是:

  

矩形的大小和位置,指定为[x y width height]形式的四元素向量。 以数据单位指定值。 x和y元素定义矩形左下角的坐标。 width和height元素定义矩形的尺寸。

粗体句意味着你应该注意轴的方向。首先使用imshow从顶部到底部翻转轴的y轴方向。

要查看与预期相同的行为,您可以在调用axis xy后键入imshow以将轴翻转回来(因此(0,0)点将位于左下角)。但是,这也会翻转图像,因此您可能只需要从顶部计算位置:

rectangle('Position',[100 size(im,1)-100 200 50]);