Documente Academic
Documente Profesional
Documente Cultură
1. Introducere
⎡ x2 ⎤ ⎡ x1 ⎤ ⎡a a12 ⎤ ⎡b ⎤
⎢ y ⎥ = A× ⎢ y ⎥ + B , A = ⎢ 11 B = ⎢ 1⎥ (1)
⎣ 2⎦ ⎣ 1⎦ ⎣a 21 a 22 ⎥⎦ ⎣b2 ⎦
Translaţia se realizează folosind valorile din matricea B, în timp ce scalarea, rotaţia şi reflexia sunt
definite de valorile din matricea A. O transformare generală ce utilizează ambele matrici utilizată adesea
pentru corectarea distorsiunilor geometrice o reprezintă transformarea afină.
2. Translaţia
⎧ x2 = x1 + b1
⎨ (2)
⎩ y 2 = y1 + b2
Translaţia are multe aplicaţii şi este utilizată ca o operaţie de postprocesare. De exemplu, operatorii de
detecţie a contururilor ca şi algoritmii de filtrare spaţială introduc un offset în ceea ce priveşte poziţia
pixelilor în imaginea rezultat.
Algoritmul ce implementează operatorul de translaţie este prezentat în continuare.
for i = 0 to nRows-1 do
for j = 0 to nCols-1 do
if(i+x < nRows and j+y < nCols) then
dst(i+x,j+y)= src(i,j);
endif
endfor
endfor
Intrări:
– src, dst reprezintă matricea de imagine sursă, respectiv destinaţie;
– nRows, nCols reprezintă numărul de linii, respectiv numărul de coloane ale matricii de imagine;
– x, y reprezintă deplasarea relativă a pixelului.
3. Scalarea
⎡ x2 ⎤ ⎡ x1 ⎤ ⎡a x 0⎤
⎢ y ⎥ = A× ⎢ y ⎥ A=⎢
a y ⎥⎦
, (3)
⎣ 2⎦ ⎣ 1⎦ ⎣0
unde a x , respectiv a y reprezintă constantele (factorii) de scalare. Factorii de scalare supraunitari aplicaţi
mulţimii de puncte ale unui obiect conduc la mărirea obiectelor din imagine şi depărtarea acestora de
originea sistemului de coordonate, în timp ce factorii de scalare subunitari conduc la micşorarea obiectului
şi apropierea lui de originea sistemului de coordonate. Daca factorii de scalare sunt negativi, atunci
rezultatul scalarii este o reflexie.
În Figura 1 sunt prezentate două metode de reeşantionare. În primul caz, un singur pixel din
vecinătate este selectat (posibil aleator) ca fiind reprezentativ pentru acea vecinătate. Această metodă, deşi
este facilă din punct de vedere computaţional, nu oferă rezultate satisfăcătoare dacă dimensiunea
vecinătăţii nu este redusă. În cel de-al doilea caz se interpolează pixelii din vecinătate, făcându-se apel la
media nivelurilor de gri ale pixelilor din acea vecinătate.
2 2 2 2
Înlocuire 6 6 6 6 Interpolare
2 2 4 4
2 2 2 2 2 2 4 2
6 6 6 6
a)
b)
2 3 4 5
2 2 5 5 2 3 4 5
2 2 5 5 Replicare 2 5 Interpolare
2 3 4 5
2 2 5 5 2 5 2 3 4 5
2 2 5 5
a) b)
Algoritmii ce realizează reeşantionarea imaginii prin înlocuire, respectiv prin interpolare sunt
prezentaţi în continuare.
new_h = nRows/scalefactor;
new_w = nCols/scalefactor;
new_h = nRows/scalefactor;
new_w = nCols/scalefactor;
k = 0;
for i = x to x+width-1 do
for j = y to y+height-1 do
result(k++) = src(i,j);
endfor
endfor
return result;
Intrări:
– src reprezintă matricea de imagine sursă;
– x, y reprezintă coordonatele unui pixel curent;
– width, height reprezintă dimensiunile unei vecinătăţi în jurul pixelului de coordonate x, y,
vecinătate definită de factorul de scală.
Ieşire:
– un tablou de pixeli de dimensiune width*height.
new_h = nRows*scalefactor;
new_w = nCols*scalefactor;
for i = 0 to new_h-1 do
for j = 0 to new_w-1 do
sample = src(i/scalefactor, j/scalefactor);
dst(i,j) = sample;
endfor
endfor
Intrări:
– src, dst reprezintă matricea de imagine sursă, respectiv destinaţie;
– nRows, nCols reprezintă numărul de linii, respectiv numărul de coloane ale matricii de imagine;
– scalefactor reprezintă factorul de scală.
3.1 Scalarea după o axă
Transformarea de scalare după o axă distorsionează un obiect prin modificarea dimensiunilor sale
după o singura direcţie (Figura 3).
y y y
x x x
a) b) c
Figura 3 – Scalarea după o axă a) Figura iniţială b) Scalarea după axa y c) Scalarea după axa x
4. Rotaţia
P2
y2
r
P1
y1
θ r
φ
P0 x2 x1 x
Rotaţia cu un unghi θ a unui obiect faţă de un punct P0 (de coordonate ( x0 , y 0 ) ) conduce la păstrarea
distantei obiectului faţă de acel punct şi modificarea coordonatelor in sensul pozitiv (trigonometric) pentru
θ > 0 sau in sensul orar, negativ, pentru θ < 0 .
Pentru exprimarea rotaţiei este preferabil lucrul cu coordonate polare (Figura 4).
⎧ x − x = r cos ϕ
P1 ( x1 , y1 ) : ⎨ 1 0 (4)
⎩ y1 − y0 = r sin ϕ
sau
⎧ x = cosθ ( x1 − x0 ) − sin θ ( y1 − y 0 ) + x0
Rθ : ⎨ 2 (5)
⎩ y 2 = sin θ ( x1 − x0 ) + cosθ ( y1 − y0 ) + y 0
Imagine intrare
Rotire înainte Translaţie
Imagine ieşire
Scădere Rotire înapoi
for i = 0 to nRows-1 do
for j = 0 to nCols-1 do
x2 = rot_x(angle, i-x0, j-y0) + x0;
y2 = rot_y(angle, i-x0, j-y0) + y0;
if((x2 >= 0 and x2 < nRows) and (y2 >= 0 and y2 < nCols)) then
dst(i,j) = src(x2, y2);
endif
endfor
endfor
Intrări:
– src, dst reprezintă matricea de imagine sursă, respectiv destinaţie;
– nRows, nCols reprezintă numărul de linii, respectiv numărul de coloane ale matricii de imagine;
– angle reprezintă unghiul de rotaţie;
– x0, y0 reprezintă coordonatele punctului P0 faţă de care se realizează rotaţia;
cosinus = cos(angle/180*PI);
sinus = sin(angle/180*PI);
cosinus = cos(angle/180*PI);
sinus = sin(angle/180*PI);
Intrări:
– angle reprezintă unghiul de rotaţie;
– x, y reprezintă deplasamentul relativ al pixelului curent faţă de punctul P0 ;
Ieşire:
– o valoare reală reprezentând noua poziţie a pixelului rotit cu unghiul angle faţă de axa y , respectiv x .
5. Reflexia
⎧ x2 = − x1 + (2 ⋅ x0 )
⎨ (6)
⎩ y 2 = y1
⎧ x2 = x1
⎨ (7)
⎩ y 2 = − y1 + (2 ⋅ y0 )
⎧ x2 = − x1 + (2 ⋅ x0 )
⎨ (8)
⎩ y 2 = − y1 + (2 ⋅ y0 )
Algoritmii ce implementează operatorul de reflexie după axa x , respectiv y este prezentat în
continuare.
for i = 0 to nRows-1 do
for j = 0 to nCols-1 do
x1 = -i + 2*x0;
y1 = j;
if((x1 >= 0 and x1 < nRows) and (y1 >= 0 and y1 < nCols)) then
dst(i,j) = src(x1,y1);
endif
endfor
endfor
for i = 0 to nRows-1 do
for j = 0 to nCols-1 do
x1 = i;
y1 = -j + 2*y0;
if(x1 >= 0 and x1 < nRows) and (y1 >= 0 and y1 < nCols) then
dst(i,j) = src(x1, y1);
endif
endfor
endfor
6. Transformarea afină