Képek transzformációja

Képek forgatása

Képek forgatását az imrotate() függvénnyel végezhetjük. A függvény paramétereként megahatjuk a forgatási szöget fokban, a forgatás során végrehajtott interpolációt, valamint a vágás mértékét.

Interpolációs módszerek:

  • legközelebbi szomszéd,
  • bilineáris,
  • köbös interpoláció

A vágási módszerek lehetnek befoglaló téglalapra vonatkozó, vagy pedig "levágó" módszerek. A befoglaló téglalap esetén az eredménykép akkora lesz, mint az elforgatott kép befoglalló téglalapja, az üres területek kitöltésre kerülnek. A "levágó" módszer megőrzi a kép eredeti méretét és a kilógó részeket levágja a képről.

Példa:

>> img = imread('szeder.jpg');
>> img_40 = imrotate(img, 40, 'bilinear');
>> img_40_crop = imrotate(img, 40, 'bilinear', 'crop');

 

Példa kép forgatására a befoglaló téglalap meghagyásávalPélda kép forgatására a befoglaló a kép levágásával

 

 

Kép átméretezése

A kép átméretezését az imresize() függvény végzi. A függvény paramétereként itt is meg lehet adni a skálafaktorokat, valamint lehetőség van kép méretének beállítására, valamint az interpolációs módszer kiválasztására is.

Példa:

>> img = imread('szeder.jpg');
>> img_3x = imresize(img,3, 'bilinear');

Példa kép nagyítására

 

 

Képek általános transzformációja

Általános transzformáció végrehajtására is van lehetőség. Az imtransform() és imwarp() függvények általános transzformációkat hajtanak végre. A függvények paramétereként meg kell adni a képmátrixot és a transzformációs mátrixot. További paraméterként megadható az interpoláció típusa.

Példa:

>> img = imread('szeder.jpg');
>> tform = maketform('affine', [ 1, 0, 0;  0.5, 1, 0;   0, 0, 1   ]);
>> img_shear = imtransform(img, tform);
>> imshow(img_shear);

 

Példa általános transformációra (nyírásra)

 

Megjegyzés: A képek eltolásánál a hagyományos imtransform látszólag nem csinál semmit. Ennek az az oka, hogy a transzformáció eredményét a befoglaló téglalap szerint vágja le. Egy trükkel megoldható, hogy a transzformáció a várt eredményt adja. Toljuk el a képet a [400; 100] vektorral! Az Xdata és Ydata értékek úgy vannak beállítva, hogy a képkereteket megőrizzük.

>> img = imread('szeder.jpg');
>> tform = maketform('affine', [1,0,0;0,1,0;400,100,1]);
>> img_translate = imtransform(img,tform,'Xdata',[1,size(img,2)],'Ydata',[1,size(img,1)]);
>> imshow(img_translate);