直方图均衡化算法
1.将灰度图直方图化,计算各个像素级的像素数目
2.形成累积直方图
3.建立新的亮度查找表
程序源代码:
#include "stdafx.h" #include "cv.h" #include "highgui.h" #include "cxcore.h" void histogram1(IplImage *src) { assert(src->nChannels == 1); //assert(src1->nChannels == 1); int histogram[256] = {0}; int chistogram[256] = {0}; for(int h=0;h<src->height;h++) { unsigned char *p = (unsigned char *)src->imageData+h*src->widthStep; for(int w=0;w<src->width;w++) { histogram[*p++]++;//计算直方图 } } int flag = 0; for(int i=0;i<256;i++)//形成累积直方图 { if(flag==0) { chistogram[0] = 0; flag = 1; } else { chistogram[i] = chistogram[i-1]+histogram[i]; } } int T[256] = {0}; for(int i=0;i<256;i++) { T[i] = (int)(255/(src->width*src->height))*chistogram[i];//建立新的查找表 } for(int h=0;h<src->height;h++) for(int w=0;w<src->width;w++) { int pixel = *(src->imageData +h*src->widthStep+w); *(src->imageData +h*src->widthStep+w) = T[pixel]; } }
效果图:
原图:
灰度图:
亮度变换后的效果: