一般而言,图片有RGB三通道,每个通道用一个byte表示,取值范围在0到255之间。对于每个通道,我们都可以计算图像的直方图,其实就是统计每个像素值的出现频率,如下图所示:
直方图均衡化的效果,即把原图的三通道的直方图变成均匀分布,每种像素值出现的次数都差不多,下面是直方图均衡化后的效果(直方图是用光影查看的,生成效果图的代码见后):
可以看到,图片的直方图很均匀。
直方图均衡化的代码:
bool GFImage::HistogramEqualization()
{
vector<vector<uchar> > pixMaps;
CalculateMapFunByHisEq(pixMaps);
for (int ch = 0; ch < GetChannel(); ch++)
{
uchar * pData = GetData();
for (int r = 0;r < GetHeight(); r++)
{
uchar * pLine = p