|
|
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:
- 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 &
- 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
- 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
- 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)
- Pontoperációk (tesztképek: angiography.xv, pet02_raw.010.ascii)
- Logaritmikus transzformáció: x' = log(1+x), Logarithm
- órai példa: kontrasztjavítás a log-enhance-problem.kdf képen (DIP_images doboz) (képernyőkép, műveletsor)
- 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)
- Hisztogramoperációk (tesztkép: Picture2.xv) (képernyőkép, műveletsor)
- Hisztogram megjelenítése: Histogram (beállításoknál "Whole dataset" legyen kiválasztva)+Display 2D Plot
- Hisztogram széthúzás: Stretch
- Hisztogram kiegyenlítés: Equalize
- Zajszűrés
- É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!
- 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Ó)
- 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
- 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!
- 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
|
|
|