5.19. การแก้ไขโทนสี

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

การแก้ไขแบ่งออกเป็นสองกลุ่ม: การปรับความสว่างและคอนทราสต์ที่กระจายความสว่างใหม่ และการปรับสีที่เปลี่ยนสีที่พิกเซลแต่ละตัวอ่านได้ ทั้งสองมีสิ่งที่คล้ายกันใน ISP ของ sensor ซึ่งแก้ไขแต่ละเฟรมขณะที่รับเข้ามา; เมธอดที่นี่ใช้กับ Image ที่ถ่ายมาแล้ว ในภายหลัง สำหรับกรณีที่เฟรมต้องการการแก้ไขมากกว่าที่ ISP ให้มา

5.19.1. การปรับสมดุลฮิสโตแกรม

การยืดคอนทราสต์ที่ง่ายที่สุดคือ การปรับสมดุลฮิสโตแกรม แนวคิดคือการรีแมปค่าพิกเซลเพื่อให้ฮิสโตแกรมของผลลัพธ์แบนราบที่สุดเท่าที่จะเป็นไปได้ -- ทุกค่าปรากฏขึ้นในความถี่ที่ใกล้เคียงกัน ผลที่ได้คือภาพที่มีคอนทราสต์ต่ำ (ภาพที่ฮิสโตแกรมกระจุกอยู่ในช่วงแคบ) จะกลายเป็นภาพที่มีคอนทราสต์สูงซึ่งพิกเซลครอบคลุมช่วง 0 -- 255 เต็มทั้งหมด

histeq() ทำการปรับสมดุล:

img.histeq()

กลไกนั้นตรงไปตรงมา ฟังก์ชันการกระจายสะสม (CDF) ของฮิสโตแกรมของต้นฉบับถูกคำนวณ; ค่าพิกเซลอินพุตแต่ละค่าถูกแมปกับตำแหน่งใน CDF โดยปรับขนาดให้อยู่ในช่วงเอาต์พุต ที่พิกเซลกระจายสม่ำเสมออยู่แล้ว การแมปใกล้เคียงกับเอกลักษณ์; ที่พิกเซลสะสมที่ความสว่างหนึ่ง การแมปจะกระจายพิกเซลเหล่านั้นออกโดยการยืดความสว่างนั้นให้ครอบคลุมช่วงเอาต์พุตที่กว้างขึ้น

ผลลัพธ์นั้นน่าประทับใจสำหรับฉากที่มีคอนทราสต์ต่ำ -- ความแตกต่างระหว่างภาพถ่ายในร่มที่มืดและภาพถ่ายเดียวกันหลัง histeq มักเป็นความแตกต่างระหว่าง "อ่านไม่ออก" และ "อ่านออกได้ชัดเจน" ข้อเสียคือการดำเนินการนี้ขยาย ทุกอย่าง รวมถึงสัญญาณรบกวนของ sensor ด้วย สำหรับฉากที่มีรายละเอียดคอนทราสต์ต่ำจริง ๆ ที่ต้องการกู้คืน histeq คือคำตอบที่ถูกต้อง; สำหรับฉากที่สะอาดและรับแสงดีซึ่งไม่ต้องการมัน histeq จะนำสัญญาณรบกวนที่มองเห็นได้เข้ามา

5.19.2. CLAHE: การปรับสมดุลแบบปรับตัว

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

ตัวแปรแบบปรับตัวคือ Contrast Limited Adaptive Histogram Equalisation หรือที่เรียกกันทั่วไปว่า CLAHE แทนที่จะใช้ CDF รวม เพียงอันเดียว CLAHE จะคำนวณ CDF แยกต่างหากสำหรับแต่ละไทล์เล็ก ๆ ของภาพ ปรับสมดุลแต่ละไทล์ตาม CDF ของตัวเอง และผสมขอบเขตของไทล์เข้าด้วยกัน ผลคือการปรับความสว่างเกิดขึ้น เฉพาะพื้นที่ -- มุมที่มีเงาได้รับการปรับสมดุลของตัวเองโดยไม่มีมุมสว่างดึงไปในทิศทางที่ผิด

แฟล็ก adaptive=True สลับ histeq() เป็นโหมด CLAHE:

img.histeq(adaptive=True, clip_limit=10)

พารามิเตอร์ clip_limit คือส่วนของ CLAHE ที่คำว่า "contrast limited" ในชื่อหมายถึง การปรับสมดุลเฉพาะพื้นที่อาจขยายสัญญาณรบกวนมากเกินไปในบริเวณแบนที่ CDF มีค่าที่แตกต่างกันน้อยมาก; clip limit จะจำกัดความรุนแรงในการกระจายของ bin ใด ๆ ซึ่งป้องกันการขยายสัญญาณรบกวนในขณะที่ยังอนุญาตให้ยืดคอนทราสต์ในที่ที่สำคัญ ค่าประมาณ 10 เป็นจุดเริ่มต้นที่สมเหตุสมผล; ค่าที่มากกว่าให้ CLAHE ทำงานหนักขึ้นโดยแลกกับสัญญาณรบกวนที่มองเห็นได้มากขึ้น ค่าที่น้อยกว่าทำให้อ่อนโยนกว่า

CLAHE มีราคาแพงกว่า histeq แบบ รวม แต่ให้ผลลัพธ์ที่สะอาดกว่าสำหรับฉากที่ความสว่างกระจายไม่สม่ำเสมอ -- ซึ่งคือฉากในโลกจริงส่วนใหญ่

5.19.3. แกมมา คอนทราสต์ และความสว่าง

การปรับสมดุลฮิสโตแกรมเป็นวิธีที่ขับเคลื่อนด้วยข้อมูลในการรีแมปความสว่าง วิธี ที่ไม่ขึ้นกับข้อมูล คือการนำเส้นโค้งที่เลือกไว้มาใช้ โดยกำหนดพารามิเตอร์ด้วยปุ่มปรับที่ง่ายต่อการตั้งค่าสองสามตัว gamma() ให้มาสามตัว:

img.gamma(gamma=1.0, contrast=1.0, brightness=0.0)

พารามิเตอร์แต่ละตัวนำการแปลงเฉพาะอย่างหนึ่งไปใช้กับทุกพิกเซล:

gamma รันค่าของแต่ละพิกเซลผ่านฟังก์ชันกำลัง output = input ** (1 / gamma) ความหมายมาตรฐาน: ค่าที่มากกว่า 1.0 จะ ทำให้ภาพสว่างขึ้น และยกโทนกลาง (การแก้ไข "monitor gamma" แบบคลาสสิก); ค่าที่น้อยกว่า 1.0 จะ ทำให้มืดลง พารามิเตอร์นี้ไม่เป็นเชิงเส้น -- มันรักษาจุดดำและจุดขาวไว้และเปลี่ยนรูปร่างการกระจายระหว่างนั้นเท่านั้น ซึ่งเป็นพฤติกรรมที่ถูกต้องเมื่อเป้าหมายคือการกู้คืนรายละเอียดในบริเวณเงาหรือ highlight โดยไม่บดขยี้ค่าสุดโต่งที่มีอยู่

contrast รันแต่ละพิกเซลผ่านการคูณตรง ๆ รอบจุดสีเทากลาง ค่าที่มากกว่า 1.0 เพิ่มคอนทราสต์ (มืดยิ่งมืดลง สว่างยิ่งสว่างขึ้น สีเทากลางคงเดิม); ค่าที่น้อยกว่า 1.0 ลดคอนทราสต์

brightness เพิ่มค่าคงที่ให้กับค่าพิกเซลทุกตัว ค่าบวกทำให้สว่างขึ้น ค่าลบทำให้มืดลง การเลื่อนนี้ สม่ำเสมอ -- ไม่มีอะไรถูกรักษาไว้ -- ซึ่งแทบไม่ใช่สิ่งที่แอปพลิเคชันต้องการด้วยตัวเองเพียงอย่างเดียว แต่ทำงานร่วมกันดีกับการปรับคอนทราสต์เพื่อจัดกึ่งกลางผลลัพธ์ใหม่

พารามิเตอร์ทั้งสามผสมผสานกัน: การเรียก gamma() ครั้งเดียวสามารถนำเส้นโค้งแกมมามาใช้ จากนั้นการคูณคอนทราสต์ จากนั้นการเลื่อนความสว่าง ทั้งหมดในรอบเดียว ลำดับคือแกมมาก่อน จากนั้นคอนทราสต์ จากนั้นความสว่าง ซึ่งตรงกับลำดับที่ให้ผลลัพธ์ที่เข้าใจง่ายที่สุดเมื่อทั้งสามตัวไม่ใช่ค่าเริ่มต้น

5.19.4. การปรับสมดุลสีขาวอัตโนมัติ

กลุ่มสีของการแก้ไขโทนสีเริ่มต้นด้วย การปรับสมดุลสีขาวอัตโนมัติ กลไกเดียวกับที่ ISP ของ sensor ทำงานเป็นส่วนหนึ่งของไปป์ไลน์การถ่ายภาพ -- การปรับค่าเกนสัมพัทธ์บนช่องแดง เขียว และน้ำเงินเพื่อให้แผ่นสีเทาโดยเฉลี่ยอ่านเป็นสีเทาจริง ๆ -- มีให้ใช้เป็นการดำเนินการหลังการถ่ายด้วยบน Image ที่เสร็จแล้ว:

img.awb()

ค่าเริ่มต้นใช้อัลกอริทึม gray-world: สีโดยเฉลี่ยของภาพทั้งหมดถูกสันนิษฐานว่าเป็นสีเทากลาง และค่าเกนต่อช่องจะถูกปรับให้เป็นเช่นนั้น รูปแบบ max=True ทางเลือกใช้อัลกอริทึม white-patch: พิกเซลที่สว่างที่สุดถูกสันนิษฐานว่าเป็นสีขาวกลาง และค่าเกนจะถูกปรับให้เป็นเช่นนั้น ทั้งสองทำงานบน RGB565 และ raw Bayer; ไม่ทำงานบน grayscale (ที่ไม่มีสีให้ปรับสมดุล) หรือ YUV (ที่การแสดงสีไม่ใช่สิ่งที่อัลกอริทึมเหล่านี้ดำเนินการ)

เมื่อใดควรใช้รูปแบบหลังการถ่ายแทน auto white balance ของ ISP: เมื่อตัวเลือกของ ISP ไม่เหมาะกับฉากนั้น ๆ เมื่อแอปพลิเคชันโหลดเฟรมอ้างอิงจากดิสก์ที่ถ่ายภายใต้สภาพที่แตกต่างกัน หรือเมื่อการตัดสินสีสำคัญพอที่แอปพลิเคชันต้องการรันใหม่ด้วยตัวเลือกอัลกอริทึมของตัวเอง

5.19.5. เมทริกซ์การแก้ไขสี

เมื่อการแก้ไขสีที่ภาพต้องการไม่ใช่การปรับขนาดต่อช่องที่การปรับสมดุลสีขาวให้ แต่เป็น การผสมช่องสัญญาณ ที่ทั่วไปกว่า การดำเนินการที่ควรใช้คือ เมทริกซ์การแก้ไขสี เมธอด ccm() นำเมทริกซ์ 3x3 (หรือ 3x4 พร้อม offset) มาคูณเวกเตอร์ (r, g, b) ของทุกพิกเซลเพื่อสร้างเวกเตอร์ (r, g, b) ใหม่:

img.ccm([[1.1, -0.05, -0.05],
        [-0.05, 1.1, -0.05],
        [-0.05, -0.05, 1.1]])

เมทริกซ์ช่วยให้แอปพลิเคชันแก้ไข crosstalk ระหว่างช่องสีได้ -- เช่น หากการตอบสนองของ sensor สีแดงรวมแสงสีเขียวบางส่วน เมทริกซ์สามารถลบเศษส่วนของช่องสีเขียวออกจากเอาต์พุตสีแดงเพื่อชดเชย เมื่อรวมกับ offset ต่อช่อง รูปแบบ 3x4 ช่วยให้แอปพลิเคชันสามารถรีเซ็ตศูนย์ของแต่ละช่องได้ด้วย

เนื้อหาเกี่ยวกับ ไปป์ไลน์ ISP ครอบคลุม เหตุผล ของเมทริกซ์การแก้ไขสี รูปแบบหลังการถ่ายบน Image คือการดำเนินการเดียวกัน นำมาใช้ในภายหลัง