python和matplotlib的索引太混乱了。
import matplotlib as plt
我读了一张图片,我是一个矩阵。首先,我使用plt.imshow()
来显示图像。
该图像上有一条线,我有一条线L: x=[x0, x1, ..., xn], x=[y0, y1, ..., yn]
的x坐标和y坐标。所以我可以使用plt.plot(x,y)
在图像上绘制这条线。这一步仍然没问题。至少,图像上显示的线条是正确的。
然而,当我使用plt.plot(I[x,y])
在线L的位置绘制图像I的强度值时,显然是错误的!
我认为错误可能是因为线的坐标与图像的坐标有些不一致。我试过了plt.plot(I[y,x])
,但它仍然不正确。
那么,第一个问题,我应该使用哪个I[x,y] or I[y,x]
?
我观察到plt.imshow()
上的y轴是从上到下。这可能是y轴被翻转的原因吗? x是否也被翻转?我对坐标命令感到困惑......
有人可以告诉我哪里出错吗?非常感谢!
答案 0 :(得分:0)
那么,第一个问题,我应该使用哪个
I[x,y]
或I[y,x]
?
始终使用I[x,y]
。这种表示法在所有计算库和数学分支中都是标准的。
plt.plot(x,y)
需要一个序列。我相信,I[a,b]
将返回一个像素值,而不是该区域的值。
答案 1 :(得分:0)
正如您可能已经猜到的那样,这里有两个约定。
首先,图表中有坐标的数学约定,其中(x,y) = (0,0)
位于较低左下角:
其次,有用于数组的约定。以此数组为例:
img = [[0, 0, 0, 1],
[0, 0, 1, 0],
[0, 1, 0, 0],
[1, 0, 0, 0]]
该行的图像将如何存储。现在,img[y, x] = img[0, 0]
指的是顶部左上角!
当您使用matplotlib的imshow
函数(用于显示图像)时,它会使x轴和y轴显示图像矩阵的像素索引。因此,(0,0)是左上角:
因此,为了对齐坐标系,请执行以下操作:
plt.plot(np.flipud(I)[y, x])
(np.flipud
翻转矩阵)