MAT : The basic image container ภาคทฤษฎี

Siravit Daduan
Sep 4, 2018 · 2 min read

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

เอ่อ… ไรนะ https://giphy.com/gifs/glmRyiSI3v5E4

ผมก็เลยขอมาแก้ตัวในนี้แล้วกันนะ อิอิ


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

https://docs.opencv.org/3.1.0/MatBasicImageForComputer.jpg

จากรูปด้านบน คอมพิวเตอร์จะมองส่วนของกระจกมองหลังเป็นเพียงแค่ค่าของความเข้มสีของพิกเซล แล้วนำวิธีที่เราใช้ในการ “มอง” ภาพดังกล่าว มาใช้กับทั้งภาพ ก็จะได้เมทริกซ์ตัวเลขที่มีขนาดใหญ่และข้อมูลอื่นๆที่ใช้อธิบายเกียวกับตัวเมทริกซ์

แล้วสรุปว่า Mat คือ ?

Mat เป็นคลาสใน OpenCV library โดยจะข้อมูลอยู่ 2 ส่วน เป็นส่วนประกอบ

  • Matrix header ใช้เก็บข้อมูลเกี่ยวกับเมทริกซ์ เช่น ขนาด วิธีที่ใช้ในการเก็บข้อมูล ตำแหน่งที่เก็บเมทริกซ์ เป็นต้น ขนาดของ header จะมีขนาดคงที่
  • Pointer ที่ใช้ชี้เมทริกซ์ที่เก็บค่าของพิกเซล

ขนาดของตัวเมริกซ์จะมีแตกต่างกันในแต่ละภาพตาม order of magnitude ซึ่งจะมีผลให้ขนาดใหญ่ขึ้น และวิธีที่ใช้วิธีที่ใช้ในการเก็บ

วิธีที่ใช้ในการเก็บข้อมูล( Storing methods )

วิธีที่ใช้ในการเก็บข้อมูลสามารถปรับเปลี่ยนได้โดยการเลือกชนิดของข้อมูลที่ใช้และพื้นที่สี(วิธีที่รวมส่วนประกอบของสีเพื่อใช้กำหนดสี) วิธีที่เรียบง่ายที่สุดคือ gray scale ที่ใช้สีขาวและสีดำผสมกับเพื่อสร้างเฉดสีของสีเทาในหลายๆระดับ

คนเทาๆ https://giphy.com/gifs/rainbow-dope-shit-HeQRNGvgwxoNa

สำหรับในส่วนที่ต้องการสีเพิ่มขึ้นจากแค่เฉดสีเทา การเก็บพิกเซลสีสามารถทำได้หลายวิธี(รวมส่วนประกอบของสี)

  • RGB เป็นพื้นที่สีที่นิยมใช้มากที่สุด เนื่องจากเป็นที่วิธีเดียวกับการมองเห็นเฉดสีต่างๆของมนุษย์ โดยจะใช้าค่าอัลฟ่า( A ) เพื่อปรับค่าความโปร่งใส
  • HSV และ HLV แบ่งสีออกแป็นค่าสีหลัก( Hue ) ความอิ่มตัวของสี( Saturation ) และค่าความสว่าง( Luminance ) เป็นพื้นที่สีที่ใช้ในการอธิบายสีได้ง่าย
  • YCrCb ใช้ใน JPEG
  • CIE L*a*b เป็นพื้นที่สีที่เหมาะสม หากต้องการวัดความห่างระหว่างสองสี

แต่ละส่วนประกอบของพื้นที่สีจะมีลักษณะในการเก็บค่าตัวเลขที่ต่างกัน เช่น ใน gray scale มีเฉดสี 256 เฉด ซึ่งสามารถเก็บในตัวแปรประเภท char แต่ในพื้นที่สี RGB จำเป็นต้องใช้ float หรือ double เพื่อเพิ่มความละเอียดระหว่างความแตกต่างกันของสี


ครั้งหน้าเราจะมาลองเขียนเจ้า MAT กันนะครับ ในภาคปฏิบัติ

Siravit Daduan

Written by

Computer Engineering student at Prince of Songkla University

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade