SKCONAN

มารู้จักกับ Histogram ของรูปภาพกัน (พร้อมตัวอย่างการใช้งานบน OpenCV)

January 11, 2019

title

Histogram คืออะไร

คือ Intensity distribution ของภาพ หาได้จากการ plot กราฟ โดยแกน x จะเป็นค่าสีของภาพที่มี channel เดียว อาจจะ Plot หลาย Channel รวมกันก็ได้ ถ้าเป็นภาพสีก็ Plot แยก R, G, และ B (ส่วนมากจะมีค่า 0-255 แต่ก็ไม่เสมอไป) ส่วนแกน y จะเป็นจำนวน pixel ที่มีค่าสีนั้น

โดยประโยชน์ของเจ้า Histogram ก็คือ จะทำให้เรารู้แนวโน้มของค่าต่างๆได้ เช่น Contrast, Brightness, Intensity และอื่นๆ ซึ่งจะทำให้เรารู้ว่า เราควรปรับแต่งภาพอย่างไร หรือตั้งค่าอะไรที่กล้องเพิ่มเติมได้ง่ายขึ้น


ตัวอย่างการสร้าง Histogram

ตัวอย่างจะใช้ OpenCV กับ Matplotlib ในการสร้าง histogram โดย convert ภาพเป็น Grayscale ก่อน Plot

00
00
import cv2

from matplotlib import pyplot as plt

img = cv2.imread('00.png')

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

hist = cv2.calcHist([gray], [0], None, [256], [0, 256])

cv2.imshow('images', img)

cv2.imshow('Grayscale', gray)

plt.plot(hist, color='blue')

plt.title('Histogram of Grayscale')

plt.show()

จากผลลัพธ์ที่ได้จะเห็นว่าภาพมีความสว่างมาก หรือมีโทนสีที่สว่างทำให้ค่าที่ได้ส่วนใหญ่มากกว่า 127 แต่ภาพเป็นโทนมืดค่าที่ได้ก็จะน้อย เหมือนตัวอย่างข้างล่างนี้

01



© 2019, Built with