EqualizeHist函数
1、EqualizeHist函數(shù)
函數(shù)作用:
直方圖均衡化,,用于提高圖像的質(zhì)量
2、EqualizeHist函數(shù)調(diào)用形式
C++:?void?equalizeHist(InputArray?src, OutputArray?dst)
opencv代碼:
<span style="font-family:sans-serif;">#include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #include <stdio.h>using namespace cv; using namespace std; int main() {Mat src = imread("D:6.jpg", 1);cvtColor(src, src, CV_BGR2GRAY);Mat dst;equalizeHist(src, dst);imshow("shiyan", dst);waitKey(0);return 0; }</span>
參考別人的:
直方圖均衡化
目標(biāo)
在這個(gè)教程中你將學(xué)到:
- 什么是圖像的直方圖和為什么圖像的直方圖很有用
- 用OpenCV函數(shù)?equalizeHist?對(duì)圖像進(jìn)行直方圖均衡化
原理
圖像的直方圖是什么?
- 直方圖是圖像中像素強(qiáng)度分布的圖形表達(dá)方式.
- 它統(tǒng)計(jì)了每一個(gè)強(qiáng)度值所具有的像素個(gè)數(shù).
直方圖均衡化是什么?
- 直方圖均衡化是通過(guò)拉伸像素強(qiáng)度分布范圍來(lái)增強(qiáng)圖像對(duì)比度的一種方法.
- 說(shuō)得更清楚一些, 以上面的直方圖為例, 你可以看到像素主要集中在中間的一些強(qiáng)度值上. 直方圖均衡化要做的就是?拉伸?這個(gè)范圍. 見下面左圖: 綠圈圈出了?少有像素分布其上的?強(qiáng)度值. 對(duì)其應(yīng)用均衡化后, 得到了中間圖所示的直方圖. 均衡化的圖像見下面右圖.
直方圖均衡化是怎樣做到的?
-
均衡化指的是把一個(gè)分布 (給定的直方圖)?映射?到另一個(gè)分布 (一個(gè)更寬更統(tǒng)一的強(qiáng)度值分布), 所以強(qiáng)度值分布會(huì)在整個(gè)范圍內(nèi)展開.
-
要想實(shí)現(xiàn)均衡化的效果, 映射函數(shù)應(yīng)該是一個(gè)?累積分布函數(shù) (cdf)?(更多細(xì)節(jié), 參考*學(xué)習(xí)OpenCV*). 對(duì)于直方圖?, 它的?累積分布?是:
要使用其作為映射函數(shù), 我們必須對(duì)最大值為255 (或者用圖像的最大強(qiáng)度值) 的累積分布??進(jìn)行歸一化. 同上例, 累積分布函數(shù)為:
-
最后, 我們使用一個(gè)簡(jiǎn)單的映射過(guò)程來(lái)獲得均衡化后像素的強(qiáng)度值:
例程
-
咋個(gè)例程是用來(lái)干嘛的?
- 加載源圖像
- 把源圖像轉(zhuǎn)為灰度圖
- 使用OpenCV函數(shù)?EqualizeHist?對(duì)直方圖均衡化
- 在窗體中顯示源圖像和均衡化后圖像.
-
下載例程: 點(diǎn)擊?這里
-
例程一瞥:
說(shuō)明
聲明原圖和目標(biāo)圖以及窗體名稱:
Mat src, dst;char* source_window = "Source image"; char* equalized_window = "Equalized Image";加載源圖像:
src = imread( argv[1], 1 );if( !src.data ){ cout<<"Usage: ./Histogram_Demo <path_to_image>"<<endl;return -1;}轉(zhuǎn)為灰度圖:
cvtColor( src, src, CV_BGR2GRAY );利用函數(shù)?equalizeHist?對(duì)上面灰度圖做直方圖均衡化:
equalizeHist( src, dst );可以看到, 這個(gè)操作的參數(shù)只有源圖像和目標(biāo) (均衡化后) 圖像.
顯示這兩個(gè)圖像 (源圖像和均衡化后圖像) :
namedWindow( source_window, CV_WINDOW_AUTOSIZE ); namedWindow( equalized_window, CV_WINDOW_AUTOSIZE );imshow( source_window, src ); imshow( equalized_window, dst );等待用戶案件退出程序
waitKey(0); return 0;結(jié)果
為了更好地觀察直方圖均衡化的效果, 我們使用一張對(duì)比度不強(qiáng)的圖片作為源圖像輸入, 如下圖:
它的直方圖為:
注意到像素大多集中在直方圖中間的強(qiáng)度上.
使用例程進(jìn)行均衡化后, 我們得到下面的結(jié)果:
這幅圖片顯然對(duì)比度更強(qiáng). 再驗(yàn)證一下均衡化后圖片的直方圖:
注意到現(xiàn)在像素在整個(gè)強(qiáng)度范圍內(nèi)均衡分布.
總結(jié)
以上是生活随笔為你收集整理的EqualizeHist函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: compareHist函数 例子
- 下一篇: OpenCV中矩阵的归一化*(Norma