Depth Map của iPhone 15 Pro
(tech.marksblogg.com)- Từ năm 2017, iPhone đã lưu kèm Depth Map trong ảnh chụp bằng LiDAR, 3D time-of-flight và quét 3D bằng ánh sáng cấu trúc; cũng có thể trích xuất phần này từ tệp HEIC của iPhone 15 Pro
- Container HEIC/HEIF có thể chứa không chỉ ảnh gốc mà còn HDR gain map, Depth Map và lượng lớn metadata, nên có nhiều thông tin để phân tích hơn JPEG đơn giản
- HEIC Shenanigans của Finn Jaeger là một bộ script Python để tách ảnh và metadata bên trong HEIC rồi chuyển đổi sang EXR; tại thời điểm viết, dự án có quy mô 374 dòng
- Từ tệp HEIC ví dụ 1,57MB, tạo ra base TIFF 71MB, HDR gain map TIFF 5,9MB, depth TIFF 433KB và metadata JSON 14KB; độ phân giải của Depth Map là 768×576, thấp hơn ảnh gốc 5712×4284
- Quá trình chuyển đổi OpenEXR đi qua OpenImageIO, OpenColorIO và cấu hình ACES để kết hợp các kênh SDR, HDR gain map và Depth Map; tệp EXR cuối cùng tăng tới 468MB
Cách lưu Depth Map trong ảnh iPhone
- Từ năm 2017, Apple đã hỗ trợ Depth Map trong ảnh chụp bằng iPhone
- Các phương thức hỗ trợ bao gồm máy quét LiDAR, LIDAR không cần scanner dựa trên 3D time-of-flight, và quét 3D bằng structured-light
- Depth Map và các ảnh khác được lưu cùng nhau trong tệp container HEIF
- HEIF có thể chứa nhiều ảnh và nhiều metadata
- Định dạng này được thiết kế trong giai đoạn 2013~2015, và Apple đã áp dụng biến thể HEIC vào năm 2017
- Ảnh chụp bằng iPhone từ đó về sau mặc định được lưu trong container HEIC
- Nếu không cần Depth Map và HDR, cũng có thể dùng định dạng JPEG
Tách ảnh bên trong bằng HEIC Shenanigans
- Finn Jaeger đã đăng ảnh chụp màn hình cho thấy iPhone tạo ra nhiều Depth Map
- HEIC Shenanigans cung cấp các script để tách ảnh và metadata khỏi container HEIC, rồi chuyển đổi thành tệp EXR
- Tại thời điểm viết, dự án có 374 dòng Python
- Ví dụ này sử dụng một ảnh HEIC chụp bằng iPhone 15 Pro và đi theo codebase của Finn
Môi trường chạy và công cụ cần chuẩn bị
- Để chạy cần Python 3.12.3 và nhiều công cụ CLI
jqopenexrlibimage-exiftool-perllibopenexr-devpython3-pippython3.12-venv
- Gói
libimage-exiftool-perlcài đặt exiftool 12.76+dfsg-1- Phiên bản này được phát hành vào cuối tháng 1/2024
- Sau đó đã có ít nhất 10 bản phát hành có sửa lỗi hoặc cải thiện hỗ trợ HEIC
- Phiên bản này đủ cho các bước trong ví dụ, nhưng nếu gặp vấn đề về sau thì có thể đã được giải quyết trong exiftool mới nhất
- JSON Convert
jcđược dùng để chuyển output của nhiều công cụ CLI sang JSON - Ảnh EXR được kiểm tra bằng DJV v2.0.8
Trích xuất Gain Map và Depth Map từ HEIC
- Kích thước tệp HEIC ví dụ là 1,57MB
- Khi chạy
gain_map_extract.py, các tệp sau được tạo raIMG_E2153_metadata.json: 14KBIMG_E2153_depth_0.tiff: 433KBIMG_E2153_hdrgainmap_48.tiff: 5,9MBIMG_E2153_base.tiff: 71MB
- Metadata EXIF của base TIFF có các đặc điểm sau
- Định dạng tệp: TIFF
- Nén: Uncompressed
- Màu sắc: RGB
- Kích thước ảnh: 5712×4284
- Megapixel: 24,5
- Bits Per Sample: 8 8 8
- HDR Gain Map và Depth Map có độ phân giải thấp hơn ảnh gốc
- Ảnh gốc: 5712×4284
- HDR Gain Map: 2856×2142
- Depth Map: 768×576
- Metadata JSON bao gồm
aux,nclx_profile,primary,xmp, v.v.- Mục
urn:com:apple:photo:2020:aux:hdrgainmapcó giá trị[48] - Kích thước
primaryđược hiển thị là[5712, 4284]
- Mục
- Có 3 GitHub issue yêu cầu giải mã các giá trị được mã hóa base64 sang dạng con người đọc được
Luồng chuyển đổi HEIC sang OpenEXR
- Academy Software Foundation tài trợ các dự án và tiêu chuẩn nguồn mở dùng trong ngành điện ảnh, truyền hình và sáng tạo
- Thành viên bao gồm Academy of Motion Picture Arts and Sciences, Disney, Nvidia, Netflix, v.v.
- OpenEXR là định dạng tệp ảnh HDR
- Ban đầu được Industrial Light and Magic phát triển vào năm 1999
- Được phát hành dưới dạng nguồn mở vào năm 2003
- Được dùng trong sản xuất hiệu ứng hình ảnh và render 3D
- Khi chạy
heic_to_exr.py, ảnh HEIC của iPhone 15 Pro được chuyển đổi thành tệp OpenEXR- Kích thước tệp kết quả là 468MB
- Script chuyển đổi gọi nhiều lần
oiiotool, công cụ xử lý ảnh của OpenImageIO
Cấu hình kênh trong bước tạo EXR
- Trước hết dùng
oiiotool --infođể kiểm tra kích thước của ảnh nguồn - Ảnh base đặt tên các kênh RGB là
sdr.R,sdr.G,sdr.Bvà chuyển đổi không gian màu- Từ đường cong sRGB qua Linear Rec.709
- Từ Linear P3-D65 sang ACEScg
- Việc chuyển đổi màu dùng tệp cấu hình OpenColorIO
- Tệp OCIO được dùng là
studio-config-v1.0.0_aces-v1.3_ocio-v2.1.ocio - Tệp này dạng văn bản và gồm 1.242 dòng
- Phần mô tả có chứa
Academy Color Encoding System - Studio Config [COLORSPACES v1.0.0] [ACES v1.3] [OCIO v2.1]
- Tệp OCIO được dùng là
- HDR gain map được tạo thành EXR bằng cách dùng kênh Y của TIFF
- Được đặt tên là kênh
gainmap.Y - Resize về kích thước 4032×3024
- Chuyển đổi từ đường cong Rec.709 sang Linear
- Được đặt tên là kênh
- Gain map được đổi thành RGB bằng cách sao chép kênh Y ba lần
gainmap.Rgainmap.Ggainmap.B
- Sau khi trích xuất giá trị
HDRGainMapHeadroombằngexiftool, gain map được scale bằng nghịch đảo của giá trị headroom đó - Ảnh HDR base được tạo bằng cách nhân ảnh base với gain map đã scale
- Depth Map tạo kênh
depth.Yở định dạng EXR từ kênh Y của TIFF- Resize về kích thước 4032×3024
- Tệp EXR cuối cùng được cấu thành bằng cách thêm lần lượt nhiều kênh
R,G,Bcủa HDR basesdr.R,sdr.G,sdr.Bcủa SDR basegainmap.R,gainmap.G,gainmap.Bcủa gain mapdepth.Ycủa Depth Map
- Nếu ảnh nguồn có matte, lớp matte cũng được xử lý và thêm vào ở bước đó
- Tệp
final.exrcuối cùng được di chuyển sang cạnh ảnh nguồn với tên<prefix>_acesCG.exr
1 bình luận
Ý kiến trên Hacker News
Như các bình luận khác đã chỉ ra đúng, độ phân giải LIDAR quá thấp để dùng làm dữ liệu chính cho bản đồ độ sâu
Theo tôi biết, iPhone lấy dữ liệu độ sâu theo khoảng bốn cách, tùy mẫu máy và camera. Trước đây các bản đồ độ sâu như vậy chỉ được lưu trong chế độ chụp chân dung, nhưng các iPhone gần đây dường như cũng lưu chúng trong ảnh thường
Các ảnh phụ trợ trong bài, hiển thị người, kính, tóc và da bằng màu trắng, được Apple gọi là portrait effects mattes và được tạo bằng học máy
Trước đây tôi từng làm một ứng dụng dùng bản đồ độ sâu và portrait effects mattes của ảnh chân dung để tạo các bộ lọc sáng tạo, khá thú vị, nhưng hiện đã gỡ xuống. Bản đồ độ sâu có rất nhiều khả năng nghệ thuật mới
Tôi tò mò ứng dụng đó tên gì và liệu còn video nào không. Tôi cũng làm một công cụ nhỏ tên Matte Viewer như một phần trong bộ công cụ ảnh, không có hiệu ứng, chỉ hỗ trợ xem và xuất: https://apps.apple.com/us/app/matte-viewer/id6476831058
Bài viết thú vị. Những bản đồ độ sâu kiểu này có vẻ được dùng cho hiệu ứng làm mờ hậu cảnh theo độ sâu trường ảnh trong chế độ “chân dung”, tức bokeh giả
Việc có thể đổi điểm lấy nét sau khi chụp và điều chỉnh độ sâu trường ảnh bằng “khẩu độ” luôn khiến tôi thấy thú vị, nhưng hình dạng của bokeh giả thì không hay. Nó lúc nào cũng trông như Photoshop vụng về
Có vẻ có lỗi chính tả trong cách ghi định dạng tệp: “HEIC” 14 lần, “HIEC” 3 lần
Có vẻ có thể tạo một ứng dụng camera tốt hơn với toán học khẩu độ đúng, nhưng tôi tự hỏi liệu mọi người có trả tiền cho nó không, hay người dùng điện thoại sẽ không nhận ra khác biệt và cũng không quan tâm
Nếu muốn ảnh chân dung đẹp, mua hoặc mượn một chiếc DSLR rẻ tiền sẽ cho kết quả tốt hơn gấp 100 lần
Reality Composer cho iOS có một tính năng riêng để chụp vật thể bằng LIDAR
Tôi đã thất vọng khi biết rằng trên các thiết bị Apple không có LIDAR, nó không được thay thế bằng đo ảnh. Điều này hữu ích để tham khảo cho những người muốn làm mô hình 3D hoặc đo ảnh như tôi
Tôi đã mua Creality Ferret SE trên TikTok với giá khoảng 100 USD để quét vật thể nhỏ, và nó rất tuyệt
Tôi cũng nghe đánh giá tốt rằng Canvas cần LiDAR, còn Scaniverse thì LiDAR là tùy chọn
Bản đồ độ sâu và bản đồ ngữ nghĩa khá thú vị để xem, và nếu đưa vào các chương trình như TouchDesigner, Blender hay Cinema 4D, có thể tạo các hiệu ứng độ sâu rất đẹp từ ảnh
Chúng cũng có thể dùng cho xử lý ảnh, và rốt cuộc Apple cũng dùng chúng cho mục đích đó
Trước đây chúng chỉ được lưu trong chế độ chụp chân dung, nhưng các iPhone gần đây gần như tự động lưu khi phát hiện người hoặc thú cưng trong cảnh
Tôi đang làm các ứng dụng và công cụ ảnh (https://heliographe.net), trong đó Matte Viewer là công cụ để xem và xuất loại dữ liệu này: https://apps.apple.com/us/app/matte-viewer/id6476831058
Độ phân giải của bản thân LIDAR thấp hơn nhiều so với bản đồ độ sâu trong bài. Hẳn là phải được tạo bằng cách kết hợp dữ liệu LIDAR với dữ liệu camera thông thường
Bài viết nói khá dài về HDR gain map, nhưng tôi không rõ nó liên quan gì đến bản đồ độ sâu
Tôi thắc mắc liệu có thể bỏ qua phần xử lý liên quan đến HDR gain map mà vẫn giữ được bản đồ độ sâu không
Cá nhân tôi không thích cách iPhone hiển thị HDR, vì nó tăng độ sáng màn hình vượt quá mức sáng tối đa do người dùng đặt. Tôi đang cố gắng loại bỏ HDR gain map khỏi ảnh của mình
HDR trước đây có nghĩa là chụp ba tấm rồi ghép lại để loại bỏ các vùng thiếu sáng/quá sáng, và ảnh kết quả không mang theo thông tin riêng cho biết nó là HDR
Tôi thắc mắc liệu có thể tạo stereogram hoặc SIRDS từ bản đồ độ sâu không. Tôi nhớ trước đây từng tạo stereogram từ một ảnh thang xám rất giống như vậy
Nếu ảnh trong album có bản đồ độ sâu, hoặc độ phân giải đủ cao để phép xấp xỉ bằng học máy hoạt động đủ tốt, nó có thể được chuyển đổi sang “Spatial Format”
Nó cũng đọc EXIF và “scale” kích thước vật lý của ảnh theo góc nhìn lúc chụp gốc. Vì vậy ảnh góc rộng trông lớn hơn nhiều về mặt vật lý so với ảnh tele trong không gian VR
Cá nhân tôi thấy chỉ riêng nút và tính năng này đã đủ biện minh cho 4.000 đô la bỏ ra mua thiết bị. Khi nhìn những bức ảnh chụp bằng Nikon D7 năm 2007 ở dạng 3D đầy đủ và đúng tỉ lệ, những hoài niệm và ký ức đã quên từ lâu sống lại, khiến tôi khá xúc động
Việc Apple không đưa tính năng này thành điểm bán hàng cốt lõi của Vision Pro là một sai lầm. Nó thật sự tuyệt vời
Tôi thắc mắc liệu Apple có dùng thứ này cho tính năng “create sticker”, tức nhấn giữ chủ thể trong ảnh để biến thành sticker hoặc sao chép sang ảnh khác không
Thông tin độ sâu thực tế cũng có khả năng không giúp ích nhiều. Làm vậy thì gần như sẽ bao gồm cả sàn nhà hoặc mặt bàn nơi chủ thể đang nằm/đứng
Đây có khả năng là cách tiếp cận phân đoạn ngữ nghĩa chỉ dùng học máy
Tôi đang chờ đến ngày mọi phần cứng điện thoại mặc định có thể chụp ảnh 3D bằng Gaussian splatting mà không cần cảm biến đắt tiền
Chi phí tính toán có thể lớn, nhưng có lẽ vẫn rẻ hơn việc thêm cảm biến đắt tiền và làm tăng trọng lượng
Trang này hoạt động kỳ lạ trên iOS Chrome. Khi cuộn trang xuống, cỡ chữ lớn lên; cuộn lên thì lại nhỏ đi, khá là khó hiểu
Dù vậy, đây là lần đầu tôi biết đến oiiotool, và nó rất tuyệt