4.11. Debayering

Het ruwe Bayer-frame bevat slechts één kleurkanaal per pixel. Om het om te zetten naar een normale RGB-afbeelding met drie kanalen moeten de twee ontbrekende kanalen op elke pixel worden ingevuld door te interpoleren vanuit nabijgelegen pixels met de juiste kleur. Die interpolatie heet debayering (ook wel demosaicing genoemd). Een handvol algoritmefamilies domineert.

4.11.1. Super-pixel

De goedkoopste aanpak vouwt elke 2x2 Bayer-tegel – één rode cel, één blauwe cel en twee groene cellen – samen tot één uitvoerpixel:

  • het rode kanaal is de waarde van de rode cel;

  • het blauwe kanaal is de waarde van de blauwe cel;

  • het groene kanaal is het gemiddelde van de twee groene cellen.

Elke 2x2-invoertegel wordt één uitvoerpixel, dus de voltooide afbeelding is half zo breed en half zo hoog als de sensor, met een kwart van het aantal pixels. Super-pixel is snel en vrij van interpolatieartefacten, maar de resolutiekost maakt het een laatste redmiddel – het wordt zelden gebruikt.

4.11.2. Bilineair

Bilineaire interpolatie middelt de dichtstbijzijnde pixels met de juiste kleur in plaats van te kopiëren of samen te vatten. De exacte middeling hangt af van welke kleur de middenpixel registreert, omdat de vier gevallen de ontbrekende kanalen op verschillende manieren over de 3x3-omgeving verdelen.

Groene pixel in een rood-groene rij. De ontbrekende rode waarde middelt de twee rode buren links en rechts; de ontbrekende blauwe waarde middelt de twee blauwe buren boven en onder.

Een Bayer-patroonomgeving van 3 kolommen bij 3 rijen gecentreerd op een groene pixel in een rood-groene rij. De cellen links en rechts van het midden zijn rood; de cellen boven en onder zijn blauw; de hoekcellen zijn groen. Witte pijlen wijzen naar binnen vanuit de twee rode cellen en de twee blauwe cellen naar het midden.

De ontbrekende rode waarde komt van de horizontale rode buren; de ontbrekende blauwe van de verticale blauwe buren.

Groene pixel in een groen-blauwe rij. Dezelfde vorm met rood en blauw verwisseld. De ontbrekende rode waarde middelt de twee rode buren boven en onder; de ontbrekende blauwe waarde middelt de twee blauwe buren links en rechts.

Een Bayer-patroonomgeving van 3 kolommen bij 3 rijen gecentreerd op een groene pixel in een groen-blauwe rij. De cellen boven en onder het midden zijn rood; de cellen links en rechts zijn blauw; de hoek- cellen zijn groen. Witte pijlen wijzen naar binnen vanuit de twee rode cellen en de twee blauwe cellen naar het midden.

De ontbrekende rode waarde komt van de verticale rode buren; de ontbrekende blauwe van de horizontale blauwe buren.

Rode pixel. De ontbrekende groene waarde middelt de vier kardinale groene buren (boven, onder, links, rechts). De ontbrekende blauwe waarde middelt de vier diagonale blauwe buren.

Een Bayer-patroonomgeving van 3 kolommen bij 3 rijen gecentreerd op een rode pixel. De vier kardinale buren (boven, onder, links, rechts) zijn groen; de vier diagonale hoekcellen zijn blauw. Witte pijlen wijzen naar binnen vanuit alle acht buren naar het midden.

De ontbrekende groene waarde komt van de vier kardinale groene buren; de ontbrekende blauwe van de vier diagonale blauwe buren.

Blauwe pixel. Spiegelbeeld van het rode geval. De ontbrekende groene waarde middelt de vier kardinale groene buren, en de ontbrekende rode waarde middelt de vier diagonale rode buren.

Een Bayer-patroonomgeving van 3 kolommen bij 3 rijen gecentreerd op een blauwe pixel. De vier kardinale buren zijn groen; de vier diagonale hoek- cellen zijn rood. Witte pijlen wijzen naar binnen vanuit alle acht buren naar het midden.

De ontbrekende groene waarde komt van de vier kardinale groene buren; de ontbrekende rode van de vier diagonale rode buren.

Bilineair behoudt de volledige resolutie van de sensor en is glad genoeg voor de meeste toepassingen, maar het vertoont nog steeds artefacten bij randen. Een scherpe overgang tussen twee kleuren kruist het pixelraster in een bepaalde oriëntatie, en het middelen over de rand verzacht die enigszins. Waar de kleur- en luminantieranden niet precies samenvallen, verschijnen er zwakke gekleurde randen in de uitvoer.

4.11.3. Voorbij bilineair

Er bestaat een reeks betere debayer-algoritmen. Sommige gebruiken grotere omgevingen dan het kleine kruis van buren met dezelfde kleur dat bilineair gebruikt, en wegen de monsters met zorgvuldiger gekozen coëfficiënten; andere detecteren de richting van lokale randen en sturen de interpolatie bij langs die richting, zodat een rand die over het pixelraster loopt scherp blijft in plaats van te verzachten. Beide benaderingen verminderen de gekleurde randen en de randverzachting die bilineair achterlaat, ten koste van meer rekenwerk per pixel en meer silicium (of meer rekenkracht aan de MCU-zijde).

De beschikbare debayer-kwaliteit op een bepaalde OpenMV Cam is platformspecifiek – die hangt af van wat de sensor en MCU op die camera bieden.

4.11.4. Waar debayering wordt uitgevoerd

De image signal processor (ISP) – op de sensorchip zelf of aan de MCU-zijde – debayert elk frame voordat het de beeldverwerkingspijplijn verlaat, in de meeste gevallen. Gebruikerscode ontvangt een voltooide RGB-afbeelding met drie kanalen zonder ooit het ruwe mozaïek aan te raken.

De ISP kan ook worden ingesteld om het ruwe Bayer-frame ongewijzigd door te geven. Ruwe Bayer neemt minder geheugen in beslag dan de gedebayerde afbeelding – één byte per pixel in plaats van drie – wat het nuttig maakt wanneer frameopslag het knelpunt is, wanneer er wordt opgenomen voor offline verwerking, of wanneer het project een aangepast debayer-algoritme in software wil toepassen.