主要讨论直方图均衡化、直方图规定化(匹配)、局部直方图、限制对比度自适应直方图均衡化(CLAHE)、基于直方图统计的图像增强
1. 直方图均衡化
基本思想是:尽可能的使每个灰度级的像素数量相等
图1-1. 直方图均衡化的效果(截自《数字图像处理》)
从上图可以看到,直方图均衡化的作用是:使图像灰度级跨越更宽的灰度级范围,从而提高图像对比度
直方图均衡化的另一个优势是:不需要额外参数,整个过程是自动的
直方图均衡化的缺点是:拉伸后有些灰度级可能不被映射到,造成图像观感上的颗粒感
算法步骤:
1)计算图像灰度直方图,并进行归一化(除以总像素数)
2)计算归一化直方图的累积直方图 fHist[ L-1 ]
3)对原始图灰度S,变换后的灰度D = fHist[S] * (L-1)
代码:
void equalizeHist(byte* pBuffer, byte* out, int height, int width)
{
//假定为8位图像
int hist[256] = { 0 };
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
byte* pNow = pBuffer + i * width + j;
hist[int(*pNow)]++;
}
}
float fHist[256] = { 0 };
float len = height*width;
for (int i = 0; i < 256; i++)
fHist[i] = hist[i] / len;
for (int i = 1; i < 256; i++)
fHist[i] = fHist[i - 1] + fHist[i];
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
byte* pNow = pBuffer + i * width + j;
out[i*width+j]= int(fHist[int(*pNow)] * 255 + 0.5);
}
}
}
2. 直方图规定化(匹配)
直方图均