- iPhone 15 Proは、深度マップを含むHEIC形式の画像を標準で保存する
- HEICファイルには複数の画像と大量のメタデータが一緒に保存され、JPEGを選択した場合は深度マップやHDRなどは含まれない
- オープンソースプロジェクトHEIC Shenanigansにより、HEICファイルから画像とメタデータを抽出し、EXR形式へ変換できる
- 変換プロセスでは、OpenEXR、OpenImageIO、OpenColorIOなど、映画/TV業界で使われるさまざまな標準とツールを活用する
- 結果として、iPhone 15 Proの写真に含まれるHDR、SDR、Gain Map、Depth Mapの情報をEXR形式に分離して活用できる
iPhone 15 Proの深度マップ対応の背景
- 2017年からAppleは、自社のiPhoneでLiDARスキャナー、3D Time-of-Flight、Structured-Lightスキャンを活用し、深度マップ情報をカメラ画像に含めてきた
- こうした深度マップやメタデータ、複数バージョンの画像はHEIF(HEIC)形式に保存される
- HEICは効率的な画像保存形式であり、2017年以降iPhoneの標準画像形式として採用されている
- JPEG形式を使う場合、深度マップやHDRなどの先進機能は利用できない
HEICにおける深度マップ確認の事例
- ドイツ・ハンブルクの映像制作会社ReplayboysのVFX責任者 Finn Jaegerが、iPhoneで生成された複数の深度マップのスクリーンショットとプロジェクトの進行状況を共有した
- Finn JaegerのHEIC Shenanigansプロジェクトは、HEICコンテナから個別の画像とメタデータを抽出し、EXRファイルへ変換するPythonスクリプト(374行)を提供している
開発環境情報
- 使用されたワークステーションは、Ryzen 9 9950X 16コアCPU、96GB DDR5 RAM、4TB NVMe SSD、ASRock X870E Nova 90マザーボード、Windows 11 Pro環境上のUbuntu 24 LTS(WLS2)で実行されている
- Nvidia GTX 1080の使用などからWindowsがメイン環境であり、一部ソフトウェアの互換性上の理由で選ばれている
主なツールとライブラリの準備
- Python 3.12.3環境と、その他のCLI、画像変換・処理ライブラリのインストールが必要
- exiftoolはHEIC対応で重要な役割を果たし、最新版ではより多くの機能やバグ修正が含まれる可能性がある
- jc(JSON Convert)はCLIの出力結果をJSONに変換し、パイプラインでの活用性を高める
- HEIC Shenanigansのリポジトリをクローンし、Python仮想環境で依存関係をインストールする
- 最終的なEXR画像はDJVビューアで確認できる
変換デモとサンプル画像
- ArcGIS製品群の専門家であるJoel Josephが、インド・ムンバイでiPhone 15 Proを使って撮影したHEIC画像サンプルを活用している
HEIC → EXR変換とワークフロー
- Academy Software Foundationは、映画/TV/デジタルポストプロダクションで使われるオープンソースプロジェクトと標準を主導している
- 所属プロジェクトのひとつであるOpenEXRは、ILM主導で1999年に開発された高ダイナミックレンジ(HDR)画像形式で、2003年にオープンソース化され、視覚効果や3Dレンダリングなどで活用されている
EXR変換の具体的な手順
- heic_shenanigansのheic_to_exr.pyスクリプトを使って、入力HEIC画像をEXRファイルへ変換する
- 変換結果のEXRは468MBの容量があり、多様な画像・マップ情報を1つのファイルに含む
oiiotoolスクリプトの活用
- 画像サイズを抽出
- sRGB画像をLinear P3 → ACEScgへ色空間とガンマ変換する
- OpenColorIO(OCIO)設定ファイルを活用し、カラープロファイルやカラースペース変換などを行う
- HDR Gain MapをRec709からLinearへ変換し、Yチャンネル → RGBへ拡張する
- Gain Mapのheadroom値を抽出し、逆数スケールを適用する
- HDRベース画像はGain Mapとの乗算処理によって生成される
- 深度マップ(Depth Map) のYチャンネルを抽出し、EXR形式で保存する
- 最終段階で生成された各チャンネル(RGB、SDR、Gain Map、Depth Map)を、EXRファイル内部の別個のチャンネルとして追加する
EXR内部のチャンネル構成
- EXRには以下のような情報がチャンネルごとに保存される
- HDRベース画像のRGB
- SDRチャンネル(別保存)
- Gain Map
- Depth Map
- マット(Matte)レイヤーがある場合は追加で含めることもできる
活用と参考事項
- このプロセスにより、iPhone 15 Proで撮影した画像の深度・HDRなどの複合情報を専門形式(EXR)に分離して活用できる
- 機械学習、3Dレンダリング、映画・VFXなど、さまざまなデータパイプラインでiPhone撮影画像を効率的に活用できる可能性を示している
1件のコメント
Hacker Newsのコメント
他の方も触れているように、iPhoneのLIDARは深度マップの主要なデータソースとして使うには解像度が低すぎる点を強調したい。実際、iPhoneはモデルや使用するカメラによって、およそ4種類の深度データ抽出方式を使っている。もともとはポートレートモード写真でのみ適用されていたが、最近のiPhoneは通常の写真でも深度マップを記録する。
記事に出てくる人物の切り分けや、眼鏡・髪の毛・肌などを認識するための補助画像(Portrait Effects Matte)は、機械学習の出力結果。
私もポートレートの深度マップとマット画像を活用してクリエイティブなフィルターアプリを作ってみたことがあるが、今はなくなってしまったものの、本当に楽しい経験だった。深度マップを使った芸術的なアイデアは無限にある。
最近のiPhoneでは、被写体(人物またはペット)が認識されると、メインの写真モードでも自動で深度マップが記録される。以前、深度マップとPortrait Effects Matteを使ったクリエイティブなフィルターアプリを開発した経験があるのだが、そのアプリ名や関連動画を見られるか気になる。
ちなみに、Matte Viewerというユーティリティツールを作ったことがあり、これは単にマットと深度マップを見るためのもの(Matte Viewerアプリ)
LIDARはフル解像度の深度マップ生成のためというより、オートフォーカス(AF)や低照度環境での高速フォーカシング向けに最適化されたハードウェアであることを強調したい
3つ目の方式は5年前の話なので、最近の機械学習ベースの深度推定に関するオープンソース(ml-depth-pro)を参照することを勧めたい
4つ目のTrueDepth方式が、セキュリティアプリでのliveness(実在人物判定)検出に使えるのかも気になる
とても興味深い記事だった。こうした深度マップのデータが、結局は背景ぼかし(被写界深度、いわゆる faux bokeh)を実現するために使われているのが印象的。
写真を撮ったあとでもフォーカスや被写界深度の範囲、つまり絞りを後から調整できるのは本当に不思議だが、人工的なボケはあまり好きではない。偽物っぽく見えて、Photoshopの結果よりも劣るように感じる。
それと、記事内のファイルフォーマットの誤記(HEICが14件、HIECが3件)もいくつか目についた
ファイルフォーマットの誤記を指摘してくれてありがとう、修正したとだけ簡単に伝えたい
人工ボケが不自然な理由は、光学や絞りの数学を正確に反映できておらず、製品としてはユーザーの80%を満足させる程度の近似で実装しているからだと思う。正しい絞りの数学を適用して、より良いカメラアプリを作れる気はするが、消費者が違いを見抜いてわざわざお金を払うかは疑問
深度マップとセマンティックセグメンテーションマップは、見ているだけでも楽しく、TouchDesigner、Blender、Cinema 4Dなどのアプリに読み込めば、写真にさまざまな深度効果を適用できる。
実際、Appleも写真の後処理(補正など)にこれらのデータを活用している。
以前はポートレートモードでしかキャプチャされなかったが、最近では被写体(人物、ペット)を検知すると通常撮影でも自動記録される。
私も写真アプリやツールの開発者だが、自作のMatte Viewerは深度マップとポートレートマット画像の確認および書き出しに特化している(Heliographeツール情報、Matte Viewerアプリ)
いつか、すべてのスマートフォンが高価なセンサーなしでもGaussian splattingベースの3D画像を標準サポートする日が来ることを期待している。計算量は大きいが、センサー追加のコストと重量を避けられるという点で、より実用的だと思う
何か見落としているのかもしれないが、記事でHDRゲインマップの話をかなり長く扱っているのが、深度マップとどう関係しているのか気になる。
私はiPhoneのHDRディスプレイ(自動明るさの過剰調整)が嫌いなので、自分の写真では手動でHDRゲインマップを削除している。
以前のHDRは、露出の異なる3枚の写真を合成して足りない部分だけを補正するもので、出力結果に「HDR」という具体的な属性を持たせていなかった点のほうが良かった
ちなみに、iPhoneの写真設定で「画面HDR輝度を強調」をオフにできるという情報を追加
私も記事を読みながら同じことを思った。深度マップの概要は良かったが、中盤以降はHDRゲインマップが中心になって少し話が散漫になった印象。全体としては良かったものの、スレッドの流れがやや雑然としているように感じた
LIDARは実際には、記事で示された深度マップよりはるかに解像度が低い。
実際の深度マップはLIDARとカメラデータを組み合わせて合成している
Appleが「ステッカー作成」機能(写真の被写体を長押ししてステッカー抽出、または別の写真にコピー適用)にこの技術を応用しているのかも気になる
深度マップを使ってステレオグラムやSIRDS(Single Image Random Dot Stereograms)を生成できるのか気になる。昔、グレースケール画像でステレオグラムを作っていた思い出がある
EXIF情報から画角情報をマッピングして、元のシーンの物理サイズに合わせてVR内でスケールを調整してくれる。
個人的には、この機能ひとつだけでも$4000を出してVision Proを買った価値は十分あった。昔のNikon D7で撮った写真を、VRで正しいサイズと3Dで見る体験はとても深いノスタルジーを呼び起こす。
AppleがこれをVision Proの中核機能として強く打ち出していないのは残念。本当にすごい機能だ
iOS向けReality ComposerはLIDAR対応機種でしかオブジェクトキャプチャができず、LIDAR非搭載機ではphotogrammetry(合成3D再構成)のバックアップ機能がない。3D作業をしようとして残念だった経験を共有
3Dスキャン作業ではHegesアプリが最もうまくいった。LIDARは車のような大きな物体に効果的で、Face IDの深度カメラは小さなオブジェクトに有用。
Creality Ferret SEスキャナー(TikTokで約$100で購入)を使って小型3Dスキャンを試したが、期待以上に素晴らしかった
PolycamはLIDAR非対応機種ではphotogrammetryで代替動作する。
Canvas(別途LIDAR必要)、Scaniverse(LIDARは任意)も勧められたことがある
このタイトルを見るたびに、頭の中で ‘death maps’ と読んでしまう錯覚があって妙に面白い