带有意外翻转的Matlab图像和绘图

时间:2015-08-05 05:04:15

标签: matlab matlab-figure

在下面的示例中,每种情况都有一些明显的代码差异,但我不明白它们将如何改变图像或绘图的方向,如每种情况所示。

原始图像的大小为407 x 813 x 3.

对于轮廓中的数据,X的范围是-180到+175,Y的范围是-85到+85

对于图像,我试图使其适合X,其范围从-180到+180,Y范围从-90到+90。因此,图像覆盖的地理范围比图像略宽。

我有一些地理数据的等高线图。它像这样绘制,看起来像我期望它看起来:

enter image description here

绘制此图片的代码是

figure (1);
contour(X, Y, dec0Mat,contoursAt, 'ShowText','on', 'LineWidth', 2);
colormap('Gray');   

我可以自己绘制图像,看起来没问题:

enter image description here

使用此代码:     数字(99)     imagesc([ - 180 180],[ - 90 90],worldMap);

但是当我尝试将两者合并时,我得到了这个: enter image description here

使用此代码:

figure (1);
image([-180 180], [-90 90], worldMap);
hold on
title('Declination at elev = 0 km');
contour(X, Y, dec0Mat,contoursAt, 'ShowText','on', 'LineWidth', 2);
colormap('Gray');

在这种情况下,地图看起来正确,但轮廓垂直翻转。

在另一个案例中,我明白了:

enter image description here

使用此代码:

figure (3);
hold on
title('Declination at elev = 30 km');
imagesc([-180 180], [-90 90], worldMap);
contour(X, Y, dec30Mat,contoursAt, 'ShowText','on', 'LineWidth', 2);
colormap('Gray');

在这种情况下,地图垂直翻转,轮廓绘制正确。

通过matlab的Matlab文档,它说:

  

imagesc(x,y,C)将C显示为图像并指定其边界   带有向量x和y的x轴和y轴。 如果x(1)> x(2)或y(1)> y(2),.   图像分别左右或上下翻转。如果x和y是   标量,图像被转换为​​指定的位置(x,y)等   图像的左上角从(x,y)开始。

我强调了可能与翻转图像有关的内容,但似乎在这里似乎都不是这样,并且不能解释在一种情况下翻转的不一致性而不是另一种情况。

2 个答案:

答案 0 :(得分:2)

解释是,imagesc命令(如image)将'Ydir'轴属性设置为'reverse'

  

使用CXYCimage设置轴限制以紧密包围图像时,设置轴YDir属性为'reverse' ,并将轴View属性设置为[0 90]

这意味着垂直轴值从轴顶部到底部增加。

现在你可以比较两种情况:

  1. 如果您单独运行contourf命令,则表示正常"正常"轴模式,垂直轴值从轴的底部到顶部增加。第一个图中的垂直轴标记反映了这一点。

  2. 如果您使用imagesc绘制图像并在同一图上运行contour,则垂直轴首先翻转imagesc。随后的contour命令在翻转的垂直轴上运行,并相应地绘制。这就是轮廓线相对于情况1垂直翻转的原因。

  3. 请注意,案例2中获得的组合数字是正确的。如果你"视觉上"结合你问题的前两个图像(这些图像是从独立调用imagesccountour获得的),这是错误的,因为它们有不同的垂直轴。

答案 1 :(得分:0)

这不是旋转问题,而是垂直翻转的问题。

如果仔细观察前两个图,你会看到垂直刻度被翻转,所以如果你直接组合你的两个图(无论如何),你最终会得到你所观察到的, ie 一张相对于另一张图翻转的图。

我建议在叠加之前翻转轮廓图:

hold on
image([-180 180], [-90 90], worldMap);
title('Declination at elev = 0 km');
contour(X, Y, flipud(dec0Mat), contoursAt, 'ShowText','on', 'LineWidth', 2);
colormap('Gray');

hold on
image([-180 180], [-90 90], worldMap);
title('Declination at elev = 0 km');
contour(X, -Y, dec0Mat, contoursAt, 'ShowText','on', 'LineWidth', 2);
colormap('Gray');

最佳,