opencv gabor特征提取有gabor函数吗

&&&&gabor函数基于opencv1.0实现
gabor函数基于opencv1.0实现
1、里面还是三个文件cvgabor.cpp cvgabor.h 和测试用的main.cpp
2、自己搭建opencv环境即可。
3、Copyright (C) 2006 by Mian Zhou
M.Zhou@reading.ac.uk *
若举报审核通过,可奖励20下载分
被举报人:
xuluhui123
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
课程资源下载排行下次自动登录
现在的位置:
& 综合 & 正文
Gabor的OpenCV代码
最近弄人脸识别,用到Gabor卷积核,但网上的似乎没有和我心意的,于是参考了自己写了下!参考了Zhou Mian以及matlab的Gabor实现代码的代码。虽然OpenCV的imporc下面有个gabor.cpp,但那个是一般形式的公式,不是用来做人脸识别的,可以参考文献A review
on Gabor wavelets for face recognition,又说到。上代码和链接地址!
目前代码未经过更多的测试,不少功能为加入,但可以满足许多人的使用和参考了吧,很多人肯定非常非常需要,先开源下,欢迎指出错误之处。
//GaborFR.h
#pragma once
#include "opencv2\opencv.hpp"
#include &vector&
class GaborFR
GaborFR();
static Mat getImagGaborKernel(Size ksize, double sigma, double theta,
double nu,double gamma=1, int ktype= CV_32F);
static Mat getRealGaborKernel( Size ksize, double sigma, double theta,
double nu,double gamma=1, int ktype= CV_32F);
static Mat getPhase(Mat &real,Mat &imag);
static Mat getMagnitude(Mat &real,Mat &imag);
static void getFilterRealImagPart(Mat& src,Mat& real,Mat& imag,Mat &outReal,Mat &outImag);
static Mat getFilterRealPart(Mat& src,Mat& real);
static Mat getFilterImagPart(Mat& src,Mat& imag);
Init(Size ksize=Size(19,19), double sigma=2*CV_PI,
double gamma=1, int ktype=CV_32FC1);
vector&Mat& gaborRealK
vector&Mat& gaborImagK
#include "stdafx.h"
#include "GaborFR.h"
GaborFR::GaborFR()
isInited =
void GaborFR::Init(Size ksize, double sigma,double gamma, int ktype)
gaborRealKernels.clear();
gaborImagKernels.clear();
double mu[8]={0,1,2,3,4,5,6,7};
double nu[5]={0,1,2,3,4};
for(i=0;i&5;i++)
for(j=0;j&8;j++)
gaborRealKernels.push_back(getRealGaborKernel(ksize,sigma,mu[j]*CV_PI/8,nu[i],gamma,ktype));
gaborImagKernels.push_back(getImagGaborKernel(ksize,sigma,mu[j]*CV_PI/8,nu[i],gamma,ktype));
isInited =
Mat GaborFR::getImagGaborKernel(Size ksize, double sigma, double theta, double nu,double gamma, int ktype)
double sigma_x
double sigma_y
double kmax
= CV_PI/2;
= cv::sqrt(2.0);
int xmin, xmax, ymin,
double c = cos(theta), s = sin(theta);
if( ksize.width & 0 )
xmax = ksize.width/2;
else//这个和matlab中的结果一样,默认都是19 !
xmax = cvRound(std::max(fabs(nstds*sigma_x*c), fabs(nstds*sigma_y*s)));
if( ksize.height & 0 )
ymax = ksize.height/2;
ymax = cvRound(std::max(fabs(nstds*sigma_x*s), fabs(nstds*sigma_y*c)));
CV_Assert( ktype == CV_32F || ktype == CV_64F );
double* pD
Mat kernel(ymax - ymin + 1, xmax - xmin + 1, ktype);
= kmax/pow(f,nu);
double scaleReal= k*k/sigma_x/sigma_y;
for( int y = y &= y++ )
if( ktype == CV_32F )
pFloat = kernel.ptr&float&(ymax-y);
pDouble = kernel.ptr&double&(ymax-y);
for( int x = x &= x++ )
double xr = x*c + y*s;
double v = scaleReal*exp(-(x*x+y*y)*scaleReal/2);
double temp=sin(k*xr);
if( ktype == CV_32F )
pFloat[xmax - x]= (float)v;
pDouble[xmax - x] =
//sigma一般为2*pi
Mat GaborFR::getRealGaborKernel( Size ksize, double sigma, double theta,
double nu,double gamma, int ktype)
double sigma_x
double sigma_y
double kmax
= CV_PI/2;
= cv::sqrt(2.0);
int xmin, xmax, ymin,
double c = cos(theta), s = sin(theta);
if( ksize.width & 0 )
xmax = ksize.width/2;
else//这个和matlab中的结果一样,默认都是19 !
xmax = cvRound(std::max(fabs(nstds*sigma_x*c), fabs(nstds*sigma_y*s)));
if( ksize.height & 0 )
ymax = ksize.height/2;
ymax = cvRound(std::max(fabs(nstds*sigma_x*s), fabs(nstds*sigma_y*c)));
CV_Assert( ktype == CV_32F || ktype == CV_64F );
double* pD
Mat kernel(ymax - ymin + 1, xmax - xmin + 1, ktype);
= kmax/pow(f,nu);
double exy
= sigma_x*sigma_y/2;
double scaleReal= k*k/sigma_x/sigma_y;
for( y = y &= y++ )
if( ktype == CV_32F )
pFloat = kernel.ptr&float&(ymax-y);
pDouble = kernel.ptr&double&(ymax-y);
for( x = x &= x++ )
double xr = x*c + y*s;
double v = scaleReal*exp(-(x*x+y*y)*scaleReal/2);
double temp=cos(k*xr) - exp(-exy);
v = temp*v;
if( ktype == CV_32F )
pFloat[xmax - x]= (float)v;
pDouble[xmax - x] =
Mat GaborFR::getMagnitude(Mat &real,Mat &imag)
CV_Assert(real.type()==imag.type());
CV_Assert(real.size()==imag.size());
int ktype=real.type();
int row = real.rows,col = real.
float* pFloat,*pFloatR,*pFloatI;
double* pDouble,*pDoubleR,*pDoubleI;
kernel(row, col, real.type());
for(i=0;i&i++)
if( ktype == CV_32FC1 )
pFloat = kernel.ptr&float&(i);
pFloatR= real.ptr&float&(i);
pFloatI= imag.ptr&float&(i);
pDouble = kernel.ptr&double&(i);
pDoubleR= real.ptr&double&(i);
pDoubleI= imag.ptr&double&(i);
for(j=0;j&j++)
if( ktype == CV_32FC1 )
pFloat[j]= sqrt(pFloatI[j]*pFloatI[j]+pFloatR[j]*pFloatR[j]);
pDouble[j] = sqrt(pDoubleI[j]*pDoubleI[j]+pDoubleR[j]*pDoubleR[j]);
Mat GaborFR::getPhase(Mat &real,Mat &imag)
CV_Assert(real.type()==imag.type());
CV_Assert(real.size()==imag.size());
int ktype=real.type();
int row = real.rows,col = real.
float* pFloat,*pFloatR,*pFloatI;
double* pDouble,*pDoubleR,*pDoubleI;
kernel(row, col, real.type());
for(i=0;i&i++)
if( ktype == CV_32FC1 )
pFloat = kernel.ptr&float&(i);
pFloatR= real.ptr&float&(i);
pFloatI= imag.ptr&float&(i);
pDouble = kernel.ptr&double&(i);
pDoubleR= real.ptr&double&(i);
pDoubleI= imag.ptr&double&(i);
for(j=0;j&j++)
if( ktype == CV_32FC1 )
if(pFloatI[j]/(pFloatR[j]+pFloatI[j]) & 0.99)
pFloat[j]=CV_PI/2;
pFloat[j] = atan(pFloatI[j]/pFloatR[j]);
pFloat[j] = asin(pFloatI[j]/sqrt(pFloatR[j]*pFloatR[j]+pFloatI[j]*pFloatI[j]));
pFloat[j] = atan2(pFloatI[j],pFloatR[j]);
if(pDoubleI[j]/(pDoubleR[j]+pDoubleI[j]) & 0.99)
pDouble[j]=CV_PI/2;
pDouble[j] = atan(pDoubleI[j]/pDoubleR[j]);
pDouble[j]=atan2(pDoubleI[j],pDoubleR[j]);
Mat GaborFR::getFilterRealPart(Mat& src,Mat& real)
CV_Assert(real.type()==src.type());
flip(real,kernel,-1);//中心镜面
// filter2D(src,dst,CV_32F,kernel,Point(-1,-1),0,BORDER_CONSTANT);
filter2D(src,dst,CV_32F,kernel,Point(-1,-1),0,BORDER_REPLICATE);
Mat GaborFR::getFilterImagPart(Mat& src,Mat& imag)
CV_Assert(imag.type()==src.type());
flip(imag,kernel,-1);//中心镜面
// filter2D(src,dst,CV_32F,kernel,Point(-1,-1),0,BORDER_CONSTANT);
filter2D(src,dst,CV_32F,kernel,Point(-1,-1),0,BORDER_REPLICATE);
void GaborFR::getFilterRealImagPart(Mat& src,Mat& real,Mat& imag,Mat &outReal,Mat &outImag)
outReal=getFilterRealPart(src,real);
outImag=getFilterImagPart(src,imag);
// Win32TestPure.cpp : 定义控制台应用的入口点。
#include "stdafx.h"
#include &vector&
#include &deque&
#include &iomanip&
#include &stdexcept&
#include &string&
#include &iostream&
#include &fstream&
#include &direct.h&//_mkdir()
#include "opencv2\opencv.hpp"
#include "GaborFR.h"
int main()
//Mat M = getGaborKernel(Size(9,9),2*CV_PI,u*CV_PI/8, 2*CV_PI/pow(2,CV_PI*(v+2)/2),1,0);
Mat saveM;
//s1中年男人
Mat I=imread("H:\\pic\\s1-5.bmp",-1);
normalize(I,I,1,0,CV_MINMAX,CV_32F);
Mat showM,showMM;Mat M,MatTemp1,MatTemp2;
int iSize=50;//如果数值比较大,比如50则接近论文中所述的情况了!估计大小和处理的源图像一样!
for(int i=0;i&8;i++)
showM.release();
for(int j=0;j&5;j++)
Mat M1= GaborFR::getRealGaborKernel(Size(iSize,iSize),2*CV_PI,i*CV_PI/8+CV_PI/2, j,1);
Mat M2 = GaborFR::getImagGaborKernel(Size(iSize,iSize),2*CV_PI,i*CV_PI/8+CV_PI/2, j,1);
//加了CV_PI/2才和大部分文献的图形一样,不知道为什么!
Mat outR,outI;
GaborFR::getFilterRealImagPart(I,M1,M2,outR,outI);
M=GaborFR::getPhase(M1,M2);
M=GaborFR::getMagnitude(M1,M2);
M=GaborFR::getPhase(outR,outI);
M=GaborFR::getMagnitude(outR,outI);
M=GaborFR::getMagnitude(outR,outI);
MatTemp2=GaborFR::getPhase(outR,outI);
resize(M,M,Size(100,100));
normalize(M,M,0,255,CV_MINMAX,CV_8U);
showM.push_back(M);
line=Mat::ones(4,M.cols,M.type())*255;
showM.push_back(line);
showM=showM.t();
line=Mat::ones(4,showM.cols,showM.type())*255;
showMM.push_back(showM);
showMM.push_back(line);
showMM=showMM.t();
// bool flag=imwrite("H:\\out.bmp",showMM);
imshow("saveMM",showMM);waitKey(0);
一下图片可能和程序实际运行结果有点不同,图片只是示意图,代码暂时没问题。需要考虑的是iSize大小问题,首先iSize要用奇数,然后大部分文献iSize都比较大,好像是100左右,但没看到他们描述过卷积核的大小。
&&&&推荐文章:
【上篇】【下篇】OpenCV实现Gabor滤波
图不同中心震荡频率下在函数
代码:根据http://blog.csdn.net/watkinsong/article/details/7876361实现
#include &opencv2/core/core.hpp&
#include &opencv2/imgproc/imgproc.hpp&
#include &opencv2/highgui/highgui.hpp&
#include &cmath&
#include &iostream&
const double PI = 3.;
// ref: http://blog.csdn.net/watkinsong/article/details/7876361
Mat getMyGabor(int width, int height, int U, int V, double Kmax, double f,
double sigma, int ktype, const string& kernel_name)
//CV_ASSERT(width % 2 == 0 && height % 2 == 0);
//CV_ASSERT(ktype == CV_32F || ktype == CV_64F);
int half_width = width / 2;
int half_height = height / 2;
double Qu = PI*U/8;
double sqsigma = sigma*
double Kv = Kmax/pow(f,V);
double postmean = exp(-sqsigma/2);
Mat kernel_re(width, height, ktype);
Mat kernel_im(width, height, ktype);
Mat kernel_mag(width, height, ktype);
double tmp1, tmp2, tmp3;
for(int j = -half_ j &= half_ j++){
for(int i = -half_ i &= half_ i++){
tmp1 = exp(-(Kv*Kv*(j*j+i*i))/(2*sqsigma));
tmp2 = cos(Kv*cos(Qu)*i + Kv*sin(Qu)*j) -
tmp3 = sin(Kv*cos(Qu)*i + Kv*sin(Qu)*j);
if(ktype == CV_32F)
kernel_re.at&float&(j+half_height, i+half_width) =
(float)(Kv*Kv*tmp1*tmp2/sqsigma);
kernel_re.at&double&(j+half_height, i+half_width) =
(double)(Kv*Kv*tmp1*tmp2/sqsigma);
if(ktype == CV_32F)
kernel_im.at&float&(j+half_height, i+half_width) =
(float)(Kv*Kv*tmp1*tmp3/sqsigma);
kernel_im.at&double&(j+half_height, i+half_width) =
(double)(Kv*Kv*tmp1*tmp3/sqsigma);
magnitude(kernel_re, kernel_im, kernel_mag);
if(pare(&real&) == 0)
return kernel_
else if(pare(&imag&) == 0)
return kernel_
else if(pare(&mag&) == 0)
return kernel_
printf(&Invalid kernel name!\n&);
void construct_gabor_bank()
double Kmax = PI/2;
double f = sqrt(2.0);
double sigma = 2*PI;
int U = 7;
int V = 4;
int GaborH = 129;
int GaborW = 129;
Mat totalM
for(U = 0; U & 8; U++){
for(V = 0; V & 5; V++){
kernel = getMyGabor(GaborW, GaborH, U, V,
Kmax, f, sigma, CV_64F, &real&);
//show gabor kernel
normalize(kernel, kernel, 0, 1, CV_MINMAX);
printf(&U%dV%d\n&, U, V);
//imshow(&gabor&, kernel);
//waitKey(0);
if(V == 0)
vconcat(colMat, kernel, colMat);
if(U == 0)
totalMat = colM
hconcat(totalMat, colMat, totalMat);
imshow(&gabor bank&, totalMat);
//imwrite(&gabor_bank.jpg&,totalMat);
waitKey(0);
Mat gabor_filter(Mat& img)
// variables for gabor filter
double Kmax = PI/2;
double f = sqrt(2.0);
double sigma = 2*PI;
int U = 7;
int V = 4;
int GaborH = 129;
int GaborW = 129;
Mat kernel_re, kernel_
Mat dst_re, dst_im, dst_
// variables for filter2D
Point archor(-1,-1);
int ddepth = -1;
double delta = 0;
// filter image with gabor bank
Mat totalM
for(U = 0; U & 8; U++){
for(V = 0; V & 5; V++){
kernel_re = getMyGabor(GaborW, GaborH, U, V,
Kmax, f, sigma, CV_64F, &real&);
kernel_im = getMyGabor(GaborW, GaborH, U, V,
Kmax, f, sigma, CV_64F, &imag&);
filter2D(img, dst_re, ddepth, kernel_re);
filter2D(img, dst_im, ddepth, kernel_im);
dst_mag.create(img.rows, img.cols, CV_32FC1);
magnitude(Mat_&float&(dst_re),Mat_&float&(dst_im),
//show gabor kernel
normalize(dst_mag, dst_mag, 0, 1, CV_MINMAX);
printf(&U%dV%d\n&, U, V);
//imshow(&dst_mag&, dst_mag);
//waitKey(0);
if(V == 0)
colMat = dst_
vconcat(colMat, dst_mag, colMat);
if(U == 0)
totalMat = colM
hconcat(totalMat, colMat, totalMat);
return totalM
int main( int argc, char** argv )
//construct_gabor_bank();
image = imread(argv[1], 0); // Read the file
if(! image.data ) // Check for invalid input
cout && &Could not open or find the image& && std::
return -1;
Mat filterd_image = gabor_filter(image);
imshow(&filtered image&, filterd_image);
//imwrite(&filterd_image.jpg&,filterd_image);
waitKey(0);
其中,construct_gabor_bank函数构建了5个尺度8个方向上的Gabor小波,如下图所示:
gabor_filter函数利用构建好的Gabor小波对图像进行滤波,原图和滤波后在图像如下图所示:
文档及代码地址:http://download.csdn.net/detail/lichengyu/7008011
注:这一版本的代码有问题,filter2D函数的ddepth参数值应改为CV_64而非采用默认值,见f
看过本文的人也看了:
我要留言技术领域:
你已经自动关注本知识库了哦!
确定要取消收藏吗?Computer Vision(21)
从之前的Blog挪过来的
一.房屋检测小结&&
一开始,直接用LSD(Line Segment Detector)检测VHR(Very
High Resolution)遥感卫星图像中的房屋,效果很屎。效果很屎的主要原因是因为存在各种干扰,概括下来,主要有:
&&&&& 1. 道路。道路干扰性强主要是因为道路呈现各种形态,弯曲,笔直,宽度不一。同时还有桥梁也影响检测率,桥梁附近呈现较好的阴影效果和Line
Segment,会干扰几何检测方法。
&&&&& 2.森林或农田。利用LSD检测Line
Segment的时候,由于LSD原理限制,在森林或农田区域,会形成较多的Line
Segment,影响几何检测方法。
&&&&& 3.房屋本身。实际VHR遥感图像中,房屋形态较多,大小差异较大,且有的呈现不规则的形状,有的成像后,边缘模糊,不利于产生较好的LSD结果。
&&&&& 4.遮挡。主要是被森林遮挡,屋顶形状不完整,不利于设计算法判别。
&&&&& 6.光照不均,屋顶自身纹理。光照不均和屋顶自己纹理不均匀,都会加大VHR中物体的检测难度。&&&&
二.Gabor 滤波器简介(部分资料来自维基百科)
&& 在图像处理领域,Gabor滤波器是一个用于边缘检测的线性滤波器。Gabor滤波器的频率和方向表示接近人类视觉系统对于频率和方向的表示,并且它们常备用于纹理表示和描述。在空域,一个2维的Gabor滤波器是一个正弦平面波和高斯核函数的乘积。Gabor滤波器是自相似的,也就是说,所有Gabor滤波器都可以从一个母小波经过膨胀和旋转产生。实际应用中,Gabor滤波器可以在频域的不同尺度,不同方向上提取相关特征。
三 Gabor滤波器数学定义&
λ:正弦函数波长;
θ:Gabor核函数的方向
ψ:相位偏移
σ:高斯函数的标准差
空间的宽高比(这个没太理解)
四.Gabor 滤波器opencv实现代码
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:164586次
积分:2091
积分:2091
排名:第13834名
原创:50篇
转载:17篇
评论:80条
(1)(1)(2)(1)(1)(1)(1)(2)(7)(3)(1)(5)(2)(4)(3)(14)(13)(6)gabor OpenCV 238万源代码下载-
&文件名称: gabor
& & & & &&]
&&所属分类:
&&开发工具: Visual C++
&&文件大小: 1932 KB
&&上传时间:
&&下载次数: 61
&&提 供 者:
&详细说明:gabor小波源文件 在VC++实现 基于OPencv的-gabor wavelets
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&gacv05\Algorithms\ConstantAlgorithm.cpp&&......\..........\ConstantAlgorithm.h&&......\..........\StumpAlgorithm.h&&......\bin\Debug\cale.cmd&&......\...\.....\cale.jpg&&......\...\.....\cat.cmd&&......\...\.....\cat.jpg&&......\...\.....\imgtotrn.cmd&&......\...\.....\imgtrn.lis&&......\...\.....\trntoxml.cmd&&......\...\po\ChangeLog&&......\...\..\POTFILES&&......\...\..\POTFILES.in&&......\Classifiers\AdaBoostMHClassifier.cpp&&......\...........\AdaBoostMHClassifier.h&&......\...........\ExampleResults.cpp&&......\...........\ExampleResults.h&&......\Defaults.h&&......\gacv.h&&......\gacv05.cbp&&......\gacv05.cpp&&......\gacv05.depend&&......\gacv05.layout&&......\imgs\cale01.jpg&&......\....\cale02.jpg&&......\....\cale03.jpg&&......\....\cale04.jpg&&......\....\cale05.jpg&&......\....\cale06.jpg&&......\....\cale07.jpg&&......\....\cale08.jpg&&......\....\cale09.jpg&&......\....\cale10.jpg&&......\....\cale11.jpg&&......\....\cale12.jpg&&......\....\cale13.jpg&&......\....\cale14.jpg&&......\....\cale15.jpg&&......\....\cale16.jpg&&......\....\cale17.jpg&&......\....\cale18.jpg&&......\....\cale19.jpg&&......\....\cale20.jpg&&......\....\cat01.jpg&&......\....\cat02.jpg&&......\....\cat03.jpg&&......\....\cat04.jpg&&......\....\cat05.jpg&&......\....\cat06.jpg&&......\....\cat07.jpg&&......\....\cat08.jpg&&......\....\cat09.jpg&&......\....\cat10.jpg&&......\....\cat11.jpg&&......\....\cat12.jpg&&......\....\cat13.jpg&&......\....\cat14.jpg&&......\....\cat15.jpg&&......\....\cat16.jpg&&......\....\cat17.jpg&&......\....\cat18.jpg&&......\....\cat19.jpg&&......\....\cat20.jpg&&......\....\cd01.jpg&&......\....\cd02.jpg&&......\....\cd03.jpg&&......\....\cd04.jpg&&......\....\cd05.jpg&&......\....\cd06.jpg&&......\....\cd07.jpg&&......\....\cd08.jpg&&......\....\cd09.jpg&&......\....\cd10.jpg&&......\....\imgbg001.jpg&&......\....\imgbg002.jpg&&......\....\imgbg003.jpg&&......\....\imgbg004.jpg&&......\....\imgbg005.jpg&&......\....\imgbg006.jpg&&......\....\imgbg007.jpg&&......\....\imgbg008.jpg&&......\....\imgbg009.jpg&&......\....\imgbg010.jpg&&......\....\imgbg011.jpg&&......\....\imgbg012.jpg&&......\....\imgbg013.jpg&&......\....\imgbg014.jpg&&......\....\imgbg015.jpg&&......\....\imgbg016.jpg&&......\....\imgbg017.jpg&&......\....\imgbg018.jpg&&......\....\imgbg019.jpg&&......\....\imgbg020.jpg&&......\....\imgbg021.jpg&&......\....\imgbg022.jpg&&......\....\imgbg023.jpg&&......\....\imgbg024.jpg&&......\....\imgbg025.jpg&&......\....\imgbg026.jpg&&......\....\imgbg027.jpg
&[]:纯粹是垃圾&[]:很好,推荐下载
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - 这里包含高质量的Gabor实现代码,基于OpenCV。Gabor变换可以实现在多个尺度、多个方位上的变换,尤其是对于纹理的检测有很好的效果,研究表明Gabor特征符合人眼感受野特性。
&[] - 图像特征提取,包括:颜色直方图,颜色矩,边缘直方图,Gabor小波变换,局部二值图,GIST。
&[] - Gabor小波和局部二值模式结合的一种人脸识别算法 不错的算法
&[] - 用opencv实现的图像小波变换及反变换代码,可用于图像去噪、多分辨率分析等方面。
&[] - OpenCV编写的小波边缘提取程序,简单
&[] - Gabor小波 完成Gabor小波变换来完成模式识别功能
&[] - 基于openCV的Gabor函数,一位牛人编写的。希望对大家有用
&[] - 基于opencv的提升5/3小波变换和逆变换
&[] - 这个是JPEG2000使用的小波编码方法,采用了EZW压缩技术,本程序包括两部分,一是ezw压缩部分,二是unezw解压部分
&[] - Gabor Filter Test
This project based on OpenCV and MSVC 6.0

我要回帖

更多关于 gabor核函数 的文章

 

随机推荐