具有意外翻转的Matlab图像和绘图
在下面的示例中,每种情况下都有一些明显的代码差异,但我不明白它们如何改变图像或绘图的方向,如每种情况所示 原始图像的大小为407 x 813 x 3 对于等高线中的数据,X范围为-180到+175,Y范围为-85到+85 对于图像,我尝试拟合它,使X的范围从-180到+180,Y的范围从-90到+90。因此,图像覆盖的地理范围比图像覆盖的范围稍宽 我有一些地理数据的等高线图。它的情节是这样的,我希望它看起来: 绘制此外观的代码如下所示具有意外翻转的Matlab图像和绘图,matlab,matlab-figure,Matlab,Matlab Figure,在下面的示例中,每种情况下都有一些明显的代码差异,但我不明白它们如何改变图像或绘图的方向,如每种情况所示 原始图像的大小为407 x 813 x 3 对于等高线中的数据,X范围为-180到+175,Y范围为-85到+85 对于图像,我尝试拟合它,使X的范围从-180到+180,Y的范围从-90到+90。因此,图像覆盖的地理范围比图像覆盖的范围稍宽 我有一些地理数据的等高线图。它的情节是这样的,我希望它看起来: 绘制此外观的代码如下所示 figure (1); contour(X, Y, dec
figure (1);
contour(X, Y, dec0Mat,contoursAt, 'ShowText','on', 'LineWidth', 2);
colormap('Gray');
我可以自己绘制图像,看起来还可以:
使用此代码:
图(99)
imagesc([-180],-90],世界地图)
但当我尝试将两者结合起来时,我得到了以下结论:
使用此代码:
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');
在这种情况下,地图看起来是正确的,但等高线是垂直翻转的
在另一种情况下,我得到:
使用此代码:
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');
在这种情况下,地图垂直翻转,等高线向右绘制
根据imagesc的Matlab文档,它说:
imagesc(x,y,C)将C显示为图像,并指定图像的边界
具有向量x和y的x轴和y轴如果x(1)>x(2)或y(1)>y(2),则
图像分别左右或上下翻转。如果x和y为
标量,图像被转换到指定的位置(x,y),例如
图像的左上角从(x,y)开始
我强调了可能与正在翻转的图像相关的内容,但这两种情况似乎都不是,也无法解释在一种情况下翻转图像与在另一种情况下翻转图像的不一致性。这不完全是旋转问题,更重要的是垂直翻转问题 如果仔细观察前两个图,您将看到垂直比例是翻转的,因此如果您直接组合两个图(无论以何种方式),您将得到您观察到的结果,即一个图相对于另一个图翻转 我建议在叠加之前翻转等高线图:
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');
或
最好的解释是
imagesc
命令将'Ydir'
轴属性设置为'reverse'
当使用C
或X
、Y
、C
调用时,image
设置轴限制以紧密包围图像,将轴YDir
属性设置为'reverse'
,并将轴视图
属性设置为[0 90]
这意味着垂直轴的值从轴的顶部增加到底部
现在您可以比较这两种情况:
contourf
命令,则会出现“正常”轴模式,垂直轴值从轴的底部向顶部增加。第一个图形中的垂直轴标签反映了这一点imagesc
打印图像,并在同一图形上运行contour
,则垂直轴首先被imagesc
翻转。随后的轮廓
命令在翻转的垂直轴上操作,并相应地进行打印。这就是为什么等高线相对于案例1垂直翻转的原因请注意,在案例2中获得的组合图是正确的。如果你将问题的前两张图片(分别从调用
imagesc
和countour
获得)进行“视觉”组合,那就错了,因为它们有不同的垂直轴。我仍然不明白为什么看起来不一致。绘制等高线的代码行在所有情况下都是相同的,并且在所有情况下都提供了X和Y矢量。图像也是如此。我不明白为什么其中一个会在一种情况下翻转,而在另一种情况下不会翻转。(我换了主题。我必须仔细查看数据,然后才发现它只是一个翻转。)顺便说一句,在我添加图像之前,轮廓看起来都很好。对我来说,绘图代码中没有问题,问题是以前(例如,如何生成dec0mat
)。如果你只看你展示的地图,它从80到-80,而等高线图从-80到80。你根本不可能希望把它们叠加在一起得到想要的输出。imagesc
的翻转问题确实存在,但与您的问题无关。不,我的问题是翻转问题。只要我提供X和Y边界,我应该能够用不同的边界叠加两个图。轮廓正好覆盖了它相对于图像应该覆盖的X和Y范围。但这是我的问题。如果不先绘制图像,轮廓不会翻转。如果我先打印图像,则打印会翻转。不,对不起,您的想法不正确。这就是你的错误。请花些时间来阅读和理解我写的东西,我不能为你做更多的事情。现在这是有意义的。我不明白为什么图像坐标的文档都显示0,0在左上方。单独绘制图像时,在0,0附近操纵图像值始终会影响左上角。看起来正确的做法是将轴YDir设置为“正常”(这是预期的绘图坐标)。我会在绘制图像阵列之前翻转它,并将YDir设置为“正常”。现在我了解到这是一个轴反转问题,我可以在我的Y轴编号中看到这一点。使用“保持”冻结轴,如示例中所示。
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');