1、配套课件数字图像处理 编程框架、理论分析、实例应用和源码实现.1数字图像处理在统计学和图像处理领域中,对一个数据集(如图像)进行平滑就是产生一个近似的函数,目的是尝试获取数据的重要模式特征,并忽略噪声或者其它的细微结构信息。在图像处理和计算机视觉领域,平滑的概念通常被用于尺度空间的表示中。由于人类视觉系统的特性,锐化后的图像看起来更加清晰,但是实际上锐化操作并没有提高真正的分辨率。.2数字图像处理.3数字图像处理低通滤波法均值滤波法中值滤波法高斯滤波法.4数字图像处理低通滤波器,就是通过低频信号且抑制高频信号的滤波器。一个理想的低通滤波器,就是能够完全剔除高于截止频率的所有信号,并且保留所有低
2、于截止频率的信号。在实时应用中,实际滤波器可以通过将信号延长一小段时间以得到未来的一小部分信号信息,这样就可以近似的实现理想滤波器。巴特沃斯滤波器切比雪夫滤波器椭圆滤波器.5数字图像处理.6数字图像处理切比雪夫滤波器是在通带或阻带上频率响应幅度等波纹波动的滤波器。切比雪夫滤波器在过渡带比巴特沃斯滤波器衰减要快,但是频率响应的幅频特性不如巴特沃斯滤波器平坦。在通带波动的切比雪夫滤波器的数学表达为在阻带波动的切比雪夫滤波器的数学表达为.7数字图像处理.8数字图像处理巴特沃斯滤波器通带波动下的切比雪夫滤波器阻带波动下的切比雪夫滤波器椭圆函数滤波器.9数字图像处理.10数字图像处理.11数字图像处理.
3、12数字图像处理.13数字图像处理涉及4种图像初始、中间或最终结果,和三个主要处理步骤。图像结果包括原始图像、原始变换域、滤波后的变换域和滤波后的图像;处理步骤包括傅里叶正变换、低通滤波和傅里叶逆变换。将原始图像转化为复数数组进行傅里叶正变换,输出得到原始变换域;对原始变换域进行频域上的处理,如低通滤波,得到滤波后的变换域;将滤波后的变换域进行傅里叶逆变换,便得到最终的复数数组,取复数的实部信息便可以得到低通滤波后的图像结果。.14数字图像处理低通滤波,就是将高频信息剔除,只保留低频信息,对于空域图像结果而言就是图像变得模糊(或者说平滑)了,因为抑制了图像的边缘信息;而对于频域中间结果图像而言
4、,就是图像四周的信息被抑制了,看起来就是中间低频信息所占区域变小了。.15数字图像处理傅里叶变换是基于复数空间的,所以需要一个基本的数据结构来表示复数,为typedef struct double m_re;double m_im;complex;,其中m_re为实部,m_im为虚部。int CImageProcessing:forward_fft2d(complex*array,int rows,int cols)return(fft2d(array,rows,cols,FFT_FORWARD);int CImageProcessing:inverse_fft2d(complex*array
5、,int rows,int cols)return(fft2d(array,rows,cols,FFT_INVERSE);.16数字图像处理最直观的做法,就是将每一个像素的灰度值作为每一个复数的实部,实际上这个做法是完全正确的。但是,如何设置复数的虚部呢?至此,读者应该能想到,设置为0。这样,原始图像的总像素个数就是复数数组的维数,每个复数的实部就对应像素的灰度,虚部设为0。.17数字图像处理CTArray CImageProcessing:Image_to_complex(const CTMatrix&gray_image,long&new_height,long&new_width)lon
6、g image_height=gray_image.Get_height();long image_width =gray_image.Get_width();new_height=image_height;new_width=image_width;if(!(power_of_2(image_height)new_height=long(pow(2.0f,fastlog2(image_height);if(!(power_of_2(image_width)new_width=long(pow(2.0f,fastlog2(image_width);CTArray array_of_comple
7、x(new_height*new_width);for(int row=0;row new_height;row+)for(int column=0;column new_width;column+)array_of_complex row*new_width+column.m_re=gray_image row column;array_of_complex row*new_width+column.m_im=0;return array_of_complex;.18数字图像处理对于最后的复数数组向空域图像转换的问题,只要取复数的实部作为图像像素的灰度值就可以了。CTMatrix CImag
8、eProcessing:Complex_to_image(const CTArray&complex_array,long image_height,long image_width)CTMatrix gray_image(image_height,image_width);ASSERT(complex_array.GetDimension()=image_height*image_width);for(int row=0;row image_height;row+)for(int column=0;column image_width;column+)gray_image row colum
9、n =BYTE(complex_array row*image_width+column.m_re);return gray_image;.19数字图像处理对于一般的频率信息的显示,则需要取复数的幅度作为显示图像的像素值,并且考虑到灰度像素的值域(0-255)问题,需要除以一个常量(如100)来使得人眼能够看到频率的变化信息。CTMatrix CImageProcessing:Display_frequency(const CTArray&complex_array,long image_height,long image_width)CTMatrix gray_image(image_hei
10、ght,image_width);ASSERT(complex_array.GetDimension()=image_height*image_width);for(int row=0;row image_height;row+)for(int column=0;column image_width;column+)gray_image row column =BYTE(sqrt(complex_array row*image_width+column.m_re*complex_array row*image_width+column.m_re+complex_array row*image_
11、width+column.m_im*complex_array row*image_width+column.m_im)/100.0);return gray_image;.20数字图像处理CTArray CImageProcessing:Low_pass_filter(CTArray original_signal)long dimension=original_signal.GetDimension();double threshold=0;for(int index=0;index threshold)threshold=magnitude;threshold/=100;for(int
12、index=0;index dimension;index+)double magnitude=sqrt(original_signal index.m_re*original_signal index.m_re +original_signal index.m_im*original_signal index.m_im);double eplon=1.0/sqrt(1+(threshold/magnitude)*(threshold/magnitude);original_signal index.m_re*=eplon;original_signal index.m_im*=eplon;r
13、eturn original_signal;.21数字图像处理原始图像到复数数组的转化傅里叶正变换低通滤波傅里叶逆变换复数数组到结果图像的转化.22数字图像处理/1)原始图像到复数数组的转化CTArray array_of_complex=CImageProcessing:Image_to_complex(m_image.Get_gray_image(),new_height,new_width);/2)傅里叶正变换complex*pointer_of_complex=new complex array_of_complex.GetDimension();array_of_complex.Ex
14、portTo(pointer_of_complex);CImageProcessing:forward_fft2d(pointer_of_complex,new_height,new_width);array_of_complex.ImportFrom(pointer_of_complex);/3)低通滤波array_of_complex=CImageProcessing:Low_pass_filter(array_of_complex);/4)傅里叶逆变换array_of_complex.ExportTo(pointer_of_complex);CImageProcessing:invers
15、e_fft2d(pointer_of_complex,new_height,new_width);array_of_complex.ImportFrom(pointer_of_complex);delete pointer_of_complex;/5)复数数组到结果图像的转化CTMatrix filter_image=CImageProcessing:Complex_to_image(array_of_complex,new_height,new_width);.23数字图像处理.24数字图像处理.25数字图像处理.26数字图像处理.27数字图像处理均值滤波法,就是取一个图像区域中的平均值作为
16、滤波后的像素值,其非常类似于高斯滤波,也是属于基于空域的模板卷积的方法。均值滤波所对应的卷积模板中的各个权重都是一样的,在实际计算中,也根本不需要进行模板卷积操作,只需要进行各个像素累加取平均就行了。均值滤波,是属于线性的窗口滤波,是典型的低通滤波方法,其基本的思想就是对任何一个元素取其邻域中的平均值作为滤波响应。.28数字图像处理英语单词发音均值滤波模板示意图.29数字图像处理一维均值滤波实现示意图均值滤波结果示例.30数字图像处理中值滤波,是一种非线性的窗口滤波方法,可以在很容易去除噪声的基础上保留边缘信息。中值滤波的基本思想就是,对于图像中的任意一个像素,从其邻域中的所有像素中挑选与其它
17、像素最为相似的像素。.31数字图像处理混合中值滤波,也是一种非线性的滤波算法,相对简单的中值滤波其具有很好的边缘保留特性。混合中值滤波的基本思想是,对图像中的任意一个像素运用多次简单中值滤波,每次中值滤波所使用的邻域形状会发生变化,然后取多次中值结果中的中值作为最后的滤波响应。具体来说,可以先运用十字模板进行简单中值滤波,然后再运用叉形模板进行滤波,最后取上述两个中值与原始像素本身进行比较,并提取它们之间的中值作为最后的结果。.32数字图像处理.33数字图像处理.34数字图像处理.35数字图像处理.36数字图像处理图像锐化,顾名思义,就是让图像看起来更尖锐一点,更清晰一点。图像锐化的目的,则是
18、让图像的内部对比度增大,使得用户能够看起来更加清晰,其存在一个副作用,就是可能会添加用户不感兴趣的信息,即噪声。从噪声的角度来说,图像平滑是起抑制作用的,而图像锐化是起促进作用的;从对比度的角度来说,图像平滑是起缩小作用的,而图像锐化是起放大作用的。.37数字图像处理基本思路就是,首先对原始图像进行傅里叶正变换,得到原始傅里叶变换域;然后对原始变换域进行高通滤波操作,滤波后的直接结果还是变换域;最后对滤波后的变换域再进行傅里叶逆变换,得到滤波处理后的图像,即为最终结果。.38数字图像处理.39数字图像处理低通滤波高通滤波.40数字图像处理CTArray CImageProcessing:Hig
19、h_pass_filter(CTArray original_signal,long image_height,long image_width)long dimension=original_signal.GetDimension();long radius=min(image_height,image_width)/7;for(int row=0;row image_height;row+)for(int column=0;column image_width;column+)if(row-image_height/2)*(row-image_height/2)+(column-image
20、_width/2)*(column-image_width/2)radius*radius)original_signal row*image_width+column.m_re=0;original_signal row*image_width+column.m_im=0;return original_signal;.41数字图像处理.42数字图像处理.43数字图像处理与像素邻域的平均值相反的概念,就是像素邻域内的差值;也就是说,可以取像素邻域内的差值来作为像素的最后响应值,以实现基于空域的图像锐化,此方法就叫作差值滤波法。.44数字图像处理原始图像巴特沃斯滤波器圆形滤波器差值滤波器.45数字图像处理图像平滑与锐化,是两个截然相对的概念。图像平滑,就是让图像变得模糊;图像锐化,就是让图像变得尖锐。从频域角度来说,图像平滑就对应着低通滤波法(保留低频信息),而图像锐化则对应着高通滤波法(保留高频信息)。对于低通滤波法,本章阐述了基于傅里叶变换域的低通滤波,并介绍了快速傅里叶变换原理。从空域角度来说,图像平滑使用了三种滤波方法,分别为高斯滤波法、均值滤波法和中值滤波法,而图像锐化则使用了差值滤波法。.46数字图像处理.