2013-02-18 27 views
7

Mam obraz Tygrysa Pugmark (wrażenie odcisku stopy) w błocie. Chcę wykryć granicę pugmark, ale obraz ma jednolitą intensywność, której nie można odróżnić od tła i tła w oparciu o zmiany intensywności. Co mogę zrobić, aby odróżnić pugmark od tła?!wykrywanie obiektu w obrazie o jednorodnej intensywności

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

+1

Problem jest prawdopodobnie trudniejszy niż myślisz. Może ci pomóc, jeśli rozwiążesz dalsze użycie tej granicy, tj. Jakiej precyzji potrzebujesz? Jeśli chcesz tylko wykryć znak pugmark lub znać jego kierunek, dokładna granica jest niepotrzebna. –

+0

jesteś skazany na zagładę. : - (..... Jest to niezwykle trudne zadanie przetwarzania obrazu – Shai

+0

@RomanShapovalov Pozwolę sobie wyjaśnić, dlaczego konkretnie muszę zaznaczyć granice i odrzucić nieistotny region.Muszę przeanalizować pugmark i na podstawie wybranych funkcji takie jak obszar padu, obszar palców, kąt między toe 2 i 3, długość pugmark, szerokość, itd., a następnie po porównaniu analizowanego obrazu z zestawem treningowym muszę być w stanie rozróżnić, który to tygrys jest tygrysem – Suvidha

Odpowiedz

7

W zadaniach segmentacji jeśli masz obie

  1. Dobry markerów; i
  2. Silne krawędzie wokół obiektu zainteresowania

to jest bezpośrednio rozwiązywany przez punkt zwrotny Transform. Problemem jest oczywiście uzyskanie tych znaczników, a także zwiększenie odpowiednich krawędzi w razie potrzeby. Ich uzyskanie może wymagać wiedzy specyficznej dla problemu, której nie mam dla twojego problemu.

Istnieje jednak kilka ogólnych metod, które mogą być przydatne. Na przykład, podłączeni operatorzy z Morfologii Matematycznej służą jako sposób łączenia i rozszerzania płaskich stref. Może więc może dać nam względnie dobre markery dla problemu. Na poniższym obrazie przeprowadzono rekonstrukcję morfologiczną przez otwarcie (rodzaj połączonego operatora) w skali szarości oryginalnego obrazu (lewy obraz), a pozostałe maksimum regionalne pokazano po prawej.

enter image description hereenter image description here

Teraz możemy uzyskać gradient morfologiczny lewym obrazie powyżej. Możemy również wykonać wypełnienie otworu i rozszerzenie z małym dyskiem na prawym obrazku powyżej, aby uzyskać bardziej płynne kontury - to definiuje nasz obraz znacznika. Następnie, stosując przełomowym Transform na obraz gradientu za pomocą naszego znacznika obrazu, a następnie rozszerzenie (osłabienie lub rozszerzają się, zależy od tego, jak widać go) linie działów wodnych, otrzymamy następujący obraz:

enter image description here

I podejrzewasz, że możesz łatwo odrzucić zbyt duże i zbyt małe regiony. Następnie, jeśli masz jakieś spodziewane rozmiary dla pazurów, a także dla dłoni, możesz odrzucić nieistotne regiony. W tym momencie jest to tylko kwestia rozszerzanie obszarów, które tworzą jeden komponent i wyświetlić wynikowy kontur oryginalnego obrazu:

enter image description here

przykładowy kod do wykonywania każdego etapu (odpowiednie kroki są również pokazane w skomentował kod 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

Dziękuję za odpowiedź Pozwolę sobie wyjaśnić, dlaczego konkretnie muszę zaznaczyć granice i odrzucić nieistotny obszar.Muszę przeanalizować piksele i na podstawie niektórych wybranych funkcji, takich jak obszar padu, obszar palca, kąt między palcami 2 i 3, długość pugmark, szerokość, itp. a następnie po porównaniu analizowanego obrazu z zestawem treningowym muszę umieć rozróżnić, który to tygrys jest tygrysem. – Suvidha

+0

@ user2067773 Ok, po prostu nie wiem, dlaczego mi to mówisz. Wygląda jednak na to, że pomijasz jeden krok w opisywanej przez ciebie metodzie: najpierw musisz mieć metodę, aby określić, czy to, co masz, jest symbolem pugmark, czy nie, w przeciwnym razie nie ma sensu go analizować. – mmgp

+0

Tak, masz rację. nie myślałem o tym. Ale moją pierwszą troską jest zamaskowanie tła i uzyskanie wyraźnego obrazu pugmark do dalszej analizy. – Suvidha

3

podejście w odpowiedzi na @ mmpg może być niestabilny, ponieważ zastosowane algorytmy wymagają ustawienia parametrów, które mogą być specyficzne dla każdego obrazu. Ten problem wydaje się być lepiej zbliżony dzięki modelom parametrycznym, które mają wcześniejszą wiedzę na temat kształtu.

Active Shape Models Ramy iteracyjnie przybliżają granicę kształtu. Po pierwsze, należy zainicjować go z jakiegoś przeciętnego kształtu (obrazy są tylko rysunki, a nie rzeczywista wyjściowe algorytmu):

Initialization of the shape

kontur jest zdefiniowany przez punkty kontrolne (pokazane przez niebieskim kleszcze, tylko dla dłoń, aby uniknąć bałaganu).W każdej iteracji algorytm uwzględnia ortogonalne kierunki w każdym punkcie kontrolnym i szacuje prawdopodobieństwo granicy w każdej odległości (zwykle za pomocą gradientu obrazu, ale w twoim przypadku powinno być bardziej skomplikowane - może to być różnica w fakturze, np. Odległość między histograms of textons). Tutaj czerwone punkty świecące Arg-maksima tej dystrybucji:

Modes of the edge-ness distribution

Następnie nowy kontur jest dopasowanie do danych, aby zmaksymalizować te dystrybucje pomnożona przez uprzedniej dystrybucji kształtu. Zakładając mundur przed, nowy kontur będzie wyglądać następująco:

The new contour

W praktyce chciałbyś mieć niebanalną dystrybucję kształtu. Aby to oszacować, będziesz potrzebował zestawu treningowego z obrazami, w których masek z maskami są ręcznie oznaczone.

Możesz spróbować this MATLAB implementation.