Računarska grafika

Obrada slike

Obrada slike (Image processing)

Transformacija slike primenom zadatog algoritma.

RezultujucˊaSlika=f(OriginalnaSlika)RezultujućaSlika = f(OriginalnaSlika)

Tipovi filtera:

  • Color
  • Displacement
  • Convolution
  • Fourier domain
  • ...

💻 filters.Filter

Color filter

Nezavisno postavlja boju svakog piksela samo na osnovu boje originalnog piksela.

Definisan funkcijom koja transformiše jednu boju u drugu.

for-each pixel
  output_color = f(input_color)

Primeri:
Grayscale, Saturate,
Accent, Desaturate,
Invert, Colorize

💻 ColorFilter, filters.color.*

🤯 Da li je auto contrast color filter?

Displacement filter

"Premešta" piksele. Definisan je funkcijom koja za svaki položaj na rezultujućoj slici vraća odakle treba uzeti piksel sa originalne slike.

for-each pixel
  input_position = f(output_position)

Primeri:
Jitter, FlipVertical,
Lens, Wave,
Swirl, Zoom

💻 DisplacementFilter, filters.displacement.*

Padding

Šta raditi kad filteri žele da koriste originalnu sliku van njenog okvira? (Dešava se u displacement i convolution filterima)

  • Fiksna boja - Smatramo da su svi pikseli van slike neke određene boje (npr. svi transparentni ili svi crni).
  • Proširivanje slike - Svaki piksel van slike smatramo da je boje kao njemu najbliži piksel na obodu slike.
  • Ogledalo - Slika se reflektuje oko svojih ivica.
  • Popločavaje - Smatramo da je cela ravan popločana kopijama slike.
  • Isecanje - Odbacujemo deo rezultujuće slike za koji nam trebaju pikseli van originalne slike.

Convolution filteri

g=ωfg = \omega * f

  • Operacija * se naziva konvolucija.
  • ff - originalna slika - f(x,y)f(x,y) je piksel na poziciji (x,y)(x,y) originalne slike.
  • gg - rezultujuća slika - g(x,y)g(x,y) je piksel na poziciji (x,y)(x,y) rezultujuće slike.
  • ω\omega - Kernel - matrica dimenzija (2a+1)×(2b+1)(2a+1) \times (2b+1), sa pozicijom (0,0)(0,0) u centru.

g(x,y)=s=aat=bbω(s,t)f(xs,yt)g(x,y) = \sum _{s=-a}^{a}{\sum _{t=-b}^{b}{\omega (s,t)f(x-s,y-t)}}

💻 ConvolutionFilter

Convolution filteri - Identity

[000010000]\begin{bmatrix}0&0&0\\0&1&0\\0&0&0\end{bmatrix}

h:400 h:400

Convolution filteri - Box blur

[1/91/91/91/91/91/91/91/91/9]\begin{bmatrix}1/9&1/9&1/9\\1/9&1/9&1/9\\1/9&1/9&1/9\end{bmatrix}

h:400 h:400

Convolution filteri - Sharpen

[0  101510  10]\begin{bmatrix}0&\ \ -1&0\\-1&5&-1\\0&\ \ -1&0\end{bmatrix}

h:400 h:400

Convolution filteri - Edge detect

[1  111811  11]\begin{bmatrix}-1&\ \ -1&-1\\-1&8&-1\\-1&\ \ -1&-1\end{bmatrix}

h:400 h:400

Sobel operator

Služi za aproksimiranje gradijenta u svakoj tački (korisno za detekciju ivica).

Gradijent pokazuje u kom smeru raste vrednost i kojom brzinom.

Vektor Gx,y=(Gx,Gy)G_{x,y} = (G_x, G_y) je aproksimacija gradijenta u tački (x,y)(x,y).

Gx=[10+120+210+1]AGy=[121000+1+2+1]AG_x = {\begin{bmatrix}-1&0&+1\\-2&0&+2\\-1&0&+1\end{bmatrix}} * A \quad \quad \quad G_y = {\begin{bmatrix}-1&-2&-1\\0&0&0\\+1&+2&+1\end{bmatrix}} * A

Svaki od Sobel kernela je proizvod kernela koji "uprosečuje" i kernela koji "diferencira".

Gx=[121]([10+1]A)Gy=[10+1]([121]A)G_x = {\begin{bmatrix}1\\2\\1\end{bmatrix}} * \left({\begin{bmatrix}-1&0&+1\end{bmatrix}} * A \right) \quad \quad \quad G_y = {\begin{bmatrix}-1\\0\\+1\end{bmatrix}} * \left({\begin{bmatrix}1&2&1\end{bmatrix}} * A \right)

Prikaz gradijenta

  • Uzimanjem magnitude gradijenta, Gx,y\|G_{x,y}\|, formiramo sliku sa obeleženim ivicama.

  • Reljefnu sliku formiramo tako što svaki piksel postavimo na vrednost skalarnog proizvoda gradijenta i nekog zamišljenog pravca svetla, Gx,yLG_{x,y} \cdot L.

💻 DemoSobel, Sobel

TODO: Slajd o auto contrast filteru