2 điểm bởi GN⁺ 2025-06-06 | 1 bình luận | Chia sẻ qua WhatsApp
  • iPhone 15 Pro mặc định lưu ảnh ở định dạng HEIC có bao gồm bản đồ độ sâu
  • Tệp HEIC lưu cùng lúc nhiều hình ảnh và lượng metadata rất lớn; nếu chọn JPEG thì sẽ không có bản đồ độ sâu, HDR, v.v.
  • Dự án mã nguồn mở HEIC Shenanigans cho phép trích xuất hình ảnh và metadata từ tệp HEIC rồi chuyển đổi sang định dạng EXR
  • Quá trình chuyển đổi tận dụng nhiều tiêu chuẩn và công cụ được ngành phim/TV sử dụng như OpenEXR, OpenImageIO, OpenColorIO
  • Kết quả là có thể tách và khai thác thông tin HDR, SDR, Gain Map, Depth Map của ảnh chụp từ iPhone 15 Pro dưới định dạng EXR

Bối cảnh hỗ trợ bản đồ độ sâu trên iPhone 15 Pro

  • Từ năm 2017, Apple đã dùng máy quét LiDAR, 3D Time-of-Flight, quét Structured-Light trên iPhone của mình để đưa thông tin bản đồ độ sâu vào ảnh từ camera
  • Các bản đồ độ sâu, metadata và nhiều phiên bản hình ảnh này được lưu trong định dạng HEIF (HEIC)
  • HEIC là định dạng lưu ảnh hiệu quả và đã được chọn làm định dạng ảnh mặc định trên iPhone từ năm 2017
  • Nếu dùng định dạng JPEG thì không thể sử dụng các tính năng nâng cao như bản đồ độ sâu và HDR

Ví dụ kiểm tra bản đồ độ sâu trong HEIC

  • Finn Jaeger, trưởng bộ phận VFX của công ty sản xuất phim Replayboys tại Hamburg, Đức, đã chia sẻ ảnh chụp màn hình về nhiều bản đồ độ sâu được tạo trên iPhone cùng tiến độ dự án
  • Dự án HEIC Shenanigans của Finn Jaeger cung cấp một script Python (374 dòng) để trích xuất từng hình ảnh và metadata từ container HEIC rồi chuyển thành tệp EXR

Thông tin môi trường phát triển

  • Workstation được sử dụng chạy với Ryzen 9 9950X CPU 16 nhân, 96GB DDR5 RAM, 4TB NVMe SSD, bo mạch chủ ASRock X870E Nova 90, và Ubuntu 24 LTS(WLS2) trên Windows 11 Pro
  • Windows là môi trường chính do sử dụng Nvidia GTX 1080 và được chọn thêm vì lý do tương thích với một số phần mềm

Chuẩn bị các công cụ và thư viện chính

  • Cần cài đặt môi trường Python 3.12.3 cùng các CLI và thư viện chuyển đổi/xử lý ảnh khác
  • exiftool đóng vai trò quan trọng trong hỗ trợ HEIC; dùng phiên bản mới nhất có thể bao gồm thêm tính năng và sửa lỗi
  • jc(JSON Convert) chuyển đầu ra CLI sang JSON để tăng tính hữu dụng trong pipeline
  • Clone repo HEIC Shenanigans và cài dependency trong môi trường ảo Python
  • Ảnh EXR cuối cùng có thể được kiểm tra bằng trình xem DJV

Demo chuyển đổi và ảnh mẫu

  • Sử dụng mẫu ảnh HEIC do Joel Joseph, chuyên gia bộ sản phẩm ArcGIS, chụp bằng iPhone 15 Pro tại Mumbai, Ấn Độ

Chuyển đổi HEIC → EXR và workflow

  • Academy Software Foundation dẫn dắt các dự án mã nguồn mở và tiêu chuẩn dùng trong phim/TV/hậu kỳ số
  • Trong số các dự án thuộc tổ chức này, OpenEXR là định dạng ảnh dải tương phản động cao (HDR) do ILM phát triển từ năm 1999, được mã nguồn mở vào năm 2003, và được sử dụng trong hiệu ứng hình ảnh, dựng hình 3D, v.v.

Các bước cụ thể để chuyển sang EXR

  • Dùng script heic_to_exr.py của heic_shenanigans để chuyển ảnh HEIC đầu vào thành tệp EXR
  • Kết quả chuyển đổi (EXR) có dung lượng 468MB và chứa nhiều loại thông tin ảnh/bản đồ trong một tệp duy nhất

Sử dụng script oiiotool

  • Trích xuất kích thước ảnh
  • Chuyển đổi không gian màu và gamma cho ảnh sRGB từ Linear P3 → ACEScg
  • Sử dụng tệp cấu hình OpenColorIO(OCIO) để xử lý profile màu, chuyển đổi colorspace, v.v.
  • Chuyển HDR Gain Map từ Rec709 sang Linear và mở rộng kênh Y → RGB
  • Trích xuất giá trị headroom của Gain Map và áp dụng scaling nghịch đảo
  • Ảnh nền HDR được tạo bằng phép nhân với Gain Map
  • Trích xuất kênh Y của bản đồ độ sâu (Depth Map) và lưu dưới định dạng EXR
  • Ở bước cuối, từng kênh được tạo ra (RGB, SDR, Gain Map, Depth Map) được thêm vào các kênh riêng biệt bên trong tệp EXR

Cấu trúc các kênh bên trong EXR

  • EXR lưu thông tin sau theo từng kênh
    • RGB của ảnh nền HDR
    • Kênh SDR (lưu riêng)
    • Gain Map
    • Depth Map
  • Nếu có lớp matte thì cũng có thể được thêm vào

Ứng dụng và lưu ý tham khảo

  • Quy trình này cho phép tách và khai thác thông tin tổng hợp như độ sâu, HDR từ ảnh chụp bằng iPhone 15 Pro trong định dạng chuyên dụng (EXR)
  • Nó cho thấy tiềm năng sử dụng hiệu quả ảnh chụp từ iPhone trong nhiều pipeline dữ liệu như machine learning, dựng hình 3D, điện ảnh và VFX

1 bình luận

 
GN⁺ 2025-06-06
Ý kiến trên Hacker News
  • Như người khác đã nhắc, tôi muốn nhấn mạnh rằng LIDAR trên iPhone có độ phân giải quá thấp để dùng làm nguồn dữ liệu chính cho bản đồ độ sâu. Trên thực tế, iPhone sử dụng khoảng bốn cách trích xuất dữ liệu độ sâu tùy theo mẫu máy và camera được dùng. Ban đầu chỉ áp dụng cho ảnh chế độ chân dung, nhưng các iPhone gần đây còn ghi lại bản đồ độ sâu cả với ảnh thường.

    1. Cách thứ nhất là chụp đồng thời bằng hai camera sau rồi ước tính bản đồ độ sâu bằng thị sai (parallax). iPhone 7 Plus là mẫu đầu tiên áp dụng, nhưng bị giới hạn ở góc nhìn của ống kính tiêu cự hẹp
    2. Khi chỉ có một camera như trên iPhone XR, máy dùng các pixel lấy nét trên cảm biến để ước lượng độ sâu tương đối, rồi hiệu chỉnh bằng machine learning (bài liên quan)
    3. Trên các máy như iPhone SE thậm chí không có cả pixel lấy nét, máy chỉ dự đoán bản đồ độ sâu bằng machine learning, nhưng kết quả ít liên quan đến thực tế nhất. Chỉ cần chụp lại một bức ảnh cũng có thể đánh lừa nó (bài liên quan)
    4. Ảnh selfie trên iPhone có FaceID dùng quét 3D từ camera TrueDepth, đặc trưng là độ phân giải thấp và hơi mờ
      Phần tách người, cùng các ảnh phụ để nhận diện kính, tóc, da... (portrait effect matte) được nhắc trong bài đều là đầu ra từ machine learning.
      Tôi cũng từng làm một ứng dụng filter sáng tạo tận dụng bản đồ độ sâu và ảnh matte của Portrait; giờ không còn nữa, nhưng đó thật sự là một trải nghiệm rất thú vị. Ý tưởng nghệ thuật dùng bản đồ độ sâu là vô tận.
    • Trên các iPhone gần đây, khi nhận diện được chủ thể (người hoặc thú cưng), máy sẽ tự động ghi bản đồ độ sâu ngay cả ở chế độ chụp ảnh chính. Trước đây tôi từng phát triển một ứng dụng filter sáng tạo dùng bản đồ độ sâu và portrait effect matte, nên tò mò không biết có thể xem tên ứng dụng đó và video liên quan ở đâu không.
      Tham khảo thêm, tôi từng tạo một công cụ tiện ích tên là Matte Viewer, chỉ để xem matte và bản đồ độ sâu (ứng dụng Matte Viewer)

    • Tôi muốn nhấn mạnh rằng LIDAR là phần cứng được tối ưu cho việc lấy nét tự động (AF) và lấy nét nhanh trong môi trường thiếu sáng hơn là để tạo bản đồ độ sâu full-resolution

    • Cách thứ ba là câu chuyện của 5 năm trước, nên tôi khuyên tham khảo mã nguồn mở gần đây về ước lượng độ sâu bằng machine learning (ml-depth-pro)

    • Tôi cũng tò mò liệu cách thứ tư, TrueDepth, có thể được dùng trong ứng dụng bảo mật để phát hiện liveness (phân biệt người thật) hay không

  • Bài viết thật sự rất thú vị. Tôi thấy ấn tượng khi loại dữ liệu bản đồ độ sâu này cuối cùng lại được dùng để tạo hiệu ứng làm mờ hậu cảnh (độ sâu trường ảnh, cái gọi là faux bokeh).
    Việc có thể chỉnh lại vùng lấy nét và vùng độ sâu, tức khẩu độ, sau khi chụp ảnh quả là rất lạ kỳ, nhưng cá nhân tôi lại không thích bokeh nhân tạo cho lắm. Nó trông giả đến mức còn thấy kém cả kết quả Photoshop.
    Ngoài ra tôi cũng để ý thấy vài lỗi gõ tên định dạng tệp trong bài (HEIC 14 lần, HIEC 3 lần)

    • Chỉ muốn báo ngắn gọn là tôi đã sửa các lỗi gõ định dạng tệp mà bạn chỉ ra

    • Tôi nghĩ lý do bokeh nhân tạo trông chưa ổn là vì nó không phản ánh chính xác quang học và toán học của khẩu độ, và xét từ góc độ sản phẩm thì nó được làm gần đúng ở mức đủ làm hài lòng 80% người dùng. Có lẽ hoàn toàn có thể làm ra một ứng dụng camera tốt hơn nếu áp dụng đúng toán học của khẩu độ, nhưng tôi không chắc người dùng có nhận ra khác biệt và chịu trả tiền hay không

  • Bản đồ độ sâu và semantic map chỉ nhìn thôi cũng đã thú vị, và nếu nhập vào các ứng dụng như TouchDesigner, Blender, Cinema 4D thì có thể áp nhiều hiệu ứng độ sâu khác nhau lên ảnh.
    Trên thực tế Apple cũng dùng các dữ liệu này cho hậu kỳ ảnh (chỉnh sửa ảnh v.v.).
    Trước đây chỉ chụp được ở chế độ chân dung, nhưng gần đây khi phát hiện chủ thể (người, thú cưng), máy sẽ tự động ghi lại ngay cả trong chụp ảnh thường.
    Tôi cũng là nhà phát triển ứng dụng và công cụ ảnh; Matte Viewer do tôi làm chuyên để xem và xuất bản đồ độ sâu cùng portrait matte image (thông tin công cụ Heliographe, ứng dụng Matte Viewer)

  • Tôi mong một ngày tất cả smartphone sẽ mặc định hỗ trợ ảnh 3D dựa trên Gaussian splatting mà không cần cảm biến đắt tiền. Tính toán thì nặng, nhưng xét ở chỗ tránh được chi phí và trọng lượng của cảm biến bổ sung thì tôi nghĩ nó thực tế hơn

  • Có thể tôi đã bỏ sót điều gì đó, nhưng tôi thắc mắc vì sao bài lại nói khá dài về HDR gain map và nó liên quan gì đến bản đồ độ sâu.
    Tôi ghét màn hình HDR của iPhone (tự động tăng độ sáng quá mức), nên với ảnh của mình tôi thường tự xóa HDR gain map.
    HDR ngày xưa là trộn 3 ảnh với mức phơi sáng khác nhau để chỉ bù vào những vùng còn thiếu, và tôi thích điều đó hơn vì kết quả không mang một thuộc tính cụ thể gọi là “HDR”

    • Nhân tiện bổ sung là trong cài đặt ảnh của iPhone có thể tắt tính năng “Tăng cường độ sáng HDR của màn hình”

    • Tôi cũng nghĩ y như vậy khi đọc bài; phần tổng quan về bản đồ độ sâu thì hay, nhưng từ giữa bài trở đi HDR gain map lại thành trọng tâm nên có cảm giác hơi loãng. Nhìn chung vẫn tốt, nhưng mạch bài hơi thiếu tập trung

  • LIDAR thực tế có độ phân giải thấp hơn rất nhiều so với bản đồ độ sâu được hiển thị trong bài.
    Bản đồ độ sâu thực tế là ảnh tổng hợp từ dữ liệu LIDAR và camera

    • Tôi cũng hiểu là LIDAR được dùng để hỗ trợ lấy nét chính xác trong thực tế, còn bản đồ độ sâu thực sự thì được tính từ thị sai của nhiều camera
  • Tôi tò mò liệu Apple có áp dụng công nghệ này cho tính năng “tạo sticker” không (nhấn giữ chủ thể trong ảnh để tách thành sticker hoặc sao chép sang ảnh khác)

    • Tính năng đó chắc chắn là thuần machine learning. Vì nó vẫn hoạt động ngay cả với ảnh không chụp bằng iPhone
  • Tôi tò mò liệu có thể dùng bản đồ độ sâu để tạo stereogram hay SIRDS (autostereogram ngẫu nhiên) hay không. Ngày xưa tôi từng có nhiều kỷ niệm với việc tạo stereogram từ ảnh grayscale

    • Thực sự là có hỗ trợ. Giao diện này chỉ có trong ứng dụng Photos của VisionOS, nhưng nếu ảnh trong album có bản đồ độ sâu hoặc đủ độ phân giải thì có thể dùng ML để chuyển sang không gian 3D (Spatial Format).
      Dựa vào thông tin EXIF để ánh xạ thông tin góc nhìn, rồi canh tỉ lệ trong VR theo đúng kích thước vật lý của cảnh gốc.
      Cá nhân tôi thấy chỉ riêng tính năng này thôi cũng đủ đáng để bỏ ra $4000 mua Vision Pro. Trải nghiệm xem lại các bức ảnh chụp bằng Nikon D7 ngày xưa trong VR với đúng kích thước và ở dạng 3D gợi lên cảm giác hoài niệm rất sâu sắc.
      Tôi tiếc là Apple không nhấn mạnh đây là một tính năng cốt lõi của Vision Pro. Nó thật sự rất tuyệt
  • Reality Composer cho iOS chỉ cho phép object capture trên thiết bị hỗ trợ LIDAR, còn trên thiết bị không có LIDAR thì không có phương án dự phòng bằng photogrammetry (tái dựng 3D tổng hợp). Xin chia sẻ trải nghiệm hơi tiếc nuối này khi làm việc 3D

    • Với công việc quét 3D thì ứng dụng Heges là thứ thành công nhất với tôi. LIDAR hiệu quả với vật thể lớn như ô tô, còn camera độ sâu Face ID hữu ích cho vật thể nhỏ.
      Tôi từng dùng scanner Creality Ferret SE (mua trên TikTok khoảng $100) để thử quét 3D vật thể nhỏ, và nó tốt hơn kỳ vọng rất nhiều

    • Polycam sẽ thay thế bằng photogrammetry trên thiết bị không hỗ trợ LIDAR.
      Tôi cũng từng được gợi ý dùng Canvas(cần LIDAR riêng) và Scaniverse(LIDAR là tùy chọn)

  • Cứ mỗi lần nhìn tiêu đề là trong đầu tôi lại đọc nhầm thành “death maps”, thấy buồn cười một cách kỳ lạ