opencv java 窗函数_学习OpenCV——Gabor函数的应用

本文介绍了如何使用OpenCV的CvGabor类在Java中生成和应用Gabor滤波器,包括实部、虚部和模的响应,并展示了其实现代码。此外,还讨论了Gabor变换的概念,它是基于小波变换的一种视觉分析工具,用于提取图像的局部频率和方向信息。
摘要由CSDN通过智能技术生成

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

它有如下的功能:

生成特定方向和尺度的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值