Image 如何获取matplotlib';要在图像坐标中绘制的s流/抖动
有没有办法让matplotlib的Image 如何获取matplotlib';要在图像坐标中绘制的s流/抖动,image,matplotlib,Image,Matplotlib,有没有办法让matplotlib的quiver和streamplot函数使用图像坐标约定(原点在左上角,+y点向下),而不是标准坐标约定(原点在左下角,+y点向上) 背景: 我使用quivel和streamplot来可视化两幅图像之间的光流场。您可以看到下面的示例 不幸的是,quiver和streamplot都希望流场在常规坐标中定义,而我的流场是在图像坐标中定义的 在上图中,我手动将流转换为常规坐标,然后将其传递到streamplot。流线显示正确,但轴标签仍在常规坐标中。请注意,它们与顶部
quiver
和streamplot
函数使用图像坐标约定(原点在左上角,+y点向下),而不是标准坐标约定(原点在左下角,+y点向上)
背景:
我使用quivel
和streamplot
来可视化两幅图像之间的光流场。您可以看到下面的示例
不幸的是,quiver
和streamplot
都希望流场在常规坐标中定义,而我的流场是在图像坐标中定义的
在上图中,我手动将流转换为常规坐标,然后将其传递到streamplot
。流线显示正确,但轴标签仍在常规坐标中。请注意,它们与顶部两个图像的轴标签不一致
我也可以手动转换轴标签,但是否有更简单的方法让我只获得
流线图
和箭图
,以了解流场是在图像坐标约定中定义的,并且应该这样显示(原点在左上方,+y点在下方)?如果要精确模拟图像轴的显示(包括0.5
偏移和y轴反转),则应检索前两个轴之一的x和y限制,然后将其应用于流图
轴
hax1 = plt.subplot(3, 1, 1)
hax1.imshow(image1)
hax2 = plt.subplot(3, 1, 2)
hax2.imshow(image2)
hax3 = plt.subplot(3, 1, 3)
hax3.streamplot(x, y, u, v)
hax3.set_xlim(hax1.get_xlim())
hax3.set_ylim(hax1.get_ylim())
实际上,这不仅反转y轴标签,还垂直翻转绘图(并将原点移到左上角)。所以现在我不需要把流场从图像坐标转换成常规坐标,然后再把它传递给quiver/streamplot。完美的(添加set_xlim后,set_ylim):酷;我一直在手动移动流场的x&y坐标[.5,.5],但我忘了这并没有反映在轴上。现在我可以按原样传递流坐标,未移动和未滑动,并使流线图/箭图和轴标签与imshow一致。