- iPhone 15 Pro บันทึกภาพในฟอร์แมต HEIC ที่มี Depth Map รวมอยู่โดยค่าเริ่มต้น
- ไฟล์ HEIC สามารถเก็บ ภาพหลายชุดและเมตาดาตาจำนวนมาก ไว้ด้วยกัน และเมื่อเลือกใช้ JPEG จะไม่รวม Depth Map, HDR เป็นต้น
- โปรเจกต์โอเพนซอร์ส HEIC Shenanigans สามารถดึงภาพและเมตาดาตาออกจากไฟล์ HEIC และแปลงเป็นฟอร์แมต EXR ได้
- ในกระบวนการแปลง มีการใช้มาตรฐานและเครื่องมือต่าง ๆ ที่ใช้ในอุตสาหกรรมภาพยนตร์/ทีวี เช่น OpenEXR, OpenImageIO, OpenColorIO
- ผลลัพธ์คือสามารถแยกและนำข้อมูล HDR, SDR, Gain Map, Depth Map จากภาพถ่าย iPhone 15 Pro ไปใช้งานในฟอร์แมต EXR ได้
เบื้องหลังการรองรับ Depth Map ของ iPhone 15 Pro
- ตั้งแต่ปี 2017 เป็นต้นมา Apple ได้นำ LiDAR scanner, 3D Time-of-Flight, Structured-Light scanning มาใช้ใน iPhone ของตน เพื่อใส่ข้อมูล Depth Map ลงในภาพจากกล้อง
- Depth Map, เมตาดาตา และภาพหลายเวอร์ชันเหล่านี้จะถูกบันทึกไว้ในฟอร์แมต HEIF (HEIC)
- HEIC เป็นฟอร์แมตจัดเก็บภาพที่มีประสิทธิภาพ และถูกนำมาใช้เป็นฟอร์แมตภาพเริ่มต้นของ iPhone ตั้งแต่ปี 2017
- หากใช้ฟอร์แมต JPEG จะไม่สามารถใช้ฟีเจอร์ขั้นสูงอย่าง Depth Map และ HDR ได้
ตัวอย่างการตรวจสอบ Depth Map ใน HEIC
- Finn Jaeger หัวหน้าฝ่าย VFX ของบริษัทผลิตภาพยนตร์ Replayboys ในเมืองฮัมบูร์ก ประเทศเยอรมนี ได้แชร์ภาพหน้าจอของ Depth Map หลายชุด ที่สร้างจาก iPhone และความคืบหน้าของโปรเจกต์
- โปรเจกต์ HEIC Shenanigans ของ Finn Jaeger มี Python script (374 บรรทัด) สำหรับดึงภาพและเมตาดาตาแต่ละรายการออกจากคอนเทนเนอร์ HEIC แล้วแปลงเป็น ไฟล์ EXR
ข้อมูลสภาพแวดล้อมการพัฒนา
- เวิร์กสเตชันที่ใช้คือ Ryzen 9 9950X CPU 16 คอร์, RAM DDR5 96GB, NVMe SSD 4TB, เมนบอร์ด ASRock X870E Nova 90 และรัน Ubuntu 24 LTS (WLS2) บน Windows 11 Pro
- มีการใช้ Nvidia GTX 1080 เป็นต้น ทำให้ Windows เป็นสภาพแวดล้อมหลัก และเลือกใช้ด้วยเหตุผลด้านความเข้ากันได้ของซอฟต์แวร์บางส่วน
การเตรียมเครื่องมือและไลบรารีหลัก
- ต้องติดตั้ง Python 3.12.3 รวมถึง CLI และไลบรารีสำหรับแปลง/ประมวลผลภาพอื่น ๆ
exiftool มีบทบาทสำคัญต่อการรองรับ HEIC และการใช้เวอร์ชันล่าสุดอาจได้ฟีเจอร์เพิ่มและการแก้บั๊กมากขึ้น
jc (JSON Convert) ใช้แปลงผลลัพธ์จาก CLI ให้เป็น JSON เพื่อให้ใช้งานใน pipeline ได้สะดวกขึ้น
- โคลนรีโพซิทอรี HEIC Shenanigans แล้วติดตั้ง dependency ใน Python virtual environment
- สามารถตรวจสอบภาพ EXR สุดท้ายได้ด้วย viewer อย่าง DJV
เดโมการแปลงและภาพตัวอย่าง
- ใช้ ตัวอย่างภาพ HEIC ที่ Joel Joseph ผู้เชี่ยวชาญผลิตภัณฑ์ ArcGIS ถ่ายด้วย iPhone 15 Pro ที่เมืองมุมไบ ประเทศอินเดีย
การแปลง HEIC → EXR และเวิร์กโฟลว์
- Academy Software Foundation เป็นผู้นำโปรเจกต์โอเพนซอร์สและมาตรฐานที่ใช้ในงานภาพยนตร์/ทีวี/ดิจิทัลโพสต์โปรดักชัน
- ในบรรดาโปรเจกต์ภายใต้องค์กร OpenEXR คือฟอร์แมตภาพ High Dynamic Range (HDR) ที่ ILM เป็นผู้นำพัฒนาขึ้นในปี 1999 เปิดซอร์สในปี 2003 และถูกใช้งานในงานวิชวลเอฟเฟกต์และการเรนเดอร์ 3D เป็นต้น
ขั้นตอนการแปลงเป็น EXR แบบละเอียด
- ใช้สคริปต์ heic_to_exr.py ของ heic_shenanigans เพื่อแปลงภาพ HEIC อินพุตเป็นไฟล์ EXR
- ผลลัพธ์จากการแปลง (EXR) มีขนาด 468MB และรวมข้อมูลภาพ/แมปหลายชนิดไว้ในไฟล์เดียว
การใช้สคริปต์ oiiotool
- ดึง ขนาดภาพ
- แปลง color space และ gamma ของภาพ sRGB จาก Linear P3 → ACEScg
- ใช้ ไฟล์ตั้งค่า OpenColorIO (OCIO) เพื่อจัดการ color profile และการแปลง color space
- แปลง HDR Gain Map จาก Rec709 เป็น Linear และขยาย Y channel → RGB
- ดึงค่า headroom ของ Gain Map และใช้การสเกลด้วยค่ากลับกัน
- สร้างภาพฐาน HDR ด้วยการคูณกับ Gain Map
- ดึง Y channel ของ Depth Map และบันทึกเป็นฟอร์แมต EXR
- ในขั้นตอนสุดท้าย ให้นำแต่ละ channel ที่สร้างขึ้น (RGB, SDR, Gain Map, Depth Map) ไปเพิ่มเป็น channel แยกภายในไฟล์ EXR
โครงสร้าง channel ภายใน EXR
- ใน EXR จะบันทึกข้อมูลต่อไปนี้แยกตาม channel
- RGB ของภาพฐาน HDR
- SDR channel (จัดเก็บแยก)
- Gain Map
- Depth Map
- หากมีเลเยอร์ Matte ก็สามารถรวมเพิ่มเข้าไปได้
การใช้งานและข้อสังเกต
- กระบวนการนี้ทำให้สามารถแยกและนำ ข้อมูลผสมอย่าง Depth และ HDR จากภาพที่ถ่ายด้วย iPhone 15 Pro ไปใช้ในฟอร์แมตระดับมืออาชีพอย่าง EXR ได้
- แสดงให้เห็นถึงความเป็นไปได้ในการนำภาพจาก iPhone ไปใช้ได้อย่างมีประสิทธิภาพใน data pipeline หลากหลายแบบ เช่น machine learning, การเรนเดอร์ 3D, ภาพยนตร์ และ VFX
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
อยากเน้นย้ำอย่างที่คนอื่นพูดไว้ว่า LIDAR ของ iPhone มีความละเอียดต่ำเกินกว่าจะใช้เป็นแหล่งข้อมูลหลักของ depth map ได้จริง ๆ ในความเป็นจริง iPhone ใช้วิธีดึงข้อมูลความลึกราว 4 แบบ ขึ้นอยู่กับรุ่นและกล้องที่ใช้ เดิมทีใช้เฉพาะกับรูปโหมดภาพบุคคล แต่ iPhone รุ่นหลัง ๆ จะบันทึก depth map ในรูปถ่ายปกติด้วย
การแยกบุคคลในบทความ รวมถึงภาพช่วยสำหรับการรู้จำแว่น ผม ผิวหนัง ฯลฯ (portrait effect matte) เป็นผลลัพธ์จากแมชชีนเลิร์นนิง
ผมเองก็เคยทำแอปฟิลเตอร์เชิงสร้างสรรค์โดยใช้ depth map และภาพ matte ของ Portrait แม้ตอนนี้แอปจะหายไปแล้ว แต่เป็นประสบการณ์ที่สนุกมาก ไอเดียเชิงศิลปะที่ทำได้จาก depth map ยังมีอีกไม่สิ้นสุด
ใน iPhone รุ่นใหม่ ๆ ถ้าระบบตรวจพบตัวแบบ (คนหรือสัตว์เลี้ยง) ก็จะบันทึก depth map ให้อัตโนมัติแม้อยู่ในโหมดถ่ายภาพปกติ ผมเคยพัฒนาแอปฟิลเตอร์สร้างสรรค์โดยใช้ depth map และ portrait effect matte มาก่อน เลยอยากรู้ว่าชื่อแอปนั้นคืออะไร และยังพอมีวิดีโอเกี่ยวกับมันให้ดูไหม
อ้างอิงไว้ด้วยว่าผมเคยทำเครื่องมือ utility ชื่อ Matte Viewer ด้วย แต่นั่นมีไว้ดู matte กับ depth map อย่างเดียว (แอป Matte Viewer)
อยากย้ำว่า LIDAR เป็นฮาร์ดแวร์ที่ออกแบบมาเพื่อช่วยโฟกัสอัตโนมัติ (AF) และโฟกัสได้เร็วในสภาพแสงน้อย มากกว่าจะมีไว้สร้าง depth map แบบเต็มความละเอียด
วิธีที่สามนั้นเป็นเรื่องเมื่อ 5 ปีก่อนแล้ว ดังนั้นแนะนำให้อ้างอิงโอเพนซอร์สด้านการประเมินความลึกด้วยแมชชีนเลิร์นนิงรุ่นใหม่อย่าง ml-depth-pro
สงสัยว่าวิธี TrueDepth แบบที่สี่นี้สามารถใช้กับการตรวจจับ liveness (แยกคนจริง) ในแอปความปลอดภัยได้หรือไม่
เป็นบทความที่น่าสนใจมาก น่าประทับใจที่ข้อมูล depth map แบบนี้สุดท้ายถูกนำไปใช้ทำภาพเบลอฉากหลัง (ระยะชัดลึก หรือที่เรียกกันว่า faux bokeh)
การที่หลังจากถ่ายรูปไปแล้ว ยังสามารถปรับจุดโฟกัสและช่วงความชัดลึก หรือก็คือรูรับแสงทีหลังได้ ถือว่าน่าทึ่งมาก แต่ส่วนตัวผมไม่ค่อยชอบโบเก้แบบสังเคราะห์เท่าไร มันดูปลอมจนรู้สึกแย่กว่าผลงานจาก Photoshop เสียอีก
แล้วก็สังเกตเห็นคำสะกดชื่อฟอร์แมตไฟล์ในบทความผิดอยู่หลายจุดด้วย (HEIC 14 จุด, HIEC 3 จุด)
แค่อยากแจ้งสั้น ๆ ว่าผมแก้คำสะกดชื่อฟอร์แมตไฟล์แล้ว ขอบคุณที่ทักมา
ผมคิดว่าเหตุผลที่โบเก้สังเคราะห์ยังดูไม่ดีนัก เป็นเพราะมันไม่ได้สะท้อนออปติกและคณิตศาสตร์ของรูรับแสงอย่างแม่นยำ และในเชิงผลิตภัณฑ์ก็เป็นเพียงการประมาณค่าในระดับที่ทำให้ผู้ใช้สัก 80% พอใจ ถ้านำคณิตศาสตร์ของรูรับแสงที่ถูกต้องมาใช้ก็น่าจะทำแอปกล้องที่ดีกว่านี้ได้ แต่ก็สงสัยว่าผู้บริโภคจะมองออกถึงความต่างและยอมจ่ายเงินเพิ่มหรือเปล่า
ทั้ง depth map และ semantic map แค่ได้ดูก็สนุกแล้ว และถ้านำเข้าไปในแอปอย่าง TouchDesigner, Blender, Cinema 4D ก็สามารถใส่เอฟเฟ็กต์เชิงลึกหลากหลายแบบให้รูปภาพได้
อันที่จริง Apple เองก็ใช้ข้อมูลเหล่านี้กับการแต่งภาพหลังถ่าย (เช่น การปรับแต่งรูป)
ก่อนหน้านี้ข้อมูลพวกนี้จะถูกเก็บเฉพาะในโหมดภาพบุคคล แต่ช่วงหลังถ้าตรวจพบตัวแบบ (คนหรือสัตว์เลี้ยง) ก็จะถูกบันทึกอัตโนมัติแม้ถ่ายแบบปกติ
ผมเองก็เป็นนักพัฒนาแอปและเครื่องมือด้านภาพถ่าย โดย Matte Viewer ที่ทำขึ้นนั้นเน้นสำหรับตรวจดูและส่งออก depth map กับภาพ portrait matte (ข้อมูลเครื่องมือ Heliographe, แอป Matte Viewer)
หวังว่าสักวันหนึ่งสมาร์ตโฟนทุกเครื่องจะรองรับภาพ 3D แบบ Gaussian splatting ได้เป็นมาตรฐานโดยไม่ต้องมีเซ็นเซอร์ราคาแพง แม้จะใช้พลังประมวลผลสูง แต่ก็ดูใช้งานได้จริงกว่าตรงที่ไม่ต้องเพิ่มต้นทุนและน้ำหนักของเซ็นเซอร์
อาจจะมีบางอย่างที่ผมพลาดไป แต่สงสัยว่าทำไมบทความถึงพูดถึง HDR gain map ค่อนข้างยาว และมันเกี่ยวข้องกับ depth map อย่างไร
ผมไม่ชอบ HDR display ของ iPhone (ที่ชอบเร่งความสว่างอัตโนมัติมากเกินไป) เลยลบ HDR gain map ออกจากรูปของตัวเองด้วยตนเอง
HDR แบบเก่านั้นเป็นการรวมรูป 3 ใบที่เปิดรับแสงต่างกัน แล้วแก้เฉพาะส่วนที่ขาดไป ซึ่งผมชอบมากกว่าตรงที่ผลลัพธ์ไม่ได้บรรจุคุณสมบัติเฉพาะที่เรียกว่า "HDR" ติดมาด้วย
เพิ่มข้อมูลไว้ว่าในตั้งค่ารูปภาพของ iPhone สามารถปิดฟีเจอร์ ‘เพิ่มความสว่าง HDR ของจอแสดงผล’ ได้
ผมก็คิดเหมือนกันตอนอ่านบทความ ส่วนสรุปภาพรวมของ depth map นั้นดี แต่พอครึ่งหลังกลับกลายเป็นว่า HDR gain map มาเป็นประเด็นหลัก เลยรู้สึกว่าเนื้อหาค่อนข้างกระจาย โดยรวมยังดีอยู่แต่จังหวะของเรื่องดูไม่ค่อยต่อเนื่องนัก
LIDAR ในความเป็นจริงมีความละเอียดต่ำกว่า depth map ที่บทความแสดงให้เห็นมาก
depth map จริง ๆ นั้นเป็นผลลัพธ์แบบผสมจากทั้ง LIDAR และข้อมูลจากกล้อง
สงสัยว่า Apple เอาเทคโนโลยีนี้ไปประยุกต์ใช้กับฟีเจอร์ ‘สร้างสติกเกอร์’ ด้วยหรือไม่ (เช่น กดค้างที่วัตถุในภาพเพื่อดึงออกมาเป็นสติกเกอร์ หรือคัดลอกไปใส่ในรูปอื่น)
อยากรู้ว่าสามารถใช้ depth map เพื่อสร้าง stereogram หรือ SIRDS (autostereograms แบบจุดสุ่ม) ได้ไหม สมัยก่อนผมเคยสนุกกับการทำ stereogram จากภาพระดับเทา
มันจะจับคู่ข้อมูลมุมรับภาพจาก EXIF เพื่อปรับสเกลใน VR ให้ตรงกับขนาดทางกายภาพของฉากต้นฉบับ
สำหรับผม แค่ฟีเจอร์นี้อย่างเดียวก็คุ้มแล้วกับการจ่าย $4000 ซื้อ Vision Pro ประสบการณ์การได้ดูรูปเก่าที่เคยถ่ายด้วย Nikon D7 ใน VR โดยมีขนาดถูกต้องและเป็น 3D นั้นปลุกความคิดถึงได้ลึกมาก
น่าเสียดายที่ Apple ไม่ได้โปรโมตสิ่งนี้ในฐานะฟีเจอร์หลักของ Vision Pro ทั้งที่มันยอดเยี่ยมจริง ๆ
Reality Composer บน iOS สามารถทำ object capture ได้เฉพาะบนอุปกรณ์ที่รองรับ LIDAR เท่านั้น แต่บนอุปกรณ์ที่ไม่มี LIDAR ก็ไม่มีฟังก์ชันสำรองแบบ photogrammetry (การสร้าง 3D จากภาพหลายมุม) เลย อยากแชร์ประสบการณ์เสียดายตรงนี้สำหรับคนที่เคยพยายามทำงาน 3D
สำหรับงานสแกน 3D แอป Heges ประสบความสำเร็จที่สุดในประสบการณ์ของผม LIDAR ใช้ได้ดีมากกับวัตถุขนาดใหญ่ เช่น รถยนต์ ส่วนกล้องความลึก Face ID เหมาะกับวัตถุขนาดเล็ก
ผมลองใช้สแกนเนอร์ Creality Ferret SE (ซื้อจาก TikTok มาราว $100) เพื่อสแกน 3D ขนาดเล็ก และมันออกมาดีกว่าที่คาดไว้มาก
Polycam จะสลับไปใช้ photogrammetry บนอุปกรณ์ที่ไม่รองรับ LIDAR
ผมยังเคยได้รับคำแนะนำให้ลอง Canvas (ต้องใช้ LIDAR แยกต่างหาก) กับ Scaniverse (LIDAR เป็นตัวเลือก) ด้วย
ทุกครั้งที่เห็นชื่อบทความ ผมจะเผลออ่านในหัวเป็น ‘death maps’ เลยรู้สึกขำแปลก ๆ