2.三角測量(2次元)
三角形の性質を利用して距離を求める
では2次元の三角測量を計算してみましょう。下に描いているのは、二等辺三角形です。点p1と点p2がマシンビジョンで使用するカメラだと思ってください。2点間の距離(視差)とターゲットに対する成す角が45度であることが分かっています。例えば点p1を基準(原点)としたときに、ターゲットの座標(x,z)はいくつになるでしょうか?
図よりx=1/2lであることは自明です。次に45度の角を持つ二等辺三角形の角辺の長さの比は1:1:√2でした。それを利用するとz=1/2lと求まります。
2点の成す角が任意の場合
前述のような、三辺の比が分かっている場合は複雑な計算なしで座標を求めることができますが、次のような場合はどうでしょうか。
l-x=dと置いたときに、dが求まればxとzが求まりそうです。
(z=xtanα)なので)
上の図から下記の連立方程式が成り立ちます。
$$
\left \{
\begin{array}{l}
\tan\alpha=\cfrac{z}{l-d}\Rightarrow z=(l-d)\tan\alpha \\
\tan\beta=\cfrac{z}{d}\Rightarrow z=d\tan\beta
\end{array}
\right.
$$
zを左辺にもってきて整理したうえで、一方の式に代入すると下記のようになります。
$$
(l-d)\tan\alpha = d\tan\beta
$$
dを左辺にもってきて整理すると下記のようになります。
$$
d=\cfrac{\tan\alpha}{\tan\alpha+\tan\beta}l
$$
このままでもxやzは求まるのですが、もう少し整理します。
$$
公式:\tan\theta=\cfrac{\sin\theta}{\cos\theta}より\\
\\
d=\cfrac{\cfrac{\sin\alpha}{\cos\alpha}}{\cfrac{\sin\alpha}{\cos\alpha}+\cfrac{\sin\beta}{\cos\beta}}l\\
\\
=\cfrac{\sin\alpha\cos\beta}{\sin\alpha\cos\beta+\cos\alpha\sin\beta}l
$$
dが求まったのでxは
$$
公式:\sin(\theta1+\theta2)=\sin\theta1\cos\theta2+\cos\theta1\sin\theta2\\より
\\
x = l-d = \left(1-\cfrac{\sin\alpha\cos\beta}{\sin\alpha\cos\beta+\cos\alpha\sin\beta}\right)l\\
\\
=\cfrac{\cos\alpha\sin\beta}{\sin(\alpha+\beta)}l
$$
と求まります。次に
$$
\tan\alpha = \cfrac{z}{x}\\
\\
z=\tan\alpha\cfrac{\cos\alpha\sin\beta}{\sin(\alpha+\beta)}l\\
\\
= \cfrac{\sin\alpha}{\cos\alpha}・\cfrac{\cos\alpha\sin\beta}{\sin(\alpha+\beta)}l\\
\\
=\cfrac{\sin\alpha\sin\beta}{\sin(\alpha+\beta)}l
$$
となり、zが求まりました。少し長かったですがこれで2次元での三角測量の計算ができました。
3次元への拡張を考える・・・
今回の記事で2次元での距離計算ができるようになりました。基本的には3次元でも同じ計算を繰り返しても良いのですが、上の計算にはカメラの焦点距離や画素の情報がありませんし、y座標の計算もしていません。後から換算をしても良いのですが、ソフトに組み込みやすいようにまとめて計算する方法を次回からご紹介します。行列を使った計算で、大学で学んだ線形代数の計算が出てきます。2次元よりも難しい計算になりますが、どうぞ辛抱強くお付き合いください。引き続きよろしくお願いいたします。