电子科技大学通信学院《图像对比度增强实验指导书》2011年6月图像对比度增强实验一、实验目的本实验是针对拟开设的《图像处理》课程而开发的综合性实验。该实验与概率统计、高等数学、信号处理等课程都有一定程度的联系。通过本实验,促使学生利用上述课程相关知识,更好地掌握图像增强的基本方法和原理。要求学生达到:掌握经典的数字图像空域增强算法的实现方法;了解实验所用的图像处理算法的运行效果;学会分析与比较各种方法的差异。二、实验内容与要求1.2学时:掌握图像对比度增强原理;2.2学时:掌握图像变换原理;3.2学时:给定输入图片,在MATLAB上实现线性变换增强和直方图增强仿真;4.8学时:构建图像采集系统,在已有的采集软件平台上将仿真算法用C语言实现;5.2学时:测试实际输入图片增强效果。三、实验开设方式本实验开设方式为两人一组实验,实验授课时间2学时,上机14学时。四、实验器材硬件环境:计算机一台;USB摄像头一个;三脚架一个;软件环境:Winxp操作系统;VC6.0开发环境;OpenCV1.0,gsl-1.8五、实验原理图像增强的目的是针对应用或人们主观需求,对输入图像进行某种处理,使得处理后的图像在特定结构或对比度等方面有明显的改善,其源头可以追溯到1969年。随着应用需求的不断发展,世界各国对此问题展开了广泛的研究。特定结构或对比度不够清晰,可能来自质量不佳的成像设备、恶劣的大气条件、不恰当图像压缩算法等,其特点是图像中像素灰度集中在一个相对较小的范围,导致后端处理设备的观察者不能有效对图像进行判读。造成图像对比度不够清晰的原因是多方面,包括电子系统的热噪声、光照过强、光照过弱、目标反射率过低、大雾天气、逆光拍摄、压缩等等。由于其产生原因的多样性,导致图像对比度不够清晰在图像中体现出来的现象也不同,可以分为以下3类:整体偏暗、整体偏亮、分布在亮和暗的两端,并且有可能在空间分布上存在多个区域。现有的对比度增强技术根据其处理方法理论依据不同可分为:直方图均衡化、基于Retinex理论的图像增强、基于梯度场重建的图像增强;根据其处理范围,又可以分为全局处理与局部处理两大类。本试验将主要论述直方图均衡化和基于梯度场重建的图像增强两种方法,其中直方图均衡化仅描述基本原理,其实现由学生独立完成,而基于梯度场重建的图像增强方法,本实验将重点阐述,并给出参考代码,要求学生在此基础上进行进一步的完善。直方图均衡化的基本原理就是对图像进行灰度变换。灰度变换有逆反处理、阈值变换、灰度拉伸、灰度切分、灰度级修正、动态范围调整等方法。虽然它们对图像的处理效果不同,但处理过程中都运用了点运算,通常可分为线性变换、分段线性变换、非线性变换。其缺点是需要用户根据不同的图像调整不同的变换函数。灰度变换是最简单的对比度增强技术,它可增大图像动态范围,扩展对比度,使图像清晰、特征明显,是图像增强的重要手段之一。它主要利用点运算来修正像素灰度,由输入像素点的灰度值确定相应输出点的灰度值,是一种基于图像变换的操作。灰度变换不改变图像内的空间关系,灰度级的改变是根据某种特定的灰度变换函数进行。实验所需基本结构如图1所示。图1实验所需基本结构图本实验把成像设备(即摄像头)采集的一幅图像,传入计算机,由图像增强技术算法实现的编程软件处理后,对图像进行增强,然后实时显示增强后的图像。图像对比度增强技术,不仅要保持图像整体的一致性,还需要对图像的局部区域进行增强处理,使其具有最佳的表现力。因此,本实验采用梯度场方法。技术方案特点有:a)梯度域增强避免了亮度不同对增强算子的影响b)重建图像是基于最小二乘法,与原始的图像在亮度方面不同c)重建图像在梯度域与原始图像具有强烈的相似性d)重建图像具有亮度平均值的相对保持性e)重建图像的边界条件周期延拓(采用DST变换要求)f)所有算子都是直接计算g)较为复杂的DST变换有快速算法(一)算法原理计算机处理的图像是离散的网格数据,必须对前面的连续函数描述形式进行离散化处理。令原始图像为(,)Ixy,增强后图像为(,)Ixy,尺寸为(行X列)MN,1,xN,1,yM,则增强后的梯度图像为:),(),(),(yxyxIyxG(1)),(yxI是图像(,)Ixy的梯度,yx,定义图像的一阶前向差分:),()1,(),(),1(),(yxIyxIyxIyxIyxI令(,)xyIxyII(,)xy是梯度图像提升因子,CyxIyx2),(1),((2)其中是梯度场增益因子,取值为0.3~0.45,2),(maxyxIC,是梯度场归一化因子,是梯度场归一化偏移因子,保证(,)xy为有界值,取值为,10C。增强后的图像应满足:),(2),(minarg),(~yxIdxyGyxIyxI,根据变分原理可得,重建的图像与增强后的梯度图像满足如下泊松方程:GdivyxI),(~2(3)其中),(~4)1,(~)1,(~),1(~),1(~),(~2yxIyxIyxIyxIyxIyxI(4)增强梯度场G梯度的散度用后向一阶差分逼近:)1,(),(),1(),(yxGyxGyxGyxGGdivyyxx(5)求解泊松方程的边界条件为:将输入的原始图像(,)Ixy扩展为(行X列)22MN,0,1xN,0,1yM,且满足:NxyIMxINxyIxIMyyNIyNIMyyIyI1),1()1,(1),1()0,(1),(),1(1),1(),0((6)重建图像(,)Ixy的取值可能超出8bit范围,需要对其进行归一化处理),(~maxmI~yxIax,),(~minmI~yxIin(7)归一化后的图像为:inaxinyxIImI~mI~mI~),(~*255(8)下面将阐述如何从泊松方程中求取重建图像令2T,),(yxIU,FGdiv)(,向量U是重构图像),(~yxI的一个逼近,矩阵T是一个‘11-411’的对角矩阵,F是包含边界条件的散度矩阵。2cos22cos2NxMyBAxyxy(,)xy分别是矩阵的行列索引值。离散正弦变换:给定向量011(,,...,)Nxxxx,其正弦变换011(,,...,)NXXXX为:正变换:101)1)(1(sinNnnkNknxX逆变换:101)1)(1(sin12NkknNknXNx(二)OpenCV1.0安装手册1)安装OpenCV从安装程序。假如要将OpenCV安装到C:\ProgramFiles\OpenCV。(图2,图3为OpenCV1.0rc1的安装界面,OpenCV1.0安装界面与此基本一致。)在安装时选择将\OpenCV\bin加入系统变量(Add\OpenCV\bintothesystermPATH)。Div(G)2DIDST计算特征值2DDSTG(x,y)BijAij重建图像图2软件安装目录选择图3软件安装路径设置2)配置Windows环境变量检查C:\ProgramFiles\OpenCV\bin是否已经被加入到环境变量PATH,如果没有,请加入。加入后需要注销当前Windows用户(或重启)后重新登陆才生效。(可以在任务管理器里重启explorer.exe)图4软件安装环境变量设置3)配置VisualC++6.0全局设置:菜单Tools-Options-Directories:先设置lib路径,选择Libraryfiles,在下方填入路径:C:\ProgramFiles\OpenCV\lib然后选择includefiles,在下方填入路径:C:\ProgramFiles\OpenCV\cxcore\includeC:\ProgramFiles\OpenCV\cv\includeC:\ProgramFiles\OpenCV\cvaux\includeC:\ProgramFiles\OpenCV\ml\includeC:\ProgramFiles\OpenCV\otherlibs\highguiC:\ProgramFiles\OpenCV\otherlibs\cvcam\include图5VC6.0开发软件环境路径设置然后选择sourcefiles,在下方填入路径:C:\ProgramFiles\OpenCV\cv\srcC:\ProgramFiles\OpenCV\cxcore\srcC:\ProgramFiles\OpenCV\cvaux\srcC:\ProgramFiles\OpenCV\otherlibs\highguiC:\ProgramFiles\OpenCV\otherlibs\cvcam\src\windows最后点击“ok”,完成设置。项目设置:每创建一个将要使用OpenCV的VCProject,都需要给它指定需要的lib。菜单:Project-Settings,然后将Settingfor选为AllConfigurations,然后选择右边的link标签,在Object/librarymodules附加上cxcore.libcv.libml.libcvaux.libhighgui.libcvcam.lib图6VC6.0开发软件库文件包含设置(三)gsl-1.8安装手册安装步骤如下:1)下载gsl()2)安装gsl-1.8.exe安装后在安装目录下将有如下目录:\contrib\gsl-1.8一些说明文件\bin二进制文件libgsl.dllgsl的动态链接库(基于gcc的正式版本)libgsl_d.dllgsl的动态链接库(基于gcc的调试版本)libgslcblas.dllcblas的动态链接库(基于gcc的正式版本)libgslcblas_d.dllcblas的动态链接库(基于gcc的调试版本)gsl-histogram.exe用于计算数据直方图的程序gsl-randist.exe用于生成服从指定分布数据的程序\lib库文件libgsl.agsl的静态链接库(基于gcc的正式版本)libgsl_d.agsl的静态链接库(基于gcc的调试版本)libgslcblas.acblas的静态链接库(基于gcc的正式版本)libgslcblas_d.acblas的静态链接库(基于gcc的调试版本)libgsl_dll.alibgsl.dll的gcc输入库libgsl_d_dll.alibgsl_d.dll的gcc输入库libgslcblas_dll.alibgslcblas.dll的gcc输入库libgslcblas_d_dll.alibgslcblas_d.dll的gcc输入库libgsl.def输出libgsl.dll的定义libgslcblas.def输出libgslcblas.dll的定义\doc有关文档\info\man1\man3各种格式的gsl帮助文件\include\gsl头文件gslincludefiles,其中使用到的主要有bin,lib,include\gsl。3)设置VisualC++6.0编译环境,有两种方式:一、将临时目录下bin中的WinGsl.dll和WinGslD.dll复制到~\MicrosoftVisualStudio\VC98\Bin下;整个Gsl目录复制到~\MicrosoftVisualStudio\VC98\Include下;lib目录下的所有.lib文件全部复制到~\MicrosoftVisualStudio\VC98\Lib下。在使用gsl函数时,在新建的工程中,project-settings-lin