Vyberte si dve úlohy – za ich vyriešenie máte o stupeň lepšiu známku (za predpokladu úspešného zvládnutia skúšky).
B1: Dopravné značky (LINK na github classroom)
Cieľ: klasifikovať krajinu podľa dopravnej značky zobrazujúcej maximálu povolenú rýchlosť
Vstup: obrázok z google street view
Výstup: označená kruhová značka a klasifikovanie
Chceme sa snažiť o klasifikáciu do dvoch tried. V repozitári nájdete dva obrázky – ukážku značiek, ktoré sa ľahko rozoznávajú – Španielsko (červený okraj, biele vnútro) a Švédsko (červený okraj, žlté vnútro). Môžete si vybrať aj iné dve krajiny. Tieto vybrané majú výhodu, že okolo červeného okraju nie je tenký okraj inej farby a zároveň sú dobré rozpoznateľné. Alternatívou je použiť iný typ značiek (napr. modrá označujúca prikázaný smer a pod.)
Aplikujte Hough transformáciu na nájdenie kruhov a vymyslite klasifikátor – podmienku, na základe ktorej sa určí o aký typ značky ide. Je to jedno, čo použijete – či nejakú reprezentáciu farieb vo vnútri kruhu a pod. Aj neúspešný pokus o klasifikáciu je v poriadku.
Pridajte si vlastné obrázky a vyskúšajte to na nich. Môžete vyskúšať aj nie priamy pohľad na značku ale trochu zboku. Odporúčam si vytvoriť trénovaciu a testovaciu množinu – teda nastavujte parametre a metódy na nejakých obrázkoch a potom to overte na iných obrázkoch a zapíšte zhodnotenie.
B2: Maľované krížovky (LINK na github classroom)
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áto úloha nie je prioritné na čiary a čísla (ale nebránim vám použiť to).
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
Cieľom je pripraviť obrázok na následnú detekciu čiar, resp. urobiť prahovanie. Pôvodný zámer tejto úlohy v minulosti bolo na precvičenie obsahu zo začiatku semestra (morfológia, filtrovanie) a nie detekciu čiar. Môžete si však zvoliť vlastnú cestu, čo vyskúšať. Aj neúspešné pokusy sú v poriadku.
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 a reportom.
B3: Puzzle (LINK na github classroom)
Cieľom tejto úlohy je vyskúšať si rôzne spôsoby ako sa dopracovať k segmentácii obrázku. Hlavná úloha je nájsť jednotlivé kúsky puzzle na obrázku.
Prioritne si vyberte jeden z obrázkov v repozitári a na ňom vyskúšajte rôzne metódy. Nakoniec spustite svoje riešenie na všetkých obrázkoch.
Výstupom pre každú fotku nech je čiernobiely obrázok, ktorý bude mať v ideálnom prípade bielou farbou označené hranice jednotlivých dielikov a čiernou všetko ostatné. Alternatívne ak to bude vhodnejšie, tak môžete zakresliť výsledok do pôvodného obrázka. Úloha nie je jednoduchá a nepredpokladám, že sa podarí získať ideálny výstup. Pokúste sa o čo najlepšie riešenie.
Zopár tipov, čo môžete vyskúšať (samozrejme aj čokoľvek mimo tohto zoznamu):
- preprocessing obrázka – zmena rozlíšenia (cv.resize), filtrovanie, konvolúcia, rozostrenie
- canny edge detector
- matematická morfológia – erózia, dilatácia, otvorenie, zatvorenie
- použitie vhodnej konvolučnej masky – laplacian, sharpen
- kontúry
- grabcut resp. iná forma klastrovania