学习OpenCV——Gabor函数的应用
原文: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文件中
- #include "cvgabor.h"
- int main(){
- //创建一个方向是PI/4而尺度是3的gabor
- double Sigma = 2*PI;
- double F = sqrt(2.0);
- CvGabor *gabor1 = new CvGabor;
- gabor1->Init(PI/4, 3, Sigma, F);
- //获得实部并显示它
- IplImage *kernel = cvCreateImage( cvSize(gabor1->get_mask_width(), gabor1->get_mask_width()), IPL_DEPTH_8U, 1);
- kernel = gabor1->get_image(CV_GABOR_REAL);
- cvNamedWindow("Gabor Kernel", 1);
- cvShowImage("Gabor Kernel", kernel);
- cvWaitKey(0);
- //载入一个图像并显示
- IplImage *img = cvLoadImage( "D:/Demo.jpg", CV_LOAD_IMAGE_GRAYSCALE );
- cvNamedWindow("Original Image", 1);
- cvShowImage("Original Image", img);
- cvWaitKey(0);
- //获取载入图像的gabor滤波响应的实部并且显示
- IplImage *reimg = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_8U, 1);
- gabor1->conv_img(img, reimg, CV_GABOR_REAL);
- cvNamedWindow("Real Response", 1);
- cvShowImage("Real Response",reimg);
- cvWaitKey(0);
- cvDestroyWindow("Real Response");
- //获取载入图像的gabor滤波响应的虚部并且显示
- // IplImage *reimg = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_8U, 1);
- gabor1->conv_img(img, reimg, CV_GABOR_IMAG);
- cvNamedWindow("Imaginary Response", 1);
- cvShowImage("Imaginary Response",reimg);
- cvWaitKey(0);
- cvDestroyWindow("Imaginary Response");
- //获取载入图像的gabor滤波响应的模并且显示
- // IplImage *reimg = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_8U, 1);
- gabor1->conv_img(img, reimg, CV_GABOR_MAG);
- cvNamedWindow("Magnitude Response", 1);
- cvShowImage("Magnitude Response",reimg);
- cvWaitKey(0);
- cvDestroyWindow("Magnitude Response");
- /*
- //这个响应可以被取样为8位的灰度图。如果你要原始的浮点类型的数据,你可以这样做
- IplImage *reimg = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_32F, 1);
- gabor1->conv_img(img, reimg, CV_GABOR_MAG);
- //然而,这些浮点数据是不能够以上面灰度图的形式简单的显示,但是它可以被保存在一个XML文件中。
- cvSave( "reimg.xml", (IplImage*)reimg, NULL, NULL, cvAttrList(0,0));
- */
- }
概念:
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函数的应用的更多相关文章
- 《学习OpenCV》练习题第四章第三题b
#include <highgui.h> #include <cv.h> #include "opencv_libs.h" /* *<学习OpenCV ...
- 《学习OpenCV》练习题第四章第三题a
#include <highgui.h> #include <cv.h> #include "opencv_libs.h" #pragma comment ...
- 《学习OpenCV》练习题第四章第二题
#include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ...
- 学习opencv中文版教程——第二章
学习opencv中文版教程——第二章 所有案例,跑起来~~~然而并没有都跑起来...我只把我能跑的都尽量跑了,毕竟看书还是很生硬,能运行能出结果,才比较好. 越着急,心越慌,越是着急,越要慢,越是陌生 ...
- 【从零学习openCV】IOS7下的人脸检測
前言: 人脸检測与识别一直是计算机视觉领域一大热门研究方向,并且也从安全监控等工业级的应用扩展到了手机移动端的app,总之随着人脸识别技术获得突破,其应用前景和市场价值都是不可估量的,眼下在学习ope ...
- 【学习opencv第七篇】图像的阈值化
图像阈值化的基本思想是,给定一个数组和一个阈值,然后根据数组中每个元素是低于还是高于阈值而进行一些处理. cvThreshold()函数如下: double cvThreshold( CvArr* s ...
- 【从零学习openCV】IOS7根据人脸检测
前言: 人脸检測与识别一直是计算机视觉领域一大热门研究方向,并且也从安全监控等工业级的应用扩展到了手机移动端的app.总之随着人脸识别技术获得突破,其应用前景和市场价值都是不可估量的,眼下在学习ope ...
- [学习OpenCV攻略][002][Ubuntu下OpenCV安装]
配置环境 操作系统 Ubuntu 12.04 OpenCV版本 opencv-1.0.0 学习书籍 <学习OpenCV> Liunx软件安装方法主要有3种: 1.编译安装,也就是通过编译源 ...
- 学习OpenCV——SVM
学习OpenCV——SVM 学习SVM,首先通过http://zh.wikipedia.org/wiki/SVM, 再通过博客http://blog.csdn.net/yang_xian521/art ...
随机推荐
- 3分钟wamp安装redis扩展超级简单
windows10(win8.1等系统应该是一样的) wampserver2.5 -Apache-2.4.9-Mysql-5.6.17-php5.5.12-64b 很简单只需要3步,主要是安装redi ...
- 【HDU】1814 Peaceful Commission
http://acm.hdu.edu.cn/showproblem.php?pid=1814 题意:n个2人组,编号分别为2n和2n+1,每个组选一个人出来,且给出m条关系(x,y)使得选了x就不能选 ...
- iOS9 tableVIewCell的分割线不显示,只有在滑动的时候才显示?
1.如果用6plus模拟器的话,电脑分辨率达不到那么高,因此就看不到分割线. 2.把模拟器换成6s 或 5s,就没问题了.
- 使用shell操作mysql(转)
在linux平台下,为避免每次操作数据库(mysql)都要进入Mysql命令模式下,可以使用Shell命令直接操作数据库. 一.直接写sql语句 if [ $# -ne 1 ] then ...
- wego微购RSS、Sitemap、Ping、腾讯拍拍网购采集插件
和哥们研究淘宝客,找到微购这个程序觉得挺不错的,但是地图和RSS功能不是特别完善,于是小憩一下,做了下初级的拓展,分享给大家,开源精神嘛,大家也可以去我的网站我要购物平台去看看. 1.拓展后台seoA ...
- [CareerCup] 15.5 Denormalization 逆规范化
15.5 What is denormalization? Explain the pros and cons. 逆规范化Denormalization是一种通过添加冗余数据的数据库优化技术,可以帮助 ...
- ado.net 实体类_数据访问类
实体类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...
- while:1.兔子生兔子问题 2.打印菱形 3.求100以内质数的和4.洗发水15元一瓶,牙膏5元一支,香皂2元一块,150元刚好花完
1.兔子生兔子问题: 2.打印菱形 3.求100以内质数的和 4.洗发水15元一瓶,牙膏5元一支,香皂2元一块,150元刚好花完有多少种情况?
- setTimeout的用法
var n = 0; function fnTime(){alert(++n);}// 常用写法// 不加括号方式setTimeout(fnTime,5000);// 加字符串方式setTimeout ...
- oracle中删除表中某字段出现重复的信息 保留其中一条
记得以前有个同事问过我这个,说是以前面试的时候碰到的问题,下面我介绍三种方法. 首先我们在这里创建一个测试表添加相应的测试数据. create table test (id number,name ...