Co je řetězový kód?
V počítačové grafice a zpracování obrazu je řetězový kód algoritmus používaný k zakódování kontur objektu v černobílém nebo monochromatickém obrazu. Výsledná posloupnost kódů může buď popsat, jak nakreslit obrys objektu vzhledem k obrazu, ve kterém je umístěn, nebo to může být soubor směrů vzhledem k umístění na obrysu, kde algoritmus začal, v podstatě poskytuje kroky, které lze objekt překreslit. Tyto kódy mohou být normalizovány podle vzorce a poté porovnány s jiným řetězovým kódem, aby se určilo, zda jsou dva objekty identické. Řetězový kód může být použit pro izolaci objektů v počítačovém vizuálním programu nebo segmentaci obrazu při zpracování obrazu, ačkoliv častěji může být použit v programech optického rozpoznávání znaků (OCR).
Přestože existuje několik zavedených algoritmů pro řetězový kód, základní koncept je v každém stejný. Nejprve je lokalizována hrana objektu, obvykle pohybem pixelů po pixelech přes rastrový obrázek. Jakmile je lokalizována, je poloha zaznamenána a detekovány okolní hrany. V závislosti na tom, zda se detekční algoritmus bude pohybovat ve směru nebo proti směru hodinových ručiček, se aktuální poloha posouvá v jednom nebo druhém směru podél okraje, dokud se nevrátí do původní polohy.
Pokaždé, když se aktuální poloha pohybuje, je v řetězovém kódu zaznamenáno číslo. Toto číslo obecně označuje směr, který byl posunut podél okraje objektu. Pokud například algoritmus řetězového kódu sleduje přímou hranu zprava doleva, pak se pokaždé, když je hrana sledována doleva, přidá číselný kód vlevo na konec kódu. Výsledný kód je řetězec čísel, ve kterém, pokud je sled sledem z libovolného výchozího bodu a pixelu umístěného v každém kroku, obrys objektu by byl překreslen.
Jakmile je řetězec čísel, který tvoří kód, dokončen, lze na něj použít několik různých algoritmů, které pomáhají porovnávat s jinými sekvencemi kódového řetězce. Nejprve je číslo normalizováno otáčením počátečního čísla, dokud není stanovena nejnižší celočíselná hodnota. Tímto způsobem lze porovnat dva objekty, které mají stejný obrys, bez ohledu na to, kde na každém objektu začalo kódování.
Existují i jiné, složitější verze algoritmu řetězového kódu. Patří sem vektorové kódování, ve kterém je obrys objektu popsán posloupností souřadnic, které jsou spojeny čarami, i když tato metoda může být ztrátová, pokud je použita na velmi podrobných obrysech. Existuje také verze algoritmu, která používá kódování run-length (RLE) k další kompresi kódů pro výjimečně velké nebo složité objekty, takže je lze efektivněji ukládat.