Compuer Vision(OpenCV) and 3D Cloud Point(Open3D etc.)

 11 Aug. 2024 Create 3D Cloud Points by 'Regard 3D'

'Regard 3D'(Free App)による3D点群データの作成

ChatGPT先生にフォトグラメトリ(Structure From Motion)の優秀なFreeAppについて尋ねたところ、答えの一つとして’Regard3D’を教えてくれたので、さっそくインストールしてみました。

'Regard3D'のインストールから初心者的使用方法についてはWEB上にたくさんの記事がありますが、わたしは’Qiita’さんのリンク先の記事などを参考にしました。

https://qiita.com/tttamaki/items/ef3e44f5219b74e0a15b

3D点群データを作成する題材としては、失敗しても撮影をやり直すことが容易な身近な物ということで、新しく届いたランニングシューズを選択しました。

アスファルト舗装の道路の上に、シューズが入っていた箱を置き、その上にランニングシューズをおいて撮影開始。

使用するカメラは以前から持っていたNikonのD5300で標準レンズです。NikonD5300は’Regard3D’のdefault設定に登録されている点がなんとなく良さそうに感じました。たぶん画像を取得するカメラ内のセンサーサイズ(一説ではフォトグラメトリーの計算に必要らしいです)とかは登録済みではないかと思っています。

まずはやってみようということで、適当にシューズの全周360°を20枚程度撮影してみましたが、この程度の枚数ではだめみたいです。あとから書きますが、何も考えずに高解像度のまま画像を撮影したのですが、高解像度の画像では特徴点のマッチング処理にめちゃめちゃ時間がかかるので、解像度の設定を最低(それでも10年前のデジカメの最高解像度くらいだと思います)くらいまで落としました。

あと、対象物を動かすのではなく、対象物をおいたまま、自分が動くということが大事だと感じました。また、大きな構造物を撮影する際も同じですが、自分が定点に立ったまま角度だけを変えて撮影した画像では3DCloudPointsを生成できる画像を取得することは難しく、自分(すなわちカメラ)が移動する必要があるということが実感としてわかりました。

少しずつ枚数を増やしていった結果、55枚撮影してうまく3DCloudPointsをCreateできました。平均すると6°ごとに1枚くらいになります。以下、360°3DCloudPointsを作成するための55枚の写真になります。

























































説明の流れが前後しますが、'Regard3D'による3DCloudPointsの生成について記述していきます。

まず、フォトグラメトリーに使用する画像を選択します。ここは撮影した画像を全部登録してしまいます。この画像群についてCompute Matchesの処理をすると、約25分かかりました。たかだか30cmくらいのモデルを作るのにこれだけかかるとなると、大規模なモデルを作ろうと思うと、相当な時間とPCの負荷が予想されます。

Matchingの結果は’Show Matching result'で見ることができます。真ん中下あたりにある'Show Matches'のチェックボックスをチェックすると、2枚の写真で対応する特徴点を確認できますが、たぶんへぇーーくらいだと思います。

次はTriangulationという処理になります。MatchingPointsから三次元の座標を計算する処理だと思います。Default設定のままで処理を開始します。Triangulationの処理は2分30秒くらいで終了しました。比較的粗な点群データができました。うっすらと見えるシューズらしき点群データの上に円上に緑の点が見えますが、これがカメラの撮影点だと思われます。

次はCloudPointsのDensificationという処理です。英語としてはすっと入るのですが、日本語に訳すと密実化とでもいうのでしょうか?Triangulation処理の点群は薄いので、さらに密な点群を作ってくれる処理のようです。'Create dense cloudpoint'のボタンを押して、Default設定で処理を開始します。この処理が相当時間がかかります。今回の場合、約50分かかりました。

得られる点群データはこんな感じです。

明らかに点群が増えており、シューズの輪郭が明確になっています。


最後はSurface処理です。この処理はまだ理解できていませんが、実行すると点群を3DMeshデータに変換しているような気がします。この処理は約2分で完了しました。

Surface処理には大別して’colored vertices’と’textures’の2種類があるようですが、わたしが対象としている物体はTexturesの方が相性がよさそうです。逆に、もう一方のColorede vertices処理をどういう場面で活用するのか勉強したいと思います。Colored vertices処理画像を見ると、ターミネーターみたいな粘性を感じさせる画像ができます。ちなみにRegard3DのDefault設定はColored verticesです。

textures処理の例です。

colored vertices処理の例です。

CloudPontデータやSurfaceデータは汎用的なファイル形式で保存可能です。わたしはply形式を使おうと思います。完成した3DCloudPointsデータを次はCloudCompareというAppを利用して閲覧・処理・加工してみたいと思います。

コメント