【数字图像处理之二】图像直方图均衡化

来源:互联网 发布:视频行为分析算法 编辑:程序博客网 时间:2024/04/27 13:07

直方图均衡化的作用是,让图像中比较暗或亮的地方变得清晰。

直方图均衡化步骤:

① 统计图像中0~255各灰度级的个数,记录进一个数组里面。


② 计算各灰度级的个数占总个数的百分比


③ 然后 f(n+1) = f(1)+f(2)+……+f(n)  n ← 1 to n-1


④ 然后所有分数乘以255,下取整

④ ⑤ 最后把原图像的数字替换成计算后的数字。


<span style="white-space:pre"></span>double Histogram[256];//建立一个直方图数组double hs[256];double sum=0;/** * 图像未经处理的时候 */memset(Histogram,0,sizeof(Histogram));int i,j,k;for(j=-1;++j<hImage;){for(k=-1;++k<wImage;){Histogram[(int)Imagebyte[j][k].R]++;}}/** * 输出直方图 */ShowProcessing(Histogram,50,100);/** * 显示处理前的图像 */ShowImage(340,0);/** * 对直方图进行均衡化 */i=0;hs[i]=Histogram[i]/(hImage*wImage);//第一位算出百分比sum+=hs[i];//加第一个百分比for(;++i<256;){//from 1 upto 255hs[i]=Histogram[i]/(double)(hImage*wImage);//第二位及以后算出百分比sum+=hs[i];//从第二位不停地累加hs[i]=sum;//将累加值赋给指定位置}/** * 图像新值 等于 百分比*255 */for(i=-1;++i<hImage;){for(j=-1;++j<wImage;){Imagebyte[i][j].R=Imagebyte[i][j].G=Imagebyte[i][j].B=hs[Imagebyte[i][j].R]*255;Imagebyte[i][j].RC=Imagebyte[i][j].BC=Imagebyte[i][j].GC=255-Imagebyte[i][j].R;}}/** * 图像经过处理后 */memset(Histogram,0,sizeof(Histogram));for(j=-1;++j<hImage;){for(k=-1;++k<wImage;){Histogram[(int)Imagebyte[j][k].R]++;}}/** * 输出直方图 */ShowProcessing(Histogram,50,370);/** * 显示处理过后的图像 */ShowImage(340,hImage);

直方图均衡化前后对比



0 0