MAT : The basic image container ภาคทฤษฎี
เนื่องจากการนำเสนอครั้งที่ผ่านมา ผมทำได้ไม่ดีนัก(เพราะขี้เกียจเอง 55555) ถึงขั้นขนาดที่ผมอธิบายเรื่อง Mat แต่ทุกในห้องก็ยังคง ….

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

จากรูปด้านบน คอมพิวเตอร์จะมองส่วนของกระจกมองหลังเป็นเพียงแค่ค่าของความเข้มสีของพิกเซล แล้วนำวิธีที่เราใช้ในการ “มอง” ภาพดังกล่าว มาใช้กับทั้งภาพ ก็จะได้เมทริกซ์ตัวเลขที่มีขนาดใหญ่และข้อมูลอื่นๆที่ใช้อธิบายเกียวกับตัวเมทริกซ์
แล้วสรุปว่า Mat คือ ?
Mat เป็นคลาสใน OpenCV library โดยจะข้อมูลอยู่ 2 ส่วน เป็นส่วนประกอบ
- Matrix header ใช้เก็บข้อมูลเกี่ยวกับเมทริกซ์ เช่น ขนาด วิธีที่ใช้ในการเก็บข้อมูล ตำแหน่งที่เก็บเมทริกซ์ เป็นต้น ขนาดของ header จะมีขนาดคงที่
- Pointer ที่ใช้ชี้เมทริกซ์ที่เก็บค่าของพิกเซล
ขนาดของตัวเมริกซ์จะมีแตกต่างกันในแต่ละภาพตาม order of magnitude ซึ่งจะมีผลให้ขนาดใหญ่ขึ้น และวิธีที่ใช้วิธีที่ใช้ในการเก็บ
วิธีที่ใช้ในการเก็บข้อมูล( Storing methods )
วิธีที่ใช้ในการเก็บข้อมูลสามารถปรับเปลี่ยนได้โดยการเลือกชนิดของข้อมูลที่ใช้และพื้นที่สี(วิธีที่รวมส่วนประกอบของสีเพื่อใช้กำหนดสี) วิธีที่เรียบง่ายที่สุดคือ gray scale ที่ใช้สีขาวและสีดำผสมกับเพื่อสร้างเฉดสีของสีเทาในหลายๆระดับ

สำหรับในส่วนที่ต้องการสีเพิ่มขึ้นจากแค่เฉดสีเทา การเก็บพิกเซลสีสามารถทำได้หลายวิธี(รวมส่วนประกอบของสี)
- RGB เป็นพื้นที่สีที่นิยมใช้มากที่สุด เนื่องจากเป็นที่วิธีเดียวกับการมองเห็นเฉดสีต่างๆของมนุษย์ โดยจะใช้าค่าอัลฟ่า( A ) เพื่อปรับค่าความโปร่งใส
- HSV และ HLV แบ่งสีออกแป็นค่าสีหลัก( Hue ) ความอิ่มตัวของสี( Saturation ) และค่าความสว่าง( Luminance ) เป็นพื้นที่สีที่ใช้ในการอธิบายสีได้ง่าย
- YCrCb ใช้ใน JPEG
- CIE L*a*b เป็นพื้นที่สีที่เหมาะสม หากต้องการวัดความห่างระหว่างสองสี
แต่ละส่วนประกอบของพื้นที่สีจะมีลักษณะในการเก็บค่าตัวเลขที่ต่างกัน เช่น ใน gray scale มีเฉดสี 256 เฉด ซึ่งสามารถเก็บในตัวแปรประเภท char แต่ในพื้นที่สี RGB จำเป็นต้องใช้ float หรือ double เพื่อเพิ่มความละเอียดระหว่างความแตกต่างกันของสี
ครั้งหน้าเราจะมาลองเขียนเจ้า MAT กันนะครับ ในภาคปฏิบัติ

