首页 文学文摘 时政新闻 科技科普 经济法律 健康生活 管理财经 教育教学 文化艺术 社科历史

浅谈应用C语言实现图象灰度的均衡化问题

作者:陈卓灿 来源:电子技术与软件工程


  摘要通过对灰度直方图进行修正的理论、建模、算法和程序的论述,说明如何实现图象的灰度直方图均衡化,达到图象增强的目的。
  【关键词】均衡化 灰度 图象增强技术
  图象的灰度直方图均衡化是图象增强技术的一种,它基于图象空域的方法,对图象的处理是在图象所在的空间直接进行的,更确切地说对图象的处理是对单个象素进行而和其它的象素无关 。
  1 理论和建模
  1.1 理论
  直方图均衡化是通过增加图象灰度值的动态范围,增加对比度,以致图象具有较大的反差,大部分细节比较清晰。而它的实质是将多个频数不同的灰度级合并到同一个灰度级,以换取对比度的扩大 。在图象增强处理中一般都采用如下公式:
   g(x, y) = T(f( x, y) )(1)
  来实现。
  以T 表示转换算子:f (.) 和g (.) 表示转换前后某一象素的灰度值,通常以u 表示f (.), p 表示g (.) 。
  根据上述说明公式(1) 变为:
  p = T( u) (2)
  而作为均衡化公式还需要满足如下条件:
  (1) T( u) 在0 ≤u ≤L - 1 范围内是个单值递增函数;
  (2)对0 ≤u ≤L - 1 有0 ≤T ( u) ≤L – 1;(L表示为灰度值的级数)
  条件说明:保证图象灰度级次序不变、灰度值动态范围一致。
  1.2 建模
  设模型函数为累积分布函数(cumulative dis-tribution function,CDF) :
  T( u) =(0 ≤ u ≤L - 1) (3)
  式中Qu(w) 是一概率密度函数表示灰度级分布。
  将公式归一化:
  0 ≤u ≤1 ( u = 0 表示为黑色, u = 1 表示为白色)
  将公式离散化:
  
   (0 ≤≤1 , k = 0 ,1 , …,L - 1) (4)
  其中uk表示灰度级为u 的离散值,nk表示灰度级为uk的象素的数目,n 表示象素的总数目。
  根据(4) 式可以对直方图进行均衡化,但我们知道在具体用计算机实现时,由于灰度级的离散性,必需将不同的uk合并成同一个灰度级。构造
  如下公式:
  pk= int((L - 1) ×pk + 0.5)) (5)
  来实现.
  2 算法和程序
  2.1 算法流程
  (1)原始直方图各灰度级象素nk;
  (2)计算原始直方图各灰度级的概率;
  (3)输出原始直方图;
  (4)计算累积直方图;
  (5) 合并不同的灰度级;
  (6)输出新的直方图。
  2.2 程序实现
  使用C 语言实现上述算法,程序如下:
  void Histeq(float * Hbuff )/* * Hbuff指向一个存放nk的数组* /
  { int L , j , i;
  float q ,k ,total ,*u ,*s;
  scanf (”% d”, &L );/ * L 为灰度级的级数* /
  s = u = Hbuff;
  total = 0 ;
  for ( j = 0;j < = L + 1 ;j + + )
  total = total + u [ j ];/ * total 存放象素的总数目* /
  for ( ( j = 0;j < = L + 1;j + + )
  { s [ j ] = u[ j ]/total;
  printf ( s [ j ]);} / * 输出原始直方图所具有的数据* /
  for ( ( j = 1; j < = L + 1; j + + )
  {printf ( s [ j - 1 ]);
  s [ j ] = s [ j ] + s [ j - 1 ];} / * 计算累积直方图* /
  for ( j = 0;j < = L + 1;j + + )
  s [ j ] = int [ ( N - 1)* s [ j ] + 0. 5 ];
  /* 合并不同的灰度级* /
  j = 0;
  while ( j < = L)
  { i = j;
  k = s [ j ];
  q = 0;
  while ( s [ i ] = k);
  { q = q + u[ i ];
  i ++;}
  j = i;
  printf (q/total);/ * 输出新的直方图所具有数据* /
  }
  }
  3 使用上述算法和程序应用举例
  例题:设有1 幅256 ×256,8 bit 灰度图象,设L = 7 ,存放nk的数组为:
  elent [7] = {10473,16350,7683,8192,6919,4763,9764,1392}
  求出所对应的原始直方图,累积直方图,新的直方图,实际均衡化的结果。
  解:调用Histeq(float &elent)
  结果:如图1、图2所示。
  从图2 实际均衡化结果示意图知直方图均衡化的效果和理想化效果有一定的差别,在图象上增加了可视粒度,在一些具体的细节上没有得到改进。可以对均衡化直方图进行规定化加以改进。
  
  参考文献
  [1]章毓晋.图象处理和分析[M].北京:清华大学出版社,1990.
  [2]田捷,沙飞,张新生.实用图象分析与处理技术[M].北京:电子工业出版社,1995.
  [3]刘文耀等编著.光电图像处理[M].北京:电子工业出版社 2002(11).
  [4]阮秋琦.数字图像处理学[M].北京:电子工业出版社,2001.
  
  作者单位
  杭州师范大学钱江学院国际服务工程学院浙江省杭州市310018