Kardos Péter

Általános

Oktatás

Kutatás

Önéletrajz

Digitális képfeldolgozás gyakorlat (2012. tavaszi félév)

Fontosabb időpontok

  • Kötelező feladatok
    • 1. kötelező feladatra való jelentkezés határideje:
      2012. március 16. (péntek) 23:59:00
    • 1. kötelező feladat beadásának határideje:
      2012. március 22. (csütörtök) 23:59:00
    • 2. kötelező feladatra való jelentkezés határideje:
      2012. május 4. (péntek) 23:59:00
    • 2. kötelező feladat beadásának határideje:
      2012. május 10. (csütörtök) 23:59:00

  • Zárthelyi dolgozatok
    • 1. ZH: 2012. március 26.
    • 2. ZH: 2012. május 14.
      A ZH-kat a hallgatók csak abban a csoportban írhatják meg, amelyikhez az ETR szerint tartoznak!

Hasznos linkek

Gyakorlatok vázlata

I. Műveletsorok készítése Khoros Cantata-ban:
II. Programozás Khoros-ban:

1. gyakorlat

  • Bemutatkozás
  • Követelmények kihirdetése: kovetelmenyek_2012.pdf (a 2. hét végéig még változhat!)
  • Khoros konfigurálása
    • /usr/local/Khoros-2.2/bin/kconfigure
    • Alapértelmezett válaszokat ENTER-rel elfogadni prompttal való visszatérésig.
    • . ./.khoros_env.sh
    • cantata &

2. gyakorlat

  • Khoros Cantata kezelése
    • Legfontosabb ikonok az eszköztárban

    • Balról jobbra haladva:
      • Műveletsor futtatása
      • Műveletsor megállítása
      • Futási üzemmód (módosítás után automatikus újrafuttatás)
      • Alaphelyzet visszaállítása
      • Munkaterület törlése
    • Dobozok (Glyphek)
      • Lelőhelyük: glyphs.txt
      • Összekötésük: bal és jobb oldalukon található színes négyzetekre kattintva
        • zöld: érvényes adat
        • sárga: szükséges adat
        • kék: opcionális bemenet/kimenet
      • Paraméterek beállítása: doboz bal felső sarkán levő háromszögre kattintva
    • másolás / kivágás / beillesztés: ctrl + c/x/v , vagy menüből ill. eszköztárból
    • új műveletsor / megnyitás / mentés: ctrl + n/o/s , vagy menüből ill. eszköztárból
  • Adatforrások: Images(Misc), RGB Images, User Defined (xv formátumú képek, példa: input.xv), Signals(1D)
  • Megjelenítők: Display Image, Display 2D plot (további lehetőségek: Glyphs->Visualization)
  • Képmanipulációk - szabály: az origó a bal felső pontban van!
    • Constant: adott méretű kép generálása, melynek minden képpontja azonos értékű
    • Pad: kép méretének megnövelése, az új képpontok megadható konstansok,
      órai példa
    • Geometriai transzformációk: Flip Image (tükrözés), Translate (eltolás), Rotate (forgatás), órai példa, házi feladat megoldása

3. gyakorlat

  • Képmanipulációk (folyt):
  • Szinuszoid hullámok, összegzésük: Sinusoid, Add
  • Példa - Négyszögjel közelítése az alábbi képlet szerint:
    osztáshoz: Divide
  • Fourier transzformáció és inverze: FFT, inverznél kell:Complex To Real,
    példa: FFT adott függvényekre
  • Alul- és felüláteresztő szűrők: Low-Pass, High-Pass, szorzás az FFT spektrummal: Multiply , példa: Szűrések
  • Példa: FFT tulajdonságai, Blend data: két kép összemosása

4. gyakorlat

  • Extract 1st/2nd/3rd band: RGB képből 1., 2., 3. csatorna kinyerése
    • Példa: Színes kép szürkeárnyalatossá alakítása az alábbi képlet szerint:
      intenzitás = 0.3*R + 0.59*G + 0.11*B (képernyőkép, műveletsor)
  • Convert Type: kép adattípusának konvertálása
  • User Defined használata (xv formátumú kép előállítása: convert programmal), tesztképek:cam1.xv, cam2.xv
  • Aritmetikai műveletek: Add (összeadás), Substract (kivonás), Blend Data (súlyozott összeg), Multiply (szorzás), Divide (osztás)
  • Resample: mintavételezés, példa (képernyőkép, műveletsor)
  • Konvolúció: Linear op. + 2D Filter Kernels(konvolúciós maszk) használatával.
    • Példa: Konvolúciós tétel szemléltetése
    • Statistics + File Viewer : statisztikák kiíratásához
    • Absolute Diff: két kép közötti abszolút eltérés (pixelek különbségeinek abszolútértékei)

5. gyakorlat

  • Pontoperációk (tesztképek: angiography.xv, pet02_raw.010.ascii)
    • Logaritmikus transzformáció: x' = log(1+x), Logarithm
    • Küszöbölés: Thresh Above, Thresh Below, Thresh Inside, Thresh Outside, MegaThresh, órai példák:
    • Vágás: Clip Above, Clip Below, Clip Inside, Clip Outside, MegaClip , órai példa:
  • Print Stats: statisztikák számolása + tárolása globális változókba, példák:
  • Példa: Sötét sejtek szegmentálása+számlálása
    • Edit Image: a Threshold panelen interaktívan megkereshetőek az optimális küszöbértékek
    • Labeling: megcímkézi egy bináris képen a különböző objektumokat (4- vagy 8-összefüggőség alapján)

6. gyakorlat

7. gyakorlat

  • Éldetektálás - órai példa: Sobel és Prewitt gradiens operátorok összehasonlítása (képernyőkép, műveletsor)
    • DIP Ascii: beépített Sobel és Prewitt operátorok a konvolúcióhoz
    • Gradient operator: a magnitudó megjelenítése mindkét irányú gradiens alapján
  • Gyakorló feladatok:
    • Jelenítsd meg a Floating Ball kép 250. sorának hisztogramját!
    • Állíts elő egy magnitúdó-képet a Sobel X és Y irányú operátorok eredményeiből!

9. gyakorlat

  • Craftsman használata - egy példán bemutatva
    • Előzetes lépések:
      • mkdir $HOME/MyKhorosToolboxes (létrehozunk egy könyvtárat, amelyben dolgozni fogunk)
      • export KHOROS_EDITOR="gedit %f" (beállítunk egy szövegszerkesztőt a khoros-hoz)
    • Craftsman indítása:
      • . ./.khoros_env.sh
      • craftsman &
    • Toolbox létrehozása:
      • Toolbox operations legördülő listából Create Toolbox kiválasztása
      • A párbeszédablak űrlapjának kitöltése + Create Toolbox gombra kattintás
          Toolbox name : gyakorlat
          Toolbox path : ~/MyKhorosToolboxes/gyakorlat
          Toolbox title : gyakorlat
          (Name, Email értelemszerűen)
          Toolbox status résznél Development legyen kiválasztva
    • Objektum létrehozása:
      • Object operations legördülő listából Create Object kiválasztása
      • A párbeszédablak űrlapjának kitöltése + Create KROUTINE gombra kattintás
          Object name : mythreshold
          Binary name : mythreshold
          Icon name : My Threshold
          Category: gyakorlat
          Subcategory: threshold
          Short description of object: A simple thresholding program
          Generated language? : C
          Install in Cantata? : Yes
          Create Library Routine? : No
      • Objektum szerkesztése:
        • Párbeszédablak szerkesztése:
          • Edit Object, majd a Composer ablakban UIS kiválasztása
          • File operations listából Guise kiválasztása
          • Csúszka elhelyezése a párbeszédablakunkra: Simple Variables menüből Integer kiválasztása
          • Bal egérgomb: elem mozgatása
          • Középső egérgomb: elem szerkesztése
              Lower bound: 0
              Upper bound: 255
              Default: 128
              Title: Thresholding value
              Variable: threshold
          • GUI változtatása után Composer ablakban: Commands / Generate Code
        • Programkód szerkesztése:
          • Edit Object, majd a Composer ablakban SOURCE kiválasztása
          • mythreshold.c fájl kijelölése és File operations listából Edit kiválasztása
          • main függvény szerkesztése (C nyelv!) - minta: mythreshold.c
          • Composer ablakból Commands/Make... menüből make, majd make install
    • Az elkészült Mythreshold doboz használata Cantata-ban: Glyphs/gyakorlat menüben threshold almenü
  • kobject struktúra és függvényei
    • többdimenziós tömb - szélességi, magassági, mélységi, időbeli paraméterekkel és egy extra dimenzióval
    • inicializáláshoz:
      in_object = kpds_open_input_object(clui_info->i_file)
      out_object = kpds_open_output_object(clui_info->o_file)
    • lezáráshoz:
      kpds_close_object(kobject obj)
    • value szegmens létrehozása:
      kpds_create_value( kobject obj)
    • objektum másolása egy másik objektumba:
      int kpds_copy_object( kobject from, kobject to )
    • attribútumok beállítása:
      kpds_set_attribute( kobject obj, ATTRIBÚTUM,
      ÉRTÉK(EK) )
      , ahol az ATTRIBÚTUM lehet:
      • KPDS_VALUE_DATA_TYPE: adattípus (KUBYTE, KUINT, KINT, ...)
      • KPDS_VALUE_SIZE: adatméret
      • KPDS_VALUE_POSITION: pozicionáláshoz
      • KPDS_HISTORY: history-string beállításához
    • attribútumok lekérdezése:
      kpds_get_attribute( kobject obj, ATTRIBÚTUM,
      ÉRTÉK(EK))
    • adat lekérdezése változóba:
      kpds_get_data( kobject obj, ADAT_FLAG, VÁLTOZÓ)
    • adat másolása változóból:
      kpds_put_data( kobject obj, ADAT_FLAG, VÁLTOZÓ)

10. gyakorlat

  • Ha a "make" és "make install" funkciók nem működnek a géptermi craftsmanben, helyettük az alábbi scriptet kell futtatni a home könyvtárból: compile_gyak.sh
  • Példa: Szürkeárnyalatos kép invertálása
    • A d intenzitásértéknek az inverz képen a 255-d intenzitásérték felel meg.
    • Mintakód: myinverse.c
  • Példa: Transpose (transzponálás) művelet megvalósítása
    • Sor és oszlop koordinátákat fel kell cserélni.
    • Az eredménykép méretei is felcserélődnek: ha a kezdeti kép szélessége w, magassága h, akkor az eredménykép szélessége h, magassága w.
    • Nem használható a kpds_copy_object függvény, a value szegmenst külön létre kell hozni a kpds_create_value használatával!
    • Mintakód: mytranspose.c
  • Feladat: Két kép összeadását végző doboz elkészítése

11. gyakorlat

  • Példa: 3x3-as átlagoló szűrő szürkeárnyalatos képekre
    • Az egy maszkba eső pontok indexei, ha minden indexet közvetlenül a ch, cw ciklusváltozókból számolnánk:
      (ch-1)*w+cw-1 (ch-1)*w+cw (ch-1)*w+cw+1
      ch*w+cw-1 ch*w+cw ch*w+cw+1
      (ch+1)*w+cw-1 (ch+1)*w+cw (ch+1)*w+cw+1
    • Ehelyett relatív indexekkel - csak a maszk közepére eső pont pozícióját számoljuk, és az alábbi tömb megfelelő elemét adjuk hozzá:
      -w-1 -w -w+1
      -1 0 +1
      w-1 w w+1
    • Kiegészítendő minta: myaveragesmooth.c
    • Megoldás: myaveragesmooth.c

  • Ha színes (RGB) kép az input vagy az output...
    • Minden képpont 3 komponensből áll: R (red - vörös), G (green - zöld), B (blue - kék)
    • Vektorként kezelendőek: KPDS_VALUE_VECTOR, pl:
        kpds_put_data(out_object,KPDS_VALUE_VECTOR,(kaddr)rgb), ahol rgb 3 elemű tömb
    • Példa: RGB kép színkomponenseinek kinyerése
      • 3 output mező kell a panelon, a hozzájuk rendelt változónevek: ored, ogreen, oblue
      • Mintakód: myrgbdecompose.c
  • Feladat: Készíts olyan dobozt, amely kiszámolja egy bemeneti szürkeárnyalatos kép hisztogramját!

12. gyakorlat

  • Színes képek létrehozásánál használandó függvények (ha a kimenet mérete eltér a bemenetétől vagy nincs bemeneti színes kép): szines_kepek.pdf
  • Példa rádiógomb használatára: képkiemelő függvény (logaritmikus vagy négyzetes) kiválasztása
    • GUI elem: Toggle Variables/Flag
    • A példában alkalmazott flag neve: enhancement, a két megadott alternatíva: Logarithm, Square
    • Egy egész értékű változóban tárolódik a választott alternatíva sorszáma. (A példában clui_info->enhancement_toggle változó tartalmazza ezt az értéket.)
    • Megoldás: myimageenhancement.c
  • Hisztogram-széthúzás
    • hisztogram szélessége: max-min (ahol min a legkisebb, max a legnagyobb előforduló intenzitás a képen)
    • hisztogram eltolása 0-ba, majd transzformálás 0-255 intenzitástartományba
    • Kiegészítendő kód: myhistogramstretch.c
    • Megoldás: myhistogramstretch.c
  • Laplacian of Gaussian függvény generálása
    • A függvény képlete:
    • A doboznak nincs bemenete!
    • két állítható paraméter a panelon:
        size (integer): képméret (w=h)
        sigma (float): a képletben szereplő konstans értéke
    • Kiegészítendő kód: mylaplacianofgaussian.c
    • Megoldás: mylaplacianofgaussian.c