Gabor滤波器的生成
2015-11-27 22:14
435 查看
今天师兄叫我帮他写个用Gabor提取特征的代码,顺便学习了下Gabor滤波器的生成过程。
Gabor变换属于加窗傅立叶变换。
更详细的介绍在
http://en.wikipedia.org/wiki/Gabor_filter
可以看到opencv中实现的是
这个公式,虚部已经丢掉了。
这里就不贴出代码了,给出推导过程。
可以看出其代码所实现的gabor滤波器既有实部又有虚部,不完全是
这个公式。因为其代码实现的是不只一个尺度,在我的推导中包含了5个尺度8个方向,共产生40个滤波器。
(转载请注明作者和出处:http://blog.csdn.net/CHIERYU 未经允许请勿用于商业用途)
简介
Gabor滤波器是一个或一组Gabor函数离散形式,在计算机视觉中常用到Gabor滤波器来提取纹理特征。Gabor函数的表达式有很多种,Wikipedia中给出的形式如下:Gabor变换属于加窗傅立叶变换。
更详细的介绍在
http://en.wikipedia.org/wiki/Gabor_filter
Opencv中Gabor滤波器的生成过程
首先贴出代码:cv::Mat cv::getGaborKernel( Size ksize, double sigma, double theta, double lambd, double gamma, double psi, int ktype ) { double sigma_x = sigma; double sigma_y = sigma/gamma; int nstds = 3; int xmin, xmax, ymin, ymax; double c = cos(theta), s = sin(theta); if( ksize.width > 0 ) xmax = ksize.width/2; else xmax = cvRound(std::max(fabs(nstds*sigma_x*c), fabs(nstds*sigma_y*s))); if( ksize.height > 0 ) ymax = ksize.height/2; else ymax = cvRound(std::max(fabs(nstds*sigma_x*s), fabs(nstds*sigma_y*c))); xmin = -xmax; ymin = -ymax; CV_Assert( ktype == CV_32F || ktype == CV_64F ); Mat kernel(ymax - ymin + 1, xmax - xmin + 1, ktype); double scale = 1; double ex = -0.5/(sigma_x*sigma_x); double ey = -0.5/(sigma_y*sigma_y); double cscale = CV_PI*2/lambd; for( int y = ymin; y <= ymax; y++ ) for( int x = xmin; x <= xmax; x++ ) { double xr = x*c + y*s; double yr = -x*s + y*c; double v = scale*exp(ex*xr*xr + ey*yr*yr)*cos(cscale*xr + psi); if( ktype == CV_32F ) kernel.at<float>(ymax - y, xmax - x) = (float)v; else kernel.at<double>(ymax - y, xmax - x) = v; } return kernel; }
可以看到opencv中实现的是
这个公式,虚部已经丢掉了。
MATLAB的一种实现
这个是源码的网址:https://github.com/andybaoxv/symnmf/blob/master/gaborFilterBank.m这里就不贴出代码了,给出推导过程。
可以看出其代码所实现的gabor滤波器既有实部又有虚部,不完全是
这个公式。因为其代码实现的是不只一个尺度,在我的推导中包含了5个尺度8个方向,共产生40个滤波器。
使用滤波器提取特征
这里采用最简单的办法,来一张图像,用我MATLAB转换成C++的代码生成的40个滤波器分别与图像卷积运算,得到40个Mat,然后把Mat拼接起来就是特征向量了。cv::filter2D(image, reult, CV_32F, filter[i]);
(转载请注明作者和出处:http://blog.csdn.net/CHIERYU 未经允许请勿用于商业用途)
相关文章推荐
- 计算机视觉领域的牛人博客和有实力的研究机构
- 科研工作的关注点
- 最小外接矩形(MBR)
- 色彩量化评价指标 Quantitative measure methods for color quantization
- 图像处理的网址(转载)
- OpenCV学习笔记 第一篇 显示图像
- 图铭Android平台银行卡号识别系统
- 学习OpenCV第一课——认识、安装配置OpenCV(CodeBlocks)
- 基于纹理特征的指纹识别
- Kalman滤波
- 图像处理特征不变算子系列之KLT算子--GoodFeaturesToTrack(七)
- 《计算机视觉中的数学方法》笔记1 向量叉积的反对称矩阵表示
- 摄像测量相关
- Learning OpenCV Chapter3 初探OpenCV上
- 开通博客--for interest
- 计算机视觉投稿
- 摄像机几何概念
- R. Wang-Manifold-Manifold Distance with Application to Face Recognition based on Image Set读后记
- 计算机视觉、机器学习相关领域论文和源代码大集合--持续更新
- 计算机视觉、模式识别大牛资料搜集