Wat is een kettingcode?
In computerafbeeldingen en beeldverwerking is een kettingcode een algoritme dat wordt gebruikt om de contouren van een object te coderen in een zwart-wit of zwart-wit beeld. De resulterende reeks codes kan beschrijven hoe de omtrek van het object wordt getekend ten opzichte van de afbeelding waarin het zich bevindt, of het kan een verzameling aanwijzingen zijn ten opzichte van de locatie op de omtrek waar het algoritme is gestart, in wezen stappen die kan worden gevolgd om het object opnieuw te tekenen. Deze codes kunnen volgens een formule worden genormaliseerd en vervolgens worden vergeleken met een andere kettingcode om te bepalen of twee objecten identiek zijn. Een kettingcode kan worden gebruikt voor het isoleren van objecten in een computer vision-programma of beeldsegmentatie bij beeldverwerking, hoewel deze vaker kan worden gebruikt in OCR-programma's (Optical Character Recognition).
Hoewel er verschillende gevestigde algoritmen zijn voor een kettingcode, is het basisconcept in elk hetzelfde. Eerst wordt de rand van een object gelokaliseerd, meestal door pixel voor pixel door een rasterafbeelding te bewegen. Eenmaal gelokaliseerd, wordt de positie vastgelegd en worden de omringende randen gedetecteerd. Afhankelijk van of het detectie-algoritme met de klok mee of tegen de klok in wordt verplaatst, wordt de huidige locatie langs de rand in een of andere richting verplaatst totdat deze terugkeert naar de oorspronkelijke positie.
Elke keer dat de huidige positie beweegt, wordt een nummer vastgelegd in de kettingcode. Dit nummer geeft in het algemeen de richting aan die langs de rand van het object is verplaatst. Als een kettingcode-algoritme bijvoorbeeld een rechte rand van rechts naar links volgt, wordt elke keer dat de rand naar links wordt getraceerd, de numerieke code voor links aan het einde van de code toegevoegd. De resulterende code is een reeks getallen waarin, als de reeks wordt gevolgd vanaf een willekeurig startpunt en een pixel wordt geplaatst bij elke stap, de omtrek van het object opnieuw wordt getekend.
Zodra de reeks cijfers waaruit de code bestaat, is voltooid, kunnen er verschillende algoritmen op worden toegepast om vergelijkingen met andere kettingcodereeksen te maken. Eerst wordt het nummer genormaliseerd door het startnummer te draaien totdat de laagste gehele waarde is bepaald. Op deze manier kunnen twee objecten met dezelfde omtrek worden vergeleken, ongeacht waar op elk object de codering is gestart.
Andere, meer complexe versies van het kettingcode-algoritme bestaan. Deze omvatten vectorgebaseerde codering waarin de omtrek van een object wordt beschreven door een reeks coördinaten die zijn verbonden door lijnen, hoewel deze methode verliesgevend kan zijn bij gebruik op fijn gedetailleerde contouren. Er is ook een versie van het algoritme dat run-length codering (RLE) gebruikt om de codes voor uitzonderlijk grote of complexe objecten verder te comprimeren, zodat ze op een efficiëntere manier kunnen worden opgeslagen.