MLエンジニアへの道 #60 - 単視点計測

Last Edited: 6/4/2025

このブログ記事では、コンピュータビジョンにおける単視点計測について紹介します。

ML

前回の記事では、カメラモデルと同次座標の基礎について説明し、それらをカメラキャリブレーションに適用しました。 しかし、カメラキャリブレーションには十分なPPが既知である必要があり、これは現実世界のほとんどのシナリオでは利用できません。 実際は、どちらかというとPPについて推論したい場合がほとんどです。そこで、この記事では、単一の画像から同次座標の性質を使用してカメラをキャリブレーションし、 PPを推定する方法、または単視点計測を実行する方法について紹介します。

2次元変換

単視点計測について議論する前に、2次元における様々な変換を理解する必要があります。等距変換は回転と平行移動によって記述できる変換であり、 距離を保存します。同次座標では、左上に回転行列RR、右上に平行移動ベクトルtt、左下にゼロ、右下に1を含む行列を使用してこれらを表現できます。

[xy1]=[SRt01][xy1],S=[s00s]\begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} SR & t \\ 0 & 1 \\ \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}, S = \begin{bmatrix} s & 0 \\ 0 & s \\ \end{bmatrix}

相似変換は等距変換に適用されるスケーリング変換を含み、形状を保存します。したがって、対角行列にスカラー因子ssを含むスケーリング行列SSを、 等距変換行列の回転行列に乗算することで、相似変換行列に到達できます。ここで、等距変換はs=1s=1のときの相似変換の特殊形であることがわかります。

[xy1]=[At01][xy1]\begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} A & t \\ 0 & 1 \\ \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}

アフィン変換は相似変換に適用される剪断変換(ずらす変換)を含み、行列AAによる線形変換とttによる平行移動をもたらします。 アフィン変換は点、直線、および平行性を保存します。したがって、等距変換と相似変換の両方がアフィン変換の特殊形です。 射影変換は、以下のようにvvbbを使用して追加の次元を変換することで、アフィン変換をさらに一般化します。

[xy1]=[Atvb][xy1]\begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} A & t \\ v & b \\ \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}

その結果、射影変換はもはや平行性を保存せず、代わりに点の共線性を保存します。これは、線が異なる角度と長さを持つ可能性のある線にマッピングされることを意味します。 2次元の同次座標における線は=[a,b,c]T\ell=[a, b, c]^Tによって定義でき、ここで傾きとy切片はそれぞれab-\frac{a}{b}cb-\frac{c}{b}によって捉えられます。 線上のすべての点p=[x,y,1]Tp=[x,y,1]^TTp=0\ell^Tp=0を満たします。射影変換は点の共線性を保存するため、\ellを新しい傾きと切片を持つ=[a,b,c]T\ell'=[a', b', c']^Tにマッピングします。

無限遠の点と直線

2つの線\ell\ell'が交わるとき、交点xxTx=0\ell^Tx=0Tx=0\ell'^Tx=0の両方を満たす必要があり、これはxx\ell\ell'の両方に直交する必要があることを意味します。 これらの直交性を使用してx=×x=\ell \times \ell'を求めることができ、これは外積の定義によりxx\ell\ell'の両方に直交するように制約します。 これを使用して、平行線=[a,b,c]T\ell=[a, b, c]^T=[a,b,c]T\ell'=[a', b', c']^Tの間の仮想的な交点を計算できます。ここで留意すべく点は、平行線は傾きが等しいということです (すなわち、ab=ab\frac{a}{b}=\frac{a'}{b'}であり、abba=0ab'-ba'=0かつaa=bb\frac{a'}{a}=\frac{b'}{b}を意味する)。

[abc]×[abc]=[bccbcaacabba]=[bcc(baa)c(abb)ac0]=[(c+caa)b(c+cbb)a0][ba0]=x\begin{bmatrix} a \\ b \\ c \end{bmatrix} \times \begin{bmatrix} a' \\ b' \\ c' \end{bmatrix} = \begin{bmatrix} bc' - cb' \\ ca' - ac' \\ ab' - ba' \\ \end{bmatrix} = \begin{bmatrix} bc' - c(-\frac{ba'}{a}) \\ c(\frac{ab'}{b}) - ac' \\ 0 \\ \end{bmatrix} = \begin{bmatrix} (c'+c\frac{a'}{a})b \\ -(c'+c\frac{b'}{b})a \\ 0 \\ \end{bmatrix} \propto \begin{bmatrix} b \\ -a \\ 0 \\ \end{bmatrix} = x_{\infty}

上記から最後の要素がゼロであることがわかり、これは2つの平行線が無限遠で交わることを意味します。 無限遠の直線も定義でき、すべての無限遠の点(平行線の交点)がそこに存在します。 これらの直線は=[0,0,c]T\ell_{\infty}=[0, 0, c]^Tとして表現され、ここでccは単純に1に設定できる任意の値です。 無限遠の点と直線の射影変換は、vvの影響により、必ずしも別の無限遠の点と直線にマッピングされるわけではありませんが、 アフィン変換は必ず別の無限遠の点と直線にマッピングします。(これは直感的に理にかなっています。 なぜなら、無限遠の点を構成する平行線は、射影変換後にもはや平行であることが保証されないからです。)

消失点と消失線

3D世界では、平面の概念を導入する必要があります。平面はΠ=[a,b,c,d]T\Pi = [a, b, c, d]^Tとして表現でき、 ここで(a,b,c)(a, b, c)は平面の法線ベクトルnnを形成し、ddは原点と法線ベクトルとの間の距離を表します。 平面は、xTΠ=0x^T\Pi = 0を満たすすべての点xxによって正式に定義できます。 直線は2つの平面の交線として定義できますが、4つの自由度を持つ3D空間での直線の表現は複雑です。

Vanishing Point

3D空間の平行線がカメラ座標系において方向d=(a,b,c)d = (a, b, c)を指している場合、 無限遠点はx=[a,b,c,0]Tx_{\infty} = [a, b, c, 0]^Tとなります。カメラモデルにおけるMMによる射影変換は、 これを2D画像平面上の消失点vvにマッピングしますが、この点はもはや無限遠点ではない可能性があります。 これはv=Mxv = Mx_{\infty}またはv=Kdv = Kdとして表現でき、ここでKKはカメラ行列です。 さらなる導出により、vvをもたらした平行線の方向ddが得られ、d=K1vK1vd = \frac{K^{-1}v}{||K^{-1}v||}となります。

Horizontal Line

同様に、平面Π\Pi上の無限遠点からなる無限遠直線は、画像平面上で水平線horiz\ell_{\text{horiz}}と呼ばれる直線に投影されますが、 これももはや無限遠直線ではない可能性があります(水平線や地平線の原理)。水平線上の消失点をもたらした同一平面Π\Pi上の平行線のすべての方向は、 その平面上に存在し、平面の法線ベクトルnnに直交する必要があるため、dTn=vTKTn=0d^Tn = v^TK^{-T}n = 0が成り立ちます。 消失点も水平線上にあることから、vThoriz=0v^T\ell_{\text{horiz}} = 0であり、したがってhoriz=KTn\ell_{\text{horiz}} = K^{-T}nおよびn=KThorizn = K^T\ell_{\text{horiz}}が導かれます。

cos(θ)=d1d2d1 d2=v1Tωv2v1Tωv1v2Tωv2cos(θ)=n1n2n1 n2=1Tω121Tω112Tω12,where ω=(KKT)1 \cos(\theta)=\frac{d_1d_2}{||d_1||~||d_2||} = \frac{v_1^T \omega v_2}{\sqrt{v_1^T \omega v_1}\sqrt{v_2^T \omega v_2}} \\ \cos(\theta)=\frac{n_1n_2}{||n_1||~||n_2||} = \frac{\ell_1^T \omega^{-1} \ell_2}{\sqrt{\ell_1^T \omega^{-1} \ell_1}\sqrt{\ell_2^T \omega^{-1} \ell_2}} \\ , \text{where} ~ \omega = (KK^T)^{-1}

したがって、キャリブレーションによってKKを取得し、画像内の平面に関連する水平線を認識できれば、 平面の法線ベクトルnnを推定し、3D空間における表面の向きを捉えることができます。 これらの方程式は、異なる消失点(v1v_1v2v_2)に対応する2つの方向(d1d_1d2d_2)間の角度や、 水平線(1\ell_12\ell_2)に対応する2つの平面(n1n_1n2n_2)間の角度を、 上記で示したようにコサイン法則を用いて導出するためにさらに発展させることができます。

単視点計測

上記で確立された数学に基づいて、画像内のカメラと被写体に関する様々な量を推定することができます。 例えば、互いに直交する2つの平面上の2組の平行線から2つの消失点を得ることができ、 コサイン法則を用いた方程式を使用してv1ωv2=0v_1 \omega v_2 = 0に到達できます。 しかし、KKは歪みがなく正方画素を用いていると仮定しても少なくとも3つの自由度を持ち、制約が1つだけではω\omegaからKKを解くことはできません。 したがって、両方の平面に直交する別の平面から別の消失点v3v_3を取ることができます。 これにより、PPを直接知ることなくKKを解くための3つの制約(v1ωv2=0v_1 \omega v_2 = 0v1ωv3=0v_1 \omega v_3 = 0、およびv2ωv3=0v_2 \omega v_3 = 0)を導くことができます。

Single View Metrology Example

KKが分かれば、n=Khorizn = K\ell_{\text{horiz}}を使用して平面の向きを推定し、それらを使用して単一画像から推定3Dシーンを再構築できます。 しかし、この方法では画像に捉えられた3Dシーンを適切に再構築するために不可欠である、平面のスケールと位置を取得することはできず、 当然遮蔽された物体も考慮されません。(異なるサイズ、位置、向きを持つ異なる物体が、全く同一の投影を生じる可能性があります。) これは、無限遠の点と直線の射影変換の性質を使用することで単一画像から豊富な情報を抽出できることを実証していますが、 同時に単一視点測量法のアプローチの本質的な限界も明らかにしています。

これは、なぜ訓練データから学習することで物体のサイズや遮蔽部分をある程度推論できる深層学習を用いたとしても、単一画像からの深度推定が困難であるかを説明してます。 (これが、タスクを簡単にし、モデルが表面の向きの学習に集中できるようにするために、単一視点深度推定にスケール不変損失を使用する傾向がある理由です。) 人間は画像を解釈し、物体の向きを理解し、現実世界での経験からそれらのサイズを推論することにおいて、深層学習モデルよりもさらに優れた能力を持っているかもしれませんが、 それでも同じ物理的限界が私たち人間にも適用されます。我々人間が(特に異常な形状やサイズの物体に対して)錯覚に陥ることが多分にあるのもこのためです。

結論

この記事では、2Dにおける様々な変換、無限遠の点と直線、無限遠の点と直線の射影変換の結果としての消失点と消失線、 そしてこれらの概念によって可能になったキャリブレーションと平面向き推定のための単視点計測を取り上げました。 さらに単視点計測は有用である一方で、表面のスケールと位置(遮蔽された物体も含む)に関する情報の不可避的な損失により本質的な限界があることを発見しました。 しかし、私たちが単視点計測において取り上げた概念と数学は、3Dシーンを理解する別のアプローチについて議論する今後の記事でも引き続き不可欠である可能性が高いです。 したがって、この記事と以下に引用されたリソースを読み込むことで、これらについて深く理解することをお勧めします。

リソース