第二章 图像处理原理2.1 数字图像处理的基本原理数字图像处理是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。图像处理最早出现于 20 世纪 50 年代,当时的电子计算机已经发展到一定水平,人们开始利用计算机来处理图形和图像信息。数字图像处理作为一门学科大约形成于 20 世纪 60 年代初期。早期的图像处理的目的是改善图像的质量,它以人为对象,以改善人的视觉效果为目的。图像处理中,输入的是质量低的图像,输出的是改善质量后的图像,常用的图像处理方法有图像增强、复原、编码、压缩等。 数字图像处理常用方法: 1、图像灰度变换 灰度变换就是通过线性变换对图像进行处理。灰度变换可使图像动态范围变大,对比度扩展,图像清晰,特征明显,是图像增强的重要手段。在爆光不足或过度的情况下,图像灰度可能会局限在一个很小的范围内,这时将看到一个模糊不清、没有灰度层次的图像。用一个线性单值函数,对帧内的每一个像素作线性扩展,将有效的改善图像的视觉效果。 灰度变换有线性灰度变换、分段线性灰度变换和非线性灰度变换几种。若f ( x, y) 为原始图像、g ( x, y) 为灰度变换图像。则 线性变换为: 分段线性变换为: 非线性变换采用非线性函数变换,如平方、指数、对数等。 2、直方图均衡化 直方图均衡化通过将图像的原始灰度分布均匀散布于整个可能允许的灰度分布空间,以拉大灰度值之间的动态范围,而在视觉上增强图像的整体对比度。若原始图象灰度级 r 归一化在 0~1 之间,即 。 为原始图象灰度分布的概率密度函数, 直方图均衡化处理实际上就是寻找一个灰度变换函数 T ,使变化后的灰度值 ,其中,归一化为 ,即建立 r 与 s 之间的映射关系,要求处理后图象灰度分布的概率密度函数 ,L是灰度变化范围。在这里,因为归一化后灰度变化范围是0~1,所以L=1。 3、图像锐化 在图像处理中常需要突出边缘和轮廓信息,以便于对目标识别和处理。图像锐化(Sharpening)就是增强图像的边缘和轮廓。如果说图像平滑通过积分使图像边缘模糊,那么,图像锐化就是通过微分而使边缘轮廓突出、清晰。因为微分运算可用来求信号的变化,所以具有加强高频分量的作用,可使图像轮廓清晰。这里介绍用梯度算子进行图像锐化。 设原始图像为f (x, y) ,则图像梯度的模为: 在离散图像中可以用差分近似表示上式: 在得到图像梯度后,可以使用5中方法来实现图像锐化: 其中,LG、LB是固定的灰度级。 4、中值滤波 中值滤波(Median filtering)是一种非常有用的非线性信号处理方法,在一定程度上可以克服采用诸如邻域均值滤波等线性低通滤波器消除噪声时,会将图像边缘模糊掉的缺点。中值滤波尤其对图像中的脉冲噪声、扫描噪声等能有良好的去除效果,但是对含有过多细节的图像,处理效果一般不好。 中值滤波器根据器计算方法,可以称为非线性滤波器中的排序统计滤波器,它不是简单的加权求和,而是先把邻域像素按灰度级进行排序,然后再选择该组的中值作为模板输出结果。由于中值滤波在算法设计上使与周围像素灰度级相差较大的点处理后能和周围的像素值比较接近,因此可以衰减随机噪声,尤其是脉冲噪声等。但由于不是简单的取均值,因此产生的模糊要少得多。 下图为中值滤波器得一维应用示例,其中(a)为一叠加有1/4采样频率正弦震荡得离散信号序列,在3点邻域中进行中值滤波,在得到得处理结果(b)中,完全消除了正弦波的干扰,而且保留了边界。 (a) (b) 第三章 基于DSP的图像处理实现 3.1 实现图像处理的流程图
图 3-1 主程序流程图 3.2 CCS软件处理步骤(1)启动 setupCCS3.3, 选择TMS320C6713芯片,点击save & quit,启动CCS3.3。 图 3-2 (2)建立工程S&L.pjt ,添加源程序Histo.c、InitImage.c、S&L.c,图像/视频库文件rts6701.lib,以及链接器命令文件c6713.cmd。编译链接后产生输出文件.out, 将其载入,运行程序。 图 3-3 (3)设置不同的断点,观察图像并记录结果。 3.3数字图像边缘检测 Sobel 算子 3.3.1 Sobel算法简介Sobel算法能够在增强目标边缘细节的同时以削弱部分高频成分的噪声。Sobel边缘检测增强算法的变异是从抑制噪声并增强目标的方向入手。从理论上来说,本方法可以提高对红外目标的探测识别能力。另外,从最终增强的结果与原始图像比较情况来说,图像的每个区域的细节都得到了很好的提升。所以说,本程序能够很好的实现增强红外目标并抑制噪声的目的。 本程序实现Sobel算子对图像的每个像素考察它上下左右相邻点的灰度的加权差,与之接近的邻点的权大。据此实现算法。程序实现了Sobel算子利用像素点上下、左右邻点的灰度加权算法,根据边缘点处达到极值这一现象进行边缘检测。当使用大的邻域时,抗噪性能会更好,但这样会增加计算量,并且得出的边缘也会相应变粗。 3.3.2 Sobel算法流程图3.3.3 实现Sobel算子边缘检测的程序如下: void Sobel(int nWidth,int nHeight) { int i; //定义整形变量 pImg=dbTargetImage; //赋值 for ( i=0;i<IMAGEWIDTH;i++,pImg++ ) //读取图片 (*pImg)=0; (*pImg)=0; pImg1=dbImage; pImg2=pImg1+IMAGEWIDTH; pImg3=pImg2+IMAGEWIDTH; for ( i=2;i<nHeight;i++ ) //把图片信息转化成数组并存储 { pImg++; x1=(*pImg1); pImg1++; x2=(*pImg1); pImg1++; x4=(*pImg2); pImg2++; x5=(*pImg2); pImg2++; x7=(*pImg3); pImg3++; x8=(*pImg3); pImg3++; /* Sobel 算子实现*/ for ( mi=2;mi<nWidth;mi++,pImg++,pImg1++,pImg2++,pImg3++ ) { x3=(*pImg1); x6=(*pImg2); x9=(*pImg3); m_nWork1=x7+x8+x8-x2-x2-x3; m_nWork2=x3+x6+x6-x4-x4-x7; if ( m_nWork1<m_nWork2 ) m_nWork1=m_nWork2; m_nWork2=m_nWork1+x9-x1; if ( m_nWork2>255 ) m_nWork2=255; else if ( m_nWork2<0 ) m_nWork2=0; (*pImg)=m_nWork2; x1=x2; x2=x3; x4=x5; x5=x6; x7=x8; x8=x9; } (*pImg)=0; pImg++; } } 3.3.4 Sobel算法仿真实现(1)编译程序,加载.out文件,设置断点(下图),运行。对应的图像和边缘图如下图所示: 图 3-4 断点设置 图3-5边缘检测运行结果 3.4数字图像锐化 laplace 算子3.4.1 laplace 算子简介在图像增强过程中,通常利用各类图像平滑算法消除噪声,图像的常见噪声主要有加性噪声、乘性噪声和量化噪声等。一般来说,图像的能量主要集中在其高频部分,噪声所在的频段主要在高频段,同时图像边缘信息也主要集中在其高频部分。这将导致原始图像在平滑处理后,出现图像边缘和图像轮廓模糊的情况。为了减少这类不利效果的影响,就需要利用图像锐化技术,使图像的边缘变得清晰。 图像锐化(image sharpening)就是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,亦分空域处理和频域处理两类。图像平滑往往使图像中的边界、轮廓变得模糊,为了减少这 类不利效果的影响,这就需要利用图像锐化技术,使图像的边缘变的清晰。图像锐化处理的目的是为了使图像的边缘、轮廓线以及图像的细节变的清晰,经过平滑的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算)就可以使图像变的清晰。从频率域来考虑,图像模糊的实质是因为其高频分量被衰减,因此可以用高通滤波器来使图像清晰。 本程序通过实现Laplace算子的方法使图像的边缘、轮廓线以及图像的细节变得清晰,经过平滑的图像变得模糊的根本原因是因为图像收到了平均或积分运算,因此可以对其进行逆运算就可以使图像变得清晰。从频率域来考虑,图像模糊的是指是因为其高频与分量被衰减,因此可以用高通滤波器来使图像清晰。但要注意,能够进行锐化处理的图像必须有较高的性噪比,否则锐化后图像性噪比反而更低,拉普拉斯算子会增强图像中的噪声,因此一般是想去除噪声或减轻噪声后再进行锐化处理。拉式算子是一个刻画灰度图像二阶商算子,也是最简单的各向同性微分算子。以下程序实现Laplace算子是比较基本的图像锐化工具,处理后后得到的图像边界比较细致。 3.4.3 实现程序如下所示:void Laplace(int nWidth,int nHeight) { int i; //定义整形变量 pImg=dbTargetImage; // 赋值 for ( i=0;i<IMAGEWIDTH;i++,pImg++ ) // 读取图片 (*pImg)=0; (*pImg)=0; pImg1=dbImage; pImg2=pImg1+IMAGEWIDTH; pImg3=pImg2+IMAGEWIDTH; for ( i=2;i<nHeight;i++ ) /* laplace 算子方法实现*/ { pImg++; x1=(*pImg1); pImg1++; x2=(*pImg1); pImg1++; x4=(*pImg2); pImg2++; x5=(*pImg2); pImg2++; x7=(*pImg3); pImg3++; x8=(*pImg3); pImg3++; for ( mi=2;mi<nWidth;mi++,pImg++,pImg1++,pImg2++,pImg3++ ) { x3=(*pImg1); x6=(*pImg2); x9=(*pImg3); m_nWork1=x5<<2; m_nWork1+=x5; m_nWork2=x2+x4+x6+x8; // m_nWork1=x5<<3; m_nWork1+=x5; // m_nWork2=x1+x2+x3+x4+x6+x7+x8+x9; m_nWork1-=m_nWork2; if ( m_nWork1>255 ) m_nWork1=255; else if ( m_nWork1<0 ) m_nWork1=0; (*pImg)=m_nWork1; x1=x2; x2=x3; x4=x5; x5=x6; x7=x8; x8=x9; } (*pImg)=0; pImg++; } } 3.4.2 laplace算法仿真实现(1)编译程序,加载.out文件,设置断点(下图),运行。对应的图像和边缘图如下图所示: 图 3-6 断点设置 图3-7 图像图 3-7 锐化效果 3.5数字图像直方图均衡化增强3.5.1 直方图均衡化增强简介 图像预处理中,通常采用直方图均衡化和直方图规定化、线性和非线性灰度变换提高图像的对比度,该程序实现的算法首先对直方图均衡化,增大图像的对比度,接着在整个像素范围内对图像灰度级进行等间距排列,使输出图像的灰度动态范围达到最大灰度变化范围,追后对整幅图像中值滤波,滤除图像中被增强的噪声。直方图均衡化处理方法的效果还是很不错的。 其优点主要在于能自动增强整幅图像的对比度,但具体的增强效果也因此不易控制,只能得到全局均衡化处理的直方图。通过该程序使图像均衡化原灰度级的像素相加得到新的灰度级的像素,处理后的直方图比原直方图均匀了,但它并不是完全均匀,这是由于在均衡化的过程中原直方图几个像素较少的灰度级归并到一个新的灰度级上,而像素较多的灰度级间隔被拉大了。程序实现了直方图算法,以减少图像的灰度等级为代价,因此图像的一些细节经过处理后损失掉了。在实际应用中,往往要根据不同的要求得到特定形状的直方图分布,以有选择的对某灰度范围进行局部范围内的对比度增强,此时可以采用对直方图的规定化处理。 3.5.2 算法仿真实现编译程序,加载.out文件,设置断点(下图),运行。对应的图像和边缘图如下图所示: 图 3-8 断点设置 图 3-9 原图及其频谱图 图 3-10 均衡化后的图 及频谱图 对比图像,在对图像进行均衡化之前,先对直方图进行平滑处理,消除直方图上的噪声干扰点。通过对均衡化后的图像灰度级在图像的整个动态范围内等间隔排列,克服直方图均衡化法输出图像动态范围小和国强的缺点。实验证明增强结果不但提高目标对比度,同时是目标的细节更加明显,而且对低对比度的图像增强效果好。
|