アプリ版:「スタンプのみでお礼する」機能のリリースについて

透視変換で、元の長方形の縦横比を求めることはできますか?

現在OpenCVでの透視変換を勉強中です。


やりたいことは、机の上の長方形をデジカメで適当な角度から撮影した画像から、元の長方形を平面から見たように透視変換することです。
カメラ画像上の4隅座標はマウスクリックで求めます。

OpenCVの透視変換は、変換前と変換後の対応する4点の座標を与えることでできるのですが、現状変換後の長方形の縦横比は、実際に定規で測る以外の方法が分かっておりません。

似たような透視変換に関する質問が下記にありました。
「透視投影された平面を正面から見たように変換したい」
http://oshiete.goo.ne.jp/qa/3685711.html


回答の中で、透視変換の一般式について下記の記述がありました。
==ここから==================
変換前の4点の座標を(X1,Y1)(X2,Y2)(X3,Y3)(X4,Y4)とし、変換後の4点の座標を(x1,y1)(x2,y2)(x3,y3)(x4,y4)とすると、連立方程式は次のようになります。
 
X1*A + Y1*B + C - x1*X1*G - x1*Y1*H = x1
X1*D + Y1*E + F - y1*X1*G - y1*Y1*H = y1
X2*A + Y2*B + C - x2*X2*G - x2*Y2*H = x2
X2*D + Y2*E + F - y2*X2*G - y2*Y2*H = y2
X3*A + Y3*B + C - x3*X3*G - x3*Y3*H = x3
X3*D + Y3*E + F - y3*X3*G - y3*Y3*H = y3
X4*A + Y4*B + C - x4*X4*G - x4*Y4*H = x4
X4*D + Y4*E + F - y4*X4*G - y4*Y4*H = y4
==ここまで==================

ここで、
x1 = x2 = 0 (原点)
y1 = y4 = 0 (原点)
x3 = x4 = 100(仮に)
y2 = y3 = y (求めたい値)

とすると未知の値がA~Hとyの9つになってしまいます。
与えられる連立方程式が8つなので、yを求めることはできないのでしょうか?

iPhoneアプリのJotNotなどが私のやりたいことが出来るようなので、
「JotNotが、iPhoneのカメラを文書スキャナーにする」
http://jp.techcrunch.com/archives/20090317jotnot …
何か手段はあると思うのですが、上記の一般式から導けるのでしょうか?
それとも別のアプローチを考えた方がよいのでしょうか?

前提条件は下記の通りです。
・対象物は長方形(縦横比未知)
・カメラ画像の4点は既知
・レンズ歪みは考慮しない


初歩的な質問かも知れませんが、ご教授いただければ幸いです。

A 回答 (1件)

レンズの歪みを考慮しないという事なので、


光軸と像面が垂直で、かつ像面のx軸、y軸が直交し、さらに像面の縦横の比率も等しいと仮定すると、
上記のA~Hの未知数には更に以下の3つの制約条件を課す事が出来ます。

(1)(A*D+B*E)*(F*F-C*C)+C*F*(A*A+B*B-D*D-E*E)=0
(2)A*D+B*E-C*(D*G+E*H)=0
(3)A*D+B*E-F*(A*G+B*H)=0

従って、未知数が9個(A~Hとy)に対して式が8+3=11個になり、今度は条件過剰になります。
つまり、レンズ歪みが完全に校正されていると仮定すれば、原理的には長方形の点は3つあれば十分という事になります。

ただし(1)(2)(3)はA~Hについて非線形なので、解くためには工夫がいるかもしれません。
    • good
    • 0
この回答へのお礼

ご教授ありがとうございました。

実際に既知のX1-X4,Y1-Y4,x1-x4,y1-y4からA-Hを求めそれを教えていただいた
3式に代入したところ、0になりました。


あとは、式を変換してyを求められるよう計算をがんばってみます。

お礼日時:2011/03/27 11:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!