OpenCV初学者和糟糕的数学。
我的工作是将Gabor滤镜应用于标准化图像。我只知道OpenCV有一个getGaborKernel
函数,我想知道这个函数的返回矩阵是内核的实部或虚部。
如果我不能使用这个函数,那么我该如何生成那些内核?
使用Java API,但C ++代码很好。
答案 0 :(得分:1)
你可以在{87}的第87行看到它正在计算真实部分(根据gabor.cpp)。
double v = scale*std::exp(ex*xr*xr + ey*yr*yr)*cos(cscale*xr + psi);
您可以将此行修改为虚构部分(也报告为wikipedia)
double v = scale*std::exp(ex*xr*xr + ey*yr*yr)*sin(cscale*xr + psi);
^^^
拥有内核后,可以将其与函数here
一起使用答案 1 :(得分:1)
实际上,cos和sin之间的差异是偏移90度或PI / 2。 因此,您可以通过将PSI设为0表示实际和PI / 2表示虚拟来获得实数和虚数Gabor内核。
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);