Gabor滤波器与特征提取

article/2025/9/16 14:19:22

一、Gabor滤波器
Gabor滤波器,最主要使用优势体现在对物体纹理特征的提取上

二维Gabor基函数能够很好地描述哺乳动物初级视觉系统中一对简单视觉神经元的感受野特性。随着小波变换和神经生理学的发展,Gabor变换逐渐演变成二维Gabor小波的形式。Gabor滤波器对于图像的亮度和对比度变化以及人脸姿态变化具有较强的健壮性,并且它表达的是对人脸识别最为有用的局部特征,故在计算机视觉及纹理分析中得到广泛的应用。

如果从Fourier变换的角度来看,Gobor变换就是窗函数取高斯窗时的短时Fourier变换
如果从小波变换的角度来看,Gabor变换就是小波基函数取Gabor基小波变换

f(x,y)=12πσxσy1ρ2e12(1ρ2)[(xaσx)2+(ybσy)2(2ρ(xa)(yb)σxσy)]

a,b,σ1,σ2,ρ(X,Y)a,b,σ1,σ2,ρN(a,b,σ1,σ2,ρ)
a,b,σ1,σ2,ρσ1>0,σ2>0,<a<+,<b<+,1<ρ<1
Oxya,b

a=b=0,ρ=0
f(x,y)=12πσxσye12[(xσx)2+(yσy)2]

Gabor小波实质上是由一个复指数信号调制一个二维高斯函数得到。

g(x,y)=12πσxσye12[(xσx)2+(yσy)2]ei2π(μ0x+ν0y)

[xy]=[cosθsinθsinθcosθ][xy]

θGabor
σx,σy

二、Gabor函数结合代码分析:
g(x,y;λθϕσ,γ)=e12[(xσ)2+(γyσ)2]ei(2πxλ+ϕ)
实数:
g(x,y;λθϕσ,γ)=e12[(xσ)2+(γyσ)2]cos(2πxλ+ϕ)
虚数:
g(x,y;λθϕσ,γ)=e12[(xσ)2+(γyσ)2]sin(2πxλ+ϕ)

波长 λ :它的值以像素为单位指定,通常大于等于2.但不能大于输入图像尺寸的五分之一。
方向 θ :这个参数指定了Gabor函数并行条纹的方向,它的取值为0到 2π
相位偏移 ϕ :它的取值范围为 ππ 。其中,0、 π 度分别对应中心对称的center-on函数和center-off函数,而- π/2 π/2 对应反对称函数。
长宽比 γ :空间纵横比,决定了Gabor函数形状的椭圆率 ellipticity
γ=1 时,形状是圆的。当 γ<1 时,形状随着平行条纹方向而拉长。通常该值为0.5。
带宽 b Gabor 滤波器的半响应空间频率带宽b和σ/ λ的比率有关,其中 σ 表示Gabor函数的高斯因子的标准差,如下:
g(x,y;λθϕσ,γ)=e12[(xσ)2+(γyσ)2]sin(2πxλ+ϕ)

b=log2σπλ+ln22σπλln22

σλ=1πln222b+12b1

σ 的值不能直接设置,它仅随着带宽b变化。带宽值必须是正实数,通常为1,此时,标准差和波长的关系为: σ=0.56λ
带宽越小,标准差越大, Gabor 形状越大,可见平行和抑制区条纹数量越多

    //构造Gabor函数for (int k = 0;k < N;k++)                   //定义N方向{Theta = PI*((double)k/N);      //0*PI/4,1*PI/4,2*PI/4,3*PI/4for (int i = 0;i < gabor_height;i++)    //定义模版大小{for (int j = 0;j < gabor_width;j++){x = j - gabor_width/2; //-5,-4,-3,-2,-1,0,+1,+2,+3,+4y = i - gabor_height/2;//-5,-4,-3,-2,-1,0,+1,+2,+3,+4xtmp = (double)x*cos(Theta) + (double)y*sin(Theta);ytmp = (double)y*cos(Theta) - (double)x*sin(Theta);tmp1 = /*(1/(2*PI*sigma_x*sigma_y))**/exp(-(pow(xtmp,2)/pow(sigma_x,2)+pow(ytmp,2)/pow(sigma_y,2))/2);tmp2 = cos(2*PI*xtmp/Lambda);tmp3 = sin(2*PI*xtmp/Lambda);re = tmp1*tmp2;im = tmp1*tmp3;rel[i*gabor_width+j] = re;img[i*gabor_width+j] = im;//printf("%f,%f\n",re,im);}}//用不同方向的Gabor函数对图像滤波并保存图片 g_filer(src_data,src->height,src->width,rel,img,10,10,k);}

参考资料:
基于测地线活动区域模型的非监督式纹理分割
何 源, 罗予频, 胡东成
这里写图片描述

这里写图片描述

三、参考书籍资料研究:
《人脸识别与人体动作识别技术与应用》 曹林著
这里写图片描述

这里写图片描述

这里写图片描述

四、参考网上代码:

// gabor.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"
#include<iostream>
#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  
#include <opencv2/imgproc/imgproc.hpp>
#include "math.h"
#define  PI 3.1415926
#define  N 8
using namespace std;
using namespace cv;void m_filer(double *src,int height,int width,double *mask_rel,double *mask_img,int mW,int mH,int k)
{IplImage *tmp;double a,b,c;char res[20];       //保存的图像名称tmp = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);for (int i = 0;i < height;i++){for (int j = 0;j < width;j++){a = 0.0;b = 0.0;c = 0.0;//去掉靠近边界的行列,无法滤波,超出范围 卷积if (i > int(mH/2) && i < height - int(mH/2) && j > int(mW) && j < width - int(mW/2)){for (int m = 0;m < mH;m++){for(int n = 0;n < mW;n++){//printf("%f\n",src[(i+m-int(mH/2))*width+(j+n-int(mW))]);a += src[(i+m-int(mH/2))*width+(j+n-int(mW))]*mask_rel[m*mW+n];b += src[(i+m-int(mH/2))*width+(j+n-int(mW))]*mask_img[m*mW+n];//printf("%f,%f\n",a,b);}}}c = sqrt(a*a+b*b);c /= mW*mH;tmp->imageData[i*width+j] = (unsigned char)c;}}sprintf(res,"result%d.jpg",k);cvSaveImage(res,tmp);cvReleaseImage(&tmp);
}int main(int argc, char* argv[])
{IplImage *src;double *rel,*img,*src_data,xtmp,ytmp,tmp1,tmp2,tmp3,re,im;double Theta,sigma,Gamma,Lambda,Phi;        //公式中的5个参数int gabor_height,gabor_width,x,y;src = cvLoadImage("1.jpg",CV_LOAD_IMAGE_GRAYSCALE);gabor_height = 10;gabor_width = 10;Gamma = 1.0;Lambda = 10.0;sigma = 100;Phi = 0;rel = (double *)malloc(sizeof(double)*gabor_width*gabor_height);//实数部分img = (double *)malloc(sizeof(double)*gabor_width*gabor_height);//虚数部分src_data = (double *)malloc(sizeof(double)*src->widthStep*src->height); //图像数据 for (int i=0;i<src->height;i++){for (int j=0;j<src->widthStep;j++){src_data[i*src->widthStep+j]=(unsigned char)src->imageData[i*src->widthStep+j];//printf("%f\n",src_data[i*src->widthStep+j]);}}//构造gabor函数for (int k = 0;k < N;k++)                   //定义N方向{Theta = PI*((double)k/N);      //0*PI/8,1*PI/8,2*PI/8,3*PI/8,4*PI/8,5*PI/8,6*PI/8,7*PI/8for (int i = 0;i < gabor_height;i++)    //定义模版大小{for (int j = 0;j < gabor_width;j++){x = j - gabor_width/2; //-5,-4,-3,-2,-1,0,+1,+2,+3,+4y = i - gabor_height/2;//-5,-4,-3,-2,-1,0,+1,+2,+3,+4xtmp = (double)x*cos(Theta) + (double)y*sin(Theta);ytmp = (double)y*cos(Theta) - (double)x*sin(Theta);tmp1 = exp(-(pow(xtmp,2)+pow(ytmp*Gamma,2))/(2*pow(sigma,2)));tmp2 = cos(2*PI*xtmp/Lambda + Phi);tmp3 = sin(2*PI*xtmp/Lambda + Phi);re = tmp1*tmp2;im = tmp1*tmp3;rel[i*gabor_width+j] = re;img[i*gabor_width+j] = im;//printf("%f,%f\n",re,im);}}//用不同方向的GABOR函数对图像滤波并保存图片m_filer(src_data,src->height,src->width,rel,img,10,10,k);}free(rel);free(img);free(src_data);return 0;
}

这里写图片描述

Matlab研究分析Gabor滤波器
http://blog.csdn.net/forest_world/article/details/51018493


http://chatgpt.dhexx.cn/article/qw3EmAqo.shtml

相关文章

【图像处理】Gabor滤波器

Gabor的核函数参考的wiki 使用实数Real的公式计算核函数代码&#xff1a; Mat getGaborFilter(float lambda, float theta, float sigma2,float gamma, float psi 0.0f){if(abs(lambda-0.0f)<1e-6){lambda 1.0f;} float sigma_x sigma2;float sigma_y sigma2/(gamma*gam…

生物特征识别中的Gabor滤波器

Daugman&#xff08;1980&#xff09;提出的2D Gabor滤波器&#xff08;以下简称Gabor滤波器&#xff09;&#xff0c;在纹理分类、纹理分割、生物特征识别中取得了广泛的应用。本文首先简要介绍Gabor滤波器&#xff0c;然后列举它在生物特征识别方面的代表性应用。 2D Gabor滤…

matlab的gabor类解读

为什么要进行解析&#xff0c;因为自带的gabor函数有个小坑&#xff0c; 转opencv的时候&#xff0c;因为没有完全理解自带的gabor源码被小小的坑了一下&#xff0c; 所以做一下记录&#xff0c; 以方便后人。‘ 版本是2016B 文章目录 Matlab gabor函数解析1 gabor基本公式2 m…

Gabor滤波 + 多尺度问题

Gabor函数 Gabor变换属于加窗傅立叶变换&#xff0c;Gabor函数可以在频域不同尺度、不同方向上提取相关的特征。另外Gabor函数与人眼的生物作用相仿&#xff0c;所以经常用作纹理识别上&#xff0c;并取得了较好的效果。二维Gabor函数可以表示为&#xff1a; 其中&#xff1a;…

Gabor算法

在数字图像处理领域&#xff0c;Gabor滤波器是以Dennis Gabor命名的&#xff0c;Gabor滤波器是用作边缘检测的线性滤波器。Gabor滤波器的频率和方向的表达与人类的视觉系统很相似。研究发现&#xff0c;Gabor滤波器非常适合纹理表达和分离。在空间域中&#xff0c;一个二维Gabo…

Log-Gabor滤波器

Log-Gabor滤波器 G ( f ) e l n 2 ( ω / ω 0 ) 2 l n 2 ( k / ω 0 ) G(f)e^{\frac {ln^2({\omega /\omega_0})}{2{ln}^2(k/\omega_0)}} G(f)e2ln2(k/ω0​)ln2(ω/ω0​)​ 式中&#xff1a; ω 0 \omega_0 ω0​为滤波器中心频率&#xff0c;通常将 k / ω 0 k/\omega_0 k…

Gabor滤波器原理

一、什么是Gabor函数&#xff08;以下内容含部分翻译自维基百科&#xff09; 在图像处理中&#xff0c;Gabor函数是一个用于边缘提取的线性滤波器。Gabor滤波器的频率和方向表达同人类视觉系统类似。研究发现&#xff0c;Gabor滤波器十分适合纹理表达和分离。在空间域中&#x…

Gabor的OpenCV代码

唯一持续维护地址&#xff1a;http://52coding.com/opencv-gabor 最近弄人脸识别&#xff0c;用到Gabor卷积核&#xff0c;但网上的代码似乎没有和我心意的&#xff0c;于是参考了自己写了下&#xff01;参考了Zhou Mian以及matlab的Gabor实现代码的代码。虽然OpenCV的imporc下…

2021-08-07 Gabor滤波器简介以及简单应用

Gabor滤波器&#xff08;Gabor Filter&#xff09; 文章目录 Gabor滤波器&#xff08;Gabor Filter&#xff09;简介Gabor滤波器的不同参数Gabor滤波器的简单应用&#xff08;python&#xff09; 简介 Gabor滤波器是一种线性滤波器&#xff0c;用于边缘检测、纹理分析、特征提…

Gabor Filters

Gabor Filters: Manjunath, B. S., & Ma, W. Y. (1996). Texture features for browsing and retrieval of image data. IEEE Transactions on Pattern Analysis and Machine Intelligence, 18(8), 837-842. Gabor滤波器是一种基于Gabor函数的特定频率和方向选择性滤波器。…

基于Gabor滤波器的人脸特征提取

Gabor小波变换的核函数&#xff0c;其最大的特点是其与人脑的皮层神经细胞的二维反射区具有相似的特征。基于Gabor小波变换的特征信息能够有效提取各种细节结构信息&#xff0c;因此Gabor小波变换在图像识别领域有着较为广泛的应用。根据Gabor小波变换的特点&#xff0c;基于Ga…

Gabor特征提取

Gabor小波与人类视觉系统中简单细胞的视觉刺激响应非常相似。它在提取目标的局部空间和频率域信息方面具有良好的特性。虽然Gabor小波本身并不能构成正交基&#xff0c;但在特定参数下可构成紧框架。Gabor小波对于图像的边缘敏感&#xff0c;能够提供良好的方向选择和尺度选择特…

Gabor 卷积神经网络

与不涉及学习过程的 hand-crafted 滤波器不同&#xff0c;DCNNs-based feature extraction 是一种 data-driven 技术&#xff0c;可以直接从数据中学习具有鲁棒性的特征表示。然而&#xff0c;它有非常大的训练成本和复杂的模型参数。 DCNNs 有限的几何变换建模能力主要来自于…

如何理解Gabor滤波器

转载自如何理解Gabor滤波器 介绍 我们已经知道&#xff0c;傅里叶变换是一种信号处理中的有力工具&#xff0c;可以帮助我们将图像从空域转换到频域&#xff0c;并提取到空域上不易提取的特征。但是经过傅里叶变换后&#xff0c;图像在不同位置的频度特征往往混合在一起&…

基于python的图像Gabor变换及特征提取

基于python的图像Gabor变换及特征提取 1.前言2. “Gabor帮主”简介3.“Gabor帮主”大招之图像变换3.“Gabor帮主”大招之图像特征提取 深圳中兴网信科技有限公司&#xff1a;廖海斌 1.前言 在深度学习出来之前&#xff0c;图像识别领域北有“Gabor帮主”&#xff0c;南有“SIF…

Gabor滤波器详解

转载自如何理解Gabor滤波器 介绍 我们已经知道&#xff0c;傅里叶变换是一种信号处理中的有力工具&#xff0c;可以帮助我们将图像从空域转换到频域&#xff0c;并提取到空域上不易提取的特征。但是经过傅里叶变换后&#xff0c;图像在不同位置的频度特征往往混合在一起&…

Gabor 变换

http://blog.sina.com.cn/s/blog_48a242d601000a3j.html Gabor变换属于加窗傅立叶变换&#xff0c;Gabor函数可以在频域不同尺度、不同方向上提取相关的特征。另外Gabor函数与人眼的生物作用相仿&#xff0c;所以经常用作纹理识别上&#xff0c;并取得了较好的效果。 Gabor变换…

图像处理:Gabor滤波器简介以及python实现

在图像处理中&#xff0c;以Dennis Gabor命名的Gabor滤波器是一种用于纹理分析的线性滤波器&#xff0c;本质上是指在分析点或分析区域周围的局部区域内&#xff0c;分析图像中是否存在特定方向的特定频率内容。Gabor滤波器的频率和方向表示被许多当代视觉科学家认为与人类视觉…

Gabor滤波器学习

本文的目的是用C实现生成Gabor模版&#xff0c;并对图像卷积。并简单提一下&#xff0c;Gabor滤波器在纹理特征提取上的应用。 一、什么是Gabor函数&#xff08;以下内容含部分翻译自维基百科&#xff09; 在图像处理中&#xff0c;Gabor函数是一个用于边缘提取的线性滤波器。…

Gabor变换

2009-12-13 00:51:08| 分类&#xff1a; 图像处理|字号 订阅 转自 http://blog.sina.com.cn/s/blog_48a242d601000a3j.html~typev5_one&labelrela_prevarticle Gabor变换属于加窗傅立叶变换&#xff0c;Gabor函数可以在频域不同尺度、不同方向上提取相关的特征。另外Gabo…