Image 如何获取matplotlib';要在图像坐标中绘制的s流/抖动

Image 如何获取matplotlib';要在图像坐标中绘制的s流/抖动,image,matplotlib,Image,Matplotlib,有没有办法让matplotlib的quiver和streamplot函数使用图像坐标约定(原点在左上角,+y点向下),而不是标准坐标约定(原点在左下角,+y点向上) 背景: 我使用quivel和streamplot来可视化两幅图像之间的光流场。您可以看到下面的示例 不幸的是,quiver和streamplot都希望流场在常规坐标中定义,而我的流场是在图像坐标中定义的 在上图中,我手动将流转换为常规坐标,然后将其传递到streamplot。流线显示正确,但轴标签仍在常规坐标中。请注意,它们与顶部

有没有办法让matplotlib的
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一致。