2 poin oleh GN⁺ 2025-06-06 | 1 komentar | Bagikan ke WhatsApp
  • Sejak 2017, iPhone telah menyimpan Depth Map bersama gambar yang diambil melalui LiDAR, 3D time-of-flight, dan pemindaian 3D structured-light, dan data ini juga dapat diekstrak dari file HEIC iPhone 15 Pro
  • Kontainer HEIC/HEIF dapat memuat bukan hanya gambar asli, tetapi juga HDR gain map, Depth Map, dan metadata dalam jumlah besar, sehingga menyimpan lebih banyak informasi untuk dianalisis dibanding JPEG sederhana
  • HEIC Shenanigans dari Finn Jaeger adalah kumpulan skrip Python untuk memisahkan gambar dan metadata di dalam HEIC serta mengonversinya ke EXR; pada saat penulisan, ukurannya 374 baris
  • Dari contoh HEIC berukuran 1,57MB dihasilkan base TIFF 71MB, HDR gain map TIFF 5,9MB, depth TIFF 433KB, dan metadata JSON 14KB; resolusi Depth Map adalah 768×576, lebih rendah dari gambar asli 5712×4284
  • Konversi OpenEXR menggabungkan kanal SDR, HDR gain map, dan Depth Map melalui OpenImageIO, OpenColorIO, serta konfigurasi ACES, dan file EXR akhir membesar hingga 468MB

Cara penyimpanan Depth Map di dalam foto iPhone

  • Sejak 2017, Apple mendukung Depth Map pada gambar yang diambil dengan iPhone
  • Depth Map dan gambar lain disimpan bersama dalam file kontainer HEIF
    • HEIF dapat memuat banyak gambar dan banyak metadata
    • Format ini dirancang pada 2013–2015, dan Apple mengadopsi varian HEIC pada 2017
  • Sejak itu, gambar yang diambil dengan iPhone secara default disimpan dalam kontainer HEIC
    • Jika Depth Map dan HDR tidak diperlukan, format JPEG juga dapat digunakan

Memisahkan gambar internal dengan HEIC Shenanigans

  • Finn Jaeger memublikasikan tangkapan layar yang menunjukkan iPhone menghasilkan beberapa Depth Map
  • HEIC Shenanigans menyediakan skrip untuk memisahkan gambar dan metadata dari kontainer HEIC serta mengonversinya menjadi file EXR
    • Pada saat penulisan, proyek ini memiliki 374 baris kode Python
  • Contohnya menggunakan gambar HEIC yang diambil dengan iPhone 15 Pro untuk mengikuti codebase Finn

Lingkungan eksekusi dan alat yang perlu disiapkan

  • Untuk menjalankannya diperlukan Python 3.12.3 dan beberapa alat CLI
    • jq
    • openexr
    • libimage-exiftool-perl
    • libopenexr-dev
    • python3-pip
    • python3.12-venv
  • Paket libimage-exiftool-perl memasang exiftool 12.76+dfsg-1
    • Versi ini dirilis pada akhir Januari 2024
    • Setelah itu, ada setidaknya 10 rilis yang mencakup perbaikan atau peningkatan untuk masalah dukungan HEIC
    • Versi tersebut sudah cukup untuk langkah-langkah contoh, tetapi jika masalah muncul kemudian, mungkin sudah diselesaikan di exiftool terbaru
  • JSON Convert jc digunakan untuk mengubah output berbagai alat CLI menjadi JSON
  • Gambar EXR diperiksa dengan DJV v2.0.8

Mengekstrak Gain Map dan Depth Map dari HEIC

  • Ukuran file HEIC contoh adalah 1,57MB
  • Menjalankan gain_map_extract.py menghasilkan file-file berikut
    • IMG_E2153_metadata.json: 14KB
    • IMG_E2153_depth_0.tiff: 433KB
    • IMG_E2153_hdrgainmap_48.tiff: 5,9MB
    • IMG_E2153_base.tiff: 71MB
  • Metadata EXIF pada base TIFF memiliki karakteristik berikut
    • Format file: TIFF
    • Kompresi: Uncompressed
    • Warna: RGB
    • Ukuran gambar: 5712×4284
    • Megapiksel: 24,5
    • Bits Per Sample: 8 8 8
  • HDR Gain Map dan Depth Map memiliki resolusi lebih rendah daripada gambar asli
    • Gambar asli: 5712×4284
    • HDR Gain Map: 2856×2142
    • Depth Map: 768×576
  • Metadata JSON mencakup aux, nclx_profile, primary, xmp, dan lainnya
    • Item urn:com:apple:photo:2020:aux:hdrgainmap memiliki nilai [48]
    • Ukuran primary ditampilkan sebagai [5712, 4284]
  • Tiga issue GitHub telah didaftarkan untuk meminta nilai yang dienkode base64 didekode ke bentuk yang bisa dibaca manusia

Alur konversi HEIC ke OpenEXR

  • Academy Software Foundation mensponsori proyek dan standar open source yang digunakan di industri film, TV, dan kreatif
    • Anggotanya mencakup Academy of Motion Picture Arts and Sciences, Disney, Nvidia, Netflix, dan lainnya
  • OpenEXR adalah format file gambar HDR
    • Pertama kali dikembangkan oleh Industrial Light and Magic pada 1999
    • Dirilis sebagai open source pada 2003
    • Digunakan dalam produksi efek visual dan rendering 3D
  • Menjalankan heic_to_exr.py mengonversi gambar HEIC iPhone 15 Pro menjadi file OpenEXR
    • Ukuran file hasilnya adalah 468MB
  • Skrip konversi memanggil oiiotool, alat pemrosesan gambar dari OpenImageIO, beberapa kali

Komposisi kanal pada tahap pembuatan EXR

  • Pertama, ukuran gambar sumber diperiksa dengan oiiotool --info
  • Gambar base memberi nama kanal RGB sebagai sdr.R, sdr.G, sdr.B dan mengonversi ruang warna
    • Dari kurva sRGB melalui Linear Rec.709
    • Dari Linear P3-D65 dikonversi ke ACEScg
  • File konfigurasi OpenColorIO digunakan untuk konversi warna
    • File OCIO yang digunakan adalah studio-config-v1.0.0_aces-v1.3_ocio-v2.1.ocio
    • File tersebut berbasis teks dan terdiri dari 1.242 baris
    • Deskripsinya mencakup Academy Color Encoding System - Studio Config [COLORSPACES v1.0.0] [ACES v1.3] [OCIO v2.1]
  • HDR gain map dibuat sebagai EXR menggunakan kanal Y dari TIFF
    • Diberi nama kanal gainmap.Y
    • Ukurannya diubah menjadi 4032×3024
    • Dikonversi dari kurva Rec.709 ke Linear
  • Gain map diubah menjadi RGB dengan menggandakan kanal Y tiga kali
    • gainmap.R
    • gainmap.G
    • gainmap.B
  • Setelah nilai HDRGainMapHeadroom diekstrak dengan exiftool, gain map diskalakan menggunakan kebalikan dari nilai headroom tersebut
  • Gambar HDR base dibuat dengan mengalikan gambar base dan gain map yang telah diskalakan
  • Depth Map membuat kanal depth.Y dalam format EXR dari kanal Y TIFF
    • Ukurannya diubah menjadi 4032×3024
  • File EXR akhir disusun dengan menambahkan beberapa kanal secara berurutan
    • R, G, B dari HDR base
    • sdr.R, sdr.G, sdr.B dari SDR base
    • gainmap.R, gainmap.G, gainmap.B dari gain map
    • depth.Y dari Depth Map
  • Jika gambar sumber memiliki matte, layer matte juga diproses dan ditambahkan pada tahap tersebut
  • File akhir final.exr dipindahkan ke samping gambar sumber dengan nama <prefix>_acesCG.exr

1 komentar

 
GN⁺ 2025-06-06
Opini Hacker News
  • Seperti yang ditunjukkan komentar lain dengan tepat, resolusi LIDAR terlalu rendah untuk dipakai sebagai data utama peta kedalaman.
    Setahu saya, iPhone memperoleh data kedalaman kira-kira lewat empat cara, tergantung model dan kameranya. Dulu peta kedalaman seperti ini hanya disimpan dalam mode Potret, tetapi iPhone terbaru tampaknya juga menyimpannya pada foto biasa.

    1. Mulai iPhone 7 Plus, dua kamera belakang memotret secara bersamaan dan membuat peta kedalaman dari paralaks, seperti penglihatan manusia. Secara alami dibatasi oleh sudut pandang lensa yang lebih sempit.
    2. Model yang hanya punya satu kamera belakang, seperti iPhone XR, memperkirakan kedalaman secara kasar dari piksel fokus pada sensor, lalu memperbaiki data mentah beresolusi rendah dan tidak akurat itu dengan machine learning: https://www.lux.camera/iphone-xr-a-deep-dive-into-depth/
    3. Pada iPhone SE yang bahkan tidak memiliki piksel fokus, peta kedalaman dibuat hanya dengan machine learning, korelasinya dengan kenyataan paling rendah, sehingga bahkan bisa tertipu oleh foto dari sebuah foto: https://www.lux.camera/iphone-se-the-one-eyed-king/
    4. Selfie pada iPhone dengan FaceID membuat peta kedalaman dari pemindaian 3D kamera TrueDepth. Pada selfie di artikel itu juga terlihat lebih buram dan seperti beresolusi rendah.
      Gambar bantu di artikel yang menandai orang, kacamata, rambut, dan kulit dengan warna putih disebut Apple sebagai portrait effects mattes, dan dibuat dengan machine learning.
      Dulu saya pernah membuat aplikasi yang memakai peta kedalaman dan portrait effects mattes dari foto Potret untuk membuat filter kreatif, dan itu cukup menyenangkan, tetapi sekarang sudah ditarik. Ada banyak kemungkinan artistik baru dalam peta kedalaman.
    • iPhone terbaru menyimpan peta kedalaman bahkan di mode foto default jika ada orang atau hewan peliharaan dalam adegan.
      Saya penasaran apa nama aplikasi itu dan apakah masih ada videonya. Saya juga membuat alat kecil bernama Matte Viewer sebagai bagian dari rangkaian alat foto; tidak ada efek, hanya mendukung melihat dan mengekspor: https://apps.apple.com/us/app/matte-viewer/id6476831058
    • https://lookingglassfactory.com adalah bingkai gambar holografik yang dapat menampilkan foto iPhone yang berisi peta kedalaman sebagai 3D sungguhan.
    • Artikel tentang metode nomor 3 itu adalah materi dari 5 tahun lalu, jadi sekarang perlu juga melihat ml-depth-pro milik Apple: https://github.com/apple/ml-depth-pro?tab=readme-ov-file
    • LIDAR terutama dioptimalkan untuk autofokus cepat dan pemfokusan dalam cahaya rendah, bukan untuk membuat peta kedalaman resolusi penuh.
    • Saya penasaran apakah metode nomor 4 bisa dipakai untuk deteksi keberadaan makhluk hidup pada aplikasi keamanan.
  • Artikel yang menarik. Peta kedalaman seperti ini tampaknya dipakai untuk blur latar depth of field pada mode “Potret”, alias bokeh palsu.
    Saya selalu menganggap menarik bahwa setelah mengambil foto pun kita bisa mengubah fokus dan mengatur depth of field dengan “aperture”, tetapi bentuk bokeh palsu itu kurang bagus. Selalu terlihat seperti Photoshop yang kasar.
    Sepertinya ada salah ketik dalam penulisan format file: “HEIC” 14 kali, “HIEC” 3 kali.

    • Alasan terlihat palsu tampaknya karena optik dan matematika aperture yang sebenarnya diimplementasikan secara keliru, dan dari sudut pandang produk mereka memakai aproksimasi yang sangat buruk tetapi cukup untuk memuaskan 80% orang.
      Rasanya bisa dibuat aplikasi kamera yang lebih baik dengan matematika aperture yang benar, tetapi saya penasaran apakah orang mau membayar untuk itu, atau apakah pengguna ponsel tidak merasakan perbedaannya dan tidak peduli.
    • Salah ketiknya sudah diperbaiki.
    • Dari sudut pandang fotografer, bokeh palsu sulit ditoleransi. Sama sekali berbeda dari bokeh yang dihasilkan lensa bagus dan sangat tidak alami, jadi mengejutkan bahwa orang menganggapnya cantik.
      Jika ingin foto potret yang indah, membeli atau meminjam DSLR murah akan memberi hasil 100 kali lebih baik.
  • Reality Composer untuk iOS punya fitur khusus untuk menangkap objek dengan LIDAR.
    Saya kecewa saat mengetahui bahwa pada perangkat Apple tanpa LIDAR, fitur itu tidak digantikan dengan fotogrametri. Ini bisa menjadi referensi bagi orang seperti saya yang ingin mengerjakan pemodelan 3D atau fotogrametri.

    • Untuk pemindaian 3D, saya paling berhasil dengan Heges. LiDAR cukup cocok untuk objek besar seperti mobil, dan kamera kedalaman Face ID juga bisa menangkap objek kecil.
      Untuk memindai objek kecil, saya membeli Creality Ferret SE di TikTok seharga sekitar 100 dolar, dan hasilnya sangat bagus.
    • Polycam punya jalur alternatif.
      Saya juga mendengar ulasan bagus bahwa Canvas membutuhkan LiDAR, sedangkan Scaniverse menjadikan LiDAR opsional.
  • Peta kedalaman dan peta semantik cukup menyenangkan untuk dilihat, dan jika dimasukkan ke program seperti TouchDesigner, Blender, atau Cinema 4D, kita bisa membuat efek kedalaman yang keren dari foto.
    Ini juga bisa dipakai untuk pemrosesan foto, dan pada akhirnya Apple juga menggunakannya untuk tujuan semacam itu.
    Dulu data ini hanya disimpan dalam mode Potret, tetapi iPhone terbaru hampir otomatis menyimpannya jika orang atau hewan peliharaan terdeteksi dalam adegan.
    Saya sedang membuat aplikasi dan alat foto (https://heliographe.net), dan salah satunya, Matte Viewer, adalah alat untuk melihat dan mengekspor data seperti ini: https://apps.apple.com/us/app/matte-viewer/id6476831058

  • Resolusi LIDAR itu sendiri jauh lebih rendah daripada peta kedalaman yang ditampilkan dalam artikel. Itu harus dibuat dengan menggabungkan data LIDAR dan kamera biasa.

    • Saya juga mengira LIDAR dipakai untuk pemfokusan sebenarnya, sementara peta kedalaman dihitung dari paralaks beberapa kamera.
  • Artikel ini membahas HDR gain map cukup panjang, tetapi saya kurang paham apa kaitannya dengan depth map
    Saya penasaran apakah pemrosesan terkait HDR gain map bisa dilewati sambil tetap mempertahankan depth map
    Secara pribadi saya tidak suka tampilan HDR di iPhone. Karena itu menaikkan kecerahan layar melebihi batas maksimum yang ditetapkan pengguna. Di foto saya, saya berusaha menghapus HDR gain map
    HDR lama berarti mengambil tiga foto lalu menggabungkannya sambil menghilangkan bagian yang underexposed dan overexposed, dan gambar hasilnya tidak membawa informasi terpisah bahwa dirinya HDR

    • Saya juga berpikir hal yang sama saat membaca artikelnya, dan sempat merasa mungkin ada yang saya lewatkan. Ikhtisar depth map-nya bagus, tetapi makin ke belakang sebagian besar membahas gain map dan berbagai format file, jadi terasa agak tidak fokus
    • Di pengaturan Photos, tampilan HDR yang ditingkatkan untuk layar bisa dimatikan
  • Saya penasaran apakah depth map bisa dipakai untuk membuat stereogram atau SIRDS. Saya ingat dulu pernah membuat stereogram dari gambar grayscale yang sangat mirip

    • Itu sudah bisa. Hanya saja UI ini sepertinya hanya ada di Photos app versi visionOS
      Jika foto di album memiliki depth map, atau resolusinya cukup tinggi sehingga pendekatan machine learning bisa cukup baik, foto itu bisa dikonversi ke “Spatial Format”
      EXIF juga dibaca untuk “menskalakan” ukuran fisik gambar sesuai sudut pandang pengambilan aslinya. Jadi foto wide-angle terlihat jauh lebih besar secara fisik di ruang VR dibandingkan foto telephoto
      Bagi saya pribadi, tombol dan fitur ini saja sudah membenarkan 4.000 dolar yang saya keluarkan untuk perangkat itu. Melihat foto yang saya ambil dengan Nikon D7 pada 2007 dalam 3D penuh dan skala yang benar membuat nostalgia dan ingatan lama yang sudah terlupakan muncul kembali, cukup emosional
      Apple keliru karena tidak menjadikan ini sebagai nilai jual utama Vision Pro. Ini benar-benar luar biasa
  • Saya penasaran apakah Apple memakai ini untuk fitur “create sticker”, yaitu menekan lama subjek dalam foto untuk menjadikannya stiker atau menyalinnya ke gambar lain

    • Rasanya jelas bukan. Fitur itu bekerja pada semua gambar, apa pun sumbernya
      Informasi kedalaman pun kemungkinan besar sebenarnya tidak banyak membantu. Kalau begitu, lantai atau meja tempat subjek berada akan ikut hampir semuanya
      Ini kemungkinan adalah pendekatan segmentasi semantik yang hanya memakai machine learning
    • Karena juga bekerja pada foto yang tidak diambil dengan iPhone, kemungkinan ini adalah cara yang hanya memakai machine learning
  • Saya menunggu hari ketika semua hardware ponsel secara bawaan bisa mengambil gambar 3D dengan Gaussian splatting tanpa sensor mahal
    Biaya komputasinya mungkin besar, tetapi barangkali tetap lebih murah daripada menambahkan sensor mahal dan menambah bobot

  • Situsnya berperilaku aneh di Chrome iOS. Saat halaman digulir ke bawah, ukuran font membesar, lalu saat digulir ke atas kembali mengecil, cukup membingungkan
    Meski begitu, saya baru tahu tentang oiiotool, dan itu sangat keren