Što je lančani kod?

U računalnoj grafici i obradi slika, lančani kod je algoritam koji se koristi za kodiranje kontura objekta u crno-bijelu ili jednobojnu sliku. Rezultirajući slijed kodova može ili opisati kako nacrtati obris objekta u odnosu na sliku na kojoj se nalazi, ili može biti zbirka uputa u odnosu na mjesto na obrisu gdje je algoritam započeo, u biti pružajući korake koji može se pratiti za ponovno crtanje objekta. Ovi se kodovi mogu normalizirati prema formuli i zatim usporediti s drugim lančanim kodom kako bi se utvrdilo jesu li dva objekta identična. Lančani kod se može koristiti za izolaciju objekata u programu za računalni vid ili segmentaciju slike u obradi slike, iako se češće može koristiti u programima za optičko prepoznavanje znakova (OCR).

Iako postoji nekoliko utvrđenih algoritama za lančani kod, osnovni koncept je isti u svakom. Prvo, rub objekta se locira, obično pomicanjem piksel po piksel kroz rastersku sliku. Jednom lociran, položaj se bilježi i otkrivaju se okolni rubovi. Ovisno o tome hoće li se algoritam detekcije kretati u smjeru kazaljke na satu ili suprotno od kazaljke na satu, trenutna lokacija se pomiče u jednom ili drugom smjeru duž ruba dok se ne vrati u prvobitni položaj.

Svaki put kada se trenutna pozicija pomakne, broj se bilježi u kodu lanca. Ovaj broj općenito označava smjer koji je pomaknut uz rub objekta. Na primjer, ako algoritam lančanog koda slijedi ravni rub s desna na lijevo, tada se svaki put kada se rub prati ulijevo, numerički kod za lijevo dodaje se na kraj koda. Rezultirajući kod je niz brojeva u kojem bi, ako se slijed prati od proizvoljne početne točke i piksel postavljen na svaki korak, obris objekta bio ponovno nacrtan.

Nakon što je niz brojeva koji čine kod dovršen, na njega se može primijeniti nekoliko različitih algoritama koji pomažu u usporedbi s drugim nizovima lančanih kodova. Prvo, broj se normalizira rotiranjem početnog broja dok se ne odredi najniža cjelobrojna vrijednost. Na taj se način mogu usporediti dva objekta koja imaju isti obris, bez obzira na to gdje je kod svakog objekta započelo.

Postoje i druge, složenije verzije algoritma lančanog koda. To uključuje kodiranje temeljeno na vektoru u kojem je obris objekta opisan nizom koordinata koje su povezane linijama, iako ova metoda može imati gubitak kada se koristi na fino detaljnim obrisima. Postoji i verzija algoritma koja koristi kodiranje dužine trajanja (RLE) za daljnje komprimiranje kodova za iznimno velike ili složene objekte kako bi se mogli pohraniti na učinkovitiji način.