难以理解功能和功能参数

时间:2019-06-14 07:33:05

标签: python-3.x image-processing fingerprint

我正在尝试在基于Minutiae的指纹验证上构建程序,并且为了进行预处理,我需要调整脊的方向,并在互联网上找到了相关功能,但无法正确理解。

我尝试阅读许多有关细节提取的研究论文。

这是我在互联网上找到的功能

def ridge_orient(im, gradientsigma, blocksigma, orientsmoothsigma):

rows,cols = im.shape;
#Calculate image gradients.
sze = np.fix(6*gradientsigma);
if np.remainder(sze,2) == 0:
    sze = sze+1;

gauss = cv2.getGaussianKernel(np.int(sze),gradientsigma);
f = gauss * gauss.T;

fy,fx = np.gradient(f);     #Gradient of Gaussian

#Gx = ndimage.convolve(np.double(im),fx);
#Gy = ndimage.convolve(np.double(im),fy);

Gx = signal.convolve2d(im,fx,mode='same');    
Gy = signal.convolve2d(im,fy,mode='same');

Gxx = np.power(Gx,2);
Gyy = np.power(Gy,2);
Gxy = Gx*Gy;

#Now smooth the covariance data to perform a weighted summation of the data.    

sze = np.fix(6*blocksigma);

gauss = cv2.getGaussianKernel(np.int(sze),blocksigma);
f = gauss * gauss.T;

Gxx = ndimage.convolve(Gxx,f);
Gyy = ndimage.convolve(Gyy,f);
Gxy = 2*ndimage.convolve(Gxy,f);

# Analytic solution of principal direction
denom = np.sqrt(np.power(Gxy,2) + np.power((Gxx - Gyy),2)) + np.finfo(float).eps;

sin2theta = Gxy/denom;            # Sine and cosine of doubled angles
cos2theta = (Gxx-Gyy)/denom;


if orientsmoothsigma:
    sze = np.fix(6*orientsmoothsigma);
    if np.remainder(sze,2) == 0:
        sze = sze+1;    
    gauss = cv2.getGaussianKernel(np.int(sze),orientsmoothsigma);
    f = gauss * gauss.T;
    cos2theta = ndimage.convolve(cos2theta,f); # Smoothed sine and cosine of
    sin2theta = ndimage.convolve(sin2theta,f); # doubled angles

orientim = np.pi/2 + np.arctan2(sin2theta,cos2theta)/2;
return(orientim);

1 个答案:

答案 0 :(得分:0)

此代码计算structure tensor,这是一种以健壮的方式计算局部方向的方法。它按像素获得对称的2x2矩阵(张量)(变量GxxGyyGxy),其特征向量表示局部取向,其特征值表示局部变化的强度。因为它返回的是矩阵而不是简单的梯度向量,所以您可以将均匀区域与类似十字架的结构区分开,两者都不具有强梯度,但是十字架具有很强的局部变化。


对代码的一些批评

fy,fx = np.gradient(f);

是获取高斯导数内核的一种非常糟糕的方法。在这里,您只是失去了高斯梯度的所有好处,而是计算了梯度的有限差分近似值。

接下来,该代码没有使用高斯的可分性来减少计算复杂度,这也是一个遗憾。

this blog post中,我讨论了高斯滤波和高斯导数的理论,在this other one中,我详细介绍了一些实际方面(使用MATLAB,但这应该很容易扩展到Python)。