Uitleg over kleurtracking#
Wat is het volgen van een kleur en hoe doet de CMUcam4 dat?#
Kleurtracking is de mogelijkheid om een beeld te nemen, een bepaalde kleur te isoleren en informatie te extraheren over de locatie van een gebied van dat beeld dat alleen die kleur bevat. Stel je als voorbeeld voor dat je een foto krijgt met een rode bal op een onverharde weg. Als iemand je zou vragen een kader te tekenen rond alles wat de kleur rood is in het beeld, zou je vrij gemakkelijk een rechthoek rond de bal tekenen. Dit is het basisidee achter kleurtracking. Je hoefde niet te weten dat het object een bal was. Je hoefde alleen maar een concept van de kleur rood te hebben om het object in de foto te isoleren. Hieronder bespreken we kort hoe de CMUcam4 de informatie in een camerabeeld daadwerkelijk gebruikt om kleurtracking uit te voeren.
Om kleur te specificeren, moet je een minimale en maximale toegestane waarde voor drie kleurkanalen definiëren. Elke unieke kleur wordt weergegeven door een rood-, groen- en blauwwaarde die aangeeft hoeveel van elk kanaal in de unieke kleur is gemengd. Het lastige aan het specificeren van een kleur is dat je een bereik van toegestane waarden voor alle drie de kleurkanalen moet definiëren. Aangezien licht niet perfect uniform is en de kleur van een object niet perfect uniform is, moet je rekening houden met deze variaties. Je wilt deze grenzen echter niet te veel versoepelen, anders worden veel ongewenste kleuren geaccepteerd. Aangezien in het geval van de CMUcam4 elk kleurkanaal wordt omgezet in een getal tussen 0 en 255, kun je elk kanaal begrenzen met twee getallen, een boven- en ondergrens. Als je twee grenzen hebt voor elk van de drie kanalen, betekent dit dat zes waarden kunnen worden gebruikt om de volledige kleurruimte die je wilt volgen te beperken. Als je je voorstelt dat de kleuren worden weergegeven door een kubus waarbij elke zijde een ander kleurkanaal is (rood, groen en blauw), dan zouden de zes waarden die worden gebruikt om je kleur te selecteren een driedimensionale doos binnen die kubus tekenen die jouw gewenste set kleuren definieert.
Zodra je een grens hebt voor de kleur die je wilt volgen, neemt de CMUcam4 deze grenzen en verwerkt het beeld. Er zijn veel manieren om kleuren in een beeld te volgen die behoorlijk complex kunnen zijn. De CMUcam4 gebruikt een eenvoudig one-pass-algoritme dat elk nieuw beeldframe van de camera onafhankelijk verwerkt. Het begint linksboven in het beeld en onderzoekt achtereenvolgens elke pixel rij voor rij. Als de pixel die het inspecteert binnen het bereik van kleuren valt dat de gebruiker heeft opgegeven, markeert het die pixel als gevolgd. Het onderzoekt ook de positie van de huidige gevolgde pixel om te zien of het de bovenste, onderste, meest linkse of meest rechtse positie is van alle tot nu toe in het beeld gevonden gevolgde pixels. Als het ontdekt dat de pixel buiten de huidige bounding box van het gevolgde gebied ligt, vergroot het de bounding box om deze nieuwe pixel te bevatten. Omdat de locatie van zelfs een enkele gevolgde pixel de bounding box kan veranderen, kan de bounding box soms behoorlijk fluctueren van frame tot frame. Ruisfiltering (zie volgende paragraaf) kan worden gebruikt om een deel van die fluctuatie te verminderen. Het enige andere belangrijke stuk informatie dat wordt opgeslagen, is een som van de horizontale en verticale coördinaten van de gevolgde pixels. Aan het einde van het beeld neemt de CMUcam4 de horizontale som en de verticale som van de gevolgde pixels en deelt elk door het totale aantal gevolgde pixels, en krijgt een waarde die aangeeft waar het midden van het gevolgde object zich bevindt. Omdat elke gevolgde pixel slechts een klein deel bijdraagt aan de uiteindelijke horizontale en verticale sommen, is het midden (vaak het zwaartepunt genoemd) van de gevolgde pixels doorgaans een veel stabielere meting dan de bounding box. Zodra alle pixels in het beeld zijn gecontroleerd, kan het totale aantal gevolgde pixels ook worden gebruikt in combinatie met de oppervlakte van de bounding box om de betrouwbaarheid van en het aantal pixels in het gevolgde object te berekenen.
Ruisfiltering stelt ons in staat de kleurtrackingbereiken groter te maken, zodat we grotere variaties in de beeldpixelwaarden kunnen opvangen zonder dat andere willekeurige variaties in het beeld worden gevolgd. Het idee achter ruisfiltering is dat we een pixel alleen als de gevolgde kleur willen beschouwen als deze deel uitmaakt van een groep pixels die binnen de kleurtrackinggrenzen vallen. In de CMUcam4 implementeren we dit op een manier die slechts één pass over het beeld vereist. Tijdens het verwerken van de pixels in een beeld houdt de CMUcam4 een teller bij die bijhoudt hoeveel opeenvolgende pixels in de huidige rij, vóór de huidige pixel, binnen de gevolgde kleurgrenzen vielen. Als die waarde boven de ruisfilterwaarde ligt, wordt de huidige pixel gemarkeerd als een gevolgde pixel.
Wat is een histogram en waar is het goed voor?#
Een histogram is een soort grafiek die de frequentie en verdeling van gegevens weergeeft. In het geval van de CMUcam4 toont het histogram de frequentie en verdeling van de kleurwaarden die in een beeld worden aangetroffen. Elke balk vertegenwoordigt een bereik van kleurwaarden voor een specifiek kanaal. De CMUcam4 kan de mogelijke kleurwaarden van 0 tot 255 verdelen in 1, 2, 4, 8, 16, 32 en 64 verschillende bins. Elke bin bevat het aantal pixels in het beeld dat binnen bepaalde kleurgrenzen valt. Een grote waarde in een bepaalde bin betekent dus dat veel van die kleuren in het beeld werden aangetroffen. Elk histogram vertegenwoordigt slechts één geselecteerd kleurkanaal.
Histogrammen zijn een manier om de inhoud van een beeld te abstraheren. Ze hebben vele toepassingen, zoals primitieve objectherkenning, drempelwaarden of kleurbalancering. Ze zijn bijzonder nuttig voor het onderscheiden van verschillende texturen. Probeer de CMUcam4 met auto-gain uitgeschakeld op twee verschillend getextureerde oppervlakken te richten en merk het verschil in hun kleurverdelingen op. Dit effect kan worden gebruikt om vloeroppervlakken te onderscheiden of obstakels te detecteren.