我有一个图像(保存为 numpy 数组),我想用变换矩阵对其进行变换。 假设变换矩阵是:
[[ 0.99729046 -0.07356456 22.57990962]
[ 0.07356456 0.99729046 -12.99879896]
[ 0. 0. 1. ]]
我想通过 `scipy.ndimage.interpolation 来做到这一点。
图像 = affine_transform(图像, 矩阵, mode="reflect")
如果我只是旋转它:
[[ 0.99729046 -0.07356456 0.]
[ 0.07356456 0.99729046 0.]
[ 0. 0. 1.]]
它工作正常,但是当我想旋转它并翻译它时,或者只是翻译它,结果看起来很奇怪。我不知道为什么:S
最佳答案
我认为 ndimage 实际上并不处理彩色图像。它将数组的最后一个 (3,) 维度视为第三个空间维度。
您给出的矩阵实际上只是旋转矩阵,而不是仿射矩阵。文档似乎对此并不清楚。您应该通过 offset
参数传入移位向量。偏移向量还包括“颜色偏移”作为第三个元素。
这同样适用于上面 Travis Vaught 评论中的 shift
方法。正确的语法是 ndimage.shift(img, (10.0, 10.0, 0.0), mode="wrap")
--- 当然,除非你想做一些有趣的颜色偏移。
原则上,您可以告诉 ndimage 不要沿颜色轴移动图像等,如上所述,但单独对每个颜色元素进行操作应该会更快一些。
关于Python affine_transform 不翻译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9249149/