kontur
Transkrypt
kontur
Reprezentacja i analiza obszaru Cechy kształtu Topologiczne • • • • spójność liczba Eulera liczba otworów szkielet Geometryczne I • • • • • obwód pole powierzchni promienie max-min kołowość symetria Geometryczne II • • • • środek ciężkości rzuty Fereta prostokąt opisany dopasowana elipsa Sąsiedztwo punktu w obrazach dyskretnych 5 6 7 4 x(i,j) 0 3 2 1 Bezpośredni sąsiedzi (B-sąsiedzi) punktu x(i,j) : punkty, które mają wspólne ‘boki’ z x(i,j) [0, 2, 4, 6]. Niebezpośredni sąsiedzi (N-sąsiedzi) punktu x(i,j) : punkty, które mają wspólne ‘rogi’ z x(i,j) [1, 3, 5, 7]. Wyznaczanie konturu obiektu B-kontur to zbiór elementów obiektu mających przynajmniej jednego sąsiada nie należącego do obiektu Kontur (N-kontur) to zbiór elementów obiektu mających przynajmniej jednego B-sąsiada nie należącego do obiektu Wyznaczanie konturu obiektu 5 6 7 4 x(i,j) 0 3 1 2 określenie sąsiada, dla którego występuje kolejny punkt konturu współrzędne kolejnego punktu konturu: s=0 -> i:=i+1; s=1 -> i:=i+1; j:=j+1; s=2 -> j:=j+1; s=3 -> i:=i-1; j:=j+1; ... określenie sąsiada od którego rozpoczyna się poszukiwanie kolejnego punktu konturu: s=0 -> s:=5; s=1 -> s:=6; s=2 -> s:=7; s=3 -> s:=0; ... Wyznaczanie konturu obiektu 5 6 7 4 x1(i,j) 0 3 1 2 5 współrzędne kolejnego punktu konturu: s=0 -> i:=i+1; s=1 -> i:=i+1; j:=j+1; s=2 -> j:=j+1; s=3 -> i:=i-1; j:=j+1; ... 6 4 3 Next_ij(s,i,j) 7 0 2 Next_s(s,i,j) określenie sąsiada, dla którego występuje kolejny punkt konturu 1 określenie sąsiada od którego rozpoczyna się poszukiwanie kolejnego punktu konturu: s=0 -> s:=5; s=1 -> s:=6; s=2 -> s:=7; s=3 -> s:=0; ... Wyznaczanie konturu obiektu - algorytm { Kontur - liczba elementów konturu; Kontur_tab - tablica zawierająca informację o sąsiedztwie, dla którego występuje kolejny punktu konturu; i,j - współrzędne pierwszego punktu konturu } .... s := 0; s := Next_s(s,i,j); Next_ij(s,i,j); Kontur := 0; Start_i := i; Start_j := j; Start_s :=s ; repeat s := Next_s(s,i,j); Next_ij(s,i,j); Inc(Kontur); Kontur_tab[Kontur] := s; until (s=Start_s) and (i=Start_i) and (j=Start_j); .... Wyznaczanie konturu obiektu - MATLAB %MATLAB x = imread('tire.tif'); BW1=im2bw(x,0.2); %progowanie obrazu BW2 = bwperim(BW1,8); %n-kontur dla 8-osąsiedzwa imshow(x); figure, imshow(BW1) figure, imshow(BW2) x BW1 BW2 Cechy geometryczne Obwód - długość brzegu figury: T = ∫ x (t) + y (t)dt 2 2 Dla siatki dyskretnej, długość brzegu figury nie jest liczbą punktów brzegowych! Wyznaczanie długości obwodu obiektu 1. Obwód obiektu równy jest liczbie elementów jego konturu 1 2 Obwód = 15 3 15 4 14 5 13 6 12 7 11 10 9 8 Metoda ta wprowadza stosunkowo duży błąd estymatora wartości obwodu obiektu Wyznaczanie długości obwodu obiektu 2. Obwód obiektu równy jest sumie długości odcinków łączących środki elementów konturu. Przyjmuje się, że element konturu jest kwadratem o boku = 1. 2 2 2 2 Obwód = 12+3√ √2 Metoda ta jest dokładniejsza niż metoda poprzednia Wyznaczanie długości obwodu obiektu 3. Obwód obiektu wyznacza się na podstawie wzoru: O = aNB - bNW NB - liczba zewnętrznych boków elementów konturu NA - liczba wierzchołków konturu 2 a= π(1 + 2 ) 8 b= π 8 2 Obwód = 22a-7b Metoda ta zapewnia estymator długości o zerowej wartości średniej i minimalnej wariancji dla odcinków nachylonych pod różnym kątem Porównanie metod wyznaczania długości konturu Zastosowana metoda dł. obwodu prostokąta dł. obwodu okręgu liczba elementów obwodu (1) Aproksymacja z Obliczenia na wykorzystaniem podstawie wzoru (3) 2 (2) “rzeczywista” długość obwodu 276,0 276,0 263,2 280 180,0 211,5 203,5 204,2 d=65 a=90 b=50 Pole powierzchni dx(t) dy A = ∫∫ dxdy= ∫ y(t) dt− ∫ x(t) dt dt dt R ∂R ∂R gdzie R i ∂ R reprezentują odpowiednio obszar i jego brzeg, oraz x(t) i y(t) są współrzędnymi punktów brzegu figury (np. dla koła o promieniu jednostkowym x(t)=sin(t), y(t)=cos(t)). %MATLAB help bwarea Wyznaczanie pola powierzchni obiektu - wypełnianie obszaru Pole powierzchni obiektu równe jest liczbie pikseli do niego należących Rekursywny algorytm wypełniania konturów procedure Wypelnij(i,j : word); begin x(i,j):=nowy_kolor_obiektu; Inc(licznik) if x(i,j+1) = kolor_obiektu then Wypelnij(i,j+1); if x(i,j-1) = kolor_obiektu then Wypelnij(i,j-1); if x(i+1,j) = kolor_obiektu then Wypelnij(i+1,j); if x(i-1,j) = kolor_obiektu then Wypelnij(i-1,j); end; .... Złożony for i:=0 to N-1 do for j:=0 to N-1 do obliczeniowo !!! begin licznik:=0; if x(i,j) = kolor_obiektu then Wypelnij(i,j); end; .... Nierekursywne wypełnianie przez spójność xg xp xd Zapamiętuje się współrzędne xg, xd, po zakończeniu wypełniania linii wypełnia się linie xg, xd itd.. Nierekursywne wypełnianie przez spójność xg1 xg2 xp xd1 xd2 Co to jest zbiór wklęsły ? Promienie Rmax Rmin Promienie Rmin, Rmax są odpowiednio najdłuższymi i najkrótszymi promieniami wyprowadzonymi ze środka ciężkości figury. Stosunek AR= Rmax/Rmin może służyć jako miara wydłużenia figury (ang. object aspect ratio). Współczynnik kształtu (kołowość) Współczynnik kształtu - jest miarą podobieństwa kształtu figury do koła (obwód) 2 γ= 4π(pole) Dla koła współczynnik kształtu osiąga wartość minimalną i równą 1, a np. dla kwadratu γ = 4/π > 1. Współczynniki kształtu figur γ ≈ 3.91 γ ≈ 1.26 AR ≈ 2.01 AR ≈ 1.34 γ ≈ 3.81 γ ≈ 1.46 AR ≈ 2.02 AR ≈ 1.29 Symetrie Wyróżnia się symetrie kołowe i osiowe. A B C4 C3 C1 C2 Kwadrat A posiada 4 osie symetrii. Koło B posiada symetrie kołową. Grupa małych kół C1, … C4 posiada cztery osie symetrii. Wyznaczanie środków ciężkości obiektów i1,j1 i2,j2 i3,j3 ... ... 1 P 1 P SCi = ∑ ik , SC j = ∑ jk P k =1 P k =1 P − liczba elementów obiektu iP,jP Środki ciężkości służą do określania położenia obiektu w obrazie. Ich wartości nie muszą być liczbami całkowitymi. Wyznaczanie środków ciężkości obiektów i1,j1 iK,jK i2,j2 ... i3,j3 ... 1 K 1 K SCi = ∑ il , SC j = ∑ jl K l=1 K l=1 K − liczba elementów konturu obiektu Wyznaczanie środków ciężkości obiektów { Kontur - liczba elementów konturu; Kontur_tab - tablica zawierająca informację o sąsiedztwie, dla którego występuje kolejny punktu konturu; i,j - współrzędne pierwszego punktu konturu } .... XCenter:=0; YCenter:=0; for n:=1 to Kontur do begin Xcenter := Xcenter + i; Ycenter := Ycenter + j; Next_ij(Kontur_tab[n],i,j) end; XCenter:=XCenter div Kontur; YCenter:=YCenter div Kontur; .... Średnica okręgu opisanego D SCi,SCj D = 2max( (ik − SCi )2 + (jk − SC j )2 ) P − liczba elementów obiektu k = 1, 2,..., P Średnica okręgu opisanego { XFar, YFar - punkt obiektu najdalej położony od jego środka Kontur_tab - tablica zawierająca informację o sąsiedztwie, dla którego występuje kolejny punktu konturu; i,j - współrzędne pierwszego punktu konturu } .... MaxNorm:=0; for n:=1 to Edge do begin Norm:=sqr(i - XCenter) + sqr(j - YCenter); if MaxNorm<Norm then begin MaxNorm := Norm; XFar := i; YFar := j end; Next_ij(Kontur_tab[n],i,j); end; Diam:=2*sqrt(sqr(XFar-XCenter) + sqr(YFar-YCenter)); .... Momenty statystyczne Momenty wyższych rzędów µ p,q = ∑ ∑ (x − x ) ( y − y ) p (x,y)∈R gdzie p,q są rzędami momentów; Moment µ2,2 jest wariancją. q Momenty statystyczne Kierunek osi o najmniejszym momencie bezwładności: 2 µ1,1 1 −1 θ = tan 2 µ2 ,0 − µ0 ,2 (x,y) x (x, y ) y Momenty statystyczne Prostokąt opisujący to prostokąt o najmniejszym polu powierzchni zawierający dany obiekt, przy czym kierunek dłuższego boku prostokątna jest równoległy do kierunku wyznaczającego oś najmniejszej bezwładności figury. Średnice Fereta Ułożenie przestrzenne obiektu można wyznaczyć przez rzutowanie obiektu na osie kartezjańskie. Najdłuższą cięciwą (Fereta) jest odcinek łączący najodleglejsze punkty brzegu figury. Najdłuższa cięciwa – max. Feret Y Feret X Feret Wyznaczanie średnic Fereta Feretj jmin ... imin imax ... jmax Fereti Feret i = max(ik − il ), k, l = 1, 2,..., P Feret j = max(jk − jl ), k, l = 1, 2,..., P P − liczba elementów obiektu Wyznaczanie średnic Fereta - algorytm { FeretX, FeretY - szukane średnice Fereta; Kontur_tab - tablica zawierająca informację o sąsiedztwie, dla którego występuje kolejny punktu konturu; i,j - współrzędne pierwszego punktu konturu } .... FerXMi := N; FerXma := 0; FerYMi := N; FerYMa := 0; for n:=1 to Edge do begin if FerXMi > i then FerXmi := i; if FerYMi > j then FerYmi := j; if FerXMa < i then FerXma := i; if FerYMa < j then FerYma := j; Next_ij(Kontur_tab[n],i,j); end; FeretX := FerXMa - FerXMi; FeretY := FerYMa - FerYMi; ....