Geometria obrazu
Wykład 6
Znajdywanie konturu.
Metody mieszane.
1. Metoda zorientowanej energii.
2. Metody oparte na filtrze gradientowym.
3. Metoda lokalizacji.
4. Metoda znormalizowanego przekroju.
Uzupełnianie konturu z wykorzystaniem warunkowych pól
losowych.
Aby lepiej określić kontury elementów obrazu możemy stosować metody bardziej urozmaicone niż filtry lub transformacje.
W tym celu można analizować zależności wynikające z jasności, koloru, tekstury obrazu. Wiele z nich jest bardzo względnych, więc ustalenie odpowiednich parametrów bywa trudne.
Poza tym w większości przypadków nie badamy z góry określonych masek, lecz zbiory losowych pikseli wokół analizowanego punktu.
Metoda zorientowanej energii (OE).
W tym przypadku jasność I poddawana jest transformacji z pomocą dwóch filtrów o różnej symetrii: drugiej pochodnej funkcji Gaussa (parzysty) i
transformaty Hilberta (nieparzysty), np. dla kąta 0 i odpowiednich wartości mamy:
Ogólnie otrzymujemy wzór:
gdzie f-y określają odpowiednie filtry zależne od orientacji i skali .
Dla każdego piksela q znajdujemy kierunek * maksymalizujący wartość OE,. Następnie badamy wartości dla pikseli sąsiadujących z q w kierunku prostopadłym do *. Jeśli wartość OE* w q nie jest większa od
maksymalnych wartości energii sąsiadów, to pikselowi q nadajemy wartość 0 (porównanie wykonujemy równolegle dla wszystkich pikseli). Piksele o
niezerowej energii wskazują miejsca, w których mogą występować krawędzie.
Co więcej, możemy zdefiniować prawdopodobieństwo wystąpienia krawędzi w danym pikselu wzorem pcon=1-exp(-OE*/).
Metody oparte na filtrze gradientowym (BG,CG,TG).
W tym przypadku tworzymy małe kółko o środku w punkcie (x,y) i promieniu r. Następnie dzielimy je na pół średnicą o kierunku . Funkcja gradientowa G(x,y,,r) porównuje zawartość obu półkoli. Dostatecznie duża różnica wskazuje istnienie nieciągłości w obrazie wzdłuż średnicy koła.
W ten sposób możemy porównać różne cechy obrazu.
Gradienty też mogą być liczone na różne sposoby.
Histogramy g, h dla odpowiednich półkoli możemy porównać z pomocą funkcji
W ten sposób można badać histogramy jasności (BG), koloru (CG) lub tekstury (TG) i rozpatrywać różne ich układy.
W przypadku analizy koloru można też zastosować model CIELAB (który jest zbliżony do percepcji ludzkiego oka) i liczyć gradienty względem kanałów a i b (osobno – kierunki te są prostopadłe), a następnie policzyć ich sumę
CGa+b=CGa+CGb. Tak zdefiniowany gradient może różnić się od gradientu CGab liczonego jednocześnie dla obu kanałów.
https://www2.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/papers/mfm-pami-boundary.pdf
Przykład.
https://www2.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/papers/mfm-pami-boundary.pdf
Metoda lokalizacji.
Badanie gradientu może doprowadzić do sytuacji, w której po obu stronach brzegu zachodzą duże wahania. W takiej sytuacji staramy się uwzględnić odległość od najbliższego maksimum funkcji. Odległość tę aproksymuje wartość d(x) = -|f’(x)|/|f”(x)|. Chcemy, aby wartość funkcji malała wraz ze wzrostem odległości.
Tworzymy funkcję:
gdzie jest tak dobrany, aby optymalizować efekty działania algorytmu, natomiast ḟ jest wygładzoną funkcją gradientu eliminującą podwójne ekstrema.
W efekcie dostajemy bardziej jednoznaczny wykres funkcji (TG vs. TG z daszkiem w poprzednim przykładzie).
Przykład (kontury widoczne po zastosowaniu różnych metod).
https://www2.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/papers/mfm-pami-boundary.pdf
Metoda znormalizowanego przekroju (Normalized Cut Framework).
Traktujemy obraz jako ważony graf nieskierowany, którego wierzchołkami są piksele.
Wagę krawędzi między wierzchołkami i oraz j oznaczamy przez Wij.
Dla zbiorów A i B takich, że AB = V oraz AB = definiujemy wartość przekroju cut(A,B) = iA,jB Wij .
Chcemy tak podzielić graf, aby zminimalizować przekrój przy jednoczesnej maksymalizacji wag wewnątrz każdego ze zbiorów.
Jest to równoważne znormalizowanemu przekrojowi, którym nazywamy wartość Ncut(A,B) = cut(A,B)/assoc(A,V) + cut(B,A)/assoc(B,V),
gdzie assoc(A,V) = iA,kV Wik .
Niech W będzie macierzą wag krawędzi a D macierzą diagonalną taką, że Dii = jV Wij .
Shi i Malik (2000) pokazali, że optymalny podział można znaleźć obliczając y* = arg min Ncut = arg miny yT(D-W)y/yTDy ,
gdzie arg min f(x)={xT: f(x)=mintTf(t)}.
Wyrażenie to ma postać x*Mx/x*x (gdzie x* oznacza transpozycję
Hermite’a), tzn. ilorazu Rayleigha (Rayleigh quotient), dzięki czemu istnieją metody pozwalające na znalezienie w czasie wielomianowym przybliżonego rozwiązania problemu dyskretnego (rozwiązaniem jest minimalny wektor własny).
Jak zdefiniować Wij ?
Można to zrobić na różne sposoby.
Wykorzystując metodę zorientowanej energii możemy przyjąć
Wij = 1-maxu(i,j)pcon(u), gdzie u oznacza piksele wzdłuż krawędzi (i,j).
Gdy zastosujemy funkcję gradientową dla histogramów odpowiednich zbiorów otrzymamy
Wtij = exp(-2(hi,hj)/), gdzie jest czynnikiem skalującym.
Wtedy ptex = 1-1/(1+ exp[-(*2-)/]), gdzie i są dobierane empirycznie a
* jest maksimum z obliczonego dla podziału kół, w których średnica jest dodana do lewej lub prawej części podziału.
Możemy połączyć oba te sposoby otrzymując pB = (1-ptex)pcon i odpowiednią wagę WBij = 1-maxu(i,j)pB(u).
Przykład.
Otrzymane kontury, w których pB (prawy) jest funkcją pcon (góra) i 1-ptex (dół).
https://people.eecs.berkeley.edu/~malik/papers/MalikBLS.pdf
Uzupełnianie konturu z wykorzystaniem warunkowych pól losowych (Conditional Random Fields).
W celu zastosowania tej metody, najpierw znajdujemy kontury elementów obrazu wykorzystując metodę detekcji krawędzi Canny’ego.
Założeniem tej metody jest:
-dobra detekcja – powinno zostać wykrytych możliwie dużo krawędzi,
-dobre umiejscowienie – wykryte krawędzie powinny być możliwie blisko rzeczywistych krawędzi,
-minimalna odpowiedź – dana krawędź powinna być wykryta tylko raz, a zaburzenia obrazu nie powinny tworzyć fałszywych krawędzi.
Algorytm Canny’ego składa się z czterech faz.
1.Stosujemy filtr gaussowski w celu eliminacji zaburzeń.
2.Z pomocą filtru Sobela lub Prewitta obliczamy wartości pochodnej poziomej Gx i pionowej Gy.
Następnie liczymy gradient
oraz jego kąt nachylenia = arctg(Gy/Gx). Kąt zaokrąglamy do wielokrotności /4.
http://aragorn.pb.bialystok.pl/~boldak/DIP/CPO-W04-v01-50pr.pdf
3. Usuwanie niemaksymalnych pikseli.
Eliminujemy piksele o tym samym kierunku
gradientu (prostopadłego do szukanej krawędzi), dla których wartość gradientu nie jest większa (lub jednostronnie równa) od wartości gradientu sąsiadów. W ten sposób zwężamy krawędzie w sposób zapewniający ich ciągłość. Otrzymujemy ciągłą linię złożoną z pojedynczych pikseli.
4. Progowanie z histerezą.
Krawędzie z dużą wartością gradientu są
akceptowane. Krawędzie z małą wartością
gradientu są usuwane. Usuwane są też krawędzie pośrednie jeśli nie przylegają do
zaakceptowanych. Następnie następuje zmiana parametrów (obniżenie górnego progu i
podwyższenie dolnego progu).
Histereza – zależność aktualnego stanu od stanów poprzednich.
http://www.mif.pg.gda.pl/homepages/marcin/AG2011-12/Wyklad3.pdf
Przykłady.
https://www.youtube.com/watch?v=vZg3aldg89M (3’24” ) https://www.youtube.com/watch?v=17cOHpSaqi0 (3”50’)
Otrzymane w ten sposób krzywe aproksymujemy odcinkami tak, aby kąt między sąsiednimi odcinkami nie przekraczał określonego parametru .
Wierzchołki odcinków wyznaczają zbiór, dla którego tworzymy ograniczoną triangulację Delaunay (constrained DT) tzn. triangulację zawierającą dany zbiór krawędzi i taką, że pozostałe krawędzie spełniają warunki triangulacji Delaunay (maksymalizujemy kąty w powstałych trójkątach zmieniając
przekątne w badanych czworokątach).
Taką triangulację możemy znaleźć algorytmem przyrostowym, bo własności triangulacji mają lokalny zasięg (po dodaniu kolejnego punktu zmianie mogą ulec tylko te trójkąty, które w trakcie zmian mają wierzchołek w tym
punkcie).
Następnie z pomocą pól losowych staramy się zdefiniować te krawędzie triangulacji, które mogłyby uzupełnić kontur.
Przykład.
https://homes.cs.washington.edu/~xren/publication/xren_iccv05_contour.pdf
Niech (V, E) będzie nieskierowanym grafem, Sv – zbiorem sąsiadów v, C - zbiorem kolorów, a x:VC – obrazem.
Niech X={X1, …, X|V|} będzie rodziną zmiennych losowych zdefiniowanych na zbiorze V, w której każda zmienna X przyjmuje wartość x={x1,…,x|V|}CV. X nazywamy losowym polem Markowa na V względem systemu sąsiedztwa S
={S1,…,S|V|} wtedy i tylko wtedy, gdy zachodzą następujące dwa warunki:
P(x)>0, dla każdego xX, P(xv|xV-{v})=P(xv|xSv).
CRF jest nieskierowanym modelem grafowym, na którego wierzchołkach można określić dwie zmienne losowe X (obserwowanych zmiennych) i Y (zmiennych wynikowych) odzwierciedlającym warunkowy rozkład
prawdopodobieństwa P(Y|X).
Dążymy do minimalizacji vVlog(1/P(yv|xv)).
Przykład.
https://homes.cs.washington.edu/~xren/publication/xren_iccv05_contour.pdf
Przykład.
https://www.youtube.com/watch?v=rc3YDj5GiVM (22’22”)