0

射影行列P1P2を持つ 2 つのカメラ (カメラ 2 はカメラ 1 に対して変換しています) があります。彼らは、I1 (カメラ 1) とI2 (カメラ 2) 512x512 の画像を撮影しました。

P1 =

-510.0686  -12.9401 -259.3765 -130.4363
-7.6701 -517.0217 -257.2912  -66.5024
-0.0325   -0.0518   -1.0108   -0.4847


P2 =

-736.7330  -13.5206 -388.4970 -828.1644
-12.1721 -749.3048 -375.2760 -560.6533
-0.0291   -0.0623   -1.4690   -3.2141

基本行列 F を計算します。

F =

1.0e+003 *

0.0000    0.0033   -0.6047
-0.0033    0.0000    0.7938
0.5973   -0.8252    5.9205

次に、 RANSAC point1point2を使用して、SURF で 2 つの画像間の一致点を見つけました。

point1 =

235.3386
135.3108
1.0000

point2 =

242.7049
133.9451
1.0000

私はエピポーラ線を計算しようとしましたが、それはpoint2を通過します

epLineCam2 = F * punto1;

epLineCam2 =

1.0e+004 *

-0.0158
0.0028
3.4824

そのため、 point2 は、エピポーラ ジオメトリを使用して計算された、I2 の予想される点 epoint非常に似ているはずです(SURF は多くの近似を使用するため)。

8.2ページでわかるように。Hartley & Zisserman の本の223 、

x' = Hπ * x;

ここで、 x' はepointで、 x はpoint1です。

私のは:

Hpi = P2 * pinv(P1); 

Hpi =

1.4397   -0.1502  296.2940
-0.0008    1.3476  206.4950
-0.0001   -0.0006    2.5772

したがって、ポイントは次のとおりです。

epoint =

614.7787
388.6410
2.4873

画像サイズが 512x512 であるため、epoint.xが画像の外側にあることを覚えています...

point2 =

242.7049
133.9451
1.0000

私の質問は、なぜですか?どこで間違いを犯しましたか?

ありがとう

4

1 に答える 1

2

matlab コードを投稿していないため、どこで間違いを犯したかを正確に判断するのは困難ですが、いくつかの提案を行うことができます。

1 つには、SURF によって検出された一致点は必ずしも正しい点である必要はありません。たとえば、画像にそれらを描画するだけで、point1実際に一致するかどうかを確認しましたか?point2

さらに、射影行列をどのように取得したかは知っていますが、それらが正しかった場合、次の条件が実際に保持されるはずです。

x' = P2 * pinv(P1) * x

x と x' の両方を描画することで射影行列が正しいかどうかを簡単に確認し、それらが一致する点であるかどうかを確認できます。x' と x は同次座標であることに注意してください。epointこのメモは、が と大きく異なる理由についても説明しpoint2ます。ベクトル epoint をその z 座標で除算すると、point2 に似た結果が得られます。

         614.7787     247.1671
epoint = 388.6410  =  156.2502
         2.4873       1.0000
于 2012-04-18T02:04:50.710 に答える