4.13. รูปแบบพิกเซล

ขั้นตอนสุดท้ายของไปป์ไลน์ ISP จัดเก็บแต่ละพิกเซลในรูปแบบไบต์เฉพาะในหน่วยความจำ รูปแบบที่เลือกมีการแลกเปลี่ยนระหว่างคุณภาพภาพ ขนาดหน่วยความจำ และวิธีที่โค้ดปลายทางอ่านไบต์กลับออกมา มีรูปแบบหลักอยู่ไม่กี่แบบ

4.13.1. RAW (Bayer)

เอาต์พุตเริ่มต้นคือ raw Bayer ซึ่งเป็นโมเสคหนึ่งช่องต่อพิกเซลเช่นเดียวกับที่เซนเซอร์ผลิต หนึ่งไบต์ต่อพิกเซล วางในรูปแบบ Bayer: แดงและเขียวสลับกันในแถวคู่ เขียวและน้ำเงินสลับกันในแถวคี่ ยังไม่มีการ debayering ดังนั้นแต่ละเซลล์ยังคงมีเฉพาะค่าที่ตัวกรองสีของมันกรองผ่านมา

Raw Bayer ใช้หน่วยความจำเพียงหนึ่งในสามของภาพ RGB สามช่องที่เสร็จสิ้นแล้ว ซึ่งหนึ่งไบต์ต่อพิกเซลเทียบกับสาม และไม่ได้ใช้รอบ ISP ใดๆ ในการ debayer หรือแปลง ต้นทุนคือโค้ดผู้ใช้ต้องทำการ debayering เองก่อนที่การประมวลผลที่ตระหนักถึงสีจะทำงานได้

4.13.2. RGB888

RGB888 เป็นรูปแบบที่เสร็จสมบูรณ์ตามธรรมชาติสำหรับภาพสี: สามไบต์ต่อพิกเซล หนึ่งไบต์สำหรับช่องสีแดง เขียว และน้ำเงิน ที่ 8 บิตต่อช่อง ยี่สิบสี่บิตต่อพิกเซลและสีที่แตกต่างกันเกือบสิบเจ็ดล้านสี

RGB888 เป็นอ้างอิงเชิงแนวคิดสำหรับภาพสีที่เสร็จสมบูรณ์ และซอฟต์แวร์นอกบอร์ดส่วนใหญ่ใช้มัน บนฮาร์ดแวร์แบบฝังตัว ข้อเสียหลักคือขนาดพิกเซล 24 บิต ซึ่งไม่ใช่ทวีคูณของขนาดคำของโปรเซสเซอร์ ไม่สะดวกสำหรับการจัดตำแหน่งหน่วยความจำ และใหญ่กว่ารูปแบบถัดไป 50%

4.13.3. RGB565

RGB565 บรรจุแต่ละพิกเซลในสองไบต์: ห้าบิตสำหรับสีแดง หกบิตสำหรับสีเขียว ห้าบิตสำหรับสีน้ำเงิน บิตเขียวพิเศษสะท้อนความไวของดวงตาต่อสีเขียวที่สูงกว่า และตรงกับน้ำหนักสองเท่าของช่องสีเขียวในรูปแบบ Bayer

RGB565 เป็นรูปแบบสีเริ่มต้นบน OpenMV Cam สองไบต์ต่อพิกเซลเป็น 16 บิตที่จัดตำแหน่งแล้ว ซึ่งเหมาะกับความกว้างข้อมูลพื้นฐานของ MCU การโหลด เก็บ และคำนวณพิกเซลทั้งหมดทำงานที่ความเร็วเต็มที่ และการดำเนินการหลายอย่างสามารถประมวลผลคู่พิกเซลพร้อมกันได้ พิกเซล 24 บิตของ RGB888 ไม่จัดตำแหน่งในลักษณะนั้นและมีต้นทุนในทุกการเข้าถึง การประหยัดหน่วยความจำ 33% เมื่อเทียบกับ RGB888 ก็สะสมได้มาก: QVGA (320 x 240) ใช้ 150 KB ใน RGB565 เทียบกับ 225 KB ใน RGB888 และช่องว่างจะเพิ่มขึ้นตามความละเอียด

การแลกเปลี่ยนคือสีที่แตกต่างกัน 65,000 สีแทนที่จะเป็นสิบเจ็ดล้านสี สำหรับงานการมองเห็นของเครื่องส่วนใหญ่ ความแตกต่างนี้ไม่สังเกตเห็นได้ เพราะอัลกอริทึมลดเฟรมให้เป็นการแทนค่าที่กำหนดค่าขีดแบ่งหรือตรวจจับขอบซึ่งละทิ้งรายละเอียดสีส่วนใหญ่อยู่แล้ว สำหรับการดูของมนุษย์ บิตที่ขาดหายจะปรากฏเป็นแถบจางๆ ในการไล่ระดับสีแบบเรียบ แต่ไม่ใช่สิ่งที่ดวงตาสังเกตเห็นทันที

4.13.4. YUV422

YUV422 แยกสีของแต่ละพิกเซลออกเป็นค่า ความสว่าง (Y) และค่า ความอิ่มสี สองค่า (U และ V) จากนั้นทำการ subsample ความอิ่มสีเนื่องจากการมองเห็นของมนุษย์ไวต่อการเปลี่ยนแปลงความสว่างมากกว่าการเปลี่ยนแปลงสีมาก แต่ละพิกเซลมี Y ของตัวเอง แต่คู่พิกเซลที่อยู่ติดกันใช้ U และ V ร่วมกันหนึ่งค่า รูปแบบไบต์สำหรับแต่ละคู่คือสี่ไบต์ Y0, U, Y1, V ซึ่งเฉลี่ยออกมาเป็นสองไบต์ต่อพิกเซล เท่ากับ RGB565

แต่สองไบต์มีความหมายต่างกันจาก RGB565 ช่อง Y เพียงอย่างเดียวเป็นภาพระดับสีเทา 8 บิตที่พร้อมใช้งาน ซึ่งเป็นสิ่งที่อัลกอริทึมการมองเห็นของเครื่องแบบคลาสสิกส่วนใหญ่ (การตรวจจับขอบ การจับคู่เทมเพลต การวิเคราะห์บลอบ) ใช้จริงๆ ช่อง U และ V ส่งข้อมูลสีสำหรับอัลกอริทึมจำนวนน้อยที่ต้องการมัน

YUV422 เป็นตัวเลือกที่เหมาะสมเมื่อไปป์ไลน์ต้องการทั้งสองอย่าง ซึ่งหมายถึงอัลกอริทึมในขั้นตอนต้นที่อ่านเฉพาะ Y ตามด้วยขั้นตอนหลังที่ใช้ chroma สำหรับการตัดสินใจด้านสีที่ละเอียดกว่า เนื่องจากค่า Y อยู่ตรงนั้นพร้อมใช้งานโดยไม่ต้องแปลงพื้นที่สี

4.13.5. ระดับสีเทา

ระดับสีเทาคือหนึ่งไบต์ต่อพิกเซล: เฉพาะค่าความสว่าง ไม่มีสีเลย เป็นรูปแบบที่เสร็จสมบูรณ์ที่เล็กที่สุด ครึ่งหนึ่งของขนาด RGB565 และ YUV422 และหนึ่งในสามของ RGB888

อัลกอริทึมการมองเห็นของเครื่องแบบคลาสสิกส่วนใหญ่ทำงานบนระดับสีเทาอยู่แล้ว ดังนั้นการละทิ้งช่องสีโดยตรงออกจากเซนเซอร์มักเป็นตัวเลือกที่ง่ายที่สุดและมีประสิทธิภาพหน่วยความจำสูงสุด การตรวจจับขอบ การหาเส้น การวิเคราะห์บลอบ การถอดรหัส QR-code การจับคู่เทมเพลต และการตรวจจับ AprilTag ทั้งหมดทำงานบนระดับสีเทาและได้ประโยชน์จากบัฟเฟอร์ที่เล็กกว่า

4.13.6. รูปแบบอื่นๆ

รูปแบบบางอย่างที่ OpenMV Cam สามารถผลิตได้ไม่ได้มาจากไปป์ไลน์ ISP ในฐานะส่วนหนึ่งของขั้นตอนปกติ

BINARY คือหนึ่งบิตต่อพิกเซล ซึ่งเป็นการแทนค่าที่เล็กที่สุดที่เป็นไปได้ ใช้สำหรับภาพที่กำหนดค่าขีดแบ่ง บัฟเฟอร์มาสก์ และเอาต์พุตของการดำเนินการใดๆ ที่แยกแยะเฉพาะระหว่างตรงกันและไม่ตรงกันในแต่ละพิกเซล

JPEG เป็นรูปแบบสีแบบบีบอัด เซนเซอร์บางตัวมีตัวเข้ารหัส JPEG บนชิปและสามารถส่งเฟรมที่บีบอัด JPEG โดยตรง สำหรับเซนเซอร์ที่ไม่มี MCU จะรันตัวเข้ารหัส JPEG บนเฟรม RGB หรือระดับสีเทาที่เสร็จสมบูรณ์หลัง ISP ไม่ว่าในกรณีใด เอาต์พุตคือ bitstream JPEG ซึ่งมีประโยชน์สำหรับการบันทึกเฟรมไปยังพื้นที่เก็บข้อมูลหรือส่งผ่านลิงก์ที่มีแบนด์วิดท์จำกัด

PNG เป็นรูปแบบบีบอัดแบบไม่สูญเสียข้อมูล เซนเซอร์ไม่ได้ผลิต PNG โดยตรง MCU บีบอัดเฟรม RGB หรือระดับสีเทาที่เสร็จสมบูรณ์ตามต้องการ มีประโยชน์เมื่อแบนด์วิดท์หรือพื้นที่เก็บข้อมูลมีความสำคัญ แต่การบีบอัดแบบสูญเสียข้อมูลที่ JPEG ใช้จะทิ้งข้อมูลที่แอปพลิเคชันต้องการในภายหลัง