如何在 OpenCV 中获取 gabor 核矩阵的实部和虚部

How to get the real and imaginary parts of a gabor kernel matrix in OpenCV

OpenCV 初学者,数学不好。 我的工作是将 Gabor 滤波器应用于标准化图像。而我只知道OpenCV有一个getGaborKernel函数,想知道这个函数的return矩阵是内核的实部还是虚部。 如果我不能使用这个功能,那么我该如何生成那些内核呢? 使用 Java API,但 C++ 代码没问题。

你可以在gabor.cpp at line 87 that it's computing the real part (according to wikipedia)看到。

double v = scale*std::exp(ex*xr*xr + ey*yr*yr)*cos(cscale*xr + psi);

你可以得到虚部修改这条线为(据报道也here

double v = scale*std::exp(ex*xr*xr + ey*yr*yr)*sin(cscale*xr + psi);
                                               ^^^

一旦你有了内核,你就可以将它与函数一起使用 filter2d

实际上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);