加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – OpenCV中的Gabor内核参数

发布时间:2020-12-15 04:23:36 所属栏目:Java 来源:网络整理
导读:我必须在我的应用程序中使用Gabor过滤器,但我对这个OpenCV方法参数值没有任何线索. 我想编码一个虹膜.开始Gabor滤波器并获取特征(我想对12组Gabor参数值执行此操作).然后我想算一个汉明dystans并做认证. 如果有人可以在这里写params范围,或者如何在函数中计
我必须在我的应用程序中使用Gabor过滤器,但我对这个OpenCV方法参数值没有任何线索.
我想编码一个虹膜.开始Gabor滤波器并获取特征(我想对12组Gabor参数值执行此操作).然后我想算一个汉明dystans并做认证.

如果有人可以在这里写params范围,或者如何在函数中计算它:

Imgproc.getGaborKernel(new Size(kSize[j],kSize[j]),sigma,theta,lambda,gamma);

我将非常感激.我当然试图自己分配,但没有成功.

示例文件:

解决方法

你可以参考这个c代码找到你的图像的Gabor Edge检测器输出.我相信你也可以在java中形成类似的东西!使用这些值来查找所需的内核类型.

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <math.h>

using namespace cv;
int pos_kernel_size=21;
int pos_sigma= 5;
int pos_lm = 50;
int pos_th = 0;
int pos_gamma= 0;
int pos_psi = 90;

Mat src_f;
Mat dest;

void Process(int,void *)
{
    int kernel_size=(pos_kernel_size-1)/2;

    Size KernalSize(kernel_size,kernel_size);
    double Sigma = pos_sigma;
    double Lambda = 0.5+pos_lm/100.0;
    double Theta = pos_th*CV_PI/180;
    double psi = pos_psi*CV_PI/180;;
    double Gamma = pos_gamma;

    Mat kernel = getGaborKernel(KernalSize,Sigma,Theta,Lambda,Gamma,psi);
    filter2D(src_f,dest,CV_32F,kernel);
    imshow("Process window",dest);
    Mat Lkernel(kernel_size*20,kernel_size*20,CV_32F);
    resize(kernel,Lkernel,Lkernel.size());
    Lkernel /= 2.;
    Lkernel += 0.5;
    imshow("Kernel",Lkernel);
    Mat mag;
    pow(dest,2.0,mag);
    imshow("Mag",mag);
}

int main(int argc,char** argv)
{
    Mat image = imread("Gabor.bmp",0);
    cv::imshow("Src",image);

    image.convertTo(src_f,1.0/255,0);

    if (!pos_kernel_size%2)
    {
        pos_kernel_size+=1;
    }
    cv::namedWindow("Process window",1);
    cv::createTrackbar("Sigma","Process window",&pos_sigma,pos_kernel_size,Process);
    cv::createTrackbar("Lambda",&pos_lm,100,Process);
    cv::createTrackbar("Theta",&pos_th,180,Process);
    cv::createTrackbar("Psi",&pos_psi,360,Process);
    cv::createTrackbar("Gamma",&pos_gamma,Process);
    Process(0,0);
    waitKey(0);
    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读