zoukankan      html  css  js  c++  java
  • Gabor滤波器的理解

    搬以前写的博客【2014-02-28 20:03】

    关于Gabor滤波器是如何提取出特征点,这个过程真是煎熬。看各种文章,结合百度、文章内部的分析才有一点点明白。

    Gabor滤波器究竟是什么?
     
    很多表述说的是加窗傅里叶变换。怎么理解呢? 公式有下面几种表述:


                 (1)

                         (2)

    (3)

    文章中的和第三种最相似,那么我理解是:傅里叶变换的基是e^(j2πfx),那么所谓的加窗指的是加上一个高斯函数,如公式(1),和Gabor函数卷积的过程,很想再做一个基为Gauss * e^(j2πfx)的傅里叶变换。
     
    那么这样的gabor滤波器有什么作用呢?
     
    既然他是一个滤波器,按照我们学的滤波器的处理过程:
    Out(x, y) = In(x, y) ∗Gabor(x, y).         输入是图像I,滤波器是G,输出是复变量Out,分实部real虚部img;
    Mag(x,y) = |out(x,y)|;                           滤波后输出的幅度,也就是Gabor滤波器在图I上的幅度响应
    Ang(x,y) = arctan(img(x,y)/real(x,y));  Gabor滤波器在图I上的相位响应
     
    很显然相位响应是随即的,我们以前做滤波器时也只关注幅度响应。我在Matlab里面依据公式(3)画出了Gabor滤波器的频率响应图。
    注:公式3中是表示在具体某个中心点(ζ,η)上的相对坐标,在求Gabor滤波器核函数的时候(0,0)即可,不懂的话也不要紧。另外我认为公式3中的符号有一点问题自己做了修改,论文中的符号也有问题。
    gama =0.2;
    sigma = 2;
    namuda = 6;
    x = -7:1:7;
    y = -35:1:35;
    sita = 0;
    [x,y]=meshgrid(x,y);
    x1 = x*cos(sita)+y*sin(sita);
    y1 = -x*sin(sita)+y*cos(sita);
    z = exp(-(x1.^2+gama^2*y1.^2)/(2*sigma^2)).*cos(2*pi*x1/namuda);
    z = z/sum(sum(z));
    mesh(x,y,z);
             
    sita=0                          sita=-pi/4                      sita=pi/4
    可以看出来确实Gabor滤波器的频率响应方向随sita而变化,那么我们调整参数来看一张图片经过不同sita下输出的相应来确定特征点。
    代码如下:
    gama =0.2;
    sigma = 2;
    namuda = 6;
    x = -7:1:7;
    y = -35:1:35;
    sita = 0;
     
    I= imread('F:\SceneTrialTrain\Train\surg.jpg');
    I = I(:,:,1);
    figure(1)
    imshow(I);
    
    [x,y]=meshgrid(x,y);
    x1 = x*cos(sita)+y*sin(sita);
    y1 = -x*sin(sita)+y*cos(sita);
    z = exp(-(x1.^2+gama^2*y1.^2)/(2*sigma^2)).*cos(2*pi*x1/namuda+3.14*2);
    z = z/sum(sum(z));
     
    c = imfilter(I,z);
    d = c;
    m = c>180;
    n = c<=180;
    d(m) = 255;
    d(n) = 0;
     
    figure(2)
    imshow(d);
    我设定响应大或者小的阈值是180
          原图
        sita=pi/4
     sita = -pi/4;
     sita = pi/2;
     sita = 0;
    由此看出Gabor滤波器确实可以检测出来笔画特性的纹理。
     
    Gabor滤波器怎么检测特征点呢?
    在每一个点上找到兼容Gabor滤波器和不兼容Gabor滤波器,求出两个滤波器在该点的相应的差值,把每一差值的局部最大值对应的那个点设为特征点,由此在一张图上可以获得多个代表笔画的特征点。
    虽然关于Gabor滤波器还不是很懂,但是现在的理解也就到这里了,推荐一个很不错的理解,这里

    http://weibo.com/2689097654
  • 相关阅读:
    Flutter
    Flutter
    项目冲刺——第二天
    练习三:用例图
    项目冲刺——第一天
    作业六:团队项目冲刺前期准备
    作业四:软件案例分析
    作业五:需求规格说明书
    【非作业部分】队内暂时安排
    第二次练习——团队展示
  • 原文地址:https://www.cnblogs.com/jugg1024/p/4204969.html
Copyright © 2011-2022 走看看