HistogramA Study in Image-processing Histogram
A Study in Image-processing Histogram
การศึกษาเกี่ยวกับฮิสโตแกรมในงาน Image processing
การศึกษาเกี่ยวกับฮิสโตแกรมในงาน Image processing
การแสดงข้อมูลโดยใช้แผนภูมิกราฟแบบแท่ง โดยข้อมูลของแกนตั้งจะเป็นค่าความถี่ของข้อมูล และข้อมูลของแกนนอน จะเป็นข้อมูลของคุณสมบัติสิ่งที่เราสนใจ ในที่นี้ คือ จำนวนของ pixel สีนั้นๆ ของภาพที่สนใจ เรียกว่าระดับความสว่าง มักแบ่งเป็น 256 ระดับ (0-255) เรียกว่าระดับสีเทา หรือ gray level ยิ่งระดับ gray level มีค่าน้อย จะทำให้ pixel นั้นๆ จะยิ่งมีสีเข้ม (ความสว่างน้อย) ระดับสีของ pixel ที่นับ จึงจะอยู่ในระดับ ดำ - ขาว ตามการเรียงลำดับข้อมูลนั้นๆ จากค่าน้อยไปค่ามาก ตามรูปแบบของกราฟ Histogram ซึ่งในที่นี้ คือ จะเรียงลำดับจากพื้นที่ ที่มีความสว่าง จากสว่างน้อยไปสว่างมาก โดยการเรียงของข้อมูลนั้น จะมีเพื่อใช้ดูความแปรปรวนของกระบวนการของภาพที่สนใจ โดยการสังเกตรูปร่างของ Histogram ที่สร้างขึ้นจากข้อมูลที่ได้มาโดยการสุ่มตัวอย่าง
Histogram มีประโยชน์ในการหาค่าของการแจกแจงความถี่ของข้อมูลของสิ่งที่เราต้องการวิเคราะห์ เพื่อวิเคราะห์ว่า ข้อมูลที่เราสนใจจะมีการแจกแจงความถี่หรือการกระจายของข้อมูลแบบใด เพื่อใช้ตรวจสอบคุณสมบัติของข้อมูล ตลอดจนการประมาณการลักษณะคุณภาพที่ได้จากการผลิต ข้อมูลที่ได้จาก Histogram นี้ จะแสดงค่าความเบี่ยงเบนของข้อมูล ว่ามีลักษณะการกระจายตัว เป็นแบบระฆังคว่ำ (Normal Distribution) หรือไม่ หรือมีความเบี่ยงเบนไปทางบวกหรือลบ หรือมีลักษณะรูปแบบแบบฟันเลื่อย หรือแบบหน้าผา เป็นต้น ทำให้มองเห็นว่าความเบี่ยงเบนที่เกิดขึ้นจาก Normal Distribution ควรจะแก้ไขอย่างไร
Histogram จะใช้เพื่อตรวจสอบความผิดปกติ โดยดูการกระจายของกระบวนการทำงาน หรือเมื่อต้องการเปรียบเทียบข้อมูลกับเกณฑ์ที่กำหนด หรือค่าสูงสุด-ต่ำสุด โดยสามารถตรวจสอบสมรรถนะของกระบวนการทำงาน (Process Capability) และจะมีประโยชน์มากยิ่งขึ้นเมื่อข้อมูลมีจำนวนมาก
เริ่มต้นด้วยการเปิดไฟล์ DICOM เข้าโปรแกรม MATLAB โดยการใช้ dicomread
จากนั้น ฟังก์ชั่น myBW()
จะคำนวณหา Histrogram ของภาพ DICOM ที่ใส่เข้าไป จากนั้นนำค่าที่ได้มาพลอตกราฟ
โปรแกรมจะทำการ 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 ของภาพถ่ายทั้งแบบภาพ 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
เริ่มแรกด้วยการรับค่าจากกล้อง Webcam ก่อนด้วยคำสั่ง videoinput()
และ set(input, 'ReturnedColorSpace', 'grayscale');
เพื่อเปลี่ยนภาพที่ได้เป็น grey scale โดยโปรแกรมจะทำงานใน loop ไปเรื่อยๆจนกว่าจะกดปุ่มเพื่อหยุดการทำงาน ในขณะที่โปรแกรมทำงาน จะมีการรับภาพจากกล้องมาใส่ตัวแปร vid และทำการคำนวณ Histrogram ของ frame นั้นด้วยฟังก์ชั่น myBW()
และทำการ plot แบบ 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 ภาพแบบต่างๆนั้น หากภาพที่นำเข้ามามีขนาดที่ใหญ่มาก อาจจะทำให้เกิดปัญหาเวลาประมวลผลจะต้องใช้เวลานานในคอมพิวเตอร์ที่ความสามรถไม่สูงนัก และโดยเฉพาะการหา Histrogram ของ Video และ Webcam แบบ real-time ซึ่งหากมี fps มาก ก็จะส่งผลในเรื่องความช้าของการประมวลผล ทำให้ผลที่ได้นั้นไม่ใกล้เคียงกับ real-time
ผลจากการอ่านภาพแต่ละประเภทเราสามารถรู้ข้อมูลเกี่ยวกับภาพเพื่อนำมาวิเคราะห์ภาพที่เกิดขึ้นโดยสามารถวิเคราะห์ได้ทั้ง grayscale และ RGB โดยใช้วิธีการ histogram พร้อมทั้งเปรียบเทียบกับ histogram ที่เป็นฟังช์ชันใน MATLAB เพื่อวิเคราะห์ความเหมือนและแตกต่างกันในแต่ภาพ
ในอนาคตเราสามารถนำ histogram มาจับการเคลื่อนไหวในแบบ real-time system เพื่อสร้างระบบที่สามารถแยกแยะสีที่เกิดขึ้นได้และสามารถนำไปใช้กับอุปกรณ์การแพทย์แบบ telemedicine ได้ในอนาคต นอกจากนี้ ถ้ามีการพัฒนาเทคโนโลยีที่ก้าวหน้ากว่าในปัจจุบัน ก็สามารถนำไปประยุกต์ด้านการทหารเพื่อตรวจจับวัตถุแปลกปลอมได้
สามารถแบ่งออกได้เป็น 3 ประเภทใหญ่ๆ ได้แก่ Shadows, Midtones และ Highlights