DIGITALNA OBRADA SLIKE - PowerPoint PPT Presentation

About This Presentation
Title:

DIGITALNA OBRADA SLIKE

Description:

DIGITALNA OBRADA SLIKE Softver za obradu slike Ognjen Jold i , 21/04 Zlatko Dejanovi , 16/04 Daniel Kurtjak, 50/04 – PowerPoint PPT presentation

Number of Views:45
Avg rating:3.0/5.0
Slides: 27
Provided by: vzv
Category:

less

Transcript and Presenter's Notes

Title: DIGITALNA OBRADA SLIKE


1
DIGITALNA OBRADA SLIKE
  • Softver za obradu slike
  • Ognjen Joldžic, 21/04
  • Zlatko Dejanovic, 16/04
  • Daniel Kurtjak, 50/04

2
Zadaci
  • kreirati softver za obradu slike (rad sa binarnim
    slikama)
  • potrebne funkcije
  • - isjecanje
  • - brisanje
  • - invertovanje
  • - rotacija (za n90, slika u ogledalu)
  • - detekcija iskošenja i ispravljanje
  • - uklanjanje šuma
  • proizvoljna tehnologija za implementaciju

3
Proširenja osnovnog zadatka
  • rad sa slikama u boji i sivim slikama
  • rad sa histogramima
  • morfologija
  • dodavanje šuma
  • konverzija tipova slika
  • undo opcija

4
Osnovni koncepti implementacije
  • C (.NET 2.0)
  • modularni pristup
  • jednostavno unapredivanje

SlikaLib
Geometrijske operacije (Ognjen.dll)
Morfološke operacije (Zlatko.dll)
Detekcija zakrivljenja (SkewDetection.dll)
Filtriranje (Kurtjak.dll)
Osnovni interfejs
5
Podržani tipovi slika
  • bmp
  • jpeg
  • png
  • gif
  • tiff
  • moguca konverzija izmedu svih tipova

6
Osnovni interfejs
Glavni prozor
Prozori za slike
7
SlikaLib
  • biblioteka sa osnovnim klasama
  • distribucija u vidu .dll datoteke
  • objekti u osnovnoj klasi (Slika)
  • - objekat klase Bitmap (.NET)
  • - width (int)
  • - height (int)
  • - ImgType (RGB, Gray, Binary)
  • - ostale vrijednosti (buffer, maxValue,
    minValue...)

8
Osnovne operacije
  • Crop (isijecanje)
  • - zadržavanje selektovanog dijela slike

Slika rez new Slika(sirina, visina,
original.ImageType) for (int i ax, m
0 i lt ax sirina i, m) for
(int j ay, n 0 j lt ay visina j, n)
if (original.ImageType
imgType.rgb)
rez.setPixelRGBAt(m, n, original.getPixelRGBAt(i,
j)) else
rez.setPixelAt(m, n, original.getPixelAt(i, j))
return rez
9
Osnovne operacije
  • Cut
  • - funkcija suprotna crop
  • - selektovani dio slike se odbacuje
  • Negativ
  • - kreiranje inverzne slike
  • - zavisi od tipa (u boji, siva, binarna)

10
Osnovne operacije
  • Rotacija za n90
  • - n1
  • - promjena dimenzija slike
  • Slika u ogledalu (flip)
  • - u odnosu na vertikalnu osu
  • - u odnosu na horizontalnu osu
  • - dimenzije slike su iste

11
Osnovne operacije
  • Konverzija broja boja
  • - RGB -gt Siva -gt Binarna
  • - obrnuta konverzija nije moguca
  • - neke funkcije moguce samo za odredeni tip
    slike
  • - jednostavni algoritmi za konverziju

12
Matematicka morfologija
  • Strukturni element
  • - opis
  • - podešavanje
  • - struktura u memoriji
  • - primjer osnovnog strukturnog elementa
  • (-1,-1), (-1,0), (-1,1), (0,-1), (0,0), (0,1),
  • (1,-1), (1,0), (1,1)

13
Matematicka morfologija
  • Dilatacija
  • - proširivanje slike
  • - osnovne ideje realizacije
  • - funkcije getFirst() i hasNext()
  • - rubni pikseli
  • - smještanje rezultata

14
Matematicka morfologija
  • public static Slika dilatacija(Slika slika)
  • if ((strElement ! null)
    (strElement.hasElement()))
  • Slika copy slika.getImgCopy()
  • Slika s new Slika(copy.Width,
    copy.Height, imgType.binary)
  • for (int i 0 i lt s.Width i)
  • for (int j 0 j lt s.Height
    j)
  • s.setPixelAt(i, j, 1)
  • for (int i 0 i lt copy.Width i)
  • for (int j 0 j lt copy.Height
    j)
  • if (copy.getPixelAt(i, j)
    0)
  • element e
    strElement.getFirst()
  • if (!(((e.x i) lt 0)
    ((e.x i) gt copy.Width)
  • ((e.y j) lt 0) ((e.y
    j) gt copy.Height)))
  • s.setPixelAt((e.x i),
    (e.y j), 0)
  • while (strElement.hasNext())

15
Matematicka morfologija
  • Erozija
  • - eliminisanje rubnih piksela slike
  • - osnovne ideje slicne kao kod dilatacije
  • - uvodenje logicke promjenljive flag koja
    odreduje da li ce piksel biti iscrtan

16
Matematicka morfologija
  • public static Slika erozija(Slika slika)
  • if ((strElement ! null)
    (strElement.hasElement()))
  • Slika copy slika.getImgCopy()
  • Slika s new Slika(copy.Width,
    copy.Height, imgType.binary)
  • for (int i 0 i lt s.Width i)
  • for (int j 0 j lt s.Height
    j)
  • s.setPixelAt(i, j, 1)
  • for (int i 0 i lt copy.Width i)
  • for (int j 0 j lt copy.Height
    j)
  • if (copy.getPixelAt(i, j)
    0)
  • bool flag true
  • element e
    strElement.getFirst()
  • if (!(((e.x i) lt 0)
    ((e.x i) gt copy.Width)
  • ((e.y j) lt 0) ((e.y
    j) gt copy.Height)))
  • if (copy.getPixelAt((e.x
    i), (e.y j)) 1)
  • flag false

17
Matematicka morfologija
  • Primjer (original, dilatacija, erozija)

18
Matematicka morfologija
  • Otvaranje
  • - erozija dilatacija istim str.el.
  • public static Slika otvaranje(Slika s)
  • return dilatacija(erozija(s))

19
Matematicka morfologija
  • Zatvaranje
  • - dilatacija erozija istim str.el.
  • public static Slika zatvaranje(Slika s)
  • return erozija(dilatacija(s))

20
Filtriranje
  • Filteri
  • - uniformni
  • - Gausov
  • - median
  • - Laplasov
  • Šumovi
  • - salt pepper

21
Filtriranje
  • osnovne ideje
  • obracanje pažnje na rubne piksele funkcijom
    getImgBoundary()
  • analogija sa Matlab-om u realizaciji funkcija
    imFilter() i fSpecial()
  • podrazumijevani parametri

22
Filtriranje
Salt Paper
Average
Gauss
Median
Laplacian
23
Filtriranje
  • public static Slika imFilter(Slika slika,
    float, kernel, int sirina, int visina, string
    ivicniTip)
  • ...
  • for (int i 0 i lt copy.Width i)
  • for (int j 0 j lt copy.Height
    j)
  • float, f
    getImgBoundary(copy, sirina, visina, i, j,
    ivicniTip)
  • float sum 0
  • for (int ii 0 ii lt sirina
    ii)
  • for (int jj 0 jj lt
    visina jj)
  • sum fii, jj
    kernelii, jj
  • ...
  • return slika
  • public static float, getImgBoundary(Slika
    slika, int sirina, int visina, int red, int
    kolona, string ivicniTip)
  • if (ivicniTip.Equals("zeros"))
  • . . .

24
Filtriranje
  • public static float, fSpecial(string type, int
    width, int height, float sigma, float alpha)
  • float, f new floatwidth,
    height
  • if (type.Equals("average"))
  • . . .
  • else if (type.Equals("laplacian"))
  • . . .
  • else if (type.Equals("gaussian"))
  • . . .
  • return f

25
Filtriranje
  • Median filtar
  • public static Slika medfilt2(Slika slika, int
    sirina, int visina, string boundaryType)
  • slika.makeBuffer()
  • Slika copy slika.getImgCopy()
  • for (int i 0 i lt copy.Width i)
  • for (int j 0 j lt copy.Height
    j)
  • float, f
    getImgBoundary(copy, sirina, visina, i, j,
    boundaryType)
  • for (int ii 0 ii lt sirina
    visina - 1 ii)
  • for (int jj ii jj lt
    sirina visina jj)
  • if (fii / sirina, ii
    sirina gt fjj /sirina, jj sirina)
  • float tmp fii
    / sirina, ii sirina
  • fii / sirina, ii
    sirina fjj / sirina, jj sirina
  • fjj / sirina, jj
    sirina tmp
  • slika.setPixelAt(i, j,
    fsirina / 2, visina / 2)

26
Filtriranje
  • Salt pepper šum
  • public static Slika imNoise(Slika s, string
    noiseType, float freq)
  • if (noiseType.Equals("salt
    pepper"))
  • int f (int)(freq 100)
  • Random r new Random()
  • for (int i 0 i lt s.Width i)
  • for (int j 0 j lt s.Height
    j)
  • int rdm r.Next(0, 100)
  • if (rdm lt f / 2)
  • s.setPixelAt(i, j,
    0)
  • else if (rdm gt (100 - f
    / 2))
  • s.setPixelAt(i, j,
    1)
  • return s
  • throw new Exception("Nije dobar
    parametar")
Write a Comment
User Comments (0)
About PowerShow.com