我将Gabor filter应用于具有以下theta- {0,45,90,135}的图像。但是在相同的方位角下得到的图像完全相同!

我希望应用theta = 90的Gabor滤波器的结果将与使用theat = 45的结果不同,但是在使用具有不同theta的Gabor滤波器后,我得到的图像的方向没有差异!

我使用Gabor滤镜错误吗?因为我希望根据Gabor滤镜中指定的方向角度,每个图像的方向都不同。

我为Gabor滤波器设置的参数如下:

kernel size = Size(5,5);
theta = {0,45,90,135}
sigma = ,2
type = CVType.CV_32F
lambda = 100
gamma = ,5
psi = 5

代码:
public static void main(String[] args) {

    MatFactory matFactory = new MatFactory();
    FilePathUtils.addInputPath(path_Obj);
    Mat bgrMat = matFactory.newMat(FilePathUtils.getInputFileFullPathList().get(0));
    Mat gsImg = SysUtils.rgbToGrayScaleMat(bgrMat);
    double[] theta = new double[4];
    theta[0] = 0;
    theta[1] = 45;
    theta[2] = 90;
    theta[3] = 135;

    for (int i = 0; i < 4; i++) {
        Mat gaborCoeff = Imgproc.getGaborKernel(new Size(3,3), 2, theta[i], 4.1, 54.1, 0, CvType.CV_32F);
        Mat dest = new Mat();
        Imgproc.filter2D(gsImg, dest, CvType.CV_32F, gaborCoeff);
        ImageUtils.showMat(dest, "theta = " + theta[i]);
    }

}

图片_0度:

图片_45度:

图片_90度:

图片_135度:

在使用theta = 0,45,90,135而不加平滑处理的Gabor之后的图像:

最佳答案

也许问题在这里:

Mat gaborCoeff = Imgproc.getGaborKernel(new Size(3,3), 2, theta[i], 4.1, 54.1, 0, CvType.CV_32F);

我认为它应该是这样的:
Mat gaborCoeff = Imgproc.getGaborKernel(new Size(3,3), sigma, theta[i], lambda, psi, 0, CvType.CV_32F);

而且我不确定 lambda 和 psi 的值。也许您应该尝试查看具有不同值的结果图像。

最后,Gabor 结果就是你所说的 image_0 度,image_45 度。即使它们之间没有显着变化,我也会更改参数

10-05 23:03