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.

A 3 column by 3 row Bayer-pattern neighbourhood centred on a green pixel in a red-green row. The cells to the left and right of the centre are red; the cells above and below are blue; the corner cells are green. White arrows point inward from the two red cells and the two blue cells into the centre.

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.

A 3 column by 3 row Bayer-pattern neighbourhood centred on a green pixel in a green-blue row. The cells above and below the centre are red; the cells to the left and right are blue; the corner cells are green. White arrows point inward from the two red cells and the two blue cells into the centre.

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.

A 3 column by 3 row Bayer-pattern neighbourhood centred on a red pixel. The four cardinal neighbours (above, below, left, right) are green; the four diagonal corner cells are blue. White arrows point inward from all eight neighbours into the centre.

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.

A 3 column by 3 row Bayer-pattern neighbourhood centred on a blue pixel. The four cardinal neighbours are green; the four diagonal corner cells are red. White arrows point inward from all eight neighbours into the centre.

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.