2012-02-12 75 views
1

我有一個圖像(保存爲numpy數組),我想用轉換矩陣進行轉換。 讓說的transformationatrix是:Python affine_transform不會翻譯?

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

它工作正常,但是當我要旋轉和平移它,只是把它翻譯,結果lookes相當怪異。我不知道爲什麼:S

原始圖像: http://img408.imageshack.us/img408/9373/eiffel.jpg

變換的圖像: http://img861.imageshack.us/img861/8971/blatm.jpg

+0

這看起來像是一個bug。我用簡單的'ndimage.shift(img,10.0,mode =「wrap」)'看到了同樣奇怪的顏色問題。 – 2012-02-13 22:50:57

回答

3

我覺得ndimage實際上並沒有處理彩色圖像。它將數組的最後(3,)維作爲第三個空間維。

您給出的矩陣實際上只是旋轉矩陣,並且不是的仿射矩陣。文件似乎不清楚這一點。你應該通過offset參數傳入移位向量。移位向量還包括作爲第三個元素的「色移」。

這同樣適用於上述Travis Vaught的評論中的shift方法。正確的語法是ndimage.shift(img, (10.0, 10.0, 0.0), mode="wrap") ---當然,除非你想做一些有趣的色彩轉換。

原則上你可以告訴ndimage不像上面那樣沿着色軸移動圖像等,但是分別對每個色彩元素進行操作應該快一些。