指纹领域最漂亮的公式

我觉得,这是指纹领域最漂亮而又非常简单的公式:
θ = p ∗ atan2 ( x − x s , y − y s ) . \theta = p * \text{atan2}(x-x_s, y-y_s). θ=patan2(xxs,yys).这里 p p p代表奇异点的极性(+1或者-1), ( x s , y s ) (x_s,y_s) (xs,ys)代表奇异点的位置, ( x , y ) (x,y) (x,y)代表指纹图像中某点的坐标, θ \theta θ代表该点的方向或者相位。

这个公式既能用来建模指纹方向场的奇异点(singularity),又能用来表示指纹脊线的奇异点,也就是细节点(minutia)。

下面是生成两种方向场奇异点的MATLAB代码。

h = 30; w = 30; 
[X,Y] = meshgrid(1:w,1:h);

orient_continuous = -ones(h,w) * pi/2;

figure(1), quiver(X, Y, cos(orient_continuous), sin(orient_continuous),...
    'ShowArrowHead','off','AutoScaleFactor',0.7);
axis image

x_singular = w/2;
y_singular = h/2;

polarity = 1;
orient_singular = polarity * atan2(Y-y_singular, X-x_singular);
orient_combine = 0.5*mod(orient_continuous + orient_singular, 2*pi);

figure(2), quiver(X, Y, cos(orient_combine), sin(orient_combine),...
    'ShowArrowHead','off','AutoScaleFactor',0.7);
axis image

polarity = -1;
orient_singular = polarity * atan2(Y-y_singular, X-x_singular);
orient_combine = 0.5*mod(orient_continuous + orient_singular, 2*pi);

figure(3), quiver(X, Y, cos(orient_combine), sin(orient_combine),...
    'ShowArrowHead','off','AutoScaleFactor',0.7);
axis image

下面是生成两个朝向的指纹细节点(脊线奇异点)的MATLAB代码。

h = 500; w = 500; 
freq = 0.01;
[X,Y] = meshgrid(1:w,1:h);

phase_continuous = 2*pi*freq*Y;
figure(1), subplot(1,3,1), imshow(cos(phase_continuous),[]);

x_minu = w/2;
y_minu = h/2;

polarity = 1;
phase_minu = polarity * atan2(Y-y_minu, X-x_minu);
subplot(1,3,2), imshow(cos(phase_continuous+phase_minu),[]);

polarity = -1;
phase_minu = polarity * atan2(Y-y_minu, X-x_minu);
subplot(1,3,3), imshow(cos(phase_continuous+phase_minu),[]);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值