如何在OpenCV中组合Gabor过滤器的结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在OpenCV中组合Gabor过滤器的结果相关的知识,希望对你有一定的参考价值。

[我正在尝试通过在Java的OpenCV中使用具有4个过滤器(4 theta)的gabor过滤器来增强指纹图像:

private Mat enhanceImg(Mat myImg){

      // prepare the output matrix for filters
    Mat gabor1 = new Mat (myImg.width(), myImg.height(), CvType.CV_8UC1);
    Mat gabor2 = new Mat (myImg.width(), myImg.height(), CvType.CV_8UC1);
    Mat gabor3 = new Mat (myImg.width(), myImg.height(), CvType.CV_8UC1);
    Mat gabor4 = new Mat (myImg.width(), myImg.height(), CvType.CV_8UC1);
    Mat enhanced = new Mat (myImg.width(), myImg.height(), CvType.CV_8UC1);

      //predefine parameters for Gabor kernel 
    Size kSize = new Size(31,31);

    double theta1 = 0;
    double theta2 = 45;
    double theta3 = 90;
    double theta4 = 135;

    double lambda = 30;
    double sigma = 24;  
    double gamma = 1;
    double psi =  0;

       // the filters kernel
    Mat kernel1 = Imgproc.getGaborKernel(kSize, sigma, theta1, lambda, gamma, psi, CvType.CV_32F);
    Mat kernel2 = Imgproc.getGaborKernel(kSize, sigma, theta2, lambda, gamma, psi, CvType.CV_32F);
    Mat kernel3 = Imgproc.getGaborKernel(kSize, sigma, theta3, lambda, gamma, psi, CvType.CV_32F);
    Mat kernel4 = Imgproc.getGaborKernel(kSize, sigma, theta4, lambda, gamma, psi, CvType.CV_32F);

      // apply filters on my image. The result is stored in gabor1...4
    Imgproc.filter2D(myImg, gabor1, -1, kernel1);
    Imgproc.filter2D(myImg, gabor2, -1, kernel2);
    Imgproc.filter2D(myImg, gabor3, -1, kernel3);
    Imgproc.filter2D(myImg, gabor4, -1, kernel4);

    //enhanced = gabor1+gabor2+gabor3+gabor4 - something like that

    return enhanced;
}

现在,我的问题是如何组合这些结果gabor1,gabor2,gabor3和gabor4,以获得完整的增强图像。我尝试使用Core.add(src1,src2,dst)

Core.addWeighted(enhanced , 0, gabor1, 1, 0, enhanced );
Core.addWeighted(enhanced , 1, gabor2, 1, 0, enhanced );
Core.addWeighted(enhanced , 1, gabor3, 1, 0, enhanced );
Core.addWeighted(enhanced , 1, gabor4, 1, 0, enhanced );

,但似乎做了某种减法运算,最后得到的图像几乎是白色的。希望有人能帮助我。我正在使用Java,但是C ++的实现非常相似。

编辑:以下是输入和结果的图像:输入图:enter image description here图gabor1:enter image description here

图gabor2:enter image description here

图gabor3:enter image description here

图gabor4:enter image description here

最后添加(加上加权)的Img:enter image description here

答案

好吧,我想我已经解决了我的问题。我的输入映像(myImg)的类型为CV_8UC1,但是gabor内核使用的类型为CV_32F或CV_64F。因此,在处理之前,我必须将myImg转换为该类型:

另一答案

我需要实现此过滤器,但我没有得到它,您能否使代码可用?我不会说英语,而是用Google翻译写的。

以上是关于如何在OpenCV中组合Gabor过滤器的结果的主要内容,如果未能解决你的问题,请参考以下文章

如何使用opencv获得gabor特征

如何在空间和频域的每个尺度和方向上创建 64 个 Gabor 特征

添加浮动 openCV3.0

youcans 的 OpenCV 例程200篇193.基于Gabor 滤波器的特征提取

youcans 的 OpenCV 例程200篇193.基于Gabor 滤波器的特征提取

如何避免冗余并将过滤器应用于字符串组合