它与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也是翻转的吗?我完全搞不懂坐标顺序。。。你知道吗
谁能告诉我哪里不对吗?非常感谢!你知道吗
始终使用
I[x,y]
。这个符号是所有计算库和数学分支的标准符号。你知道吗plt.plot(x,y)
需要一个序列。我相信,I[a,b]
将返回一个像素值,而不是区域的值。你知道吗你可能已经猜到了,这里有两个惯例在起作用。你知道吗
首先,在图中有坐标的数学约定,其中
(x,y) = (0,0)
位于下左下角:第二,数组使用的约定。以这个数组为例:
这就是线路图像的存储方式。现在,
img[y, x] = img[0, 0]
指的是左上角!你知道吗使用matplotlib的
imshow
函数(用于显示图像)时,它会使x轴和y轴显示图像矩阵的像素索引。因此,(0,0)是左上角:因此,要对齐坐标系,请执行以下操作:
(
np.flipud
翻转矩阵)相关问题 更多 >
编程相关推荐