Python 实现局部脊线定向

Python 实现局部脊线定向,python,fingerprint,image-segmentation,Python,Fingerprint,Image Segmentation,我一直在尝试在python中实现指纹的局部脊线方向。我用了梯度法,用sobel算子得到了我需要的梯度。然而事实证明,这种方法有很多缺陷,尤其是在90度左右。我可以包含到目前为止我已经完成的代码,但是由于它不能像我想要的那样工作,我不知道是否需要它。我还研究了线段方法,但是,我正在研究潜在指纹,因此很难知道是否应该在线段中寻找最大的黑色或白色。我还尝试实现一种算法来检测连续线的最大集中区域,但我无法实现。对其他算法有什么建议吗 编辑: 我使用一个函数将我的函数应用于块,但这几乎不相关 def lr

我一直在尝试在python中实现指纹的局部脊线方向。我用了梯度法,用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

你可能想看看雷蒙德·泰(指纹图像)的作品
增强和细节提取),如果您还没有

我很久以前就做过这方面的工作,并就此写了一篇论文。如我所记得的,寻找黑白脊线(反转图像并重复分析)以获得更多结果。我确实记得在某些角度上有些敏感。你可能需要一些比纯正的索贝尔更广泛的东西。尽量多接触像素。

是的,我的第一个算法基于他的工作,但是,我无法让它正常工作。可能是我完全错误地实现了它:因为几乎每个人都在实现这个方法。我可以添加我的代码,如果你们能给我一些提示的话。你们如何处理黑白分开的图像?在原稿上叠加?你对我用什么来代替索贝尔有什么建议吗?我只看到Sobel用于获取梯度,因此我对其他方法一无所知。找到方向(黑白)并将方向叠加在一起,以提供更密集的表示。我记不起确切的梯度探测器了。标记一个范围,只保留与中心接触的前景区域(删除其他脊线),并使用mini Hough或其他技术查找角度。我以前没有创建过该流程图。当我知道方向时,你知道怎么画吗?我是画线,还是python可以为我绘制方向图?对不起,如果这是关闭topicI,我会制作一个方向图。对其进行颜色编码,确保从360->0平滑过渡。