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

ARや3Dについて最近勉強を始めたものです。

添付画像のような透視変換を使用して、2次元のデバイス(カメラ)座標系を3次元の論理座標系に変換しているみたいなのですが、
変換行列の(3,3)成分が1になっている理由がよくわからずに困っています。

乗算を行うと
Wi=gXi+hYi+1
となり、Wiがプラス方向に1平行移動することになりますが、これが目的なのでしょうか?

調べても4次元の同次座標を用いた変換の説明しかなく、是非ご教授いただきたいです。
英語の説明ならありますがあまり理解できませんでした…
http://alumni.media.mit.edu/~cwren/interpolator/

「透視変換について」の質問画像

A 回答 (1件)

 これは平面から平面への写像でしょう。

カメラというより(光が飛ぶ向きを逆にして)プロジェクタだと思った方が、少しは分かり易いかと。
 点光源を原点とし、画角の中心と点光源を結ぶ直線をz軸とした3次元直交座標系おいて、z=1の平面上に2次元の像(スライド)がある。スライド上の像の中の1点の座標が(xi, yi)(zまで含めて考えると(xi, yi, 1))だというんでしょう。で、これを、ある勝手な所に置かれた平面状のスクリーンに投影する。ただし予め、スクリーン上に2次元の直交座標系(X,Y)を決めておく。
 さて、スライド上の点(xi, yi)が投影されるスクリーン上での位置を(Xi, Yi)とする。言い換えれば、直線(xi w, yi w, w) (w>0)とスクリーンの平面との交点の座標をスクリーンに固定された座標系で測ったものが(Xi, Yi)です。
 スクリーンの置き方には、回転と平行移動の自由度が6つあり、従って6個のパラメータを含む変換によって(Xi, Yi)が決まることになります。(xi,yi)から(Xi,Yi)への写像をフツーに素直に定式化すれば、
  Xi = ξ(xi, yi, スクリーンの位置を表すパラメータ6個)
  Yi = ζ(xi, yi, スクリーンの位置を表すパラメータ6個)
という格好になるでしょう。(頑張って、右辺の具体的な式を書き下してみると良いと思います。理解が深まるでしょうから。)
 さてここで
  ui = Xi wi
  vi = Yi wi
とおくと、この写像はご質問にある8個のパラメータを含む行列の格好にまとめることができちゃいます。しかし本当の自由度は6つだけなので、これら8個のパラメータはもちろん互いに独立ではない。パラメータ相互の依存関係を表す式があと2つ存在します。でも、その関係式は敢えて書いてない。
 これはどういうことかというと、「パラメータ間の依存関係が非線形のヤヤコシイ関数で表されるんで、そんなのは敢えて無視し、あたかも独立なパラメータが2個余計にある線形変換のような格好に、むりやり表した」ということです。つまり、(「変換行列の(3,3)成分が1になっている」どころのサワギじゃなくて)「本来6個しかないはずのパラメータが8個に増えている」ということにこそ、この行列表現のミソがあるんです。

 で、問題は、「スライドの像は分かっている。それをスクリーンに投影した像も分かっている。このとき、スクリーンがどこにどう置かれているかを知りたい」ということ。スライドの多数の点について、その座標(xi, yi)と、スクリーン上での対応する像の座標(Xi, Yi)が(i=1,2,…N, N≧4)について分かっているときに、8個のパラメータの値を「それらしく」算出することが課題です。
 (ただし、各点(xi, yi)が投影された像がスクリーン上の沢山の点のうちのどれなのか、を同定することができなくては、以下の議論は成立ちません。ここでは、たとえば「点 i=1,2,…がそれぞれ異なる色をしているんで、対応は簡単に分かる」ということにでもしておきましょう。)
 本来の自由度は6だから、Nは3以上なら本来充分なんですが、パラメータ間の依存関係を使わなかったことの報いとして、データが余計に必要になるんですね。
 また、「それらしく」というのは、線形最小二乗法の意味で最適に、ということ。だけど「非線形の関数で表されるパラメータ間の依存関係を敢えて無視して」いるために、その解は真の意味での最小二乗解にはならないんです。また、解の8個のパラメータが本来満たすべき依存関係も、正確に満たされる訳ではない。この事情を「それらしく」と言ってみた訳でして。

 このように、本来は非線形最小二乗法で扱うべき問題を、ムリヤリ線形最小二乗法の形に焼き直して解く(その代わりに、真の意味での最小二乗解を得ることは諦めて「それらしく」で我慢する)というのは、実務上はちょいちょいやるテクニックなんです。
    • good
    • 0

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