Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 玩玩数字图像处理[2]---图像增强
【标  题】:玩玩数字图像处理[2]---图像增强
【关键字】:---
【来  源】:http://blog.csdn.net/EmilMatthew/archive/2006/09/27/1290589.aspx

玩玩数字图像处理[2]---图像增强

Your Ad Here

  玩玩数字图像处理[2]---图像增强

            EmilMatthew (EmilMatthew@126.com)      

[  类别  ]算法实现   

[推荐指数]★★

[  摘要  ]本文主要介绍了基于灰度图像的图像增强方面的技术。

[ 关键词 ]图像增强

 

Playing With Digit Image Process [2] ------ Image Enhancement

[Classify] Algorithm Implementation  

[  Level ] ★★

[Abstract] This article mainly introduces the technology of Image enhancement based on the grey digit image.

[Key Words] Image Enhancement

 

[0引言]

    数字图像的增强工作,主要是对于原有图像中需要重点观测内容进行突出,而对非重点观测内容则进行抑制。本文主要介绍两种效用较为明显的方法:1. 直方图的均衡化。2.伪彩色方法。其余的方法,如对比度线性展宽,灰级窗等相对容易,具体请参考[1]

 

[1直方图的均衡化方法]

    直方图均衡化的方法的主要目的,简单说来,就是将原来出现频率较高的像素范围进行展宽,而对出现频率较低的像素,则尽可能的将其像素范围进行压缩,以期达到突出画面主要内容的目的。

   具体来说,图像均衡化的方法如下:

     

直方图的均衡化算法实现

void BMParse::equalizeOp(HDC inHdc,int offsetX,int offsetY)

{

                            //0.Inner value

                            int arrHists[256];

                            float pArr[256];

                           

                            int i,j;

                            long totalHistVal;

                           

                            //0.Valuable declaration

                           unsigned long outputPixel;

                            int tmpTableVal;

                           

                            //1.cal each grey value's fequence

                            for(i=0;i<256;i++)

                                   arrHists[i]=0;

 

                            for(j=0;j<mBMFileInfo.bmHeight;j++) 

                                   for(i=0;i<mBMFileInfo.bmWidth;i++)

                                   {

                                                        arrHists[bmpBWMatrix[j][i]]++;

                                   }

                           

                            //2.cal total hist value

                            totalHistVal=0;

                            for(i=0;i<256;i++)

                                   totalHistVal+=arrHists[i];

                                  

                            //3.cal pi

                            pArr[0]=0;

                            for(i=1;i<256;i++)

                                   pArr[i]=pArr[i-1]+(float)arrHists[i]/(float)totalHistVal;

                    

                            //4.show out adjusted picture:

                            for(i=0;i<mBMFileInfo.bmHeight;i++)

                                          for(j=0;j<mBMFileInfo.bmWidth;j++)

                                          {

                                                        tmpTableVal=255*pArr[bmpBWMatrix[i][j]];

                                                       

       //make to windows color format

       outputPixel=((unsigned long)paletteArr[tmpTableVal].b)*65536+((unsigned long)paletteArr[tmpTableVal].g)*256+(unsigned long)paletteArr[tmpTableVal].r;      

                                                

                                          //output pixel

                                          SetPixel(inHdc,j+offsetX,i+offsetY,outputPixel);         

                            }

}

 

    

      1:庙宇原像                                2:庙宇均衡化后的图像

 

[2灰度图像的伪彩色处理]

    由于现实仪器设备彩采集数据能力的限制,如CT扫描仪,温度感知器等,这些仪器得到的图像通常仅为灰度图像。而灰度图像对于视觉的观测上对区域的区分不是十分明显,如医学上病灶的位置,或某个环境场中温度较高的区域,因此,将它们从灰度图像中突显出来就显得十分必要了。而伪彩色处理技术则不失为一种有效的处理方式,虽然“彩”色的效果距离真实还有相当的差距,但从伪彩色处理的效果上看,已经能够满足现实应用的要求了。

   灰度图像的伪彩色处理的原理如下:

根据色彩学方面的研究结果,将灰度图像对应到red , green , blue三个通道上,最后将三个通道的颜色值合成为需要显示的RGB颜色值即可。

       灰度值与三个通道的映射关系如图3、图4、图5所示:

                       

3:灰度与红色通道映射关系

     

 

4:灰度与绿色通道映射关系

     

 

5:灰度与蓝色通道映射关系

 

    伪彩色处理的算法实现:

void BMParse::changeGreyToColorMix(HDC inHdc,int offsetX,int offsetY)

 {   

                       //0.Inner Value declaration

                           unsigned long outputPixel;

                            int tmpTableVal;

                            int i,j;

                           

                            //1.Core part of false color change

                            for(i=0;i<mBMFileInfo.bmHeight;i++)

                                          for(j=0;j<mBMFileInfo.bmWidth;j++)

                                          {

                                                 //1.1color change ,show out

                                                 //red channel

                                                 if(bmpBWMatrix[i][j]<128)

                                                               tmpTableVal=0;

                                                 else if(bmpBWMatrix[i][j]<192)

                                                                                                                        tmpTableVal=255/64*(bmpBWMatrix[i][j]-128);

                                                 else

                                                 tmpTableVal=255;

                                                                                   

                                                 outputPixel=(unsigned long)tmpTableVal;    

                                                                                                                                                                                     

                                     //green channel

                                     if(bmpBWMatrix[i][j]<64)

                                                                                                         tmpTableVal=255/64*bmpBWMatrix[i][j];

                                     else if(bmpBWMatrix[i][j]<192)

                                                 tmpTableVal=255;

                                                   else                                                                               tmpTableVal=-255/63*(bmpBWMatrix[i][j]-192)+255;

                                                                                   

                                           outputPixel+=(unsigned long)tmpTableVal*256;      

                                                                                                                      

                                      //blue channel

                                          if(bmpBWMatrix[i][j]<64)

                                                 tmpTableVal=255;

                                          else if(bmpBWMatrix[i][j]<128)

                                                                                                                        tmpTableVal=-255/64*(bmpBWMatrix[i][j]-64)+255;

                                          else

                                             tmpTableVal=0;

                                          outputPixel+=(unsigned long)tmpTableVal*65536;   

                                                                                   

                                          //1.2show out

                                          SetPixel(inHdc,j+offsetX,i+offsetY,outputPixel);

                                   }

                                         

}            

 

        

 图6:庙宇像的红色通道                       图7: 庙宇像伪彩色化后的结果

    从实验结果可以看出,在现实条件下温度较高或较亮的区域中,呈现红色调;而对于较冷或暗的区域则以蓝色调显示,中间的颜色则以绿色调呈现。

 

[参考文献与网站]

[0] 朱虹等著,数字图像处理基础,科学出版社,2005.

程序完成日:06/09/24

文章完成日:06/09/27

[源码下载]

注:源码中包括了1)对比度增强、2)对比度线性展宽、3)灰级窗、4)二值化5)直方图的均衡化、6)伪彩色,六种图像增强方法的源码。

http://emilmatthew.51.net/EmilPapers/0629ImageProcess2/code1.rar

http://emilmatthew.51.net/EmilPapers/0629ImageProcess2/code2.rar

http://emilmatthew.51.net/EmilPapers/0629ImageProcess2/code3.rar

http://emilmatthew.51.net/EmilPapers/0629ImageProcess2/code4.rar

 

若直接点击无法下载(或浏览),请将下载(或浏览)的超链接粘接至浏览器地( 推荐MYIEGREENBORWSER)址栏后按回车.若不出意外,此时应能下载.

若下载中出现了问题,请参考:

http://blog.csdn.net/emilmatthew/archive/2006/04/08/655612.aspx

 

 

 

.NET组件和COM组件之间的相互操作:【上一篇】
wcout 输出中文问题:【下一篇】
【相关文章】
  • 代码生成工具随笔(1) ---我的生成工具
  • HTML基本语法-----一个新的开始,从这里开始了!
  • jBPM3.12用户指南中文翻译----第五章 部署
  • c++ 面向对象编程----读书笔记(1)
  • 用CSS缩写给你的网站加速----CSS缩写
  • 上海,我的奋斗岁月(从2500到700万)----经典转载!
  • 英文java试题 (要变更了----所以要学习了) (1)
  • 英文java试题 (要变更了----所以要学习了) (2)
  • 英文java试题 (要变更了----所以要学习了) (3)
  • 大家看看---比较好的CCNA实验集
  • 【随机文章】
  • 服务器系统在社会保险系统中的应用
  • Java Swing中的键盘事件处理
  • fcitx install
  • 10/100交换机 EF2S16
  • minix 3 出了图形版
  • FreeBSD连载(50):定制X Window的基本方法
  • 国外著名游戏人谈MMOG的货币化
  • 关机代码(望有人来注释)
  • Slackware 11.0 is released!
  • C库函数手册
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.