Domáce zadania 2023

Podmienky odovzdávania domácich zadaní:

  • Pre každú úlohu očakávam zdrojový kód, vstupný obrázok/video a výstupný obrázok/video (prípadne všetky medzi-obrázky) – dôležité je, aby som mohol vidieť výsledok bez nutnosti spúšťať kód.
  • Riešenia odovzdávate cez Github classroom. Na riešenie zadaní bude zhruba 10 dní. Zadanie bude zverejnené v piatky podľa harmonogramu, termín odovzdania bude vždy pondelok ráno. Feedback budem dávať v github classroom.
  • Počas semestra bude zverejnených 5 úloh (2x v októbri, 2x v novembri, 1x v decembri). Obľúbené úlohy z minulého roka (domáce zadania, skúška) sa môžu zopakovať. Úlohy budú zverejnené v piatok dopoludnia, deadline je o 10 dní, v pondelok ráno
    • 1. úloha, zverejnená 20.10. – deadline 30.10. 8:00
    • 2. úloha, zverejnená 27.10. – deadline 6.11. 8:00
    • 3. úloha, zverejnená 10.11. – deadline 20.11. 8:00
    • 4. úloha, zverejnená 24.11. – deadline 4.12. 8:00
    • 5. úloha, zverejnená 8.12. – deadline 18.12. 8:00

1. úloha: Maľované krížovky (LINK na github classroom)

Termín odovzdania: 30.10.2023 8:00

Vstupným obrázkom je fotografia zatiaľ nevyriešenej maľovanej krížovky. Cieľom je identifikovať mriežku a čísla a následne z toho vytvoriť digitálnu verziu krížovky. Na rozpoznávanie čísel existujú metódy (založené na strojovom učení, prípadne template matching) a tiež na nájdenie čiar existujú spôsoby (Hough transformácia na detekciu čiar, LSD algoritmus) – týmto veciam sa budeme venovať neskôr a môžeme si na cvičeniach vyskúšať aký výsledok dajú na týchto obrázkoch.

Obrázky sú vyfotené telefónom a zámerne sú niektoré horšej kvality (osvetlenie, rozostrenie a pod.). V týchto prípadoch detekcia čiar nemusí byť ideálna a jednoduchšie by mohlo byť aplikovať túto detekciu na binárnom obraze.

Vašou úlohou je zo zadaného obrázka vytvoriť binárny obrázok, kde v najlepšom prípade budú bielou farbou zobrazené čiary a čiernou všetko ostatné. Úloha je to náročná, pokúste sa o čo najlepší výsledok. Postup si môžete vybrať ľubovoľný. Niekoľko tipov:

  • zmena rozlíšenia – často je vhodnejšie pracovať s obrázkom v menšom rozlíšení. Môžete si obrázky zmenšiť manuálne alebo pomocou príkazu resize v opencv.
  • preprocessing – úprava jasu, vyhladenie histogramu, aplikácia nejakého filtra (pozrite sharpen)
  • zmena na binárny obrázok – thresholding, canny detektor
  • postprocessing – dilatácia, erózia (porozmýšľajte nad tvarom štruktúrneho elementu)

Môžete si zvoliť ľubovoľnú stratégiu, napr.:

  • vybrať si najjednoduchší obrázok. Vyskúšať kombináciu metód, ktoré dajú najlepší výsledok. Následne to otestovať aj na zložitejľších vstupoch. Prípadne upraviť postup.
  • vybrať si niektorý scenár (napr. zlé osvetlenie) a špeciálne sa venovať tomuto prípadu.
  • od začiatku skúšať postup, ktorý bude fungovať na viacerých prípadoch

Vo výsledku označte, s ktorým obrázkom ste pracovali najviac. Výsledná metóda nech je spustená na všetkých obrázkoch (aj keď to dosiahne nedobrý výsledok). Výstupné obrázky odovzdajte spolu s kódom (aby som kód nemusel spúšťať – iba si ho pozrieť).

Očakávam, že každý vypracuje zadanie samostatne. Samozrejme istá miera spolupráce môže byť vítaná, označte to prosím v riešení ak ste spolupracovali s niekým iným.

2. úloha: RTG detekcia zlomeniny (LINK na github classroom)

Termín odovzdania: 6.11.2023 8:00

Zľahka si prečítajte nasledovný vedecký príspevok:

Basha, Cmak Zeelan, et al. „Enhanced computer aided bone fracture detection employing X-ray images by Harris Corner technique.“ 2020 Fourth International Conference on Computing Methodologies and Communication (ICCMC). IEEE, 2020. (PDF)

Implementujte popísaný postup:

  • Preprocessing s použitím Gaussian filtering. Rozostrenie obrázka.
  • Segmentácia pomocou Cannyho hranového detektora.
  • Feature extraction s použitím Harris rohového detektora.
  • Klasifikácia, či je na obrázku zlomenina (toto nemusí byť implementované v kóde – stačí slovný popis).

V Github classroom nájdete nejaké vstupné obrázky. Vybral som 3, na ktorých je dobre vidieť zlomenina. Plus dve bez zlomeniny. Môžete si doplniť vlastné vstupné obrázky. Dataset FracAtlas je dostupný na stiahnutie (322MB). Snímky so zlomeninou sú v osobitnom priečinku.

Moje postrehy po prečítaní článku:

  • Matematiku za tým nemusíte čítať, je to vysvetlenie tých metód vo všeobecnosti. Nie ich prístup.
  • Pri všetkých použitých metódach chýbajú detaily – napr. thresholdy na Cannyho detektor. To je úloha pre vás.
  • Nie je mi úplne jasné ako robili tú samotnú klasifikáciu a keď som si pozeral podobné články, tak mám pochybnosť o výsledku tohto prístupu.

Skúste sa pozrieť na výstup detekcie rohov pri zlomeninách aj pri zdravých kostiach. K samotnému kódu priložte aj slovný popis ako by ste robili rozhodnutie (klasifikáciu).

Riešenie nech obsahuje:

  • kód (python alebo jupyter notebook)
  • obrázky, ktoré ste použili – ak použijete veľa obrázkov, nemusíte prikladať všetky. Ale priečinok input by mohol obsahovať viac ako 5 obrázkov, ktoré som tam dal ja.
  • výstupné obrázky – aby som nemusel spúšťať kód a videl výstup. Nech tam je aspoň jeden príklad zdravej kosti a aspoň jedna zlomenina. Môže byť priamo v notebooku alebo výstupný obrázok v nejakom priečinku.
  • slovný popis ako by ste robili klasifikáciu (môže byť priamo pri kóde, alebo ako samostatný textový súbor)

3. úloha: MHz – Tomoskopia (LINK na github classroom)

Termín odovzdania: 20.11.2023 8:00

Toto zadanie súvisí s bakalárskou prácou D. Moška. Tu je jeho intro k úlohe:
Obrázky sme získali na experimente MHz Tomoskopie (röntgenovské zobrazovanie) v Hamburgu. Použili sme optický systém z germániových kryštálov v setupe. tzv Braggovho zväčšováka. Obrázok sa formuje tak, že X-ray lúč prechádza cez vzorku a následne týmto optickým systémom, ktorý nám zväčší objekt na detektore až cca. 200x (vodná gulička na obrázkoch má cca 100 μm). Kvôli charakteru lúča, ktorý funguje na báze voľných elektrónov, sa mení iluminačný profil a intenzita. Spolu s rôznymi prachovými časticami, šumu zo samotného detektora a nie vákuového prostredia sa vytvára na obrázku šum a tak zviditeľniť kružnice (difrakčné krúžky = fringes), aby sa mohli ďalej použiť rekonštrukčné algoritmy.

Pre mňa osobne je zaujímavé odstránenie šumu. Podarilo sa mi z datasetu získať šumy, ktoré sú na obrázkoch bez vzorky (pre zaujímavosť posielam obrázok)

V github repozitári nájdete 19 obrázkov, na ktorých môžete vyskúšať svoje riešenie. Okrem toho sa tam nachádza obrázok noise.png s ukážkou šumu.

Vzhľadom na dostupnosť množstva obrázkov a povahu úlohy (rýchlosť výpočtu) vyzerá, že použitie neurónových sietí, resp. strojového učenia je vhodné na daný problém. Napriek tomu by bolo fajn zistiť, čo je možné dosiahnúť s použitím metód počítačového videnia.

Hlavnou úlohou je pokúsiť sa odstrániť alebo potlačiť šum v obrázku. Akékoľvek riešenie je vítané, odošlite aj riešenia, ktoré nedávajú dobrý výsledok. Ideálne pripojte aj nejaký komentár – krátky odstavec, kde zhrniete svoje pozorovania.

Zopár tipov:

  • ak neviete ako začať, skúste nejakú konvolúciu. Môžete vyskúšať rôzne konvolučné masky.
  • možno sa dá pozrieť na fourierovú transformáciu, prípadne ju upraviť, aby nebolo nutné manuálne klikať a potláčať šum
  • môžete skúsiť pohľadať nejaký iný prístup a vyskúšať (pridajte prosím k riešeniu aj odkazy na použitú literatúru)
  • ak chcete, môžete vyskúšať detekciu kružníc (hough transformácia) pred a po aplikovaní nejakej metódy na potlačenie šumu

Vyberte si ľubovoľne spôsob riešenia tejto úlohy. Pestrosť zvolených prístupov je vítaná. Nebojte sa experimentovať.

4. úloha: Chameleón (LINK na github classroom)

Termín odovzdania: 4.12.2023 8:00

Nájdite si obrázok chameleóna. Aplikujte metódu GrabCut na segmentáciu – oddelenie chameleóna od pozadia. Odporúčam pozrieť študijný text, návod a ukážku kódu.

Vymyslite spôsob ako zmeniť farbu chameleóna. Nechávam to na vašej kreativite. Moja predstava je, že vyrátate nejakú charakteristickú hodnotu farby pozadia a na základe tejto hodnoty upravíte chameleóna. Napr. zjednodušene povedané, ak je pozadie červené a chameleón zelený, tak sa pôvodna farba pixelov patriacich chameleónovi modifikuje smerom k červenej farbe (výsledná hodnota je nejaká kombinácia pôvodnej hodnoty a hodnoty vyrátanej z pozadia).

5. úloha: Vanishing point (LINK na github classroom)

Termín odovzdania: 18.12.2023 8:00

Implementujte algoritmus popísaný článku (Ebrahimpour, R., Rasoolinezhad, R., Hajiabolhasani, Z. and Ebrahimi, M., 2012. Vanishing point detection in corridors: using Hough transform and K-means clustering. IET computer vision, 6(1), pp.40-51.).

Článok na stiahnutie: tu alebo tu (ak by bol problém so stiahnutím, napíšte mi, prepošlem pdf).

Konkrétne kroky:

  1. Nájdite si obrázok chodby. Môžete prispôsobiť rozlíšenie. Môžete použiť aj vlastnú fotku nejakej chodby. Postačuje jeden obrázok, ideálne vyskúšať aspoň na 2-3 obrázkoch.
  2. Obrázok konvertujte na šedotónový
  3. Ekvalizujte histogram
  4. Aplikujte 45° masku (je v článku – ide o maticu 3×3 kde na diagonále sú 2 a na ostatných miestach -1), [[-1,-1,2],[-1,2,-1],[2,-1,-1]]
  5. Aplikujte Cannyho detektor na detekciu hrán
  6. Použite Hough transformáciu na získanie čiar. Odporúčam HoughLinesP, kde je výstupom zoznam čiar, ktoré sú tvorené štvoricou čísel (x a y súradnice začiatočného a koncového bodu)
  7. Aplikujte K-means (k=4) na množine bodov – koncových bodov detegovaných čiar. Výsledné centroidy pre klastre vykreslite do pôvodného obrázka.
  8. Aplikujte K-means (k=1) na množine 4 centroidov. Zakreslite výsledný centroid – v ideálnom prípade by to mal byť vanishing point. Vo výslednom obrázku nech sú iba pozície centroidov. Avšak vykreslite osobitne aj čiastkové riešenia vrátane výstupu po detekcii čiar.