2013-02-18 48 views
7

我有泥土中的Tiger's Pugmark(足跡印象)圖像。我想檢測pugmark的邊界,但圖像的強度是一致的,根據強度變化無法區分前景和背景。我能做些什麼來區分pugmark和背景。在均勻強度圖像中檢測物體

tiger's pugmark http://imageshack.us/a/img407/4636/p1060993g.jpg

+1

這個問題可能比您想象的更困難。如果您詳細說明該邊界的進一步用法,即您需要什麼精度,這可能會有所幫助。如果您只想檢測pugmark,或知道其方向,則不需要精確的邊界。 – 2013-02-18 12:11:05

+0

你註定了。 : - (.....這是一個極其困難的圖像處理任務 – Shai 2013-02-18 13:23:07

+0

@RomanShapovalov讓我告訴你爲什麼我需要標記邊界並丟棄無關區域我需要分析pugmark並根據一些選定的特徵像墊區,腳趾區域,腳趾2和3之間的角度,pugmark長度,寬度等,然後在比較分析圖像和訓練集之後,我必須能夠區分哪個老虎的pugmark是 – Suvidha 2013-02-19 06:43:46

回答

7

在細分任務,如果你有兩個

  1. 良好的標記;和周圍的興趣

對象

  • 強邊緣則直接由分水嶺解決變換。當然,問題在於獲取這些標記,並根據需要增強相關邊緣。獲得這些可能涉及特定於問題的知識,而我沒有解決您的問題。

    儘管如此,還是有一些通用的方法可能有用。例如,數學形態學的相關操作員可以用來合併和擴展平坦區域。因此,也許它可以給我們相對較好的問題標記。在下面的圖像中,在原始圖像的灰度版本(左圖像)中執行通過打開(一種連接的操作符)進行的形態重建,剩餘的區域最大值顯示在右邊。現在

    enter image description hereenter image description here

    ,我們可以得到上面的左圖像的形態梯度。我們也可以在上面的右圖中用小圓盤進行填孔和擴張,以獲得更加平滑的輪廓 - 這定義了我們的標記圖像。然後,將使用我們的標記圖像,然後擴大梯度圖像中的分水嶺(侵蝕或擴張,取決於你怎麼看它)的分界線,我們得到以下圖片:

    enter image description here

    我懷疑你可以輕鬆地丟棄太大和太小的區域。然後,如果您對爪子以及手掌有一些粗糙的預期尺寸,則可以丟棄不相關的區域。在這一點上是唯一的擴張的區域,以形成一個單一的部件,並顯示在原始圖像中所得到的輪廓的問題:用於執行每一個步驟

    enter image description here

    示例代碼(的相關步驟也示於註釋Matlab代碼):

    f = Import["http://imageshack.us/a/img407/4636/p1060993g.jpg"] 
    g = ColorConvert[f, "Grayscale"]       (* g = rgb2gray(f); *) 
    (* First image shown: *) 
    geo = GeodesicOpening[g, DiskMatrix[5]] (* geo = imreconstruct(imerode(g, ... *) 
                 (*   strel('disk', 6)), g);  *) 
    (* Second image shown: *) 
    marker = MaxDetect[geo]      (* marker = imregionalmax(geo); *) 
    
    (* Watershed on gradient with markers. *) 
    mgrad = ImageSubtract[Dilation[geo, 1], Erosion[geo, 1]]; (* mgrad = ...  *) 
          (* imdilate(geo,strel('square',3)) - imerode(geo,strel('square',3)); *) 
    ws = Image[   (* ws = watershed(imimposemin(mgrad, bwmorph(imfill(... *) 
    WatershedComponents[mgrad,  (* imregionalmax(geo),'holes'),'dilate')))); *) 
        Dilation[FillingTransform[marker], DiskMatrix[1]]]] 
    
    (* Third image shown: *) 
    wsthick = Erosion[ws // ImageAdjust, DiskMatrix[5]] 
    
    (* Connected component selection based on some supposed sizes. *) 
    ccs = SelectComponents[wsthick, "Count", 1000 < # < 3000 || 6000 < # < 10000 &] 
    
    (* Final image (thick border on binarized filled dilated ccs) *) 
    res = ImageAdd[f, Dilation[MorphologicalPerimeter[FillingTransform[ 
        MorphologicalPerimeter[Dilation[ccs, DiskMatrix[9]]]]], 2]] 
    
  • +0

    謝謝你的回答讓我告訴你爲什麼我需要標記邊界並丟棄不相關的區域,我需要根據Pad區域,腳趾區域,腳趾2和3之間的角度,pugmark長度,寬度,等等,然後在比較分析後的圖像和訓練集之後,我必須能夠區分哪隻老虎是pugmark。 – Suvidha 2013-02-19 05:21:23

    +0

    @ user2067773好吧,我只是不知道你爲什麼告訴我這些。但是你似乎跳過了你描述的這種方法的一步:首先你需要有一種方法來確定你所擁有的是否是pugmark,否則分析它是毫無意義的。 – mmgp 2013-02-19 05:40:43

    +0

    是的,你是對的。我沒有想過。但我首先關心的是掩蓋背景並獲得進一步分析的足跡的清晰圖像。 – Suvidha 2013-02-19 05:48:55

    3

    在@ MMPG的回答該方法可能是不穩定的,因爲所使用的算法需要的參數,其可以是特定於每個圖像設置。這個問題似乎更好地通過參數化模型來處理,這些參數化模型具有關於形狀的先驗知識。

    Active Shape Models框架迭代地近似形狀的邊界。首先,你的一些平均形狀初始化(圖片只是說明,而不是算法的實際輸出):

    Initialization of the shape

    輪廓由錨點定義(由藍色蜱所示,只爲手掌以避免混亂)。在每次迭代中,算法考慮每個錨點中的正交方向並估計每個距離處的邊界概率(通常使用圖像梯度),但在您的情況下,它應該更復雜 - 可能是紋理的差異,例如histograms of textons )。該分佈的紅色這裏點亮點ARG-最大值:

    Modes of the edge-ness distribution

    然後將新輪廓擬合到數據以最大化乘以形狀的先驗分佈的那些分佈。事先假設一致,新的輪廓是這樣的:

    The new contour

    在實踐中,你想有一個不平凡的形狀分佈。爲了估計這一點,您需要一組手動標記pugmark蒙版的圖像。

    你可能想嘗試this MATLAB implementation