关闭

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

标签: 图像处理直方图均衡化直方图均衡化
430人阅读 评论(0) 收藏 举报
分类:

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

直方图均衡化步骤:

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

直方图均衡化前后对比



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:62794次
    • 积分:1414
    • 等级:
    • 排名:千里之外
    • 原创:80篇
    • 转载:6篇
    • 译文:1篇
    • 评论:15条
    最新评论