4.11. Debayering

Cadrul Bayer brut conține un singur canal de culoare per pixel. Transformarea lui într-o imagine RGB normală cu trei canale înseamnă completarea celor două canale lipsă la fiecare pixel prin interpolare din pixelii învecinați de culoarea potrivită. Această interpolare este debayering (numită și demozaicare). Domină câteva familii de algoritmi.

4.11.1. Super-pixel

Cea mai ieftină abordare comprimă fiecare placă Bayer 2x2 – o celulă roșie, o celulă albastră și două celule verzi – într-un singur pixel de ieșire:

  • canalul roșu este valoarea celulei roșii;

  • canalul albastru este valoarea celulei albastre;

  • canalul verde este media celor două celule verzi.

Fiecare placă de intrare 2x2 devine un pixel de ieșire, astfel încât imaginea finală are jumătate din lățimea și jumătate din înălțimea senzorului, cu un sfert din numărul de pixeli. Super-pixel este rapid și lipsit de artefacte de interpolare, dar costul în rezoluție îl face o soluție de ultimă instanță – este rareori folosit.

4.11.2. Biliniar

Interpolarea biliniară face media celor mai apropiați pixeli de culoarea potrivită, în loc să copieze sau să rezume. Medierea exactă depinde de culoarea pe care o înregistrează pixelul central, deoarece cele patru cazuri distribuie diferit canalele lipsă în jurul vecinătății 3x3.

Pixel verde într-un rând roșu-verde. Valoarea roșie lipsă este media celor doi vecini roșii din stânga și din dreapta; valoarea albastră lipsă este media celor doi vecini albaștri de deasupra și de dedesubt.

O vecinătate de tip Bayer de 3 coloane pe 3 rânduri centrată pe un pixel verde dintr-un rând roșu-verde. Celulele din stânga și din dreapta centrului sunt roșii; celulele de deasupra și de dedesubt sunt albastre; celulele din colțuri sunt verzi. Săgeți albe indică spre interior dinspre cele două celule roșii și cele două celule albastre către centru.

Valoarea roșie lipsă provine de la vecinii roșii orizontali; valoarea albastră lipsă de la vecinii albaștri verticali.

Pixel verde într-un rând verde-albastru. Aceeași formă, cu roșu și albastru inversate. Valoarea roșie lipsă este media celor doi vecini roșii de deasupra și de dedesubt; valoarea albastră lipsă este media celor doi vecini albaștri din stânga și din dreapta.

O vecinătate de tip Bayer de 3 coloane pe 3 rânduri centrată pe un pixel verde dintr-un rând verde-albastru. Celulele de deasupra și de dedesubt centrului sunt roșii; celulele din stânga și din dreapta sunt albastre; celulele din colțuri sunt verzi. Săgeți albe indică spre interior dinspre cele două celule roșii și cele două celule albastre către centru.

Valoarea roșie lipsă provine de la vecinii roșii verticali; valoarea albastră lipsă de la vecinii albaștri orizontali.

Pixel roșu. Valoarea verde lipsă este media celor patru vecini verzi cardinali (sus, jos, stânga, dreapta). Valoarea albastră lipsă este media celor patru vecini albaștri diagonali.

O vecinătate de tip Bayer de 3 coloane pe 3 rânduri centrată pe un pixel roșu. Cei patru vecini cardinali (sus, jos, stânga, dreapta) sunt verzi; cele patru celule diagonale din colțuri sunt albastre. Săgeți albe indică spre interior dinspre toți cei opt vecini către centru.

Valoarea verde lipsă provine de la cei patru vecini verzi cardinali; valoarea albastră lipsă de la cei patru vecini albaștri diagonali.

Pixel albastru. Oglindirea cazului roșu. Valoarea verde lipsă este media celor patru vecini verzi cardinali, iar valoarea roșie lipsă este media celor patru vecini roșii diagonali.

O vecinătate de tip Bayer de 3 coloane pe 3 rânduri centrată pe un pixel albastru. Cei patru vecini cardinali sunt verzi; cele patru celule diagonale din colțuri sunt roșii. Săgeți albe indică spre interior dinspre toți cei opt vecini către centru.

Valoarea verde lipsă provine de la cei patru vecini verzi cardinali; valoarea roșie lipsă de la cei patru vecini roșii diagonali.

Interpolarea biliniară păstrează rezoluția completă a senzorului și este suficient de netedă pentru majoritatea utilizărilor, dar tot prezintă artefacte la muchii. O tranziție bruscă între două culori traversează grila de pixeli într-o anumită orientare, iar medierea peste muchie o atenuează ușor. Acolo unde muchiile de culoare și de luminanță nu se aliniază exact, în rezultat apar franjuri colorate slabe.

4.11.3. Dincolo de biliniar

Există o gamă de algoritmi de debayering mai buni. Unii folosesc vecinătăți mai mari decât crucea mică de vecini de aceeași culoare a metodei biliniare și ponderează eșantioanele cu coeficienți aleși mai atent; alții detectează direcția muchiilor locale și înclină interpolarea de-a lungul acelei direcții, astfel încât o muchie care traversează grila de pixeli rămâne clară în loc să se atenueze. Oricare dintre abordări reduce franjurile de culoare și atenuarea muchiilor lăsate în urmă de metoda biliniară, cu prețul unui număr mai mare de operații aritmetice per pixel și al mai mult siliciu (sau al mai multor calcule pe partea MCU).

Calitatea debayering-ului disponibilă pe o anumită OpenMV Cam este specifică platformei – depinde de ceea ce oferă senzorul și MCU-ul de pe acea cameră.

4.11.4. Unde rulează debayering-ul

Procesorul de semnal de imagine (ISP) – fie pe cipul senzorului însuși, fie pe partea MCU – realizează debayering-ul fiecărui cadru înainte ca acesta să părăsească canalul de procesare a imaginii, în majoritatea cazurilor. Codul utilizatorului primește o imagine RGB finalizată cu trei canale, fără a atinge vreodată mozaicul brut.

ISP-ul poate fi de asemenea instruit să transmită cadrul Bayer brut neschimbat. Bayer brut ocupă mai puțină memorie decât imaginea procesată prin debayering – un octet per pixel față de trei – ceea ce îl face util atunci când stocarea cadrelor este factorul limitativ, când se capturează pentru procesare ulterioară, sau când proiectul dorește să aplice un algoritm de debayering personalizat în software.