我有一組灰度圖像作爲2D numpy陣列。旋轉numpy 2D陣列
我需要旋轉關於不同的,浮動角度的一個點(內部)的圖像。輪換不需要到位,我會允許(當然,如果我已經很好地解釋了)進行插值。
我想留在numpy中,因爲我需要對結果執行數字運算,但是我也可以(如果這是不可能的)允許步進/退出;例如我嘗試使用PIL,即Image.rotate(theta),但不明白如何將它應用於我的數組,以及如何獲取數組。
謝謝您的輸入。
我有一組灰度圖像作爲2D numpy陣列。旋轉numpy 2D陣列
我需要旋轉關於不同的,浮動角度的一個點(內部)的圖像。輪換不需要到位,我會允許(當然,如果我已經很好地解釋了)進行插值。
我想留在numpy中,因爲我需要對結果執行數字運算,但是我也可以(如果這是不可能的)允許步進/退出;例如我嘗試使用PIL,即Image.rotate(theta),但不明白如何將它應用於我的數組,以及如何獲取數組。
謝謝您的輸入。
見cgohlke 11月10 '11註釋在18點34分:
scipy.ndimage.interpolation考慮.shift()和旋轉(),用於內插的翻譯和2D numpy的陣列旋轉。
基本操作在維基百科transformation matrix頁面描述 - 我不打算在這裏做ascii矩陣藝術,但輸出P'= R * P其中P'是輸出點,R是2×2包含旋轉角度的正弦和餘弦的變換矩陣,並且P是輸入點。如果要旋轉除原點以外的其他物體,請在旋轉之前移動原點:P'= T + R *(P-T)其中T是平移座標。基本矩陣運算不會執行插值,所以如果您沒有使用基於numpy的image processing library,則需要進行反向轉換:對於每個(整數值)輸出座標,找到(浮點)座標將旋轉到該點的點,並從周圍像素內插該輸入點的值。
這將是困難的方式......如果您沒有檢查cgohlke的解決方案,我會在120±13秒內實施它。 – astabada
我想採取的上述幫助和解決這個由一個例子:
import pandas as pd
import numpy as np
bd = np.matrix([[44., -1., 40., 42., 40., 39., 37., 36., -1.],
[42., -1., 43., 42., 39., 39., 41., 40., 36.],
[37., 37., 37., 35., 38., 37., 37., 33., 34.],
[35., 38., -1., 35., 37., 36., 36., 35., -1.],
[36., 35., 36., 35., 34., 33., 32., 29., 28.],
[38., 37., 35., -1., 30., -1., 29., 30., 32.]])
def rotate45(array):
rot = []
for i in range(len(array)):
rot.append([0] * (len(array)+len(array[0])-1))
for j in range(len(array[i])):
rot[i][int(i + j)] = array[i][j]
return rot
df_bd = pd.DataFrame(data=np.matrix(rotate45(bd.transpose().tolist())))
df_bd = df_bd.transpose()
print df_bd
的輸出將是這樣的:
44 0 0 0 0 0 0 0 0
42 -1 0 0 0 0 0 0 0
37 -1 40 0 0 0 0 0 0
35 37 43 42 0 0 0 0 0
36 38 37 42 40 0 0 0 0
38 35 -1 35 39 39 0 0 0
0 37 36 35 38 39 37 0 0
0 0 35 35 37 37 41 36 0
0 0 0 -1 34 36 37 40 -1
0 0 0 0 30 33 36 33 36
0 0 0 0 0 -1 32 35 34
0 0 0 0 0 0 29 29 -1
0 0 0 0 0 0 0 30 28
0 0 0 0 0 0 0 0 32
我改變了你的灰色日曆'標籤到'圖像處理'之一。我認爲它更好地描述了你的意圖。隨意將其更改回 – BlackBear
您可以直接在numpy中做到這一點,但是爲了來回轉換,請參閱http://effbot.org/zone/pil-numpy.htm。 –
謝謝你的建議,我只注意到這個盒子! – astabada