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 также можно настроить так, чтобы он пропускал необработанный кадр Байера без изменений. Необработанный Байер занимает меньше памяти, чем дебайеризованное изображение – один байт на пиксель против трёх, – что делает его полезным, когда узким местом является хранение кадров, при захвате для последующей обработки или когда проект хочет применить собственный алгоритм дебайеризации программно.