基于梯度场和Hessian特征值分别获得图像的方向场

一、​我们想要求的方向场的定义为:
对于任意 一点(x,y),该点的方向可以定义为其所在脊线(或谷线)位置的切线方向与水平轴 之间的夹角:
img_35ed4f676aaf2b49b8b156d5cae1679e.jpe
将一条直线顺时针或逆时针旋转 180°,直线的 方向保持不变。
因此,指纹方向场的取值范围一般定义为[0,π)或[-π/2, π/2),前 闭后开区间的意义在于保证方向场取值的唯一性。
二、基于梯度场计算方向场
论文 《 Analyzing Oriented Patterns》 网址: https://wenku.baidu.com/view/f741d931cc175527072208f7.html
概述: 核心思想便是对其二倍角的分量进行平均,
流程:给定指纹图像I ,其梯度可以表示为 img_15cf7b8294ea97722a5fd0c7f6dc6630.png表示x方向的梯度和y方向的梯度
根据已有的梯度场,分别计算
img_ff61d8bda26e448fa8ec8a46a98afc71.png
W简单理解就是卷积运算
方向场的计算公式为:
img_826bda9625c6b19a3eb201f7c9adb5c7.png
继续可得 方向场一致性

img_1f1bd402a301521facefc8f96b9505b6.png
当所有的方向都互相平行时,方向场一致性取最大值 1;反之,当所有的方向 都相反时,方向场一致性取最小值 0;在这两种极端情况之间,其值相应的也在 0 与 1 之间变化。因此,方向场一致性可以作为方向场有序程度的度量。所以最后结果要做一个0-1之间的normalize.
实现:
//变量
    Mat img = cv::imread"e:/template/finger.bmp",0); 
    Mat matX;Mat matY;
    Mat Gxx;Mat Gyy;Mat Gxy;//和论文标识对应
    Mat matTheta;//方向场 
    Mat matCoh;//方向场一致性
    //实验图片
    /*Mat matTst = Mat(Size(11,11),CV_8UC1,Scalar(0));
    line(matTst,Point(5,0),Point(5,11),Scalar(255));
    line(matTst,Point(0,5),Point(11,5),Scalar(255));*/
    Mat matTst = img.clone();
    //x方向求导
    Sobel(matTst,matX,CV_16SC1,1,0);
    //y方向求导
    Sobel(matTst,matY,CV_16SC1,0,1);
    //转换为float计算,否则后面算爆掉
    matX.convertTo(matX,CV_32FC1);
    matY.convertTo(matY,CV_32FC1);
    //计算3个G
    Gxx = matX.mul(matX);
    Gyy = matY.mul(matY);
    Gxy = matX.mul(matY);
    Mat kernel8 = Mat(Size(8,8),CV_32FC1,Scalar(1));
    filter2D(Gxx,Gxx,Gxx.depth(),kernel8);
    filter2D(Gyy,Gyy,Gyy.depth(),kernel8);
    filter2D(Gxy,Gxy,Gxy.depth(),kernel8);
    //计算方向场
    Mat matTmp = 2 * Gxy;
    matTmp = matTmp / (Gxx - Gxy);
    matTheta = Mat(matTst.size(),CV_32FC1,Scalar(0));
    for (int i = 0 ;imatTmp.rows;i++)
        for (int j = 0 ;j<matTmp.cols;j++)
            matTheta.at<float>(i,j) =     0.5 * atan(matTmp.at<float>(i,j)) + 3.1415926/2;
    //计算方向场一致性
    matTmp = Gxx - Gyy;
    matTmp = matTmp.mul(matTmp);
    Mat matTmp2 =  4*Gxy.mul(Gxy);
    matTmp += matTmp2;
    cv::sqrt(matTmp,matCoh);
    matCoh = matCoh / (Gxx+Gxy);
    //显示结果
    normalize(matTheta,matTheta,0,1,NORM_MINMAX);
    normalize(matCoh,matCoh,0,1,NORM_MINMAX);
结果:
img_9aee1f659358320b203b160116d90c64.png
img_b0dfde6d6c3b832353f9efe5119f41d7.jpe
img_f126bdd7296a7348cf5f1f95d1d38cb4.png
三、基于hessian特征值的方向场
原理:
参考frangi相关知识
代码:https://github.com/ntnu-bioopt/libfrangi
github frangi项目
调用:
//hessian方法
    frangi2d_opts_t opts;
    opts.sigma_start = DEFAULT_SIGMA_START;
    opts.sigma_end = DEFAULT_SIGMA_END;
    opts.sigma_step = DEFAULT_SIGMA_STEP;
    opts.BetaOne = DEFAULT_BETA_ONE//ignore blob-like structures?
    opts.BetaTwo = DEFAULT_BETA_TWO//appropriate background suppression for this specific image, but can change. 
    opts.BlackWhite = true;
    Mat J;Mat Scale;Mat directions;
    img.convertTo(img,CV_32FC1,1.0/255);
    frangi2d(img,J,Scale,directions,opts);

结果:
img_d8390969f714477e92c5ae5087e1ee15.png








目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
### 回答1: OpenCV4是一个广泛使用的计机视觉库,它提供了许多用于图像处理和分析的函数和法。特征值提取是图像处理中的一个重要任务,可用于目标检测、图像配准、图像分类等应用中。 在OpenCV4中,特征值提取可以通过不同的方法实现。其中一种常用的方法是利用SIFT(尺度不变特征变换)法。SIFT法能够提取图像中的关键点,并计出这些关键点的描述子,从而构建图像的特征向量。这个特征向量可以用于比较不同图像之间的相似性。 另一个常用的特征值提取方法是SURF(快速稳健特征)法。SURF法在计图像的关键点和描述子时比SIFT法更快速,但对于小尺寸的图像可能会产生较低的准确性。 除了SIFT和SURF,OpenCV4还提供了其他一些特征值提取法,如ORB(Oriented FAST and Rotated BRIEF)和AKAZE(加速稳健特征)法。ORB法是一种计速度较快的法,适用于实时图像处理。AKAZE法结合了SIFT和SURF的优点,在提取图像特征时具有较高的准确性和鲁棒性。 特征值提取在计机视觉领域中扮演着重要的角色,它们可以帮助我们从原始图像中提取出最具代表性的特征,从而实现图像的进一步分析和处理。OpenCV4提供了多种不同的方法和法,可以根据具体需求选择合适的特征值提取方法。 ### 回答2: 特征值提取是计机视觉中一种重要的技术方法,opencv4中也提供了丰富的特征值提取函数和工具。 在opencv4中,可以通过SIFT(尺度不变特征变换)、SURF(加速稳健特征)、ORB(Oriented FAST and Rotated BRIEF)等函数来进行特征值提取。这些函数可以根据图像中的局部特征点来计其特征描述子,从而对图像做出鲁棒性的描述。这些描述子可以用于识别、匹配和定位图像中的目标。 SIFT法通过检测尺度空间极值点,并计极值点局部邻域的高斯图像梯度,从而得到关键点的尺度和方向信息。SURF法则通过加速积分图像的计,提取图像的特征点和描述子,具有较高的计效率和鲁棒性。ORB是一种结合了FAST关键点检测和BRIEF特征描述子的法,具有兼顾速度和性能的特点。 opencv4中还提供了更高级的特征值提取方法,比如HOG(方向梯度直方图)、LBP(局部二值模式)等。HOG法通过计图像中的梯度方向直方图,提取图像的纹理和形状特征。LBP法则通过计图像中像素点的局部二值模式,提取图像的纹理特征。 总之,opencv4提供了丰富的特征值提取函数和工具,可以根据不同的需求和景选择合适的法进行特征值的提取和描述。这些特征值可以在计机视觉中广泛应用于图像处理、目标检测和图像识别等领域。 ### 回答3: 在OpenCV4中,特征值提取是指从图像或者其他数据中提取出具有代表性和辨别性的特征点或特征描述符,用于图像处理、计机视觉和模式识别等领域。 OpenCV4提供了多种特征值提取的方法,最常用的是SIFT和SURF法。 SIFT法(尺度不变特征变换)是一种用于在不同尺度下提取特征点的方法。它通过在多个尺度下对图像进行高斯模糊,并计图像梯度和高斯差分来寻找具有稳定特征的关键点。然后,对每个关键点,在其周围计出局部特征描述符,用于后续的匹配或识别。 SURF法(加速稳健特征)是SIFT法的改进版,它利用积分图像和快速Hessian矩阵计方法来加速特征点提取的过程。SURF法的优势在于提取速度更快,对尺度变化和旋转更具鲁棒性。 除了SIFT和SURF法外,OpenCV4还提供了其他的特征值提取方法,如ORB(快速响应二进制)、BRISK(加速受限鲁棒特征)、FREAK(快速稳健增强描述符)等等。在选择特征值提取方法时,需要根据具体应用景和需求来考虑特征点数量、计效率、鲁棒性等因素。 总之,通过OpenCV4提供的特征值提取方法,我们可以从图像或其他数据中提取出具有代表性和辨别性的特征点或特征描述符,为后续的图像处理、计机视觉和模式识别任务提供重要的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值