#U okviru ovog notebook-a daćemo prikaz rada osnovnih algoritama za geometrijske transformacije and slikama
#Za obradu slika pomoću geometrijskih transformacija biće nam potreban paket ImageTransformations
import Pkg;
Pkg.add("ImageTransformations");
using ImageTransformations
using TestImages, FileIO, Images
img = load("gfilt.jpg");
mosaicview(img)
#Ključne funkcije u ovom paketu jesu funkcije za menjanje razmere (veličine slike), rotiranje slike, uvijanje slike
#Pre svega, demonstriraćemo rad funkcije za menjanje razmere:
rez_sl1 = imresize(img, ratio=1/2); #prvi argukment funkcije imresize() jeste slika nad kojom vršimo obradu,
# a drugi argument predsavlja odnos dužina slike po x i y nove slike naspram stare:
# u prevodu, ukoliko se odlučimo za osnos 1/a, onća ćemo skratiti sliku a puta po x i a puta po y osi
mosaicview(img, rez_sl1; nrow = 1)
size(img)
size(rez_sl1)
#Kao što možemo videti, skraćivanje se vrši tako što se smanji broj
#piksela naše slike onoliko puta koliko mi to želimo
#Potrebno je da sada instaliramo još dva paketa: Rotations i CoordinateTransformations:
Pkg.add("Rotations");
Pkg.add("CoordinateTransformations");
#Sada ćemo obraditi funkciju warp
#Ova funkcija će za cilj imati uvijanje slike oko neke izabrane tačke primenom neke transformacije
using Rotations, CoordinateTransformations
img = load("gfilt.jpg");
c = recenter(RotMatrix(-1/4*pi), center(img));
#funkcija recenter() kao prvi argument prima transformaciju koju želimo da izvršimo
#nad našom slikom i tačku oko koje želimo da vršimo datu transformaciju
rez_sl2 = warp(img, c);
#nakon toga funkcija warp vrši željenu transformaciju nad datom slikom - kao prvi
#argument prima se sama slika, a kao drugi argument
mosaicview(img, rez_sl2; nrow = 1)
#Naravno, moguće je i definisati drugačiji vid transformacije npr. perspektivne transformacije
#pa zato ova funkcija warp predstavlja svojevrsno uopštenje koordinatnih operacija transformacija slika
#Konačno, daćemo još osnovni prikaz funkcije za rotitanje slike imrotate
img = load("gfilt.jpg");
rez_sl3 = imrotate(img, pi/3); #kao prvi argument prima se slika, a kao drugi ugao za koju želimo da izvršimo
#njenu rotaciju u smeru kazaljke na časovniku oko njenih centralnih piksela
mosaicview(img, rez_sl3; nrow = 1)