Histogram Equalization

Image processing

สวัสดีครับ เว็บนี้จะเป็นเว็บที่อธิบายการทำงานในส่วนของ Image processing ในเรื่องของการทำ Histogram Equalization หรือก็คือกระบวนการปรับความสว่างของรูปภาพวิธีหนึ่งเพื่อให้เห็นรายละเอียดของภาพได้ดีขึ้น
The sea The sea
ผมขอย่อขนาดรูปภาพเป็นรูปด้านล่าง
The sea
ซึ่งรูปดังกล่าวนั้นสมมุติว่ามีขนาด 15 x 23

(15 x 23)

หรือก็คือหากเราขยายภาพจนสามารถเห็น Pixel แต่ละจุดในภาพนั้น ก็จะมีจุด pixel แนวนอน 15 จุด และ pixel แนวตั้ง 23 จุดดังรูป
ซึ่งสีใน Pixel แต่ละจุดนั้นเกิดจากค่าสีที่แตกต่างกัน จากตัวอย่างในรูป เป็นรูป Graysclae ที่ค่าแต่ละ Pixel มีได้ตั้งแต่ 0-255 ดังรูป
ตอนแรกเราจะทำ Histogram ก่อน หรือก็คือการนับค่าสีที่เท่ากันว่ามีกี่จำนวนบ้าง
จาก Histogram ในตัวอย่างด้านบนจะเห็นว่า มี Pixel มีที่มีค่า 6 อยู่ 3 จำนวน, มี Pixel ที่มีค่า 7 อยู่ 1 จำนวน, มี Pixel ที่มีค่า 8 อยู่ 4 จำนวน เป็นด้น
หลังจากได้ Histogram แล้ว เพื่อให้เห็นภาพมากขึ้นขอขยายกราฟแกน Y เป็นกราฟด้านล่าง
หลังจากได้ Histogram ก็มาทำ Cumulative Histogram ดังนี้
\begin{equation*} cdf(i) = \sum_{j=0}^i h(j) \end{equation*}
เมื่อได้ Cumulative Histogram แล้วก็นำมาคำนวณ Histogram Equalization ดังนี้
\begin{equation*} h(v) = round\left(\frac{cdf(v) - cdf_{min}}{(M \times N) - cdf_{min}} \times (L - 1)\right) \end{equation*}
h(v) = round((cdf(v) - cdf_min)/((M * N) - cdf_min) * (L - 1))
Note:
M คือ จำนวน Pixel ในแนวตั้งของรูปภาพ ในตัวอย่างนี้มีค่า 23
N คือ จำนวน Pixel ในแนวนอนของรูปภาพ ในตัวอย่างนี้มีค่า 15
L คือ ค่าของ ความสว่างของแสงสีใน Pixel ที่เป็นไปได้ทั้งหมด ในตัวอย่างนี้คือ 256 เพราะว่าค่าของแสงสว่างในรูปภาพขาวดำมีค่าได้ตั้งแต่ 0 ถึง 255
cdf_min คือ ค่าที่น้อยที่สุดที่ได้จากการทำ Comulative ในตัวอย่างนี้มีค่าเป็น 3
เสร็จแล้วนำค่าที่คำนวณ Histogram Equalization ที่ได้ มาทำการแก้ค่าความสว่างของแสงสีในรูปภาพ
จากรูปด้านบน รูปแรกคือภาพดั้งเดิม ส่วนภาพที่สองคือภาพที่ทำการ Histogram Equalization (ภาพที่สองคือภาพที่มีตัวเลขสีแดง)
หวังว่าโพสน์นี้จะมีประโยชน์นะครับ ขอบคุณครับ 😊

Increate speed: 500