Histogram

A Study in Image-processing Histogram

การศึกษาเกี่ยวกับฮิสโตแกรมในงาน Image processing

Objective

  1. เพื่อให้ผู้เรียนได้ศึกษาและทำความเข้าใจเรื่อง Histrogram ของภาพ
  2. เพื่อให้ผู้เรียนได้ทราบถึงการอ่านไฟล์ของภาพแต่ละประเภท
  3. เพือให้ผู้เรียนสามารถนำความรู้มาประยุกต์ใช้ได้

Histogram

  1. ความหมายของ Histogram คือ

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

  2. ประโยชน์ของ Histogram คือ

    Histogram มีประโยชน์ในการหาค่าของการแจกแจงความถี่ของข้อมูลของสิ่งที่เราต้องการวิเคราะห์ เพื่อวิเคราะห์ว่า ข้อมูลที่เราสนใจจะมีการแจกแจงความถี่หรือการกระจายของข้อมูลแบบใด เพื่อใช้ตรวจสอบคุณสมบัติของข้อมูล ตลอดจนการประมาณการลักษณะคุณภาพที่ได้จากการผลิต ข้อมูลที่ได้จาก Histogram นี้ จะแสดงค่าความเบี่ยงเบนของข้อมูล ว่ามีลักษณะการกระจายตัว เป็นแบบระฆังคว่ำ (Normal Distribution) หรือไม่ หรือมีความเบี่ยงเบนไปทางบวกหรือลบ หรือมีลักษณะรูปแบบแบบฟันเลื่อย หรือแบบหน้าผา เป็นต้น ทำให้มองเห็นว่าความเบี่ยงเบนที่เกิดขึ้นจาก Normal Distribution ควรจะแก้ไขอย่างไร

    Histogram จะใช้เพื่อตรวจสอบความผิดปกติ โดยดูการกระจายของกระบวนการทำงาน หรือเมื่อต้องการเปรียบเทียบข้อมูลกับเกณฑ์ที่กำหนด หรือค่าสูงสุด-ต่ำสุด โดยสามารถตรวจสอบสมรรถนะของกระบวนการทำงาน (Process Capability) และจะมีประโยชน์มากยิ่งขึ้นเมื่อข้อมูลมีจำนวนมาก


Medthods

  1. Histrogram ของ DICOM file

    เริ่มต้นด้วยการเปิดไฟล์ DICOM เข้าโปรแกรม MATLAB โดยการใช้ dicomread จากนั้น ฟังก์ชั่น myBW() จะคำนวณหา Histrogram ของภาพ DICOM ที่ใส่เข้าไป จากนั้นนำค่าที่ได้มาพลอตกราฟ

    ภาพ DICOM ที่ใช้
    กราฟ Histrogram ที่ได้

  2. Histrogram ของ LSM file

    โปรแกรมจะทำการ addpath ของฟังก์ชั่นที่ใช้อ่าน .lsm ให้เรียบร้อยแล้ว จากนั้นทำการ Input file.lsm ใส่ฟังก์ชั่น mylsm() เพื่อทำการอ่านภาพที่ต้องการ ฟังก์ชั่น mylsm() จะ return ค่าออกมา 4 ค่า คือ R,G,B และภาพที่รวมกันเรียบร้อยแล้ว ในที่นี้เราสนใจเพียงแค่ R,G และ B เท่านั้น นำตัวแปร pic_1, pic_2 และ pic_3 ซึ่งเก็บค่า R, G และ B ตามลำดับมาใส่ในฟังก์ชั่น myBW() เพื่อทำการคำนวณหาค่า histrogram จากนั้น plot ค่าที่ได้

    ภาพตัวอย่างที่ใช้
    ค่า Histrogram ที่ได้(ขวา) เปรียบเทียบกับฟังก์ชั่น imhist() (ซ้าย) ของ MATLAB

  3. Histrogram ของภาพถ่ายทั่วไป

    ในที่นี้จะทำการหาค่า Histrogram ของภาพถ่ายทั้งแบบภาพ Black and white และภาพสี RGB โดยขั้นแรกจะเริ่มจากจาก import ไฟล์รูป และใช้คำสั่ง rgb2grey() เพื่อเปลี่ยนภาพสีให้เป็นขาวดำ จากนั้น ใช้ฟังก์ชั่น myBW() เพื่อคำนวณหาค่า Histrogram และ plot

    นอกจากนี้ภาพถ่ายทั่วไปที่เห็นนั้นเป็นภาพสี RGB เราสามารถนำมาหาค่า Histrogram ได้โดยการ import ภาพเข้าสู่โปรแกรมเสียก่อน จากนั้นนำตัวแปรที่เก็บภาพมาแยกเป็น R G B โดยเก็บไ้ว้ในแต่ละตัวแปร จากนั้นใช้ฟังก์ชั่น myRGB() เพื่อทำการคำนวณหาค่า Histrogram ของภาพถ่าย RGB นี้ และนำมา plot

    ในตัวอย่างนี้จะใช้ภาพถ่ายของสมาชิกแต่ละคนภายในกลุ่มเพื่อหา Histrogram ทั้งแบบ grey scle และ RGB โดยภาพที่ใช้หา Histrogram จะมีการเปรียบเทียบกับฟังก์ชั่น imhist ของ MATLAB

    ภาพที่ใช้
    ค่า Histrogram ที่ได้(ขวา) เปรียบเทียบกับฟังก์ชั่น imhist() (ซ้าย) ของ MATLAB

    ภาพที่ใช้
    ค่า Histrogram ในแต่ละ Layer Red (R), Green (G), และ Blue (B) ที่ได้จากภาพตามลำดับแถว(ขวา) เปรียบเทียบกับฟังก์ชั่น imhist() (ซ้าย) ของ MATLAB

    ภาพที่ใช้
    ค่า Histrogram ที่ได้(ขวา) เปรียบเทียบกับฟังก์ชั่น imhist() (ซ้าย) ของ MATLAB

    ภาพที่ใช้
    ค่า Histrogram ในแต่ละ Layer Red (R), Green (G), และ Blue (B) ที่ได้จากภาพตามลำดับแถว(ขวา) เปรียบเทียบกับฟังก์ชั่น imhist() (ซ้าย) ของ MATLAB

    ภาพที่ใช้
    ค่า Histrogram ที่ได้(ขวา) เปรียบเทียบกับฟังก์ชั่น imhist() (ซ้าย) ของ MATLAB

    ภาพที่ใช้
    ค่า Histrogram ในแต่ละ Layer Red (R), Green (G), และ Blue (B) ที่ได้จากภาพตามลำดับแถว(ขวา) เปรียบเทียบกับฟังก์ชั่น imhist() (ซ้าย) ของ MATLAB

    ภาพที่ใช้
    ค่า Histrogram ที่ได้(ขวา) เปรียบเทียบกับฟังก์ชั่น imhist() (ซ้าย) ของ MATLAB

    ภาพที่ใช้
    ค่า Histrogram ในแต่ละ Layer Red (R), Green (G), และ Blue (B) ที่ได้จากภาพตามลำดับแถว(ขวา) เปรียบเทียบกับฟังก์ชั่น imhist() (ซ้าย) ของ MATLAB

    ภาพที่ใช้
    ค่า Histrogram ที่ได้(ขวา) เปรียบเทียบกับฟังก์ชั่น imhist() (ซ้าย) ของ MATLAB

    ภาพที่ใช้
    ค่า Histrogram ในแต่ละ Layer Red (R), Green (G), และ Blue (B) ที่ได้จากภาพตามลำดับแถว(ขวา) เปรียบเทียบกับฟังก์ชั่น imhist() (ซ้าย) ของ MATLAB

    ภาพที่ใช้
    ค่า Histrogram ที่ได้(ขวา) เปรียบเทียบกับฟังก์ชั่น imhist() (ซ้าย) ของ MATLAB

    ภาพที่ใช้
    ค่า Histrogram ในแต่ละ Layer Red (R), Green (G), และ Blue (B) ที่ได้จากภาพตามลำดับแถว(ขวา) เปรียบเทียบกับฟังก์ชั่น imhist() (ซ้าย) ของ MATLAB

    ภาพที่ใช้
    ค่า Histrogram ที่ได้(ขวา) เปรียบเทียบกับฟังก์ชั่น imhist() (ซ้าย) ของ MATLAB

    ภาพที่ใช้
    ค่า Histrogram ในแต่ละ Layer Red (R), Green (G), และ Blue (B) ที่ได้จากภาพตามลำดับแถว(ขวา) เปรียบเทียบกับฟังก์ชั่น imhist() (ซ้าย) ของ MATLAB

  4. Histrogram โดยจับภาพจาก Webcam camera แบบ real-time

    เริ่มแรกด้วยการรับค่าจากกล้อง Webcam ก่อนด้วยคำสั่ง videoinput() และ set(input, 'ReturnedColorSpace', 'grayscale'); เพื่อเปลี่ยนภาพที่ได้เป็น grey scale โดยโปรแกรมจะทำงานใน loop ไปเรื่อยๆจนกว่าจะกดปุ่มเพื่อหยุดการทำงาน ในขณะที่โปรแกรมทำงาน จะมีการรับภาพจากกล้องมาใส่ตัวแปร vid และทำการคำนวณ Histrogram ของ frame นั้นด้วยฟังก์ชั่น myBW() และทำการ plot แบบ real-time

    ตัวอย่างภาพจาก video ที่ใช้ (บน) และกราฟด้านล่างเป็นค่า histrogram ของ R,G และ B ตามลำดับ (ล่าง)
    ตัวอย่างภาพจาก video ที่ใช้ (บน) และกราฟด้านล่างเป็นค่า histrogram ของ R,G และ B ตามลำดับ (ล่าง)
    ตัวอย่างภาพจาก video ที่ใช้ (บน) และกราฟด้านล่างเป็นค่า histrogram ของ R,G และ B ตามลำดับ (ล่าง)
    ตัวอย่างภาพจาก video ที่ใช้ (บน) และกราฟด้านล่างเป็นค่า histrogram ของ R,G และ B ตามลำดับ (ล่าง)
    ตัวอย่างภาพจาก video ที่ใช้ (บน) และกราฟด้านล่างเป็นค่า histrogram ของ R,G และ B ตามลำดับ (ล่าง)
    ตัวอย่างภาพจาก video ที่ใช้ (บน) และกราฟด้านล่างเป็นค่า histrogram ของ R,G และ B ตามลำดับ (ล่าง)

  5. Histrogram ของไฟล์ Video แบบ real-time

    ในตัวอย่างนี้เป็นการนำไฟล์ .avi ซึ่งเป็นภาพสี RGB มาทำการหา histrogram แบบ real-time โดยหลักการจะคล้ายกับกับหา histrogram ของภาพสีธรรมดา เริ่มต้นโดยการ import video เข้า MATLAB โดยจะมีตัวแปรที่เก็บภาพที่ frame ต่างๆของ video ไว้ เราจะนำมาแยกเป็นตัวแปรที่เก็บค่า R,G และ B จากนั้นโปรแกรมจะรันใน loop ไปเรื่อยๆเป็นจำนวน n frames โดยภายใน loop จะทำการคำนวณหาค่า Histrogram ด้วยฟังก์ชั่น myRGB() และจะ return ค่า Histrogram ออกมา 3 ค่า คือค่าของ R,G และ B นั่นเอง

    ตัวอย่างภาพจากวีดิโอ (บน) และกราฟด้านล่างเป็นค่า histrogram ของ R,G และ B ตามลำดับ (ล่าง)


Discussion

จากตัวอย่างการหา histrogram ภาพแบบต่างๆนั้น หากภาพที่นำเข้ามามีขนาดที่ใหญ่มาก อาจจะทำให้เกิดปัญหาเวลาประมวลผลจะต้องใช้เวลานานในคอมพิวเตอร์ที่ความสามรถไม่สูงนัก และโดยเฉพาะการหา Histrogram ของ Video และ Webcam แบบ real-time ซึ่งหากมี fps มาก ก็จะส่งผลในเรื่องความช้าของการประมวลผล ทำให้ผลที่ได้นั้นไม่ใกล้เคียงกับ real-time


Conclusion and Future Study

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

ในอนาคตเราสามารถนำ histogram มาจับการเคลื่อนไหวในแบบ real-time system เพื่อสร้างระบบที่สามารถแยกแยะสีที่เกิดขึ้นได้และสามารถนำไปใช้กับอุปกรณ์การแพทย์แบบ telemedicine ได้ในอนาคต นอกจากนี้ ถ้ามีการพัฒนาเทคโนโลยีที่ก้าวหน้ากว่าในปัจจุบัน ก็สามารถนำไปประยุกต์ด้านการทหารเพื่อตรวจจับวัตถุแปลกปลอมได้


Q&A

Question 1:
ชนิดของแสงภายในภาพหนึ่งๆสามารถแบ่งออกได้เป็นกี่ประเภท อะไรบ้างจงอธิบาย
Answer:

สามารถแบ่งออกได้เป็น 3 ประเภทใหญ่ๆ ได้แก่ Shadows, Midtones และ Highlights

  • Shadow เป็นส่วนมืดของภาพ ทำให้เห็นรายละเอียดไม่ค่อยชัด มักจะตกอยู่ในเงาของสิ่งต่างๆภายในภาพ
  • Midtone เป็นแสงส่วนที่ตามนุษย์สามารถมองเห็นได้โดยไม่แสบตา ซึ่งแสงโดยมากในชีวิตประจำวัน จะอยู่ในช่วงนี้
  • Highlight เป็นส่วนที่สว่างที่สุดของภาพ หากเพ่งไปที่บริเวณนี้จะรู้สึกแสบตา ทำให้เห็นรายละเอียดไม่ค่อยชัด

Question 2:
Histogram มีประโยชน์อย่างไรต่อการถ่ายภาพ
Answer:
ในยุคปัจจุบันกล้องจำพวก DSLR สามารถแสดง histogram ของภาพที่เลนส์กำลังจับอยู่ได้ ดังนั้นก่อนการถ่ายภาพ เพื่อให้ได้ภาพที่สวยงาม จึงควรดูปริมาณแสงให้อยู่ในช่วง midtone นั้นมีมากกว่าช่วง highlight และ shadow

Question 3:
หากภาพมีค่า histogram ไม่เหมาะสม จะก่อให้เกิดผลเสียอย่างไร
Answer:
กล้องโดยทั่วไปแล้วจะมีจุดด้อยในการจับรายละเอียดของภาพในที่มืดและในที่สว่าง โดยรายละเอียดในที่มืดมักจะถูก noise รบกวน ทำให้สีที่ได้เพี้ยน ทำให้คุณภาพของภาพที่ได้ลดลง ส่วนจุดด้อยในการจับรายละเอียดของภาพในที่สว่างคือ รายละเอียดของภาพจะหายไปในบริเวณที่มีค่า highlight สูง เรียกว่า clipped highlight หรือ overblown highlights