該函式為開放計算機視覺(OpenCV)庫庫函式,用來使灰度圖象直方圖均衡化。
定義:
void cvEqualizeHist( const CvArr* src, CvArr* dst );
參數:
src輸入的 8-比特 單信道圖像
dst輸出的圖像與輸入圖像大小與數據類型相同
函式 cvEqualizeHist 採用如下法則對輸入圖像進行直方圖均衡化:
1:計算輸入圖像的直方圖 H
2:直方圖歸一化,因此直方塊和為255
3:計算直方圖積分
4:採用H'作為查詢表:dst(x,y)=H'(src(x,y))進行圖像變換。
該方法歸一化圖像亮度和增強對比度。
直方圖均衡化,可以將比較淡的圖像變換為比較深的圖像(即增強圖像的亮度及對比度)。直方圖均衡化後面潛在的數學原理是一個分布(輸入的亮度直方圖)被映射到另一個分布(一個更寬,理想統一的亮度值分布),映射函式是一個累積分布函式。對於連續分布,結果將是準確的均衡化。在cvEqualizeHist中,原始圖像及目標圖像必須是單通道,大小相同的8點陣圖像,對於彩色圖像,必須先將每個通道分開,再分別進行直方圖均衡化處理,然後將通道合併形成新的圖像。操作方法如下:
Split |
Split 分割多通道數組成幾個單通道數組或者從數組中提取一個通道 void cvSplit( const CvArr* src, CvArr* dst0, CvArr* dst1, CvArr* dst2, CvArr* dst3 ); #define cvCvtPixToPlane cvSplit src 原數組. dst0...dst3 目標通道 函式 cvSplit 分割多通道數組成分離的單通道數組d。可獲得兩種操作模式 . 如果原數組有N通道且前N輸出數組非NULL, 所有的通道都會被從原數組中提取,如果前N個通道只有一個通道非NULL函式只提取該指定通道,否則會產生一個錯誤,餘下的通道(超過前N個通道的以上的)必須被設定成NULL,對於設定了COI的IplImage 結使用cvcopy 也可以從圖像中提取單通道。 |
Merge |
Merge 從幾個單通道數組組合成多通道數組或插入一個單通道數組 void cvMerge( const CvArr* src0, const CvArr* src1, const CvArr* src2, const CvArr* src3, CvArr* dst ); #define cvCvtPlaneToPix cvMerge src0... src3 輸入的通道. dst 輸出數組. 函式cvMerge 是前一個函式的反向操作。如果輸出數組有N個通道並且前N個輸入通道非NULL,就拷貝所有通道到輸出數組,如果在前N個通道中只有一個單通道非NULL ,只拷貝這個通道到輸出數組,否則 就會產生錯誤。除前N通道以外的餘下的通道必須置NULL。對於設定了COI的 IplImage結構使用 cvCopy也可以實現向圖像中插入一個通道 。 |
灰度圖象直方圖均衡化
void cvEqualizeHist( const CvArr* src, CvArr* dst );
src
輸入的 8-比特 單信道圖像
dst
輸出的圖像與輸入圖像大小與數據類型相同