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

Navigare edit

Transformări geometrice cu interpolare de gradul I edit

Inerpolarea edit

După cum s-a putut vedea în laboratorul trecut în urma transformărilor geometrice doar coordonatele pixelilor se schimbă. Însă deoarece pixeli din imaginea destinaţie au coordonate întregi, iar în urma aplicării formulelor specifice fiecărei transformări geometrice coordonatele rezultate -- ale pixelilor din imaginea sursă -- sunt numere reale, avem nevoie de o metodă de a decide ce pixel -- sau ce pixeli -- din imaginea sursă să folosim pentru a obţine culoarea pixelului destinaţie. Acest proces de decizie se numeşte interpolare.

Cei mai cunoscuţi algoritmi de interpolare sunt:

Interpolarea de ordinul 0 -- cel mai apropiat vecin
În cazul acestui tip de interpolare se ia în considerare doar un singur pixel, şi anume cel mai apropiat de coordonatele calculate -- spre exemplu prin reţinerea părţii întregi sau rotunjire la cel mai apropiat număr întreg.
Interpolarea de ordinul 1 -- interpolare biliniară
Această metodă de interpolare ţine cont de cei patru pixeli cei mai apropiaţi de coordonatele calculate; culorile celor patru pixeli fiind combinate utilizând o medie ponderată, ponderea fiind considerată distanţa fiecărui pixel de coordonatele calculate.
Alţi algoritmi


Utilizarea interpolării de ordinul 1 (biliniare) în transformări geometrice edit

În laboratorul trecut s-a prezentat un algoritm generic -- valabil pentru toate transformările geometrice -- singura diferenţă între ele este modul în care sunt calculate coordonatelor pixelilor din imaginea sursă pe baza coordonatelor pixelilor din imaginea destinaţie. Acest algoritm a fost particularizat pentru interpolarea de ordin 0.

În cele ce urmează vom prezenta un algoritm particularizat pentru interpolarea de ordin 1, având însă grijă să îşi păstreze aplicabilitatea pentru toate transformările geometrice.

  • Pentru fiecare pixel din imaginea destinaţie:
    • Fie (x, y) coordonatele pixelului destinaţie.
    • Fie (x_s, y_s) = f((x, y)).
    • Fie x_s1, y_s1 partea întreagă a lui x_s, respectiv y_s.
    • Fie x_s2, y_s2 diferenţa dintre x_s şi x_s1, respectiv dintre y_s şi y_s1.
      • Ţinând cont de faptul că x_s1 şi y_s1 sunt părţile întregi ale x_s, respectiv y_s, din formula de calcul precizată mai sus putem deduce că: x_s2, y_s2 sunt părţile fracţionale ale lui x_s, respectiv y_s.
    • Fie c_s matricea de culori ale imaginii sursă.
      • Pentru imaginile în tonuri de gri avem o singură matrice;
      • Pentru imaginile RGB avem trei matrici corespunzătoare celor trei filtre. În acest caz algoritmul este aplicat pentru fiecare dintre cele trei filtre.
    • Se calculează c -- culoarea pixelului destinaţie astfel:
c =
    (1 - x_s2) * (1 - y_s2) * c[x_s1    , y_s1    ]
  +      x_s2  * (1 - y_s2) * c[x_s1 + 1, y_s1    ]
  + (1 - x_s2) *      y_s2  * c[x_s1    , y_s1 + 1]
  +      x_s2  *      y_s2  * c[x_s1 + 1, y_s1 + 1]
    • Se înlocuieşte culoarea pixelului din imaginea destinaţie având coordonatele (x, y) cu valoarea calculată c.



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