OpenCV 初学者和糟糕的数学。我的工作是将 Gabor 过滤器应用于标准化图像。而且我只知道OpenCV有一个getGaborKernel
函数,我想知道这个函数的返回矩阵是内核的实部还是虚部。如果我不能使用这个功能,那我该如何生成那些内核呢?使用 Java API,但 C++ 代码很好。
问问题
1407 次
2 回答
1
您可以在第 87 行的gabor.cpp中看到它正在计算实部(根据wikipedia)。
double v = scale*std::exp(ex*xr*xr + ey*yr*yr)*cos(cscale*xr + psi);
您可以获得将这条线修改为的虚构部分(也如此报告)
double v = scale*std::exp(ex*xr*xr + ey*yr*yr)*sin(cscale*xr + psi);
^^^
一旦你有了你的内核,你就可以将它与函数filter2d 一起使用
于 2015-11-18T14:12:17.157 回答
1
实际上 cos 和 sin 之间的差异是 90 度或 PI/2 的偏移量。因此,您可以通过将 PSI 设为 0(实数)和 PI/2(虚数)来获得实数和虚数的 Gabor Kernels。
Mat kernelReal = getGaborKernel(ksize, sigma, theta, lambda, gamma, 0, 0, CV_32F); Mat kernelImag = getGaborKernel(ksize, sigma, theta, lambda, gamma,0, PI/2, CV_32F);
于 2017-08-09T11:44:05.697 回答