Julia - Obrada slike - Osnovi obrade slike

In [ ]:
#U okviru ovog notebook-a demonstriraćemo osnove rada sa oblasti obrade slike i njenih algoritama, odgovarajućih
#Julia paketa za obradu slike. Jednostavnosti radi, obrada slike će se uglavnom vršiti nad slikama prikazanim u 
#intenzitetima nijanse sive (grayscale), ali biće i primera gde će se obrada slike vršiti i nad slikama u boji (prelaz
#sa obrade slike prikazane i intenzitetima nijanse sive i slika u boji je jednostavan, i obrada se radi analogno,
#pa ćemo zbog jednostavnosti izlaganja, ali i interaktivnosti nekad raditi sa jednim tipovima slika, a nekada sa drugim tipovima slika)

#Julia ima odličnu, i sve više rastuću podršku za oblast obrade slika, 
#po performansama je mnogo brža od standardno funkcionalno bogatih programskih jezika
#kao što su Matlab i Python, a po performansama je veoma bliska jeziku C koji nema dobro razvijenu
#podršku za obradu slika, a u kojem se mnoge primene za oblasti obrade slike realizuju, pa na taj način Julia
#predstavlja sjajan kompromis između ovih naizgled suprotstavljenih zahteva

#Za pocetak cemo instalirati osnovne pakete za rad sa slikama koje ćemo koristiti:
import Pkg;
Pkg.add("TestImages")
   Updating registry at `~/.julia/registries/General`
    
   Updating git-repo `https://github.com/JuliaRegistries/General.git`
    Fetching: [============================>[1mFetching: [========================================>]  100.0 %
  Resolving package versions...
In [2]:
Pkg.add("Images")
In [3]:
Pkg.add("FileIO")
In [ ]:
Pkg.add("ImageShow")
In [7]:
using TestImages, Images, ImageShow 

#Slike u programskom jeziku Julia su nizovi - jednodimenzionalni i dvodimenzionalni (matrice)
#Oni se najčešće tretiraju i kao matrice, čija polja nazivamo pikselima - x osa naše slike 
#odgovara vrstama (smer porasta je odozgo nadole), a y osa naše slike 
#odgovara kolonama (smer porasta koordinata je sa levo na desno)

#za početak, izvršićemo učitavanje jedne slike iz paketa TestImages

img = testimage("cam");  #funkcijom testimage() kojoj kao argument prosleđujemo ime neke slike iz ovog paketa 
                       #vršimo učitavanje date slike u matricu koju nazivamo img 
                       #ukoliko se skloni operator ; dobiće se direktan ispis naše slike
Out[7]:
In [17]:
mosaicview(img)   #za 2-D slike funkcija koja se najčešće koristi za prikaz je funkcija mosaicview(), kojoj se kao
                  #ulazni argumenti dostavljaju slike koje želimo da prikažemo, uz opciono njihov raspored prikaza
                  #u okviru matrice
Out[17]:
In [18]:
#Ovakav interaktivni prikaz može se koristiti i za slike u boji:

img = testimage("barbara_color.png");
mosaicview(img)
Out[18]: