付属の Python スクリプトを使用して、Apple が公開した Depth Pro で推定したデプス情報を追加したPNG画像データを作成します。そのPNG画像を読み込み、画像を拡大したり、Looking Glass Go での見え方を調整するツールです。 Looking Glass Go では、遠くにあるものは大きくぼやけてしまいますが、このツールは奥行きを調整することができるので、元の 2D 画像に近い見え方の裸眼立体視画像(Quilt)を出力することもできます。 出力した Quilt 画像は LookingGlassStudio で読み込むことができます。
python スクリプトの実行には、別途 Depth Pro [URL] のインストールが必要です。
- Depth Pro を公式ページに記載の方法でインストール。
- 1.で Depth Pro をインストールしたフォルダ内に、Unity Editor でビルドして作られたすべてのファイルやフォルダをコピー。1
- Looking Glass Go で裸眼立体視したい画像を
input
フォルダに入れる。 - ターミナル上で
python depth-pro_rgbde.py
と入力してスクリプトを実行。output
フォルダに左半分が元画像で右半分がほぼ透明2 の PNG ファイルが生成されます。 - Looking Glass Bridge [URL] を実行し常駐させます。
- スクリプトで出力した画像をアプリで読み込むと Looking Glass Go に立体画像が表示されます。
- アプリでズームや奥行きを調整し、F1 キーを押し、Quilt 画像を保存。
- メッシュの解像度を選択します。解像度を細かくすると動作が重くなります。なお、画像を読み込んだ後はこの選択肢を変更しても解像度は変更されません。また、メッシュを細かくしても Looking Glass Go で見る画質はほとんど違わないように見えます。
- "LOAD RGBDE" ボタンを押すと表示されるファイラー(UnityStandaloneFileBrowser)で読み込む画像を選択します。
- マウスの左ドラッグで移動、ホイールでズーム、右クリックで初期状態になります。
- 各スライダーの関係は下の図のとおりです。なお、2つの "Camera Position" スライダーは Looking Glass Go 上の合焦する奥行きの調整に使用します。
- F1 キーを押すと
Recordings
フォルダに Quilt 画像が保存されます。Quilt 画像は LookingGlassStudio で読み込むことができます。なお、画像にメタデータは入っていないので、手動で横11 x 縦6を指定します。 - QUIT ボタンでアプリを終了します。
- ソースファイルの内容を任意のフォルダに入れ、Unity Hub の Add project from disk で当該フォルダを指定してプロジェクトを追加します。
- 外部パッケージが含まれていないので途中でコンパイルエラーが出ますが、
Ignore
を選択します。 - Unity Editor が自動的に追加したカメラとライトを削除します。
- Looking Glass Unity Plugin パッケージ [URL] と UnityStandaloneFileBrowser の Unity パッケージ [URL] をダウンロードし、プロジェクトに追加(
import package -> custom package
)します。これでエラーは解消されます。 Assets > Scenes
にあるSampleScene
を Hierarchy にドロップします。- 追加した "Sample Scene" 以外のシーンが Hierarchy にある場合は、Unity Editor が自動で追加したものなので削除してください。
- このアプリを実行する前に Looking Glass Bridge [URL] を実行して常駐させてください。
- CTRL + E で Looking Glass Go の画面出力がアクティベートされます。
- Unity Editor 内で実行した場合、F1 キーを押すとエラーで中断しますが、Quilt 画像は正しく生成されます。アプリの実行を再開して引き続き使用することもできます。なお、Quilt 画像は Hologram Camera 内の
QuiltCapture.cs
のインスペクタから生成することもできます(むしろこれが正しい Quilt 画像作成方法です)。 - Unity Editor でビルドした実行ファイルは、動作速度が改善します。
Q: 通常の RGBD 画像との違いは何ですか。
A: 通常、RGBD 画像は、元画像の右側に255階調のデプス情報を保持します。Depth Pro 付属の run.py
では、0.1m から 250m までのデプス情報の逆数で各ピクセルのデプスを正規化し、0 から 255 までのデプスを割り当てています。この方法では、近くにある被写体のデプス情報の解像度は高いですが、例えば地面、壁、草、偶然映り込んだ小さな物体などが手前にあり、奥にメインの被写体があるような画像の場合、メインの被写体のデプス情報の階調が低くなり、凹凸の少ない出力となってしまいます(下の図を参照)。一方、このツールのスクリプトでは、元の float のデプス情報を1万倍して uint32
で保持しており、メインの被写体にズームしてもデプスの情報が元の推定どおり維持されることから立体感が損なわれません。
Q: Python スクリプトの出力画像のサイズが大きいです。圧縮してもデプス情報は維持されますか。
A: 非圧縮で出力しているため、サイズが大きいです。試しに GIMP で "Save color values from transparent pixels" にチェックを入れ、右半分にデプス推定結果が付いた出力画像を圧縮レベル 9 でPNG形式で保存し、このアプリで読み込んでみました。どのようなデプス情報が保持されているかは未確認ですが、デプスの相互関係が大きく破綻する様子は観られませんでした。圧縮した画像を使用するとアプリの動作が軽くなりますが、画質は低下します。
恥ずかしながら PNG の圧縮がロスレスだということを先程知りましたので、python depth-pro_rgbde.py
で圧縮レベル 9 で出力するように修正しました。
The following is an automatic translation by ChatGPT and is a provisional translation.
First, use the included Python script to create PNG image data by adding depth information—estimated by Apple's published Depth Pro—to the original image. This tool allows you to load that PNG image, enlarge it, and adjust how it appears on Looking Glass Go.
In Looking Glass Go, objects that are far away tend to appear significantly blurred. However, since this tool allows you to adjust the depth, you can output a naked-eye stereoscopic image (Quilt) that looks closer to the original 2D image.
The output Quilt image can be loaded into Looking Glass Studio.
To run the Python script, you need to install Depth Pro separately. [URL]
- Install Depth Pro according to the method described on the official page.
- Copy all files and folders generated by building with Unity Editor into the folder where Depth Pro was installed in step 1.3
- Place the image you want to view in naked-eye stereoscopic mode on Looking Glass Go into the
input
folder. - Run the script by typing
python depth-pro_rgbde.py
in the terminal. A PNG file will be generated in theoutput
folder, where the left half is the original image and the right half is almost transparent.4 - Run Looking Glass Bridge [URL].
- When you load the images output by the script into the application, 3D images will be displayed on the Looking Glass Go..
- Adjust zoom and depth in the app, press the F1 key, and save the Quilt image.
- Select Mesh Resolution: Increasing the resolution will make the operation heavier. Note that changing this option after loading the image will not alter the resolution. Also, even if you increase the mesh resolution, the image quality when viewed on Looking Glass Go does not seem to differ much.
- Load Image: Press the "LOAD RGBDE" button and select the image to load in the file browser (UnityStandaloneFileBrowser) that appears.
- Navigation Controls: Left-drag with the mouse to move, scroll the wheel to zoom, right-click to return to the initial state.
- Sliders: The relationship of each slider is as shown in the figure below. Note that the two "Camera Position" sliders are used to adjust the depth at which focus is achieved on Looking Glass Go.
- Save Quilt Image: Press the F1 key to save the Quilt image in the
Recordings
folder. The Quilt image can be loaded into Looking Glass Studio.Note that metadata is not included in the image, so you need to manually specify 11 horizontal x 6 vertical tiles. - Exit App: Use the QUIT button to exit the app.
- Place the contents of the source files into any folder and add the project by specifying that folder in Unity Hub with Add project from disk.
- Since external packages are not included, a compile error will occur during the process; select Ignore.
- Delete the camera and light that Unity Editor automatically adds.
- Download and add (via Import Package -> Custom Package) the Looking Glass Unity Plugin package [URL] and the UnityStandaloneFileBrowser Unity package [URL] to the project. This will resolve the errors.
- Drag
SampleScene
located inAssets > Scenes
into the Hierarchy panel. - If there are scenes other than the added "SampleScene" in the Hierarchy, delete them as they were automatically added by Unity Editor.
- Before running this app, run Looking Glass Bridge [URL].
- Press CTRL + E to activate the screen output of Looking Glass Go.
- When running within Unity Editor, pressing the F1 key will cause an error and interrupt execution, but the Quilt image will be correctly generated. You can resume app execution and continue using it. Note that you can also generate Quilt images from the inspector of
QuiltCapture.cs
inside the Hologram Camera (this is actually the correct way to create Quilt images). - Executable files built with Unity Editor will improve performance when running the application.
Q: What is the difference from a normal RGBD image?
A: Normally, an RGBD image retains 255-level depth information on the right side of the original image. In run.py
included with Depth Pro, the inverse of depth information from 0.1m to 250m is normalized for each pixel, and depths from 0 to 255 are assigned. In this method, the depth resolution of close objects is high, but in images where, for example, the ground, walls, grass, or small objects accidentally captured are in the foreground and the main subject is in the background, the depth gradation of the main subject becomes low. This results in an output with less depth detail (see the figure below). On the other hand, in the script of this tool, the original float depth information is multiplied by 10,000 and stored as uint32
. Therefore, even if you zoom in on the main subject, the depth information is maintained as originally estimated, preserving the stereoscopic effect.
Q: The output imaze size of the Python script is large. Will the depth information be preserved if compressed?
A: The large size is due to the output being uncompressed. I tested by saving the output image with depth estimation results on the right half in PNG format with compression level 9 using GIMP, checking the "Save color values from transparent pixels" option. I then loaded the image into this app. While I haven't confirmed how the depth information is retained, there was no significant distortion in the relative depth relationships. Using the compressed image makes the app run more smoothly, but the image quality deteriorates.
Embarrassingly, I just learned that PNG compression is lossless, so I modified the script python depth-pro_rgbde.py
to output with compression level 9.
Footnotes
-
アプリは任意の場所に置いて実行することができますが、その場合は
depth-pro_rgbde.py
は Depth Pro のフォルダに入れてスクリプトを実行します。またinput
、output
フォルダも作成してください。 ↩ -
Depth Pro の推定デプスの最大値は 10,000m です。このデプス情報を 10,000 倍した値を uint32 にして、8 ビットずつリトルエンディアンで RGBA に保存していますので、アルファチャンネルの値は 5 以内に収まります。このため右側はほぼ透明の画像となっています。 ↩
-
The app can be placed and run from any location, but in that case, place
depth-pro_rgbde.py
in the Depth Pro folder and run the script. Also, please createinput
andoutput
folders. ↩ -
The maximum depth estimated by Depth Pro is 10,000 meters. This depth information is multiplied by 10,000, converted to
uint32
, and saved in RGBA as 8-bit little-endian values. Therefore, the alpha channel values are within 5, making the right side an almost transparent image. ↩