0

射影変換に関する質問があります。画像内の線関数がわかっているax+by+c=0とします。画像は射影歪みを通過し、歪みは射影変換行列 として表すことができます。

ここに画像の説明を入力

次に、射影変換の後、新しい歪んだ画像の線関数をどのように知ることができますか? ありがとう!

**編集** 提案に基づいて、答えを見つけました。ここでは、それを説明するために 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);

2行の元の画像:

ここに画像の説明を入力

射影歪みの後、線のある出力画像は次のようになります。 ここに画像の説明を入力

4

2 に答える 2

1

上記のコードよりも簡単に理解できる方法があります。

非特異ホモグラフィH(つまり、非ゼロ行列式を持つ3x3行列Hで表されるホモグラフィ)が与えられた場合:

  1. 均質な2Dポイント(3D列ベクトルとして表される)は右から変換されます。

    p'= H * p

  2. 2Dライン(3つの係数の3D行ベクトルとして表される)は、逆ホモグラフィによって左から変換されます。

    l'= l * H ^ -1

証明:線lに属するすべての点pについて、それはl * p = 0です。しかし、(H ^ -1 * H)= Iは単位行列であるため、l *(H ^ -1 * H)* p=0です。 。最後の方程式は、結合法則により、(l * H ^ -1)*(H * p)= 0と書き直すことができます。ただし、線に属するすべてのpについて、p'= H*pは同じ点です。ホモグラフィによって変換されます。したがって、最後の方程式は、変換された座標内のこれらの同じ点が、係数l'= l * H ^ -1、QEDの線に属することを示しています。

于 2012-10-18T12:08:44.443 に答える
1

私は数学者ではないので、より良い解決策があるかもしれませんが、方程式をそのまま使用してから、変換行列を掛けて出力を変換できます。

于 2012-10-17T15:50:53.283 に答える