零昔无浪

让今天的自己比过去懂得多。

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

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

直方图均衡化步骤:

① 统计图像中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 255
			hs[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);

直方图均衡化前后对比



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013580497/article/details/46790569
个人分类: 数字图像处理
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭