January 11, 2019
คือ Intensity distribution ของภาพ หาได้จากการ plot กราฟ โดยแกน x จะเป็นค่าสีของภาพที่มี channel เดียว อาจจะ Plot หลาย Channel รวมกันก็ได้ ถ้าเป็นภาพสีก็ Plot แยก R, G, และ B (ส่วนมากจะมีค่า 0-255 แต่ก็ไม่เสมอไป) ส่วนแกน y จะเป็นจำนวน pixel ที่มีค่าสีนั้น
โดยประโยชน์ของเจ้า Histogram ก็คือ จะทำให้เรารู้แนวโน้มของค่าต่างๆได้ เช่น Contrast, Brightness, Intensity และอื่นๆ ซึ่งจะทำให้เรารู้ว่า เราควรปรับแต่งภาพอย่างไร หรือตั้งค่าอะไรที่กล้องเพิ่มเติมได้ง่ายขึ้น
ตัวอย่างจะใช้ OpenCV กับ Matplotlib ในการสร้าง histogram โดย convert ภาพเป็น Grayscale ก่อน Plot
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 แต่ภาพเป็นโทนมืดค่าที่ได้ก็จะน้อย เหมือนตัวอย่างข้างล่างนี้