Mis on ketikood?

Arvutigraafikas ja pilditöötluses on ahelkood algoritm, mida kasutatakse objekti kontuuride kodeerimiseks mustvalgel või ühevärvilisel pildil. Saadud koodijada võib kirjeldada, kuidas joonistada objekti piirjooni selle kujutise suhtes, millel see asub, või see võib olla suundade kogum kontuuri asukoha suhtes, kust algoritm algas, pakkudes sisuliselt samme, saab jälgida objekti ümberjoonistamiseks. Neid koode saab valemi järgi normaliseerida ja seejärel võrrelda teise ahelkoodiga, et teha kindlaks, kas kaks objekti on identsed. Ahelkoodi saab kasutada objektide isoleerimiseks arvutinägemisprogrammis või kujutiste segmenteerimiseks pilditöötluses, kuigi sagedamini võib seda kasutada optilise märgituvastuse (OCR) programmides.

Kuigi ahelkoodi jaoks on mitu väljakujunenud algoritmi, on põhikontseptsioon igaühes sama. Esiteks tehakse kindlaks objekti serv, tavaliselt liigutades pikselhaaval läbi rasterkujutise. Kui asukoht on leitud, salvestatakse asukoht ja tuvastatakse ümbritsevad servad. Sõltuvalt sellest, kas tuvastusalgoritm liigub päri- või vastupäeva, liigutatakse praegust asukohta ühes või teises suunas mööda serva, kuni see naaseb algsesse asukohta.

Iga kord, kui praegune asukoht liigub, salvestatakse kettkoodi number. See number näitab üldiselt suunda, mida liigutati mööda objekti serva. Näiteks kui ahelkoodi algoritm järgib sirget serva paremalt vasakule, siis iga kord, kui serv tõmmatakse vasakule, lisatakse koodi lõppu vasaku numbriline kood. Saadud kood on numbrijada, milles, kui jada järgitakse suvalisest alguspunktist ja igasse sammu paigutatakse piksel, joonistatakse objekti piirjooned ümber.

Kui koodi moodustav numbrijada on valmis, saab sellele rakendada mitut erinevat algoritmi, mis aitavad võrrelda teiste ahelkoodijadadega. Esiteks normaliseeritakse arv, pöörates algusnumbrit, kuni määratakse väikseim täisarv. Sel viisil saab võrrelda kahte sama kontuuriga objekti, olenemata sellest, kus iga objekti kodeering algas.

On olemas ka teisi, keerukamaid ahelkoodi algoritmi versioone. Nende hulka kuulub vektoripõhine kodeerimine, milles objekti piirjooni kirjeldatakse koordinaatide jadaga, mis on ühendatud joontega, kuigi see meetod võib olla kadudega, kui seda kasutatakse peente üksikasjalike piirjoonte puhul. Algoritmi versioon on olemas ka, mis kasutab run-length kodeeringut (RLE) erakordselt suurte või keerukate objektide koodide täiendavaks tihendamiseks, et neid saaks tõhusamalt salvestada.