直方圖均衡化算法
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]; } }
效果圖:
原圖:
灰度圖:
亮度變換後的效果: