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

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

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

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

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

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

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

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

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

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

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

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.

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

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

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.

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

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

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.

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

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

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.

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

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

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

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

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

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

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

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