Python的affine_transform不进行平移?
我有一张图片(保存为numpy数组),我想用一个变换矩阵来改变它。假设这个变换矩阵是:
[[ 0.99729046 -0.07356456 22.57990962]
[ 0.07356456 0.99729046 -12.99879896]
[ 0. 0. 1. ]]
我想通过 `scipy.ndimage.interpolation` 来实现这个变换。
image = affine_transform(image, matrix, mode="reflect")
如果我只是旋转它:
[[ 0.99729046 -0.07356456 0.]
[ 0.07356456 0.99729046 0.]
[ 0. 0. 1.]]
效果很好,但是当我想同时旋转和移动它,或者只是移动它时,结果看起来就很奇怪。我不知道为什么 :S
1 个回答
3
我觉得ndimage其实并不处理彩色图像。它把你数组的最后一个(3,)维度当作第三个空间维度来处理。
你提供的矩阵实际上只是旋转矩阵,而不是仿射矩阵。文档上对此似乎没有说明清楚。你应该通过offset
参数传入位移向量。这个位移向量的第三个元素也包含了“颜色位移”。
同样的情况也适用于上面Travis Vaught评论中的shift
方法。正确的写法是ndimage.shift(img, (10.0, 10.0, 0.0), mode="wrap")
——当然,前提是你不想做一些奇怪的颜色位移。
原则上,你可以告诉ndimage不要在颜色轴上移动图像,但分别处理每个颜色元素应该会快一些。