我有一些带有gabor过滤器代码的小波,它是这样的......
但我不知道如何在我的图像上使用它?我知道matlab有一些方法,即matlab way。但是我使用的是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);
我的设置有什么问题吗?
答案 0 :(得分:10)
基本上,你将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);
[编辑]
**我不确定,但您可能需要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();
答案 1 :(得分:-3)
更改sigma = 3 lambda = 36 theta = 116 psi = 274