【问题标题】:Python affine_transform does not translate?Python affine_transform 不翻译?
【发布时间】:2012-02-12 13:30:23
【问题描述】:

我有一个图像(保存为 numpy-array),我想用一个转换矩阵来转换它。 假设transformationatrix是:

[[  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

原图: http://img408.imageshack.us/img408/9373/eiffel.jpg

转换后的图像: http://img861.imageshack.us/img861/8971/blatm.jpg

【问题讨论】:

  • 这对我来说似乎是一个错误。我用简单的ndimage.shift(img, 10.0, mode="wrap") 看到了同样奇怪的颜色问题。

标签: python scipy affinetransform


【解决方案1】:

我认为 ndimage 实际上并不处理彩色图像。它将数组的最后一个 (3,) 维度视为第三个空间维度。

你给出的矩阵实际上只是旋转矩阵,而不是仿射矩阵。文档似乎对此并不清楚。您应该通过 offset 参数传入移位向量。偏移向量还包括“颜色偏移”作为第三个元素。

这同样适用于上述 Travis Vaught 评论中的 shift 方法。正确的语法是 ndimage.shift(img, (10.0, 10.0, 0.0), mode="wrap") --- 当然,除非你想做一些有趣的颜色转换。

原则上你可以告诉 ndimage 不要像上面一样沿颜色轴移动图像等,但是单独对每个颜色元素进行操作应该会快一些。

【讨论】:

    猜你喜欢
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多