Prelucrarea imaginilor -- Laboratorul 3 -- 2007-2008 -- info.uvt.ro

Navigare edit

Transformări geometrice edit

Toate aceste transformări nu au efect asupra culorilor în sensul filtrelor din laboratorul trecut. Ele nu transformă culorile unor pixeli ci modifică coordonatele pixelilor. Astfel algoritmii pot fi aplicaţi identic atât asupra imaginilor RGB cât şi celor în tonuri de gri.


Astfel algoritmul generic este:

  • Pentru fiecare pixel din imaginea destinaţie: (de observat că acum pornim de la imaginea destinaţie)
    • Fie (x, y) coordonatele pixelului destinaţie.
    • Fie (x_s, y_s) = f((x, y)).
      • Adică aplicăm o funcţie f asupra coordonatelor destinaţie în vederea obţinerii coordonatelor punctului sursă.
      • În general, chiar dacă datele de intrare ale funcţiei f sunt numere naturale, datele de ieşire ale ei pot fi numere reale (spre exemplu în cazul scalării); se impune astfel o rotunjire a coordonatelor rezultante. (De aici provine şi posibila lipsă de informaţie.)
      • În general coordonatele rezultante pot să nu mai se încadreze în imaginea iniţială (spre exemplu în cazul rotirii); în acest caz se va considera ca şi culoare a acestui pixel fie alb fie negru.
    • Se înlocuieşte culoarea pixelului din imaginea destinaţie având coordonatele (x, y) cu culoarea pixelului din imaginea sursă având coordonatele (x_s, y_s).


Ca atare în cele ce urmează voi oferi doar modul de calcul a coordonatelor sursă pe baza coordonatelor destinaţie.


Fie următoarele notaţii:

w
lăţimea imaginii;
h
înălţimea imaginii;


Oglindirea edit


În funcţie de axa faţă de care executăm oglindirea putem avea:

  • oglindire verticală -- faţă de axa Ox;
x_s = x
y_s = h - y
  • oglindire orizontală -- faţă de axa 0y;
x_s = w - x
y_s = y
  • oglindire diagonală -- pentru imaginile pătratice;
x_s = w - x
y_s = w - y


Scalarea edit


Fie factorii de scalare pentru axa Ox şi Oy, fx, respectiv fy.

În general aceştia sunt calculaţi ca raport a dimensiunilor iniţiale şi finale.


Astfel formulele de transformare a coordonatelor sunt:

x_s = x * fx
y_s = x * fy


Rotirea edit


Rotirea se efectuează în jurul unui punct de referinţă cu coordonatele (x0, y0) şi cu un unghi de rotaţie a.


Formulele de transformare sunt:

x_s = (x - x0) * cos (-a) - (y - y0) * sin (-a) + x0
y_s = (x - x0) * sin (-a) + (y - y0) * cos (-a) + y0


De observat că pentru implementare se pot optimiza formulele de mai sus, evitând calcularea anumitor valori prin înlocuirea lor cu constante (spre exemplu cos şi sin aplicate lui a).


Interpolarea edit

După aplicarea algoritmilor de mai sus pentru diverse date de intrare se poate observa că rezultatul nu este tocmai plăcut ochiului (spre exemplu scalarea unei imagini cu un factor de 2 pentru ambele axe).


Aceste efecte nedorite s-au obţinut deoarece în urma calculării coordonatelor sursă s-au aplicat rotunjiri pentru a le putea obţine. Pentru orice pixel din destinaţie, pixelul sursă se află undeva în aria a patru pixeli, astfel culoarea aleasă trebuie să ia în considerare toate cele patru culori ale celor patru pixeli.


Interpolarea de ordinul 0 -- cel mai apropiat vecin edit

Interpolarea de ordinul 0 este aceea în care se ia în considerare doar pixelul având coordonatele cele mai apropiate de coordonatele rezultate în urma calcului. (Exact ceea ce am făcut în exemplele de mai sus.)


Interpolarea de ordinul 1 -- biliniară edit

Interpolarea de ordinul 1 ţine cont de toţi cei patru pixeli înconjurători.



Ciprian Dorin Craciun, 2007-10-21, ccraciun@info.uvt.ro