透視変換で元の長方形の縦横比は求まる?

このQ&Aのポイント
  • 透視変換で元の長方形の縦横比を求めることはできるのか?
  • OpenCVでの透視変換の勉強中。デジカメで撮影した長方形の画像を透視変換し、元の形状を再現したい。
  • 透視変換の一般式によって、変換前後の座標の連立方程式が求められるが、未知の変数が多く求められない可能性がある。別のアプローチを模索中。
回答を見る
  • ベストアンサー

透視変換で、元の長方形の縦横比は求まりますか?

透視変換で、元の長方形の縦横比を求めることはできますか? 現在OpenCVでの透視変換を勉強中です。 やりたいことは、机の上の長方形をデジカメで適当な角度から撮影した画像から、元の長方形を平面から見たように透視変換することです。 カメラ画像上の4隅座標はマウスクリックで求めます。 OpenCVの透視変換は、変換前と変換後の対応する4点の座標を与えることでできるのですが、現状変換後の長方形の縦横比は、実際に定規で測る以外の方法が分かっておりません。 似たような透視変換に関する質問が下記にありました。 「透視投影された平面を正面から見たように変換したい」 http://okwave.jp/qa/q3685711.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-turns-your-iphones-camera-into-a-document-scanner/ 何か手段はあると思うのですが、上記の一般式から導けるのでしょうか? それとも別のアプローチを考えた方がよいのでしょうか? 前提条件は下記の通りです。 ・対象物は長方形(縦横比未知) ・カメラ画像の4点は既知 ・レンズ歪みは考慮しない 初歩的な質問かも知れませんが、ご教授いただければ幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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について非線形なので、解くためには工夫がいるかもしれません。

yokoyoko78
質問者

お礼

ご教授ありがとうございました。 実際に既知のX1-X4,Y1-Y4,x1-x4,y1-y4からA-Hを求めそれを教えていただいた 3式に代入したところ、0になりました。 あとは、式を変換してyを求められるよう計算をがんばってみます。

関連するQ&A

  • 線形変換と表現行列

    少し長いですが、線形変換と表現行列についてです。 ------------------------------------------------ 平面のベクトル全体を V^2 として、V^2 の元a を、座標系Γに関して、方程式 g: 2x-3y+1=0, h: x+2y-3=0 で、gに沿ってhに平行射影する V^2 の線形変換Tの、Γの基本ベクトル{e1, e2}に関する行列(表現行列?)を求めよ --------------------------------------------------- という問題にて、 g の方向ベクトル a1=(3, 2) h の方向ベクトル a2=(-2, 1) として、 λa1 + μa2 = e1  ・・・(*) λ'a1 + μ'a2 = e2 ・・・(**) を解いて得た、μ, μ'を使って [ μa2 μ'a2 ] が求める行列だから・・・ と解説に書いてあるのですが、何故(*), (**) の式を立てるのかがわかりません。 線形変換である点と、自然基底である点から、 座標系Γの点 X=(x1, x2)を条件にしたがって平行射影し、h上にのっかた点を Y=(y1, y2)として Y = AX となるような線形変換のAを求めればいいのかな?なんて思っていたのですが・・・。 (表現行列は、基底が自然基底で、同じ線形部分空間への写像であれば、そういう風に求められるということが書いてあった気がしたので・・・) 第一、なんで直線h の切片 情報が使われていないかがわかりません^^; 問題をかなり変に解釈してしまっているのだと思いますが、これはどういうことなのでしょうか。 アドバイスをお願いします。

  • 線形変換

    こんにちは。y1 = x1 + 2x2, y2 = 2(x1 + 2x2) という線形 変換を座標変換という立場でみたとき、新しいy1,y2座標系の y1軸、y2軸とも、同じ直線(古い座標系で見ると、x1 + 2x2=0 )になるそうですが、何故そうなるのかという事が分かりませ ん。  ちなみにこれは、参考書の逆変換を説明するセクションで 、A^(-1)が存在しない時、y = Ax の逆変換は考えられない ことを幾何的に説明する時の説明の一部です。  y1,y2,x1,x2の、1,2は添え字です。  よろしくお願いします。

  • 透視変換について

    ARや3Dについて最近勉強を始めたものです。 添付画像のような透視変換を使用して、2次元のデバイス(カメラ)座標系を3次元の論理座標系に変換しているみたいなのですが、 変換行列の(3,3)成分が1になっている理由がよくわからずに困っています。 乗算を行うと Wi=gXi+hYi+1 となり、Wiがプラス方向に1平行移動することになりますが、これが目的なのでしょうか? 調べても4次元の同次座標を用いた変換の説明しかなく、是非ご教授いただきたいです。 英語の説明ならありますがあまり理解できませんでした… http://alumni.media.mit.edu/~cwren/interpolator/

  • 回転の合成変換について

    単位立方体をy軸周りに45度回転(Ry(45)と表示)後、x軸周りに30度回転(Rx(30)と表示)させるとき、下記の設問に答えよ。ただし、sin30=0.5, cos30=0.87,sin45=0.7とする。 単位立方体の頂点座標はA(0,0,1),B(1,0,1),C(1,1,1), (0,1,1),E(1,0,0),F(1,1,0), G(0,1,0), H(0,0,0)とする。作図は頂点A-B-C-D-A、B-E-F-C-B、C-F-G-D-C、E-F-G-H-E、D-G-H-A-D、A-H-E-B-Aを線で結ぶ。 二つの回転の合成変換行列の式と計算結果を行列で記入しなさい。 という問題で、 T = Rx (30) Ry (45) = [] [] = [] [] ←の中を埋める答え方なんですけどさっぱりわかりません。 []の中は縦横共に3列ずつ入ります 誰かお力添えお願いします(><) 0.7 0 0.7 0.7 0.87 -0.35  ここまでは計算できたんですけど違うかもしれません。 -0.6 7 6    どちらにしろ、=の1個前の[]に入る数値がわかりません

  • 2次元図形 アフィン変換

    2次元図形ABCDEFGHがある。頂点の座標をそれぞれA(0,0),B(2,0),C(2,2),D(3,2),E(2,3),F(0,3),G(-1,2),H(0,2)とする。 この図形を直線y=2x+1に対して反転せよ。 と言う問いなのですが、答えは A(-0.8,0.4),B(-2,2),C(-0.4,3.2),D(-1,4),E(0.4,3.8),F(1.6,2.2),G(1.4,0.8),H(0.8,1.6) になりましたが、合っていますでしょうか。 以前アフィン変換は3×3で行うとお聞きしましたので、ABC、DEF、GHと分け、それぞれ 0 2 2 0 0 2 1 1 1 3 2 0 2 3 3 1 1 1 -1 0 0 2 2 0 1 1 0 ↑GHは2個しかないので右側に0を付け加えました。 それらを -0.6 0.8 -0.8 0.8 0.6 0.4 0 0 1 と掛け合わせ、答えを求めました。(行列なのでかける順番はこちらが先です。)

  • 座標変換について (テンソル解析)

    高度な数学の質問になります。宜しくお願いします。 テンソル解析をしていて出てきた疑問です。 yi=f(x1,x2,x3) によって、x1,x2,x3がy1,y2,y3による新しい変数へ変換される、座標変換を考えます。 逆変換を x1=g(y1,y2,y3) とします。 このような変換が、変数(x1,x2,x3)のある領域Rにおいて可逆であり、1対1対応をもつための条件が (1)Rにおいて関数fは一価、連続であり、連続な偏導関数をもつこと (2)関数行列式(ヤコビアン)Jが領域Rのいかなる点においても0にならないこと となる理由を教えて欲しいのですが。 微積の教科書を洗ってみましたが、基礎教養の微積でしたので、書いてありませんでした。 どうか、数学に詳しい方、詳しく教えてください。宜しくお願いします。 なお、このことが詳しく書いてあるリンクを教えてくださっても結構でございます。宜しくお願いします。

  • AzWM9SFのピクセル縦横比

    AzWM9SFを使ってwmvに変換しようと思っているのですが、 サイズを元ファイルと同じ 720x480 のまま、ピクセル縦横比を使って 16:9 にしたいと思っているのですが、 ピクセル縦横比の計算方法を教えてください。

  • 画像の縦横比とプリント

    私、先日デジタルカメラを購入しました。 画像サイズを見ると、3008×2000ピクセルとなっています。 縦横比の変更は出来ないようです。 ということはA4の用紙にプリントする場合、縦横比にズレが生じてしまいますよね。 この場合画像の一部がカットされてしまいますよね。 みなさん、プリントに際して、どのような方法でこの縦横比の ズレに対応されておりますでしょうか。 ご教示くだされば助かりますです。

  • フーリエ変換の問題。助けてください!!

    フーリエ変換の問題です。 関数f(x)のフーリエ変換F(ω)および逆変換を次のように定義する。 F(ω)=∫[∞→-∞]f(x)e^(-iωx)dx f(x)=(1/2π)∫[∞→-∞]F(ω)e^iωx dω 関数f(x)=e^(-ax^2)のフーリエ変換はF(ω)=(√π/a)e^(-ω^2/(4a)) で与えられる。以下の問いに答えよ。 (1)∫[∞→-∞]e^((-x^2)/2)dx を求めよ。 (2)関数g(x)が次の方程式を満足する。 ∫[∞→-∞]∫[∞→-∞]g(x-y)g(y-z)g(z)dydz=(2π/√3)e^((-x^2)/6) g(x)を求めよ。 (1)はすぐに√2πであるとわかりました。(2)は朝からずっと考えていろいろと試行錯誤してみたのですが、まったく解けません。 どなたか、教えていただけませんか?私も引き続き考えますのでどうかわかる方、よろしくお願い致します。

  • たたみこみ積分のフーリエ変換

    またまた質問します・・ ↓の式の両辺のフーリエ変換の解説で意味がわからないところがありました。 f(x)=e^(-|x|) + a∫[x~∞]e^(x-y)f(y)dy この式の両辺をフーリエ変換するわけですが、 教科書の解説では、 g(x)≡e^x (x≦0) , g(x)≡0 (x>0)といきなり定義すると書いてあります。 すると変換後の式は、たたみこみ積分の考え方も導入して F(ω)=√{2/π}/(1+ω^2) + F(ω)a/(1-iω)となるようです。 まぁ√{2/π}/(1+ω^2)は、e^(-|x|) のフーリエ変換なのはわかります。 F(ω)/(1-iω)の部分も、g(x)のフーリエ変換にf(x)のフーリエ変換F(ω)と√2をかけただけなのでしょう。つまり、f*g=√2F(ω)G(ω) わからないのは・・ g(x)≡e^x (x≦0) , g(x)≡0と定義するに至る考え方。 たたみこみ積分は、積分範囲が0から始まっているのに対して、問の積分部分はxから始まることに起因してg(x)をそのように定義するのかな??っていうのはなんとなく分かりますが、、その間の具体的な道筋が思いつきません!!わかりやすく教えていただきたいです。よろしくお願いします!! ちなみにフーリ変換は、1/√2π∫[-∞~∞]f(x)e^(-jωx)dx 畳み込みはf*g=√2F(ω)G(ω)という定義でお願いします。