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;
....

Podobne dokumenty