Skip navigation

Sudoku előfeldolgozó

Mintakép betöltése

Töltsük be a Sudoku_h.jpg képet!

Tábla szegmentálása

Simítás, Niblack küszöbölés megfelelő paraméterekkel

  • Figyeljünk arra, hogy a detektált sötét színű komponensek legyenek maximális intenzitásértékűek az eredményképen!
  • Mentsük az eredményképet Sudoku_niblack.png néven!

Legnagyobb zárt területű komponens megtartása

  • A findContours() eredményét járjuk végig és keressük meg a legnagyobb területűt a contourArea() függvény használatával!
  • Egy kontúr megrajzolása kitöltötten is lehetséges a drawContour() függvénnyel! (Nézzen utána a dokumentációban!)
  • Csak azokon a helyeken tartsuk meg az intenzitásértékeket, ahol a maszk nem 0 értékű!
  • Mentsük a két képet Sudoku_mask.png és Sudoku_cut.png néven!

Forgatás

  • Hough transzformáció végrehajtása a Canny élképen.

  • Egyenes helyzetbe forgatási szög számítása.
    • Feltételezhetjük, hogy nincs számottevő perspektív torzulás, így elegendő a kép középpontja körüli forgatás.
    • A szög a legnagyobb gyakorisággal előforduló egyenes theta paramétere legyen. Kihasználhatjuk, hogy az OpenCV HoughLines() függvénye a szavazatok sorrendjében adja vissza az egyenes paramétereket!
    • Feltételezhetjük, hogy az elforgatandó szög (-30,+30) fok közötti. Figyeljünk arra, mit jelent a Hough trafó eredménye OpenCV-ben!
  • Képek (eredeti és feldolgozott) elforgatása a középpont körül a megfelelő szöggel.
    • Ha az előző részfeladatot nem sikerül megoldani, használhatunk konstans szögértéket is!
    • Mentsük a feldolgozott eredményképet Sudoku_cut_rot.png néven!

Számok detektálása

  • Távolítsuk el a tábla keretet!
    • Pl. floodFill() a megfelelő kontúr első pontjából indítva, vagy legnagyobb területű összefüggő komponens eltávolítása.
  • Komponensek leválogatása a számok mérettartományán belül.
  • Komponens körvonalak vetítése jól látható színnel az elforgatott eredeti képre.
  • Írjuk ki konzolra szövegesen, melyik Sudoku tábla (sor, oszlop) pozíciókon találtunk számjegyeket!