如何在opencv中对图像应用gabor滤波器?

2024-03-22

I've got some wavelets with the gabor filter code, it's something like this..wavelets

但我不知道如何在我的图像上使用它?我知道 matlab 有一些方法,即matlab方式 https://stackoverflow.com/questions/9003147/how-to-apply-gabor-wavelets-to-an-image?rq=1。但我正在使用opencv,我对这个领域很陌生并且matlab,我不知道如何从 matlab 代码编写 opencv 代码,所以,我应该用什么来做到这一点opencv?非常感谢!

****Update****
I've tried @berak's way, and this is the original image

and this is after I applied the filter enter image description here just all white and nothing left,below is my params,

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);

我的设置有什么问题吗?


基本上,你将你的 img 转换为 float,

然后构造一个内核:

cv::Mat kernel = cv::getGaborKernel(cv::Size(kernel_size,kernel_size), sig, th, lm, gm, ps);

并用filter2D应用它:

cv::filter2D(src_f, dest, CV_32F, kernel);

[edit]

** 我不确定,但您可能需要 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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在opencv中对图像应用gabor滤波器? 的相关文章

随机推荐