Kas yra grandinės kodas?

Kompiuterinėje grafikoje ir vaizdų apdorojime grandininis kodas yra algoritmas, naudojamas objekto kontūrams užkoduoti juodai baltame arba vienspalviame vaizde. Gauta kodų seka gali aprašyti, kaip nubrėžti objekto kontūrą, palyginti su vaizdu, kuriame jis yra, arba tai gali būti krypčių rinkinys, susijęs su kontūro vieta, nuo kurios prasidėjo algoritmas, iš esmės pateikiant veiksmus, galima sekti perbraižant objektą. Šiuos kodus galima normalizuoti pagal formulę ir tada palyginti su kitu grandinės kodu, kad būtų galima nustatyti, ar du objektai yra identiški. Grandininis kodas gali būti naudojamas objektams izoliuoti kompiuterinio matymo programoje arba vaizdo segmentavimui apdorojant vaizdą, nors jis dažniau gali būti naudojamas optinio simbolių atpažinimo (OCR) programose.

Nors yra keletas nustatytų grandinės kodo algoritmų, pagrindinė koncepcija kiekvienoje yra ta pati. Pirma, objekto kraštas nustatomas, paprastai judant pikseliu po pikselio per rastrinį vaizdą. Nustačius, padėtis įrašoma ir aptinkami aplinkiniai kraštai. Priklausomai nuo to, ar aptikimo algoritmas judės pagal laikrodžio rodyklę ar prieš laikrodžio rodyklę, esama vieta perkeliama viena ar kita kryptimi palei kraštą, kol grįš į pradinę padėtį.

Kiekvieną kartą, kai juda esama padėtis, grandinės kode įrašomas skaičius. Šis skaičius paprastai nurodo kryptį, kuri buvo perkelta išilgai objekto krašto. Pavyzdžiui, jei grandinės kodo algoritmas seka tiesiu kraštu iš dešinės į kairę, kiekvieną kartą, kai kraštas atsekamas į kairę, kodo pabaigoje pridedamas skaitinis kairiojo krašto kodas. Gautas kodas yra skaičių eilutė, kurioje, jei seka sekama nuo savavališko pradžios taško ir kiekviename žingsnyje įdedamas pikselis, objekto kontūras būtų perbraižytas.

Užbaigus kodą sudarančių skaičių eilutę, jai gali būti taikomi keli skirtingi algoritmai, padedantys palyginti kitas grandinės kodų sekas. Pirma, skaičius normalizuojamas sukant pradinį skaičių, kol nustatoma mažiausia sveikojo skaičiaus reikšmė. Tokiu būdu galima palyginti du objektus, turinčius tą patį kontūrą, neatsižvelgiant į tai, kur kiekviename objekte prasidėjo kodavimas.

Yra ir kitų sudėtingesnių grandinės kodo algoritmo versijų. Tai apima vektorinį kodavimą, kai objekto kontūras apibūdinamas linijomis sujungtų koordinačių seka, nors šis metodas gali būti nuostolingas, kai naudojamas smulkiai detaliuose kontūruose. Taip pat yra algoritmo versija, kuri naudoja paleidimo ilgio kodavimą (RLE), kad toliau suspaustų ypač didelių ar sudėtingų objektų kodus, kad juos būtų galima saugoti efektyviau.