影像直方圖與直方圖均化
(Image Histogram and Histogram Equalization)
全彩影像,所有可能出現的色彩共有 224 種不同的色彩值。利用C++ Builder物件導向程式設計,撰寫一個程式針對所有不同色彩值進行影像的自動調整。
影像的自動調整透過公式的演算產生不同的調整效果:
|
|
(負片效果)
|
(灰階效果)
|
而直方圖均化(histogram equalization)就是一種自動調整影像對比的演算法。
直方圖均化公式:g(x, y) = cdf ( f(x, y) ) * 255
將原影像f的像素色彩值f(x, y)的累積密度函數值乘上最大色階值,即為調整後影像g的像素色彩值 g(x, y)。
透過這樣的處理調整,均化了原始圖像的對比,使得原本過暗或過亮的部分得以均衡顯示。
|
|
在進行直方圖均化前,必須完成累積直方圖的程序,而累積直方圖即是將紅、綠、藍等三原色進行統計後,宣告儲存各個色彩出現次數進行累加。
本次的作業分成兩部分:
第一部分為影像中紅、綠、藍三原色的統計直方圖。
另一部分為直方圖均化的影像調整。
在撰寫直方圖程式之前首先必須瞭解C++
Builder物件導向程式設計畫布元件的型態與使用,分別介紹到
// 用預先定義的常數 clRed、clGreen... 指定畫筆的顏色。
Image1->Canvas->Pen->Color = clRed;
//用RGB marco 指定畫筆的顏色。
Image1->Canvas->Pen->Color = (TColor) RGB(255,0,0);
//用色彩選擇對話視窗來指定畫筆的顏色。
Image1->Canvas->Pen->Color = ColorDialog1->Color;
// 指定畫筆寬度為 2。
Image1->Canvas->Pen->Width = 2;
// 指定畫筆風格為點線風格 。
Image1->Canvas->Pen->Style = psDot;
Image1->Canvas->Pen->Color = clRed;
//用RGB marco 指定畫筆的顏色。
Image1->Canvas->Pen->Color = (TColor) RGB(255,0,0);
//用色彩選擇對話視窗來指定畫筆的顏色。
Image1->Canvas->Pen->Color = ColorDialog1->Color;
// 指定畫筆寬度為 2。
Image1->Canvas->Pen->Width = 2;
// 指定畫筆風格為點線風格 。
Image1->Canvas->Pen->Style = psDot;
TCanvas 提供移動畫筆至特定座標的函式 MoveTo。
// 將畫筆移到座標 (100, 100)。
Image1->Canvas->MoveTo(100, 100);
// 將畫筆移到座標 (100, 100)。
Image1->Canvas->MoveTo(100, 100);
TCanvas 提供從畫筆目前座標畫一條線到特定座標的函式 LineTo。
//從畫筆目前座標 (100, 100) 畫一條線到座標 (200, 100)。
Image1->Canvas->LineTo(200, 100);
//從畫筆目前座標 (100, 100) 畫一條線到座標 (200, 100)。
Image1->Canvas->LineTo(200, 100);
最後實作Histogram RGB三原:
HistogramR
HistogramG
HistogramB
Histogram RGB
Histogram Equalization比較圖 (上:原圖,下:均化)
因為原圖是在白天拍攝,光線對比已趨近均勻,故均化後的色彩對比亮度整體來講不太綿顯。
透過直方圖均衡化來增加許多圖像的全局對比度,尤其是當圖像的對比度相當接近的時候,亮度可以更好地在直方圖上分布。這樣就可以用於增強局部的對比度而不影響整體的對比度,通過有效地擴展常用的亮度來實現這種功能。
這種方法對於背景和前景都太亮或者太暗的圖像非常有用,這種方法尤其是可以帶來X光圖像中更好的骨骼結構顯示以及曝光過度或者曝光不足照片中更好的細節。
這種方法的一個主要優勢是它是一個相當直觀的技術並且是可逆操作,如果已知均衡化函數,那麼就可以恢復原始的直方圖,並且計算量也不大。
這種方法的一個缺點是它對處理的數據不加選擇,它可能會增加背景雜訊的對比度並且降低有用訊號的對比度。
沒有留言:
張貼留言