2013-07-22 52 views
0

我一直在嘗試實現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 

回答

1

我很久以前就寫了這篇文章,並且寫了一篇論文。正如我記得,尋找黑色和白色的脊(反轉圖像並重複分析)以獲得更多結果。我確實記得在某些角度有些敏感。你可能需要比純索貝爾更多的東西。儘量找出儘可能多的像素。

+0

你如何處理黑白分離的圖像?疊加在原始?你有什麼建議,我可以使用,而不是索貝爾?我只看到Sobel用於獲取漸變的目的,所以我對其他方法感到不知所措。 – larstoc

+0

找到方向(黑白)並將方向疊加在一起,以提供更密集的演示。我不記得確切的漸變發現者。標記一個範圍,只保留接觸中心的前景區域(去除其他脊),並使用mini Hough或其他技術找到角度。 – Jiminion

+0

http://proceedings.spiedigitallibrary.org/proceeding.aspx?articleid=948092 – Jiminion

0

你可能想看看雷蒙德泰國的工作(指紋圖片 增強和細節提取),如果你還沒有。

+0

是的,我的第一個算法是基於他的工作,但是我無法讓它正常工作。可能是我實施它完全錯誤,雖然:S,因爲它似乎幾乎每個人都暗示這種方法。我可以添加我的代碼,如果你願意給我一些指點的話。 – larstoc