4.11. Debayering#

O fotograma Bayer bruto contém apenas um canal de cor por pixel. Convertê-lo numa imagem RGB normal de três canais implica preencher os dois canais em falta em cada pixel por interpolação a partir dos pixels vizinhos da cor correta. Essa interpolação é o debayering (também designado por desmosaicagem). Um pequeno conjunto de famílias de algoritmos domina este processo.

4.11.1. Super-pixel#

A abordagem mais económica colapsa cada bloco Bayer de 2x2 – uma célula vermelha, uma célula azul e duas células verdes – num único pixel de saída:

  • o canal vermelho é o valor da célula vermelha;

  • o canal azul é o valor da célula azul;

  • o canal verde é a média das duas células verdes.

Cada bloco de entrada de 2x2 torna-se um pixel de saída, pelo que a imagem final tem metade da largura e metade da altura do sensor, com um quarto do número de pixels. O super-pixel é rápido e isento de artefactos de interpolação, mas o custo em resolução torna-o um último recurso – raramente é utilizado.

4.11.2. Bilinear#

A interpolação bilinear calcula a média dos pixels mais próximos da cor correta em vez de os copiar ou resumir. A média exata depende da cor que o pixel central regista, porque os quatro casos distribuem os canais em falta de forma diferente na vizinhança de 3x3.

Pixel verde numa linha vermelho-verde. O valor vermelho em falta é a média dos dois vizinhos vermelhos à esquerda e à direita; o azul em falta é a média dos dois vizinhos azuis acima e abaixo.

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.

O vermelho em falta vem dos vizinhos vermelhos horizontais; o azul em falta vem dos vizinhos azuis verticais.#

Pixel verde numa linha verde-azul. Mesma forma com vermelho e azul trocados. O valor vermelho em falta é a média dos dois vizinhos vermelhos acima e abaixo; o azul em falta é a média dos dois vizinhos azuis à esquerda e à direita.

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.

O vermelho em falta vem dos vizinhos vermelhos verticais; o azul em falta vem dos vizinhos azuis horizontais.#

Pixel vermelho. O valor verde em falta é a média dos quatro vizinhos verdes cardinais (acima, abaixo, esquerda, direita). O azul em falta é a média dos quatro vizinhos azuis diagonais.

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.

O verde em falta vem dos quatro vizinhos verdes cardinais; o azul em falta vem dos quatro vizinhos azuis diagonais.#

Pixel azul. Espelho do caso vermelho. O verde em falta é a média dos quatro vizinhos verdes cardinais, e o vermelho em falta é a média dos quatro vizinhos vermelhos diagonais.

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.

O verde em falta vem dos quatro vizinhos verdes cardinais; o vermelho em falta vem dos quatro vizinhos vermelhos diagonais.#

O método bilinear mantém a resolução total do sensor e é suficientemente suave para a maioria dos usos, mas ainda apresenta artefactos nas arestas. Uma transição abrupta entre duas cores atravessa a grelha de pixels numa determinada orientação, e a média ao longo da aresta suaviza-a ligeiramente. Onde as arestas de cor e de luminância não se alinham com exatidão, surgem na saída franjas de cor ténues.

4.11.3. Para além do bilinear#

Existe uma gama de algoritmos de debayering mais avançados. Alguns utilizam vizinhanças maiores do que a pequena cruz de vizinhos da mesma cor usada pelo método bilinear e ponderam as amostras com coeficientes mais cuidadosamente escolhidos; outros detetam a direção das arestas locais e orientam a interpolação nessa direção, de forma a que uma aresta que atravessa a grelha de pixels se mantenha nítida em vez de se suavizar. Qualquer uma das abordagens reduz as franjas de cor e a suavização das arestas deixadas pelo método bilinear, ao custo de mais operações aritméticas por pixel e mais silício (ou mais processamento no lado do MCU).

A qualidade de debayering disponível em qualquer OpenMV Cam é específica da plataforma – depende do que o sensor e o MCU dessa câmara fornecem.

4.11.4. Onde corre o debayering#

O processador de sinal de imagem (ISP) – no próprio chip do sensor ou no lado do MCU – realiza o debayering de cada fotograma antes de este sair do pipeline de imagem na maioria dos casos. O código do utilizador recebe uma imagem RGB acabada de três canais sem nunca tocar no mosaico bruto.

O ISP também pode ser instruído a deixar passar o fotograma Bayer bruto sem alterações. O Bayer bruto ocupa menos memória do que a imagem após debayering – um byte por pixel em vez de três – o que o torna útil quando o armazenamento de fotogramas é o bottleneck, ao capturar para processamento offline, ou quando o projeto pretende aplicar um algoritmo de debayering personalizado em software.