一、​我们想要求的方向场的定义为:

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

当所有的方向都互相平行时,方向场一致性取最大值 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 ;i< matTmp.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);

结果:
三、基于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);


结果:




基于梯度场和Hessian特征值分别获得图像的方向场的更多相关文章

  1. MATLAB绘制等高线和梯度场

    clear;clc;close all [X,Y] = meshgrid(-:.:); % 产生网格数据X和Y Z = X.*exp(-X.^ - Y.^); % 计算网格点处曲面上的Z值 [DX,D ...

  2. 4.基于梯度的攻击——MIM

    MIM攻击原论文地址——https://arxiv.org/pdf/1710.06081.pdf 1.MIM攻击的原理 MIM攻击全称是 Momentum Iterative Method,其实这也是 ...

  3. 2.基于梯度的攻击——FGSM

    FGSM原论文地址:https://arxiv.org/abs/1412.6572 1.FGSM的原理 FGSM的全称是Fast Gradient Sign Method(快速梯度下降法),在白盒环境 ...

  4. 3 基于梯度的攻击——MIM

    MIM攻击原论文地址——https://arxiv.org/pdf/1710.06081.pdf 1.MIM攻击的原理 MIM攻击全称是 Momentum Iterative Method,其实这也是 ...

  5. 1 基于梯度的攻击——FGSM

    FGSM原论文地址:https://arxiv.org/abs/1412.6572 1.FGSM的原理 FGSM的全称是Fast Gradient Sign Method(快速梯度下降法),在白盒环境 ...

  6. 数字图像处理-基于matlab-直方图均匀化,傅立叶变换,图像平滑,图像锐化

    直方图均匀化 任务:用MATLAB或VC或Delphi等实现图像直方图均匀化的算法. clc;clear;close all; % 清除工作台 % path(path,'..\pics'); % 设置 ...

  7. C / C ++ 基于梯度下降法的线性回归法(适用于机器学习)

    写在前面的话: 在第一学期做项目的时候用到过相应的知识,觉得挺有趣的,就记录整理了下来,基于C/C++语言 原贴地址:https://helloacm.com/cc-linear-regression ...

  8. 3.基于梯度的攻击——PGD

    PGD攻击原论文地址——https://arxiv.org/pdf/1706.06083.pdf 1.PGD攻击的原理 PGD(Project Gradient Descent)攻击是一种迭代攻击,可 ...

  9. 2 基于梯度的攻击——PGD

    PGD攻击原论文地址——https://arxiv.org/pdf/1706.06083.pdf 1.PGD攻击的原理 PGD(Project Gradient Descent)攻击是一种迭代攻击,可 ...

随机推荐

  1. web 前端规范实例

    <!DOCTYPE html> <html> <head> <title>tmall</title> <!-- 为了被搜索引擎作为流量 ...

  2. 日请求亿级的QQ会员AMS平台PHP7升级实践

    版权声明:本文由PHP7升级项目组原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/74 来源:腾云阁 https://www ...

  3. 2015.10.9js(页面坐标)

    关于js鼠标事件综合各大浏览器能获取到坐标的属性 1.page随滚动条变化(pageY会增加滚动条滚动的距离),兼容性:除IE6/7/8不支持外,其余浏览器均支持; 2.clientX/Y获取到的是触 ...

  4. centos7关闭自动锁屏

    centos 7默认几分钟不动就锁屏,实在很讨厌,所以在设置中将其去掉 1.不同的版本应该设置的地方稍有变化,我不敢保证我的这个方法你一定可以用,所以用之前希望你了解你的系统的版本. 2.左上角点击应 ...

  5. 【BZOJ3262】陌上花开 cdq分治

    [BZOJ3262]陌上花开 Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义 ...

  6. OC开发_代码片段——使用Xib自定义tableViewCell

    一.实现步骤 1.新建一个XIB文件:描述cell——tableCell.xib 2.新建UITableViewCell的子类,也就是cell文件:封装XIB内部的所有东西——TestCell.m \ ...

  7. nginx 上php不可写解决方法

    在php.ini中设置的session.save_path会被php-fpm.conf中覆盖 打开php-fpm.conf文件找到php_value['session.save_apth'] 这里的/ ...

  8. Create an Index

    db.collection.createIndex( { name: -1 } ) Indexes — MongoDB Manual https://docs.mongodb.com/manual/i ...

  9. Feature extraction using convolution

    http://ufldl.stanford.edu/wiki/index.php/Feature_extraction_using_convolution http://ufldl.stanford. ...

  10. Ubuntu18.04 英文系统下安装中文输入法

    今天尝试了Ubuntu18.04LTS(依旧装的英文版)发现按照之前的方法( http://www.cnblogs.com/asmer-stone/p/5227188.html)安装中文输入法不行了, ...