科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件VC下通过直方图变换对图像进行有效增强

VC下通过直方图变换对图像进行有效增强

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文介绍了一种通过对图像的直方图进行变换操作而使图像得到有效增强的程序算法,并从数学的角度对程序算法的实现原理做了较为详细的描述。

作者:青岛郎锐 来源:天极开发 2007年10月16日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
采取组映射规则的直方图规定化处理

  单映射规则虽然实现起来比较简单直观,但在实际处理时仍存在不可忽视的取整误差,因此在一定程度上还不能很好的实现规定直方图的意图。可以通过在规定化直方图时选取适当的对应规则来改善,一种比较好的对应规则是组映射规则(group mapping law,GML)。这种规则的约定如下:

  存在一维离散整数函数I(a),(a=0,1,2……N-1),而且满足0≤I(0) ≤I(1) ≤……≤I(a) ≤……≤I(N-1) ≤M-1。寻找能使 |∑ps(si) - ∑pu(uj)| 达到最小的I(a),其中ps(si)的求和区间为[0,I(a)];pu(uj)的求和区间仍为[0,a]。a=0时将介于0和I(0)之间的ps(si)都映射到pu(u0)中;1≤a≤N-1时,将介于I(a-1)+1和I(a)之间的ps(si)都映射到pu(uj)中去。

  由于同单映射规则相比只是对应规则作了变化,因此编码部分只需将对应规则部分的代码根据上面介绍的组映射规则做必要修改即可:

for(i=0;i<64;i++) //对规定直方图的灰度级进行枚举
{
 ……
 for(int j=0;j<256;j++) //对原图的灰度级进行枚举
 {
  float now_value=0.0f;
  //寻找对于R变量能满足差值最小的I(a),保存于A2_r
  if(ps_r[j]-pu[i]>=0.0f)
   now_value=ps_r[j]-pu[i];
  else
   now_value=pu[i]-ps_r[j];
   if(now_value<min_value_r)
   {
    A2_r=j;
    min_value_r=now_value;
   }
   for(int k=A1_r;k<=A2_r;k++)//建立R分量的映射规则
    ns_r[k]=nu[i];
    A1_r=A2_r+1;
    ……
    //对于G、B分量的处理与上类似,在此省略。
   ……
}

  对原始图像应用本算法,实验得出的按组映射规则对原图做直方图规定化后的效果图如下图所示:


  该图同单映射规则处理图像相比虽无太大变化,但在直方图分布和图像细节上更能体现出规定直方图的意图。而且通过下面的分析也可以看出组映射规则的误差要小的多:

  在ps(si)映射到pu(uj)时,采取SML规则的映射方法由于取整误差的影响可能产生的最大误差是pu(uj)/2,而采用GML规则的映射方法可能出现的误差为ps(si)/2,由于M≥N,所以一定成立 pu(uj)/2≥ps(si)/2,也就是说SML映射规则的期望误差一定不会小于GML映射规则的期望误差。而且从算法实现上也可以看出,SML映射规则是一种有偏的映射规则,某些范围的灰度级会被有偏地映射到接近开始计算的灰度级;而GML映射规则是统计无偏的,从根本上就避免了上述问题的出现。通过分析可以看出GML映射规则总会比SML映射规则更能体现规定直方图的意图,而且通常产生的误差只有SML映射规则的十几分之一。

  结论

  本文从理论上讲述了直方图变换处理中常用的直方图均衡化、采取单映射和组映射规则的直方图规定化变换方法,通过程序算法实现了上述图像增强过程并给出了通过三种算法实验得出的处理图像。实验表明本文介绍的方法对于暗、弱信号的原始图像的目标识别和图像增强等有着良好的处理效果,尤其是通过组映射规则的直方图规定化变换方法结合设计良好的规定直方图可以得到更佳的图像处理效果。本文给出的程序代码在Windows 2000 Professional 下由Microsoft Visual C++ 6.0编译通过。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章