原文:http://blog.csdn.net/yao_zhuang/article/details/2532279

下载cvgabor.cpp和cvgabor.h到你的C/C++工程目录下

注:在我的资源中有改进过的cvgabor类

相关链接为:http://download.csdn.net/source/490114

特别注意:使用该类需要opencv库的支持,如何配置环境参见:http://www.opencv.org.cn/index.php/Template:Install

它有如下的功能:

生成特定方向和尺度的gabor

生成可以显示或者保存的gabor核的实部,虚部

图像的实部,虚部或者主要(Magnitude)响应

响应可以保存在XML文件中

[cpp] view plain copy  print?
  1. #include "cvgabor.h"
  2. int main(){
  3. //创建一个方向是PI/4而尺度是3的gabor
  4. double Sigma = 2*PI;
  5. double F = sqrt(2.0);
  6. CvGabor *gabor1 = new CvGabor;
  7. gabor1->Init(PI/4, 3, Sigma, F);
  8. //获得实部并显示它
  9. IplImage *kernel = cvCreateImage( cvSize(gabor1->get_mask_width(), gabor1->get_mask_width()), IPL_DEPTH_8U, 1);
  10. kernel = gabor1->get_image(CV_GABOR_REAL);
  11. cvNamedWindow("Gabor Kernel", 1);
  12. cvShowImage("Gabor Kernel", kernel);
  13. cvWaitKey(0);
  14. //载入一个图像并显示
  15. IplImage *img = cvLoadImage( "D:/Demo.jpg", CV_LOAD_IMAGE_GRAYSCALE );
  16. cvNamedWindow("Original Image", 1);
  17. cvShowImage("Original Image", img);
  18. cvWaitKey(0);
  19. //获取载入图像的gabor滤波响应的实部并且显示
  20. IplImage *reimg = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_8U, 1);
  21. gabor1->conv_img(img, reimg, CV_GABOR_REAL);
  22. cvNamedWindow("Real Response", 1);
  23. cvShowImage("Real Response",reimg);
  24. cvWaitKey(0);
  25. cvDestroyWindow("Real Response");
  26. //获取载入图像的gabor滤波响应的虚部并且显示
  27. //  IplImage *reimg = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_8U, 1);
  28. gabor1->conv_img(img, reimg, CV_GABOR_IMAG);
  29. cvNamedWindow("Imaginary Response", 1);
  30. cvShowImage("Imaginary Response",reimg);
  31. cvWaitKey(0);
  32. cvDestroyWindow("Imaginary Response");
  33. //获取载入图像的gabor滤波响应的模并且显示
  34. //  IplImage *reimg = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_8U, 1);
  35. gabor1->conv_img(img, reimg, CV_GABOR_MAG);
  36. cvNamedWindow("Magnitude Response", 1);
  37. cvShowImage("Magnitude Response",reimg);
  38. cvWaitKey(0);
  39. cvDestroyWindow("Magnitude Response");
  40. /*
  41. //这个响应可以被取样为8位的灰度图。如果你要原始的浮点类型的数据,你可以这样做
  42. IplImage *reimg = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_32F, 1);
  43. gabor1->conv_img(img, reimg, CV_GABOR_MAG);
  44. //然而,这些浮点数据是不能够以上面灰度图的形式简单的显示,但是它可以被保存在一个XML文件中。
  45. cvSave( "reimg.xml", (IplImage*)reimg, NULL, NULL, cvAttrList(0,0));
  46. */
  47. }

概念:

1.关于小波变换:

一种多分辨率分析工具,为不同尺度上信号的的分析和表征提供了精确和统一框架。它的原理是来源于Fourier变换!但是它比传统的Fourier变换有更多优点,比如:

1)小波变换可以覆盖整个频域; 
2)可以通过选取合适滤波器,减少或除去提取的不同特征之间的相关性; 
3)具有变焦特性,低频段可用高频率分辨率和低时间分辨率,在高频段可用低频率分辨率和高时间分辨率 
4)小波变换在实现上有快速算法(Mallat小波分析算法)。

提到小波变换必须提到小波函数,简单的说,积分为0的函数都可以作为小波函数,还可以通过一系列变化得到连续的小波变换式。 
小波变换适用小波函数族及其相应的尺度函数将原始信号分解成不同的频带。一般所说的小波变换仅递归分解信号的低频部分,以生成下一尺度的各频道输出。层层分解(图片不附了),这样的分解通常称为金字塔结构小波变换。

如果不仅仅对低通滤波器输出进行递归分解,而且也对高通滤波器的输出进行递归分解,则称之为小波包分解。(树状的图形) 
小波变换具有良好的时频局部化、尺度变换和方向特征,是分析纹理的有力工具。

2.Gabor 变换

根据模拟人类视觉系统而产生。通过模拟人类视觉系统,可以将视网膜成像分解成一组滤波图像,每个分解的图像能够反映频率和方向在局部范围内的强度变化。通过一组多通道Gabor滤波器,可以获得纹理特征。 
Gabor变换的根本就是Gabor滤波器的设计,而滤波器的设计又是其频率函数(U,V)和Gauss函数参数(一个)的设计。实际上,Gabor变换是为了提取信号Fourier变换的局部信息,使用了一个Gauss函数作为窗函数,因为一个Gauss函数的Fourier变换还是一个Gauss函 数,所以Fourier逆变换也是局部的。

通过频率参数和高斯函数参数的选取,Gabor变换可以选取很多纹理特征,但是Gabor是非正交的,不同特征分量之间有冗余,所以在对纹理图像的分析中效率不太高。

from: http://blog.csdn.net/yangtrees/article/details/7437672

学习OpenCV——Gabor函数的应用相关推荐

  1. 学习|OpenCV图片修复函数inpaint

    学更好的别人, 做更好的自己. --<微卡智享> 本文长度为2020字,预计阅读6分钟 OpenCV图片修复 最近重新学习OpenCV的基础,偶然间发现了npaint的函数,于是就自己做了 ...

  2. 快速系统从零学习OpenCV 4路线图

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 转眼间,小白学视觉就要成立三周年了,小白一直是很感谢小伙伴们的支持 ...

  3. 【从零学习OpenCV 4】Mat类构造与赋值

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...

  4. 【从零学习OpenCV 4】了解OpenCV的模块架构

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...

  5. 【从零学习OpenCV】4Ubuntu系统中安装OpenCV 4

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...

  6. opencv Mat 函数--CheckVector

    学习opencv ,我们需要对opencv的函数有点了解 ,实现什么样子的功能,以及如何实现 下面我们一次来看checkVector 这个函数, int org.opencv.core.Mat.che ...

  7. 【从零学习openCV】IOS7下的人脸检測

    前言: 人脸检測与识别一直是计算机视觉领域一大热门研究方向,并且也从安全监控等工业级的应用扩展到了手机移动端的app,总之随着人脸识别技术获得突破,其应用前景和市场价值都是不可估量的,眼下在学习ope ...

  8. opencv4 c++ 提取图片中的白色区域_修正!【从零学习OpenCV 4】分割图像——分水岭法...

    点击上方"小白学视觉",选择"星标"公众号重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开 ...

  9. 学习OpenCV(一)从Mat讲起

    本博客所用OpenCV版本为2.4.3,运行环境为Visual Studio2012. 学习OpenCV是一个比较漫长的过程,希望我能够坚持! (一)从Mat讲起 Mat是OpenCV中用于存放图像的 ...

最新文章

  1. 详解中奖概率逻辑:为什么你中不了特等奖(附原件)
  2. python生成范围内随机数_python在一个范围内取随机数的方法是什么
  3. 高级软件工程2017第2次作业—— 个人项目:四则运算题目生成程序(基于控制台)...
  4. Linux openJDK执行javac编译java文件提示command not found
  5. python3连接oracle 11G数据库
  6. 线性表之顺序存储,基本操作
  7. 对字符串进行加密解密
  8. vista 改xp BIOS设置(ASUS,dell,hp,Acer,Lenovo)
  9. EXCEL 制作下拉选项,限制输入内容范围
  10. 微信打飞机java代码
  11. linux下anjuta_[分享] Linux下用Anjuta写个Hello World 的C++程序竟如此简单!
  12. RabbitMQ-官方指南-RabbitMQ配置
  13. element-ui的confirm里面可一写html
  14. access横向求和sum_access 2007使用查询对数据求和
  15. 《德鲁克管理思想精要》读书笔记9 - 决策
  16. ListView实现物流追踪
  17. 想从事程序员,对学历要求高吗
  18. Android限制录制屏幕无声音,哪一个安卓录屏软件可以录制系统的声音
  19. Python+班级管理系统 毕业设计-附源码171809
  20. android recocery模式,小米进入Recovery模式的两种方式

热门文章

  1. InformaticaPowerCenter调用存储过程
  2. 我的Linux系统的一些截图 之二
  3. Illumina联手IBM Watson Health解读癌症基因谱
  4. LeetCode 394: DecodeString (Java)
  5. ansible之安装与简单使用
  6. JPA getValidationMode()
  7. Java 运行程序,并获得结果
  8. WCF BasicHttpBinding 安全解析(1)BasicHttpBinding基本配置
  9. Go语言详细介绍:logo和版本
  10. linux下查看某软件是否已安装, ubuntu安装deb包