1枚の建物写真からでも3D形状を作れるか(1)まずは基本!2枚の写真で立体化

10年くらい前から、複数の写真をもとに立体形状を再現する技術が紹介されている。
確かに、2枚以上の写真と、その写真を撮影したカメラの姿勢や画角が分かれば、理論的に計算できる。
では、1枚の写真で立体形状を再現することはできるか。

写真で3D形状を作りたいわけ

ここで採り上げるのは建物です。

建物の外観写真や内観写真は、いわゆるパースのようなイメージになりますが、そのようなパース写真を見て、人は立体形状を思い描くことができますね。

だったら、コンピュータでも立体形状を作れるんじゃないか?

という課題が生まれるわけです。

建物の外観、内観が立体化できれば、いろんな使い道があります。

たとえば、周辺の建物や街並みを立体化して、いまから建てようとしている建物の3Dモデルと合成して、完成予想地区模型を作ることができます。平面図よりずっとわかりやすいでしょ。

内観写真なら、ヘッドマウントディスプレイを使って、写真の中に入ることもできますよ。(発想が安直)

また、3Dになっていれば、欲しい寸法をモデルから計測することができます。現場監督は、近づけないけど、見えるところの距離やら寸法やらを知りたいことも多いでしょう。なんとか近づいて行ってコンベックスを当てるよりも、写真を撮ってパソコンで計測できるなら、そのほうが楽だし、安全だし、記録も残るし、メリットは大きいでしょ。

とにかく、建物を作ることに計測は欠かせないのです。IT、使えるなら使い倒しましょう。

2枚の写真から立体化

まずは基本から。

同じ対象物を異なる視点から写した2枚の写真があれば、3次元座標を計算できる

理屈は図のとおりです。

左右のピラミッド型の四角錐は、カメラの視点と、画角(写角)を模式化したものです。長方形が写真の枠だと思ってください。

すると、建物のある一点(T)は、2枚の写真それぞれに、点(P1とP2)として表れます。

逆に言えば、もし、2枚の写真に同じ点(T)が写っている場合、カメラの中心(O1とO2)からその点(P1とP2)に直線を引けば、空間内の点Tで交差するということでもあります。つまり、2枚の写真から、点Tの座標が計算できるわけです。これを、多数の特徴的な点(入隅、出隅、開口部の角、等々)について行えば、建物の3D形状が作れるはずですね。

厳密に言えば、O1とP1を結んだ直線と、O2とP2を結んだ直線が、交差することはほとんどありません。そのため、いわゆる最小二乗法とかを使って、総合的に誤差が小さくなるように、点Tを推定するわけです。

カメラの一つをプロジェクタに置き換えたら

Camera1をプロジェクタに置き換えて、点を照射したらどうなるでしょうか。

O1からP1に向けて、レーザーポインターで点を映すようなものですから、建物上の点Tが光るはずです。これをCamera2から見ると、やっぱり、P2の位置に点が写っているはずです。

つまり、カメラのひとつをプロジェクタに置き換えて、なんらかのパターンを照射して、そのパターンをもう一方のカメラで撮影すれば、同じように3D形状を作ることができます。

多数の点を照射してカメラの前にあるものを立体化したのが、最初のKinectです。より精密な3Dモデルを作るものには、縞模様を照射するものが多いようです。GOM社とか、ARGO社とか、SICK社などが販売している製品は、プロジェクタとカメラの距離と向きを精密に固定してあって、数十センチから数メートル先の物体の立体形状をミリメートルの精度で取得することができます。

ちなみに、この高精度3Dスキャナーは、むちゃ高いですよ。趣味では買えません。Kinectとは2桁ほど違います。うっかり壊したら、1年以上タダ働きになります。

けっきょく三角測量

この2枚の写真から立体を作る技術って、結局、三角測量です。

2つの視点の距離が分かっていて、同じ点までの直線と視点間の直線とがなす角が分かるから、点の位置が分かるという理屈です。

なので、2枚の写真を撮ってくるときは、カメラの位置を正確に計測しておく必要があります。

あれ? それって、測定する相手がひとつ増えただけではないか?

そうなんです。カメラの位置を正確に決めるために、測量屋さんを呼んでこなくてはなりません。

「カメラの位置を測量するくらいなら、向こうの点を測量してくれよ」

一応、助け舟を出しておくと、同じ空間の大量の写真を撮ることで、互いのカメラの位置と姿勢を推定する理論があります。パソコンソフトもあります。だから、今回は、理論説明てことで、許してください。

次回は(いつかは決めませんが)、三角測量を使わない方法、そう、たった1枚の写真から立体化をしようという技術を紹介します。