索引与python和matplotlib混淆

2024-04-25 13:25:59 发布

您现在位置:Python中文网/ 问答频道 /正文

它与python和matplotlib的索引非常混淆。你知道吗

import matplotlib as plt

我读了一个图像,我是一个矩阵。首先,我使用plt.imshow()来显示图像。你知道吗

图像上有一条线,我有一条线的x和y坐标L: x=[x0, x1, ..., xn], x=[y0, y1, ..., yn]。所以我可以用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也是翻转的吗?我完全搞不懂坐标顺序。。。你知道吗

谁能告诉我哪里不对吗?非常感谢!你知道吗


Tags: 图像importplotmatplotlibas错误绘制plt
2条回答

So, first question, which should I use, I[x,y] or I[y,x]?

始终使用I[x,y]。这个符号是所有计算库和数学分支的标准符号。你知道吗

plt.plot(x,y)需要一个序列。我相信,I[a,b]将返回一个像素值,而不是区域的值。你知道吗

你可能已经猜到了,这里有两个惯例在起作用。你知道吗

首先,在图中有坐标的数学约定,其中(x,y) = (0,0)位于左下角:

Mathematical convention

第二,数组使用的约定。以这个数组为例:

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)是左上角:

enter image description here

因此,要对齐坐标系,请执行以下操作:

plt.plot(np.flipud(I)[y, x])

np.flipud翻转矩阵)

相关问题 更多 >