资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,数字图像处理,*,图像平滑与锐化,配套课件,数字图像处理,编程框架、理论分析、实例应用和源码实现,1,数字图像处理,图像平滑与锐化,在统计学和图像处理领域中,对一个数据集(如图像)进行,平滑,就是产生一个近似的函数,目的是尝试获取数据的重要模式特征,并忽略噪声或者其它的细微结构信息。,在图像处理和计算机视觉领域,平滑的概念通常被用于尺度空间的表示中。,由于人类视觉系统的特性,,锐化,后的图像看起来更加清晰,但是实际上锐化操作并没有提高真正的分辨率。,2,数字图像处理,图像平滑与尺度空间,3,数字图像处理,图像平滑,低通滤波法,均值滤波法,中值滤波法,高斯滤波法,4,数字图像处理,低通滤波法,低通滤波器,,就是通过低频信号且抑制高频信号的滤波器。,一个,理想,的低通滤波器,就是能够完全剔除高于截止频率的所有信号,并且保留所有低于截止频率的信号。,在,实时应用,中,实际滤波器可以通过将信号延长一小段时间以得到未来的一小部分信号信息,这样就可以近似的实现理想滤波器。,巴特沃斯滤波器,切比雪夫滤波器,椭圆滤波器,5,数字图像处理,巴特沃斯滤波器,6,数字图像处理,切比雪夫滤波器,切比雪夫滤波器,是在通带或阻带上频率响应幅度等波纹波动的滤波器。,切比雪夫滤波器在过渡带比巴特沃斯滤波器衰减要快,但是频率响应的幅频特性不如巴特沃斯滤波器平坦。,在通带波动的切比雪夫滤波器的数学表达为,在阻带波动的切比雪夫滤波器的数学表达为,7,数字图像处理,椭圆滤波器,8,数字图像处理,低通滤波器,巴特沃斯滤波器,通带波动下的切比雪夫滤波器,阻带波动下的切比雪夫滤波器,椭圆函数滤波器,9,数字图像处理,傅里叶变换,10,数字图像处理,傅里叶变换示意图,11,数字图像处理,傅里叶变换示意图,12,数字图像处理,快速傅里叶变换,13,数字图像处理,基于傅里叶变换域的低通滤波,涉及,4,种图像初始、中间或最终结果,和三个主要处理步骤。,图像结果包括原始图像、原始变换域、滤波后的变换域和滤波后的图像,;,处理步骤包括傅里叶正变换、低通滤波和傅里叶逆变换。,将原始图像转化为复数数组进行,傅里叶正变换,,输出得到原始变换域;,对原始变换域进行频域上的处理,如,低通滤波,,得到滤波后的变换域;,将滤波后的变换域进行,傅里叶逆变换,,便得到最终的复数数组,取复数的实部信息便可以得到低通滤波后的图像结果。,14,数字图像处理,基于傅里叶变换域的低通滤波,低通滤波,,就是将高频信息剔除,只保留低频信息,对于空域图像结果而言就是图像变得模糊(或者说平滑)了,因为抑制了图像的边缘信息;,而对于,频域中间结果图像,而言,就是图像四周的信息被抑制了,看起来就是中间低频信息所占区域变小了。,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,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),long 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_complex(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 CImageProcessing: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 column =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_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 column =BYTE(sqrt(complex_array row*image_width+column.m_re,*complex_array row*image_width+column.m_re,+complex_array row*image_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 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;,return 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.ExportTo(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,:,inverse_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,数字图像处理,均值滤波法,均值滤波法,,就是
展开阅读全文