4.11. Дебайеризация#
Необработанный кадр Байера несёт лишь один цветовой канал на каждый пиксель. Превращение его в обычное трёхканальное RGB-изображение означает заполнение двух недостающих каналов в каждом пикселе путём интерполяции по соседним пикселям нужного цвета. Эта интерполяция и есть дебайеризация (также называемая демозаикой). Доминируют несколько семейств алгоритмов.
4.11.1. Суперпиксель#
Самый дешёвый подход сводит каждую плитку Байера 2x2 – одну красную ячейку, одну синюю и две зелёные – в один выходной пиксель:
красный канал берётся из значения красной ячейки;
синий канал берётся из значения синей ячейки;
зелёный канал является средним из двух зелёных ячеек.
Каждая входная плитка 2x2 превращается в один выходной пиксель, так что готовое изображение имеет половинную ширину и половинную высоту относительно датчика и содержит четверть от исходного числа пикселей. Суперпиксель работает быстро и без артефактов интерполяции, но потеря разрешения делает его крайней мерой – он применяется редко.
4.11.2. Билинейная интерполяция#
Билинейная интерполяция усредняет ближайшие пиксели нужного цвета, а не копирует и не обобщает их. Конкретное усреднение зависит от того, какой цвет регистрирует центральный пиксель, поскольку четыре случая по-разному распределяют недостающие каналы вокруг окрестности 3x3.
Зелёный пиксель в красно-зелёной строке. Недостающее красное значение усредняет двух красных соседей слева и справа; недостающее синее усредняет двух синих соседей сверху и снизу.
Недостающий красный берётся от горизонтальных красных соседей; недостающий синий – от вертикальных синих соседей.#
Зелёный пиксель в зелёно-синей строке. Та же форма с поменянными местами красным и синим. Недостающее красное значение усредняет двух красных соседей сверху и снизу; недостающее синее усредняет двух синих соседей слева и справа.
Недостающий красный берётся от вертикальных красных соседей; недостающий синий – от горизонтальных синих соседей.#
Красный пиксель. Недостающее зелёное значение усредняет четырёх ортогональных зелёных соседей (сверху, снизу, слева, справа). Недостающее синее усредняет четырёх диагональных синих соседей.
Недостающий зелёный берётся от четырёх ортогональных зелёных соседей; недостающий синий – от четырёх диагональных синих соседей.#
Синий пиксель. Зеркальное отражение случая с красным. Недостающее зелёное усредняет четырёх ортогональных зелёных соседей, а недостающее красное усредняет четырёх диагональных красных соседей.
Недостающий зелёный берётся от четырёх ортогональных зелёных соседей; недостающий красный – от четырёх диагональных красных соседей.#
Билинейная интерполяция сохраняет полное разрешение датчика и достаточно гладка для большинства применений, но всё же показывает артефакты на границах. Резкий переход между двумя цветами пересекает сетку пикселей в определённой ориентации, и усреднение поперёк границы слегка её размывает. Там, где границы цвета и яркости не совпадают точно, в выходном изображении появляются слабые цветные ореолы.
4.11.3. За пределами билинейной интерполяции#
Существует целый ряд более совершенных алгоритмов дебайеризации. Одни используют окрестности больше, чем небольшой крест одноцветных соседей в билинейной интерполяции, и взвешивают отсчёты более тщательно подобранными коэффициентами; другие определяют направление локальных границ и смещают интерполяцию вдоль этого направления, чтобы граница, пересекающая сетку пикселей, оставалась резкой, а не размывалась. Любой из подходов уменьшает цветные ореолы и размытие границ, остающиеся после билинейной интерполяции, ценой большего объёма вычислений на пиксель и большего количества кремния (или большей нагрузки на стороне MCU).
Доступное качество дебайеризации на любой конкретной OpenMV Cam зависит от платформы – оно определяется тем, что предоставляют датчик и MCU на этой камере.
4.11.4. Где выполняется дебайеризация#
Процессор обработки сигнала изображения (ISP) – расположенный либо на самом чипе датчика, либо на стороне MCU – в большинстве случаев дебайеризует каждый кадр, прежде чем тот покинет конвейер обработки изображения. Пользовательский код получает готовое трёхканальное RGB-изображение, никогда не касаясь необработанной мозаики.
ISP также можно настроить так, чтобы он пропускал необработанный кадр Байера без изменений. Необработанный Байер занимает меньше памяти, чем дебайеризованное изображение – один байт на пиксель против трёх, – что делает его полезным, когда узким местом является хранение кадров, при захвате для последующей обработки или когда проект хочет применить собственный алгоритм дебайеризации программно.