0

我一直在尝试在 python 中实现指纹的本地脊线方向。我使用了 Gradient 方法,并使用 sobel 算子来获得我需要的渐变。然而事实证明,这种方法有相当多的缺陷,尤其是在 90 度左右。我可以包含到目前为止我已经完成的代码,但是由于它不能按我的意愿工作,我不知道是否需要它。我还研究了线段方法,但是,我正在使用潜在指纹,因此很难知道是否应该在线段中寻找最大的黑色或白色。我还尝试实现一种算法来检测连续线的最大浓度区域,但我无法让它工作。对使用其他算法有什么建议吗?

编辑:

我正在使用一个函数将我的函数应用于块,但这几乎不相关

def lro(im_np):

    orientsmoothsigma = 3

    Gxx = cv2.Sobel(im_np,-1,2,0)
    Gxy = cv2.Sobel(im_np,-1,1,1)
    Gyy = cv2.Sobel(im_np,-1,0,2)


    Gxx = scipy.ndimage.filters.gaussian_filter(Gxx, orientsmoothsigma)
    Gxy = numpy.multiply(scipy.ndimage.filters.gaussian_filter(Gxy, orientsmoothsigma), 2.0)
    Gyy = scipy.ndimage.filters.gaussian_filter(Gyy, orientsmoothsigma)

    denom = numpy.sqrt(numpy.add(numpy.power(Gxy,2), (numpy.power(numpy.subtract(Gxx,Gyy),2))))# + eps;
    sin2theta = numpy.divide(Gxy,denom)            # Sine and cosine of doubled angles
    cos2theta = numpy.divide(numpy.subtract(Gxx,Gyy),denom)

    sze = math.floor(6*orientsmoothsigma);
    if not sze%2: sze = sze+1       
    cos2theta = scipy.ndimage.filters.gaussian_filter(cos2theta, orientsmoothsigma)  # Smoothed sine and cosine of
    sin2theta = scipy.ndimage.filters.gaussian_filter(sin2theta, orientsmoothsigma)#filter2(f, sin2theta); # doubled angles



    orientim = math.pi/2. + numpy.divide(numpy.arctan2(sin2theta,cos2theta),2.)

    return orientim
4

2 回答 2

1

我很久以前就研究过这个,并在上面写了一篇论文。我记得,寻找黑白脊(反转图像并重复分析)以获得更多结果。我确实记得某些角度的一些敏感性。您可能需要比纯 Sobel 范围更大的东西。尽量接触尽可能多的像素。

于 2013-07-22T14:06:21.940 回答
0

如果您还没有,您可能想看看 Raymond Thai 的工作(指纹图像增强和细节提取)。

于 2013-07-22T13:57:12.560 回答