2012-10-17 77 views
0

我有一個與projective transform有關的問題。假設現在我們知道圖像中的線功能ax+by+c=0,圖像將經過投影畸變,畸變可以表示爲一個射影變換矩陣:投影變換後的線條函數

enter image description here

然後porjective改造後,如何我可以知道新的失真圖像中的線功能嗎?謝謝!

**編輯** 根據這個建議,我找到了答案。在這裏,我張貼的MATLAB代碼來說明它:

close all; 
% Step 1: show the images as well as lines on it 
imshow(img); 
line = hor_vt{1}.line(1).line; a = line(1); b=line(2); c=line(3); 
[row,col] = size(img); 
x_range = 1:col; 
y_range = -(a*x_range+c)/b; 
hold on; plot(x_range,y_range,'r*'); 
line = hor_vt{1}.line(2).line; a = line(1); b=line(2); c=line(3); 
y_range = -(a*x_range+c)/b; 
hold on; plot(x_range,y_range,'y*'); 
% Step 2: show the output distorted image that goes through projective 
% distortion. 
ma_imshow(output); 
[row,col] = size(output); 
x_range = 1:col; 
line = hor_vt{1}.line(1).line; 
line = reverse_tform.tdata.Tinv*line(:); % VERY IMPORT 
a = line(1); b=line(2); c=line(3); 
y_range = -(a*x_range+c)/b; 
hold on; plot(x_range,y_range,'r*'); 
disp('angle'); 
disp(atan(-a/b)/pi*180); 
line = hor_vt{1}.line(2).line; 
line = reverse_tform.tdata.Tinv*line(:); % VERY IMPORT 
a = line(1); b=line(2); c=line(3); 
y_range = -(a*x_range+c)/b; 
hold on; plot(x_range,y_range,'y*'); 
disp('angle'); 
disp(atan(-a/b)/pi*180); 

兩條線中的原始影像上:

enter image description here

射影distoration後,與在其上線的輸出圖像變爲: enter image description here

+1

也許這裏最好問這裏http://math.stackexchange.com/ – iabdalkader

回答

1

這裏比上面的代碼更容易理解它。

給定一個非奇異單應性H(即,由具有非零行列式的3×3矩陣H表示的單應性):

  1. 均相2D點(表示爲三維列矢量)從右側變換:

    :從由逆單應左

    p」 = H * p

  2. 2D線(表示爲它們的3個係數的3D行矢量)變換

    升」 = L * H^-1

證明:對於屬於線L的每點p是L * P = 0。但然後升*(H^-1 * H)* P = 0,因爲(H^-1 * H)= I是單位矩陣。由關聯性質得出的最後一個方程可以被重寫爲(l * H^-1)*(H * p)= 0。但是,對於屬於該線的每個p,p'= H * p是相同的點由單應變換。因此,最後一個等式說明在變換後的座標系中,這些相同的點屬於係數爲l'= 1 * H^-1,QED的線。

1

我不是數學家,所以也許有更好的解決方案,但你可以使用方程,因爲它是,然後通過乘以轉換矩陣九。

+0

謝謝,我想我已經找到了答案。它基於http://www.ping.be/~ping1339/coortf.htm#Equation-of-a-line-a。這個想法與你的答案非常相似。但是,真的花了我一些時間才找到正確的轉換矩陣來完成這項工作。 – feelfree