图像增强-直方图均衡化
2016-10-25 11:09
302 查看
1.图像直方图统计
直方图是图像的一种统计表示形式,对于一幅灰度图来说,其灰度统计直方图可以反映该图像中不同灰度级出现的统计情况。一般而言,图像的视觉效果和其直方图有对应关系,通过调整或变换其直方图的形状会对图像显示效果有很大影响。
灰度级范围为[0,L-1]的数字图像的直方图是离散函数:
其中
第k级灰度值,
是图像中灰度为的像素个数
归一化直方图,用图像像素总数MN除以它的每一个分量。公式如下:
是灰度级在图像中出现的概率估计
以下是我用matlab显示图像的直方图。
matlab代码
通过直方图的分析,可以发现:
(1)在暗的图像中,直方图的分量集中在灰度级的低端,而亮图像直方图则集中在灰度级的高端。
(2)如果一幅图的像素倾向于占据整个可能的灰度级且分布均匀,则该图像会有较高对比度,细节丰富且动态范围较大。
2. 直方图均衡原理
直方图变换公式:
, r = 0,1,...,L-1
r表示原图像的灰度,其取值区间为[0,L-1],且
0表示黑色,L-1表示白色。对于输入图像中每一个具有r值的像素值产生一个输出的灰度值s。并且假设,
(1)T(r)在区间[0,L-1]上为单调递增函数
(2)当r取值[0,L-1]时,T(r)的取值范围也在[0,L-1]
通过推导公式(此处略去,一是麻烦,一是网上很容易找到这部分),得出以下结论公式
其中,MN是图像中像素的总数,nk是灰度rk为的像素个数,L是图像中可能的灰度级的数量。
以下是C++实现图像直方图均衡化:
直方图是图像的一种统计表示形式,对于一幅灰度图来说,其灰度统计直方图可以反映该图像中不同灰度级出现的统计情况。一般而言,图像的视觉效果和其直方图有对应关系,通过调整或变换其直方图的形状会对图像显示效果有很大影响。
灰度级范围为[0,L-1]的数字图像的直方图是离散函数:
其中
第k级灰度值,
是图像中灰度为的像素个数
归一化直方图,用图像像素总数MN除以它的每一个分量。公式如下:
是灰度级在图像中出现的概率估计
以下是我用matlab显示图像的直方图。
matlab代码
srcImage= imread('D:\gamma\2.jpg'); grayImage= rgb2gray(srcImage); figure; subplot(1,3,1); imshow(grayImage);title('grayImage'); subplot(1,3,2); imhist(grayImage);title('hist'); [M,N]= size(grayImage); [counts,x]= imhist(grayImage); counts= counts/M/N; subplot(1,3,3); stem(x,counts); |
(1)在暗的图像中,直方图的分量集中在灰度级的低端,而亮图像直方图则集中在灰度级的高端。
(2)如果一幅图的像素倾向于占据整个可能的灰度级且分布均匀,则该图像会有较高对比度,细节丰富且动态范围较大。
2. 直方图均衡原理
直方图变换公式:
, r = 0,1,...,L-1
r表示原图像的灰度,其取值区间为[0,L-1],且
0表示黑色,L-1表示白色。对于输入图像中每一个具有r值的像素值产生一个输出的灰度值s。并且假设,
(1)T(r)在区间[0,L-1]上为单调递增函数
(2)当r取值[0,L-1]时,T(r)的取值范围也在[0,L-1]
通过推导公式(此处略去,一是麻烦,一是网上很容易找到这部分),得出以下结论公式
其中,MN是图像中像素的总数,nk是灰度rk为的像素个数,L是图像中可能的灰度级的数量。
以下是C++实现图像直方图均衡化:
BOOLInteEqualize(LPSTR lpDIBBits, LONG lWidth, LONG lHeight) { unsignedchar* lpSrc; // 指向源图像的指针 LONGlTemp; // 临时变量 LONG i; // 循环变量 LONG j; LONG lCount[256]; // 灰度映射表 BYTE bMap[256]; // 灰度映射表 LONG lLineBytes; // 图像每行的字节数 lLineBytes =WIDTHBYTES(lWidth * 8);// 计算图像每行的字节数 for (i = 0; i <256; i ++) // 重置计数为0 { lCount[i] = 0; } // 计算各个灰度值的计数 for (i = 0; i <lHeight; i ++) { for (j = 0; j< lWidth; j ++) { lpSrc =(unsigned char *)lpDIBBits + lLineBytes * i + j; lCount[*(lpSrc)]++; } } // 计算灰度映射表 for (i = 0; i <256; i++) { lTemp = 0; for (j = 0; j <=i ; j++) { lTemp +=lCount[j]; } // 计算对应的新灰度值 bMap[i] = (BYTE)(lTemp * 255 / lHeight / lWidth); } for(i = 0; i <lHeight; i++) // 每行 { for(j = 0; j <lWidth; j++) // 每列 { //指向DIB第i行,第j个象素的指针 lpSrc =(unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j; // 计算新的灰度值 *lpSrc =bMap[*lpSrc]; } } return TRUE; } |
相关文章推荐
- 直方图均衡化,图像增强
- 图像增强之(一)---直方图均衡化
- 图像增强方法之 直方图均衡化 (的原理)
- OpenCV 图像增强—直方图均衡化和灰度拉伸
- OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)
- 图像增强之直方图均衡化
- 图像增强之直方图均衡化
- 图像处理中的直方图应用(通过直方图均衡化增强图像对比度)
- 图像增强--图像对比度、线性展宽、灰级窗、线性动态范围调整、直方图均衡化
- OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)
- OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)
- OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)
- 图像增强之(一)---直方图均衡化
- 【EMGUCV】图像的直方图均衡化增强
- 灰度图像--图像增强 直方图均衡化(Histogram equalization)
- 图像直方图均衡化增强opencv与C语言版
- 灰度图像--图像增强 直方图均衡化(Histogram equalization)
- OpenCV图像增强:直方图拉伸和直方图均衡化
- 图像增强—限制对比度自适应直方图均衡化
- matlab自定义函数 灰度图像直方图均衡化(图像增强)