使用 ndimage.interpolation.affine_transform 进行矩阵平移

我正在尝试使用 翻译一个简单的矩阵ndi.interpolation.affine_transform,但我得到的结果是相反的。例如:


import scipy.ndimage as ndi

m = [[1, 1, 11], [2, 2, 22], [3, 3, 33]]

final_affine_matrix = [[1, 0], [0, 1]]

final_offset = [0, 1]

x = ndi.interpolation.affine_transform(

        m,

        final_affine_matrix,

        final_offset,

        order=1,

        mode='nearest',

        cval=0)

print(x)


[[ 1 11 11]

 [ 2 22 22]

 [ 3 33 33]]

鉴于偏移量为[0, 1],不应该移动 y 轴而不是 x 轴吗?也就是说,输出不应该是:


[[ 2  2 22]

 [ 3  3 33]

 [ 3  3 33]]

我可以达到那个结果,但只能使用 offset [1, 0]。他们不应该是相反的吗?


米脂
浏览 269回答 1
1回答

忽然笑

如文档中所述,scipy.ndimage.affine_transform()通过执行以下操作来计算新位置:(np.dot(matrix, o) + offset其中o是输出位置)。这意味着以下测试应该会成功:m = np.array(m)assert(m[0, 1] == x[0, 0])assert(m[0, 2] == x[0, 1])assert(m[1, 1] == x[1, 0])assert(m[1, 2] == x[1, 1])assert(m[2, 1] == x[2, 0])assert(m[2, 2] == x[2, 1])或者,更简洁地说:assert(np.all(m[:, 1] == x[:, 0]))assert(np.all(m[:, 2] == x[:, 1]))正如预期的那样,他们做到了。所以,实际上矩阵正在被1-index移动。也许,您期望另一个矩阵作为输出,因为您对打印的输出感到困惑。第零个索引表示行,第一个索引表示列。因此,按第一个索引移动将移动列。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python