Ce este un cod de lanț?

În grafica computerizată și procesarea imaginilor, un cod în lanț este un algoritm folosit pentru a codifica contururile unui obiect într-o imagine alb-negru sau monocromă. Secvența de coduri rezultată poate fie să descrie cum se desenează conturul obiectului în raport cu imaginea în care se află, fie poate fi o colecție de direcții relativ la locația de pe conturul unde a început algoritmul, oferind în esență pași care poate fi urmată pentru a redesena obiectul. Aceste coduri pot fi normalizate conform unei formule și apoi comparate cu un alt cod de lanț pentru a determina dacă două obiecte sunt identice. Un cod în lanț poate fi utilizat pentru izolarea obiectelor într-un program de viziune computerizată sau pentru segmentarea imaginii în procesarea imaginilor, deși mai frecvent poate fi utilizat în programele de recunoaștere optică a caracterelor (OCR).

Deși există mai mulți algoritmi stabiliți pentru un cod în lanț, conceptul de bază este același în fiecare. În primul rând, marginea unui obiect este localizată, de obicei prin deplasarea pixel cu pixel printr-o imagine raster. Odată localizată, poziția este înregistrată și marginile din jur sunt detectate. În funcție de dacă algoritmul de detecție se va mișca în sensul acelor de ceasornic sau în sens invers acelor de ceasornic, locația curentă este mutată într-o direcție sau alta de-a lungul marginii până când revine la poziția inițială.

De fiecare dată când poziția curentă se mișcă, un număr este înregistrat în codul de lanț. Acest număr indică în general direcția care a fost deplasată de-a lungul marginii obiectului. De exemplu, dacă un algoritm de cod în lanț urmează o margine dreaptă de la dreapta la stânga, atunci de fiecare dată când marginea este trasată la stânga, codul numeric pentru stânga este adăugat la sfârșitul codului. Codul rezultat este un șir de numere în care, dacă succesiunea este urmată dintr-un punct de plecare arbitrar și un pixel plasat la fiecare pas, conturul obiectului ar fi redesenat.

Odată ce șirul de numere care alcătuiește codul este completat, mai mulți algoritmi diferiți îi pot fi aplicați pentru a ajuta la efectuarea comparațiilor cu alte secvențe de cod în lanț. În primul rând, numărul este normalizat prin rotirea numărului de pornire până când este determinată cea mai mică valoare întreagă. În acest fel, două obiecte care au același contur pot fi comparate, indiferent de locul în care a început codificarea fiecărui obiect.

Există și alte versiuni mai complexe ale algoritmului de cod în lanț. Acestea includ codificarea bazată pe vectori, în care conturul unui obiect este descris printr-o secvență de coordonate care sunt conectate prin linii, deși această metodă poate avea pierderi atunci când este utilizată pe contururi fin detaliate. Există, de asemenea, o versiune a algoritmului care utilizează codarea run-length (RLE) pentru a comprima codurile pentru obiecte excepțional de mari sau complexe, astfel încât acestea să poată fi stocate într-un mod mai eficient.