見出し画像

フォトグラメトリ?LiDARスキャン?Object Capture?

このあたりについてiOSエンジニア向けのカンファレンスで話す予定があり、用語を整理しようと思うのだが、なかなか難しいなと。

そのあたりの葛藤を雑に書き散らかしてみる。


LiDARスキャンとフォトグラメトリ

まず前提として、このプロポーザルを書いた時点では、僕は 【LiDARスキャン】も 【フォトグラメトリ】 の一種、ぐらいに捉えていた。

フォトグラメトリは写真から3Dモデルを生成する技術です。町並みの3Dモデル化や、物体の3Dモデル化等に利用されます。今やLiDAR搭載iPhoneも登場し、スマホ1台でフォトグラメトリが楽しめる時代になっています。

LiDARを用いてスキャンする場合でも(テクスチャとして)写真は使うし、実装としては入力として写真が入ったフォルダを渡すようになっている(後述)わけで、「写真から3Dモデルを生成」しているのでどっちも【フォトグラメトリ】といえるだろうと。

しかしその後発表準備として色々な記事で勉強させてもらっているうちに【フォトグラメトリ】 と 【LiDARスキャン】 は別モノとして扱うのが一般的、ということを理解してきた。

同じ3Dスキャンの技術だとフォトグラメトリという物が存在しますが、こちらは写真から3Dモデルを作成する技術となっており、LiDARスキャンとは全く違う方法で3Dスキャン(3Dモデル化)を行います。

確かに、写真という2D情報だけを元に3Dモデルをreconstructionするのと違って、【LiDARスキャン】は点群という三次元的な情報を直接取得しているわけなので、「写真から3Dモデルを生成」という定義からは外れるかもしれない。

Object Capture APIにおけるフォトグラメトリ(とLiDAR)

【フォトグラメトリ】が冠されたクラスがLiDARデータを使う

Appleプラットフォーム(主にiOS/macOS)では現実世界の物体(Object)を3D的に撮影(Capture)することをObject Captureと呼ぶ。

で、Object Capture APIの中に PhotogrammetrySession というクラスがあり、

このイニシャライザは入力となる写真データのあるフォルダのURLを渡すようになっており、

init(
    input: URL,
    configuration: PhotogrammetrySession.Configuration = Configuration()
) throws

この意味では「写真から3Dモデルを生成」というところで前述の【フォトグラメトリ】の定義とまったくズレはないのだが、

この PhotogrammetrySession 、LiDARから得たデプスマップを与えればその情報も利用してreconstructionを行う。

つまり、PhotogrammetrySession は命名上は【フォトグラメトリ】を行うクラスでありながら、【LiDARスキャン】的でもある。

LiDARは利用するが【LiDARスキャン】ではない?

ただし、PhotogrammetrySession の内部処理では、デプスマップから直接点群を得て3Dモデル化しているわけでもなさそうなので、

iPhoneのカメラを含むいくつかのカメラは、画像データに加えて深度データをキャプチャします。このデータを提供することで、PhotogrammetrySessionは撮影されたオブジェクトの実世界の縮尺を決定し、ARシーンに配置するための正しいサイズの3Dオブジェクトを生成することができます。

iOS/macOSのフォトグラメトリAPIは深度や重力の情報をどのように扱っているのか調べたメモ」より引用

「LiDARデータを利用することもあるが【LiDARスキャン】とはまた別物」ともいえるので、整理がややこしい。

Object Captureという用語が表す範囲

今のところAppleは【Object Capture】という用語は、「物体」のまわりをグルグルまわりながら三次元的にキャプチャーするという用途に特化して使っていると思う。

何をいいたいかというと、広域フォトグラメトリのような3Dモデル生成までは対象にしてなさそうな気がする。

なにしろObjectCaptureViewと命名されたUIコンポーネントが、物体の周りをぐるっとまわるスキャン用途に特化している。

というわけで、「【Object Capture】 は、Apple流の "3Dスキャン" や 【フォトグラメトリ】 の言い換え」とも言えなそうだ。それらより狭義の用語かなと。

(なお、試してみたところでは実は広域フォトグラメトリも「そこそこ」は可能

それぞれの用語が指し示す範囲

Appleは、【Object Capture】を、Image Capture(撮影)と Reconstruction (3Dモデル再構築)両方を含むワードとして使っている。

ObjectCaptureSession, ObjectCaptureView という撮影側のAPIと、PhotogrammetrySession, PhotogrammetrySample というreconstruction側のAPIを総称して「Object Capture API」と呼んでいるからだ。

つまり、【Object Capture】 では、後段のreconstructionにおいて【フォトグラメトリ】を行っている、という関係。

いったんまとめ

全然整理できない、と思って書き始めてみたが、書きながら「あれ、別に整理に困るとこなくない?」と思ってしまった。

  • フォトグラメトリ: 写真から3Dモデルを再構築する

  • LiDARスキャン: LiDARを利用して点群データを得て3Dモデルを生成する。

  • Object Capture:

    • Appleは物体の3Dスキャンのことをこう呼んでいる

      • 広域フォトグラメトリのような3Dモデル生成は(今のところ?)対象外かもしれない

        • (実は広域フォトグラメトリも「そこそこ」は可能)

    • 3Dモデル生成の部分では【フォトグラメトリ】を行う。

      • PhotogrammetrySession ではLiDAR/デプス情報を使うが、3Dの再構築自体には使用してなさそう

      • つまりLiDARは使うものの、いわゆる【LiDARスキャン】ではない。あくまで3D再構築技術としては【フォトグラメトリ】に分類される。


ここから先は

0字
文章やサンプルコードは多少荒削りかもしれませんが、ブログや書籍にはまだ書いていないことを日々大量に載せています。たったの400円で、すぐに購読解除してもその月は過去記事もさかのぼって読めるので、少しでも気になる内容がある方にはオトクかと思います。

技術的なメモやサンプルコード、思いついたアイデア、考えたこと、お金の話等々、頭をよぎった諸々を気軽に垂れ流しています。

最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/