4.11. Дебайеризация

Необработанный кадр Байера несёт лишь один цветовой канал на каждый пиксель. Превращение его в обычное трёхканальное RGB-изображение означает заполнение двух недостающих каналов в каждом пикселе путём интерполяции по соседним пикселям нужного цвета. Эта интерполяция и есть дебайеризация (также называемая демозаикой). Доминируют несколько семейств алгоритмов.

4.11.1. Суперпиксель

Самый дешёвый подход сводит каждую плитку Байера 2x2 – одну красную ячейку, одну синюю и две зелёные – в один выходной пиксель:

  • красный канал берётся из значения красной ячейки;

  • синий канал берётся из значения синей ячейки;

  • зелёный канал является средним из двух зелёных ячеек.

Каждая входная плитка 2x2 превращается в один выходной пиксель, так что готовое изображение имеет половинную ширину и половинную высоту относительно датчика и содержит четверть от исходного числа пикселей. Суперпиксель работает быстро и без артефактов интерполяции, но потеря разрешения делает его крайней мерой – он применяется редко.

4.11.2. Билинейная интерполяция

Билинейная интерполяция усредняет ближайшие пиксели нужного цвета, а не копирует и не обобщает их. Конкретное усреднение зависит от того, какой цвет регистрирует центральный пиксель, поскольку четыре случая по-разному распределяют недостающие каналы вокруг окрестности 3x3.

Зелёный пиксель в красно-зелёной строке. Недостающее красное значение усредняет двух красных соседей слева и справа; недостающее синее усредняет двух синих соседей сверху и снизу.

Окрестность Байера размером 3 столбца на 3 строки с центром на зелёном пикселе в красно-зелёной строке. Ячейки слева и справа от центра -- красные; ячейки сверху и снизу -- синие; угловые ячейки -- зелёные. Белые стрелки направлены внутрь от двух красных ячеек и двух синих ячеек к центру.

Недостающий красный берётся от горизонтальных красных соседей; недостающий синий – от вертикальных синих соседей.

Зелёный пиксель в зелёно-синей строке. Та же форма с поменянными местами красным и синим. Недостающее красное значение усредняет двух красных соседей сверху и снизу; недостающее синее усредняет двух синих соседей слева и справа.

Окрестность Байера размером 3 столбца на 3 строки с центром на зелёном пикселе в зелёно-синей строке. Ячейки сверху и снизу от центра -- красные; ячейки слева и справа -- синие; угловые ячейки -- зелёные. Белые стрелки направлены внутрь от двух красных ячеек и двух синих ячеек к центру.

Недостающий красный берётся от вертикальных красных соседей; недостающий синий – от горизонтальных синих соседей.

Красный пиксель. Недостающее зелёное значение усредняет четырёх ортогональных зелёных соседей (сверху, снизу, слева, справа). Недостающее синее усредняет четырёх диагональных синих соседей.

Окрестность Байера размером 3 столбца на 3 строки с центром на красном пикселе. Четыре ортогональных соседа (сверху, снизу, слева, справа) -- зелёные; четыре диагональных угловых ячейки -- синие. Белые стрелки направлены внутрь от всех восьми соседей к центру.

Недостающий зелёный берётся от четырёх ортогональных зелёных соседей; недостающий синий – от четырёх диагональных синих соседей.

Синий пиксель. Зеркальное отражение случая с красным. Недостающее зелёное усредняет четырёх ортогональных зелёных соседей, а недостающее красное усредняет четырёх диагональных красных соседей.

Окрестность Байера размером 3 столбца на 3 строки с центром на синем пикселе. Четыре ортогональных соседа -- зелёные; четыре диагональных угловых ячейки -- красные. Белые стрелки направлены внутрь от всех восьми соседей к центру.

Недостающий зелёный берётся от четырёх ортогональных зелёных соседей; недостающий красный – от четырёх диагональных красных соседей.

Билинейная интерполяция сохраняет полное разрешение датчика и достаточно гладка для большинства применений, но всё же показывает артефакты на границах. Резкий переход между двумя цветами пересекает сетку пикселей в определённой ориентации, и усреднение поперёк границы слегка её размывает. Там, где границы цвета и яркости не совпадают точно, в выходном изображении появляются слабые цветные ореолы.

4.11.3. За пределами билинейной интерполяции

Существует целый ряд более совершенных алгоритмов дебайеризации. Одни используют окрестности больше, чем небольшой крест одноцветных соседей в билинейной интерполяции, и взвешивают отсчёты более тщательно подобранными коэффициентами; другие определяют направление локальных границ и смещают интерполяцию вдоль этого направления, чтобы граница, пересекающая сетку пикселей, оставалась резкой, а не размывалась. Любой из подходов уменьшает цветные ореолы и размытие границ, остающиеся после билинейной интерполяции, ценой большего объёма вычислений на пиксель и большего количества кремния (или большей нагрузки на стороне MCU).

Доступное качество дебайеризации на любой конкретной OpenMV Cam зависит от платформы – оно определяется тем, что предоставляют датчик и MCU на этой камере.

4.11.4. Где выполняется дебайеризация

Процессор обработки сигнала изображения (ISP) – расположенный либо на самом чипе датчика, либо на стороне MCU – в большинстве случаев дебайеризует каждый кадр, прежде чем тот покинет конвейер обработки изображения. Пользовательский код получает готовое трёхканальное RGB-изображение, никогда не касаясь необработанной мозаики.

ISP также можно настроить так, чтобы он пропускал необработанный кадр Байера без изменений. Необработанный Байер занимает меньше памяти, чем дебайеризованное изображение – один байт на пиксель против трёх, – что делает его полезным, когда узким местом является хранение кадров, при захвате для последующей обработки или когда проект хочет применить собственный алгоритм дебайеризации программно.