如何Gabor滤波器应用到图像OpenCV的?

ric*_*ard 5 c++ opencv image

我有一些小波与Gabor滤波器的代码,它是这样的..小波

但我不知道如何在我的图像上使用它?我知道有一些方法与MATLAB,即MATLAB方式.但我使用opencv,我非常新的这个领域和matlab,我不知道该怎么写从MATLAB代码OpenCV的代码,所以,啥子我应该有这样做opencv?非常感谢!

********更新
我试过@ berak的方式,这是原始图像

这是在我所施加的滤波器 在此输入图像描述 只是全白和一无所有,下面是我的参数,可以

int kernel_size = 31;
double sig = 1, th = 0, lm = 1.0, gm = 0.02, ps = 0;
cv::Mat kernel = cv::getGaborKernel(cv::Size(kernel_size, kernel_size), sig, th, lm, gm, ps);
cv::filter2D(src_f, dest, CV_32F, kernel);
Run Code Online (Sandbox Code Playgroud)

是有什么错我的设置?

ber*_*rak 11

基本上,您将您的IMG浮动,

然后构造一个内核:

cv::Mat kernel = cv::getGaborKernel(cv::Size(kernel_size,kernel_size), sig, th, lm, gm, ps);
Run Code Online (Sandbox Code Playgroud)

并将其应用于filter2D:

cv::filter2D(src_f, dest, CV_32F, kernel);
Run Code Online (Sandbox Code Playgroud)

[编辑]

**我不知道,但你可能会需要一个1路图像输入.

**imshow看到,你的形象是浮动,只是饱和任何超出1.0,所以你得到一个全白图像.

(这只是一个可视化的问题,需要一个比特变换的/缩放以固化它)

Mat in = imread("XfNal.jpg",0);          // load grayscale
Mat dest;
Mat src_f;
in.convertTo(src_f,CV_32F);

int kernel_size = 31;
double sig = 1, th = 0, lm = 1.0, gm = 0.02, ps = 0;
cv::Mat kernel = cv::getGaborKernel(cv::Size(kernel_size,kernel_size), sig, th, lm, gm, ps);
cv::filter2D(src_f, dest, CV_32F, kernel);

cerr << dest(Rect(30,30,10,10)) << endl; // peek into the data

Mat viz;
dest.convertTo(viz,CV_8U,1.0/255.0);     // move to proper[0..255] range to show it
imshow("k",kernel);
imshow("d",viz);
waitKey();
Run Code Online (Sandbox Code Playgroud)

clip_gabor