首页 > 代码库 > 灰度图像--频域滤波 同态滤波

灰度图像--频域滤波 同态滤波

学习DIP第27天

转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意。有些网站转载了我的博文,很开心的是自己写的东西被更多人看到了,但不开心的是这段话被去掉了,也没标明转载来源,虽然这并没有版权保护,但感觉还是不太好,出于尊重文章作者的劳动,转载请标明出处!!!!

文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro

开篇废话

       今天的废话是,图像处理是个很大的很混乱的科目,因为任何内容都至少属于两个大框架,比如通态滤波,听起来就是频域滤波,但它的另一个身份还属于图像增强。如果单纯的想把内容归类,这个很困难,因为图像的知识结构是图,而不是简单的树。

    新买了一个书《图像处理基础》,像是一本字典,或者是题库,里面的标题像十万个为什么,要参加校招的同学可以临时复习下,当然,当我们深入学习时这本书也是一本不错的指导手册,像一本纸质的wiki,一本不错的工具书。

    本文结构图:

技术分享

成像原理

        成像原理就是我们为什么能看到东西的原理,和光学有关,但这里我们对其进行抽象,如果完整建模成像的原理,将会是很复杂的模型,暂时不考虑复杂的情况,而只考虑两种主要参数,入射分量和反射分量。

    例如对于一幅图像,对于像素点(x,y)我们设其值为f(x,y)那么可以确定的是f(x,y)的是大于0且有限的:

技术分享

    成像的物体受到光源的照射,反射到成像元件或者人眼里的是入射光照反射的部分,换个理解反射分量类似于一个衰减系数,例如入射光是1,反射分量是0.7,那么我们看到的是1x0.7=0.7,如果物体是黑洞,那么反射分量是0,如果绝对无减少的反射,那么反射分量是1;入射分量为i(x,y),反射分量(我感觉叫反射系数更准确)r(x,y),那么成像可以被描述为:

技术分享

    并且存在关系:

技术分享

技术分享

    对于单色图像,图像的像素值表示该点的灰度强度

技术分享

    灰度强度介于最大和最小值之间,并且最小值大于0,最大值有限,技术分享实际上满足技术分享技术分享技术分享称为灰度级通常是[0,max],对于8bit灰度像素,灰度级为[0,255]。

同态滤波

    介绍同态滤波之前,必须要了解下为什么叫同态,因为这个问题我也研究了很久,根据wiki上的介绍,同态的本质是一种映射,但是这种映射拥有特殊的性质,这种性质就是保持相关的属性不变,相关属性包括,幺元,逆元,二元运算等。看个例子:
技术分享
    典型的例子就是:
技术分享
    其中f可以为:
技术分享
    那么f(2+4)=f(2)*f(4)。这个映射f就是一个同态映射。加法运算的幺元0映射结果是乘法的幺元1。满足之前我们提到的性质。

数学原理

       根据前面的成像原理,和同态定义,我们提出了同态滤波,同态滤波,同态滤波的特点是,压缩灰度范围,同时增强对比度,增强对比度类似于增加像素灰度的方差,而压缩灰度值一定程度上限制了方差的大小,所以同态滤波有点类似于,给你减工资,还要让你工作积极性高涨。。。。。

    根据上文成像原理的假设,图像f(x,y)=i(x,y)*r(x,y),但对于傅里叶变换(DFT)不存在下面关系,因为乘法的傅里叶变换不是傅里叶变换的乘法:

技术分享

所以我们引进了自然对数函数,一个使乘法变成加法的神奇运算,我们定义:

技术分享

那么就可以利用傅里叶的线性得到:

技术分享

或者:

技术分享

Fi和Fr分别是ln i(x,y)和ln r(x,y)的傅里叶变换。我们设计一个滤波器对Z进行滤波,就能得到:

技术分享

进行傅里叶逆变换,就得到空间图像:

技术分享

其中,我们根据前面定义能得到:

技术分享

所以处理后的图像s可以表示为:

技术分享

因为之前我们做了取自然对数运算,作为还原,我们计算:

技术分享

其中:

技术分享

i0和r0是滤波处理后的入射分量和反射分量。

整个过程用下面流程图表示:

技术分享

更进一步,在图像中,变换缓慢的部分为照射分量,和发生突变通常是由反射分量组成,特别是物体连接处,对应于频谱就是高频和低频部分,虽然只是粗略的近似,但结果在图像中是很有用的。

数学公式:

技术分享

滤波器的形状:

技术分享

应用

     对照明变化明显的图像进行预处理,减少图像照明变化的特征,增强较暗部分的细节

代码

#include "Homomorphicfilter.h"

static double Distance(int x,int y,int c_x,int c_y){
    
    return sqrt((x-c_x)*(x-c_x)+(y-c_y)*(y-c_y));
}



void HomorphicFilter(double *filter,int width,int height,double cut_off_frequency,double lambda_l,double lambda_h,double c){
    int center_x=width/2;
    int center_y=height/2;
    double distance;
    double distance_2;
    double cut_off_frequency_2=cut_off_frequency*cut_off_frequency;
    for(int i=0;i<height;i++)
        for(int j=0;j<width;j++){
            distance=Distance(j, i, center_x, center_y);
            distance_2=distance*distance;
            filter[i*width+j]=(lambda_h-lambda_l)*(1.0-exp(-c*distance_2/cut_off_frequency_2))+lambda_l;
            
        }





}


示例

原图:

技术分享

下图:截止频率20,lambda_l=1.5,lambda_h=10,c=1

技术分享 

下图:截止频率20,lambda_l=0.1,lambda_h=10,c=2

技术分享

总结

        总结,同态滤波可以有效的解决因光照不平衡引起的黑暗处细节消除的问题,并且平衡光照,频率域滤波可以处理各种问题,但归结起来有以下:1.图像要保留的部分和要去除的部分在频率上必须区别明显;2滤波器的性质决定了处理的结果;3分析频谱是一重要的环节。

灰度图像--频域滤波 同态滤波