我想用PIL做一個圖像的透視變換,我有角的座標圖像和圖像角落最終位置的座標。我不確定如何獲得'data'參數的(a,b,c,d,e,f,g,h)。PIL透視變換,找出(a,b,c,d,e,f,g,h)
我知道它與此有關: http://bishopw.loni.ucla.edu/AIR5/2Dperspective.html 但我不確定此頁的含義。
我想用PIL做一個圖像的透視變換,我有角的座標圖像和圖像角落最終位置的座標。我不確定如何獲得'data'參數的(a,b,c,d,e,f,g,h)。PIL透視變換,找出(a,b,c,d,e,f,g,h)
我知道它與此有關: http://bishopw.loni.ucla.edu/AIR5/2Dperspective.html 但我不確定此頁的含義。
您可以通過求解公式得到參數:T.x1 + v = x2其中x1是座標系1(原始圖片)中的點座標,x2是新座標系(傾斜或旋轉或3d)。 x1,x2,v是2乘1的矢量,T是2乘2的矩陣。例如X1 =(X1X,X,Y),X2 =(X2X,X2Y),V =(C,F)和
T = a b
d e
如果你不知道矩陣代數,您可以通過消除變量解決這個問題。對於每個點,您會得到兩個等式:
a*x1x + b*x1y + c = x2x
d*x1x + e*x1y + f = x2y
如果您現在插入其中一個角點。可以說,X1 =(0,1)和x2 =(0,4)你:
a*0 + b*1 + c = 0
d*0 + e*1 + f = 4
從你得到:
b = -c
e = 4-f
現在,如果你重複這對其他角點(並使用b = -c的知識)。您可以爲所有變量求解數值。
提示,在計算轉換之前,將原始圖片座標縮放到單位平方(0,0),(0,1),(1,0)和(1,1)。這樣你有很多的零和零。數學方法被稱爲高斯消除(使用谷歌或維基百科 - >高斯消除 - >算法的例子)。
注意,在im.tranform數據具有六個參數(2D - > 2D變換):
數據是一個6元組(A,B,C,d,E,F),其包含來自仿射變換矩陣的前兩行 。對於輸出 圖像中的每個像素(x,y),新值取自輸入圖像中的位置(a x + b y + c,d x + e y + f),並舍入爲最接近的像素。
編輯: Ups,以上是AFFINE轉型。你在問關於PERSPECTIVE轉型。功能相同,但參數不同。數據應該是這樣的:
數據是包含 係數的透視變換八元組(A,B,C,d,E,F,G,H)。對於輸出圖像中的每個像素(x,y),從位置(ax + by + c)/(gx + hy + 1),(dx + ey + f)/(gx + hy + 1),輸入爲 圖像,四捨五入爲最接近的像素。
所以你的方程是Q.X3 = X4,其中原始座標X3是(X3X,x3y,1)和已變換座標X 4是(x4x,x4y,1)和對於Q:
Q = a b c
d e f
g h 1
相比仿射之一,則嵌入恆定v進入矩陣。現在您的方程式變爲:
a*x3x + b*x3y + c*1 = x4x
d*x3x + e*x3y + f*1 = x4y
g*x3x + h*x3y + 1*1 = 1
通過高斯消除法解決AFFINE轉換。
你至少需要在投影幾何中有一個引子來理解發生了什麼。如果您不知道,請嘗試搜索已知的轉換矩陣,並在與您提供的鏈接中的矩陣相同的位置複製係數。 –
您可能想嘗試用8個滑塊敲擊Tk GUI,以便查看參數如何影響轉換。你應該能夠在不知道它意味着什麼的情況下寫下它,它將成爲你找到的任何引物的絕佳伴奏。但是你仍然需要學習基礎知識。 – abarnert
嘗試[this](http://pastebin.com/prVdtq05)。 (當然,用你實際上有的圖像替換硬編碼的「bird.jpg」)。 – abarnert