Содержание статьи +
- Главное
- Зачем это знать
- Что значит «дискретизировать»
- Теорема в трёх предложениях
- Как алиасинг проявляется в реальном видео
- Цветовая субдискретизация – когда инженеры нарушают теорему намеренно
- Как индустрия реально борется с алиасингом
- Три оси на одной картине
- Чем мы занимаемся в Фора Софт
- Ключевые выводы
- Что читать дальше
- Источники
Главное
Любое цифровое видео – это непрерывная сцена, разложенная на отсчёты: измерения в регулярных точках по пространству и по времени. Теорема Котельникова (в западной литературе её называют теоремой Найквиста – Шеннона) – это правило из теории сигналов, известное уже почти сто лет. Оно говорит, насколько часто надо снимать эти измерения, чтобы исходную сцену можно было воспроизвести без потерь. Если делать измерения реже, чем требует теорема, мелкие детали не просто пропадают – они возвращаются на запись в виде совершенно другого, ложного узора. Этот эффект называется алиасингом (или наложением спектров): отсюда муар на полосатой рубашке, «лесенки» на диагональных линиях и колёса повозок, которые в старых фильмах словно крутятся назад. Стоит понять, по какой оси нарушено правило – горизонтальной, вертикальной или временно́й, – и каждый приём борьбы с артефактами перестаёт казаться магией: он становится прямым ответом на конкретное нарушение.
Зачем это знать
Если вы делаете продукт, который пишет, обрабатывает или показывает видео, – стриминговый сервис, видеозвонок, телемедицинскую систему, приложение для прямых трансляций спорта, обучающую платформу, – рано или поздно вы столкнётесь с артефактами наложения. Муар на одежде клиента, размытый текст на слайдах, странно ведущие себя автомобильные колёса в спортивных клипах, «телепортирующиеся» люди на записях с камер видеонаблюдения – это не баги вашего кодировщика. Это неизбежное следствие того, что непрерывную сцену мы измеряем по конечной сетке. Теорема, о которой пойдёт речь, точно говорит, когда такие артефакты появятся и где в вашем конвейере их останавливать. Математической подготовки не потребуется: построим объяснение от нуля, шаг за шагом.
Что значит «дискретизировать»
Начнём со слова дискретизация – на нём держится всё остальное.
В реальном мире свет, звук и движение непрерывны. Поток света, который попадает на объектив, не разбит на куски: это плавный, неразрывный сигнал. Звук в микрофоне – тоже непрерывное колебание давления воздуха, а не серия отдельных событий.
Но цифровая камера или цифровой микрофон не умеют хранить «непрерывное» – компьютеры работают только с числами. Поэтому любое цифровое устройство замеряет входной сигнал в равные промежутки времени: «насколько сейчас ярок свет?», «насколько сейчас громок звук?» – и записывает ответ числом. Сам процесс таких регулярных измерений и называется дискретизацией, а каждое отдельное измерение – отсчётом (по-английски sample; в видеоинженерной речи часто говорят «сэмпл», но в учебной литературе принят именно «отсчёт»).
Удобная бытовая аналогия. Представьте, что вы наблюдаете за рекой и раз в минуту опускаете в воду термометр, чтобы записать температуру. На самом деле температура реки меняется плавно, всё время, но в вашем блокноте – только моментальные снимки с шагом в минуту. Если в реке что-то произошло быстрее, чем за минуту (сброс горячей воды, внезапный холодный приток), вы это можете полностью пропустить: ваши замеры пришлись на интервалы по разные стороны от события. Чем чаще вы измеряете – скажем, раз в десять секунд вместо раза в минуту, – тем меньше теряете. Но и записей становится больше.
Этот компромисс лежит в основе любой цифровой записи: выше частота дискретизации – точнее запись, но больше данных, которые надо хранить и передавать. Подбор правильной частоты под конкретную задачу – это, в общем-то, и есть половина работы инженера.
Теперь приложим это к видео.
Цифровое видео – это, строго говоря, не «движущиеся картинки». Это длинный список измерений яркости и цвета в фиксированных точках пространства и в фиксированные моменты времени. Каждый кадр сам по себе – сетка измерений: замерить свет в этой точке матрицы, записать как значение пикселя, перейти к следующей точке, замерить, записать – и так до конца кадра. А последовательность кадров – это уже отдельная серия замеров во времени: «сфотографировать» всю сцену сейчас и сохранить как Кадр 1; подождать 1/30 секунды; «сфотографировать» снова и сохранить как Кадр 2.
То есть видео дискретизируется одновременно по трём осям:
- По горизонтали – сколько точек измерения помещается по ширине кадра. Это горизонтальное число пикселей; мы говорили о нём в статье «Что такое цифровое видео».
- По вертикали – сколько точек измерения помещается по высоте кадра. Это вертикальное число пикселей.
- По времени – сколько полных кадров приходится на секунду. Это частота кадров (frame rate).
Три разные задачи дискретизации происходят одновременно. У каждой – свой потенциальный сбой.
Теорема в трёх предложениях
Здесь мы подходим к правилу, которое управляет всеми тремя осями. Гарри Найквист в 1928 году описал ограничение полосы линии связи, а в 1933 году советский инженер Владимир Котельников строго сформулировал и доказал саму теорему отсчётов; позднее, в 1949 году, её независимо вывел Клод Шеннон. 1 Поэтому в русскоязычной литературе её обычно называют теоремой Котельникова, а в западной – теоремой Найквиста – Шеннона. Это одно и то же. Простыми словами:
«Чтобы непрерывный сигнал можно было точно восстановить из отсчётов, частота дискретизации должна более чем вдвое превышать максимальную частоту сигнала. Если дискретизировать реже, быстрые детали не просто исчезнут: они запишутся как нечто чужое, ложное и при этом отчётливо видимое – то, чего в исходном сигнале не было.»
Три предложения, никакой математики. Разберём по частям.
«Максимальная частота сигнала» – это то, что меняется в нём быстрее всего. У звука – самая высокая нота: тонкий свист колеблет давление воздуха тысячи раз в секунду. У изображения «самое быстрое» – самые мелкие детали: близко стоящие полосы, резкие края, тонкие линии. У движения в видео «самое быстрое» – самое стремительное движение: вращающееся колесо, крыло колибри, стробоскоп.
«Более чем вдвое» – это и есть правило. Если в сигнале есть составляющая, которая повторяется сто раз в секунду, дискретизировать надо чаще двухсот раз в секунду. Этот пороговый показатель – удвоенная максимальная частота сигнала – называется частотой Найквиста. 2 Если дискретизируете выше неё – всё в порядке; если ниже – у вас проблема.
«Запишется как нечто ложное» – самый неочевидный момент, и на нём стоит задержаться. Когда сигнал дискретизирован слишком редко, информация не просто теряется: потерянная часть возвращается в виде совершенно другой, но внешне правдоподобной, низкочастотной картинки. В русской литературе это явление называют наложением спектров, в международной – алиасингом; сам ложный сигнал именуется алиасом. 3 Сигнал маскируется под что-то другое, и если не знать, куда смотреть, отличить маскировку от настоящего сигнала невозможно.
Именно поэтому алиасинг так коварен и так важен для видеоинженера. Размытое, недодискретизированное изображение – это очевидная проблема: видно, что плохо, и понятно, что делать. Изображение с алиасингом выглядит резким и детальным, но детали в нём – выдуманные.
Как алиасинг проявляется в реальном видео
У него три лица – по одному на каждую ось дискретизации. Пройдёмся по ним.
Муар – пространственное наложение на узорчатых поверхностях
Муар вы наверняка видели, если когда-нибудь снимали человека в рубашке с тонкими полосками или в пиджаке «ёлочкой». Вместо чистого полосатого узора на фото возникают волнистые тёмно-светлые разводы, которые «плывут», когда камера или модель сдвигаются. Тот же эффект появляется, если снимать камерой телевизор или другой экран: на записи возникают мерцающие радужные полосы, которых в реальности нет. 4
На «языке дискретизации» происходит вот что. Полоски рубашки – это высокочастотный пространственный узор: много чередований светлого и тёмного на сантиметре ткани. Матрица камеры – регулярная сетка точек измерения. Если частота полосок ниже частоты Найквиста матрицы, она передаёт полоски правильно – мы и видим полоски. Если частота полосок выше предела, в дело вступает теорема Котельникова, и высокочастотный узор записывается как другой, более «спокойный» узор: те самые волнистые разводы. Это и есть алиас, а вся ситуация – пространственный алиасинг. Полосы будто «плывут» вслед за камерой, потому что малейший её сдвиг меняет, в какой именно момент каждый светочувствительный элемент попадает на конкретную полоску ткани.
«Лесенки» на диагональных краях
Второе видимое лицо пространственного алиасинга – «лесенки» на наклонных линиях, особенно почти горизонтальных или почти вертикальных. Настоящий край геометрически гладкий, но сетка пикселей вынуждает его укладываться по дискретным ступенькам. Когда наклон края даёт частоты выше предела Найквиста, эти частоты не передаются чисто – на их месте появляются видимые ступени. Именно с этим борются игровые движки, когда применяют антиалиасинг (anti-aliasing): они намеренно слегка размывают край, чтобы разбить ступенчатую структуру.
Эффект колеса повозки – временно́е наложение на быстром движении
Третье лицо – самое известное. Так алиасинг проявляется на движении, когда частота кадров слишком мала.
Возьмём классический голливудский фильм, снятый на 24 кадра/с. По теореме Котельникова такая запись способна корректно передать любое движение, у которого полный цикл повторяется не чаще двенадцати раз в секунду – это половина от 24, частота Найквиста для времени. Всё, что быстрее, неизбежно алиасируется.
Теперь представьте на экране быстро крутящееся колесо повозки. Пусть оно делает 18 полных оборотов в секунду – это явно выше предела Найквиста. Что увидит зритель? Не вращение со скоростью 18 об/с. Он увидит колесо, которое будто медленно крутится в обратную сторону, или вовсе стоит на месте, или вращается с каким-то странным произвольным темпом. 5
Объясняется это так. Между Кадром 1 и Кадром 2 (между ними 1/24 секунды) колесо успевает повернуться на 18/24 = 3/4 полного оборота. Спица, которая в Кадре 1 смотрела вверх, в Кадре 2 смотрит влево. Но зритель не «считает» полные обороты: его мозг ищет самое простое объяснение. А «небольшой сдвиг против часовой стрелки» проще, чем «почти полный оборот по часовой». В итоге мы видим медленное обратное вращение. Высокочастотное движение алиасировалось в ложное низкочастотное.
Ровно тот же приём вы увидите на колёсах автомобилей в репортажах с дорог, на лопастях вертолётов с воздушных съёмок, на бегущих светодиодных табло на стадионах в прямой трансляции. У камер видеонаблюдения с низкой частотой кадров встречается родственная, но другая проблема: человек, идущий через кадр в обычном темпе, может «телепортироваться» из одной точки в другую, потому что система просто не зафиксировала промежуточные моменты – алгоритм детекции движения видит физически невозможный прыжок.
Эффект колеса повозки, как и муар, – не глюк видеофайла. Это точное, предсказуемое следствие того, что движение дискретизировано ниже частоты Найквиста.
Цветовая субдискретизация – когда инженеры нарушают теорему намеренно
Пока что выходило: «алиасинг – плохо, антиалиасинг – хорошо». Но дальше будет интересный поворот: каждый современный видеокодек намеренно нарушает теорему Котельникова – но только по одной оси и только потому, что человеческий глаз устроен особым образом.
Контекст. В статье «Что такое цифровое видео» мы упоминали, что кодеки преобразуют каждый пиксель из привычной системы RGB в другую трёхчисловую систему – YCbCr. Первое число, Y, – это яркость (luma) пикселя. Два других, Cb и Cr, – цветность (chroma): собственно цвет пикселя, отдельно от яркости.
Такое разделение существует не случайно. Глаз гораздо чувствительнее к изменениям яркости, чем к изменениям цвета. 6 Если деталь на ярком объекте слегка размылась, это заметно мгновенно. А если граница между двумя оттенками цвета чуть «поплыла» – это, как правило, никто не видит. Эффект настолько силён, что кодеки могут хранить каналы цветности в половинном разрешении от яркости – и для подавляющего большинства зрителей результат будет неотличим от полного цвета.
Степень такой экономии записывается тройкой чисел в формате J:a:b. В её арифметику можно не вдаваться – достаточно запомнить три комбинации, которые встретятся вам на практике:
| Формат | Что делает | Экономия данных vs полный цвет | Где применяется |
|---|---|---|---|
| 4:4:4 | Полное разрешение цветности – теорема не нарушается. | 0 % | Мастера для постпродакшена, цветокоррекция, графически насыщенный контент |
| 4:2:2 | Цветность с половинным горизонтальным разрешением – умеренное нарушение. | ~33 % | Студийные тракты вещания, ProRes 422 |
| 4:2:0 | Цветность с половинным горизонтальным и половинным вертикальным разрешением – нарушение по обеим осям. | ~50 % | Всё, что вы стримите: Netflix, YouTube, WebRTC, видеозвонки |
Да, формально цветность алиасируется. Цветовые детали тоньше, чем позволяет урезанный предел Найквиста, складываются в ложный низкочастотный цвет. Но поскольку глаз эти детали почти не воспринимает, артефакты для большинства зрителей и большинства типов контента остаются невидимыми, а экономия битрейта огромная – около 50 % ещё до того, как «настоящее» сжатие кодеком успело начаться.
Есть, правда, одно место, где этот компромисс кусается: презентационный контент с резкими красными или синими буквами на белом фоне. Цветовую кайму на чётком текстовом краю глаз способен увидеть, и в 4:2:0 на таких границах появляются заметные артефакты. Лечится это просто – выделить отдельный «графический» пресет в линейке битрейтов с цветностью 4:2:2 или 4:4:4. Подробнее об этом – в статье «Цветовые пространства».
Как индустрия реально борется с алиасингом
Поднять частоту дискретизации до уровня, при котором алиасинг невозможен в принципе, получается далеко не всегда: у матрицы конечное число пикселей, частота кадров ограничена бюджетом данных, а у глаза – своими физическими пределами. Поэтому индустрия пошла другим путём: до того как сигнал попадёт на дискретизатор, из него заранее убирают всё, что выше предела Найквиста. Всё, что нельзя записать чисто, мягко размывают у источника. Это предварительная фильтрация и есть антиалиасинг, и в видеотракте у неё три рубежа защиты.
Рубеж 1 – оптический низкочастотный фильтр на матрице
Первая линия обороны – крошечная пластинка, наклеенная перед матрицей камеры. Называется она оптическим низкочастотным фильтром (Optical Low-Pass Filter, OLPF) и сделана из двулучепреломляющего кристалла, который расщепляет каждый луч на два слегка смещённых. 7 Результат – едва заметное намеренное размытие изображения ровно настолько, чтобы убрать пространственные частоты выше предела Найквиста матрицы и при этом не «съесть» детали, которые матрица всё-таки способна передать.
OLPF стоит во всех профессиональных кинокамерах (ARRI Alexa, Sony Venice) и во всех вещательных камерах. Часть современных фотографических беззеркалок (Fujifilm X-T5, серия Sony A7R) от него отказались: разрешение матрицы у них настолько высокое – 40+ мегапикселей, – что в реальных сценах редко встречаются детали, способные вызвать алиасинг. «Редко» – не «никогда», поэтому такие камеры всё равно дают муар, если попадают на узорчатую ткань или на чужой экран.
Рубеж 2 – выдержка как фильтр для движения
OLPF закрывает пространственные оси (горизонтальную и вертикальную). Для оси времени нужен другой инструмент – и он, пожалуй, самый интуитивный во всей статье: это смаз движения, возникающий, когда затвор открыт значительную часть длительности кадра.
Как это работает. Если камера снимает 24 кадра/с, каждый кадр длится 1/24 секунды. Если затвор открыт половину этого времени – 1/48 секунды на кадр, – всё, что успевает сдвинуться за это время, на кадре оказывается смазанным. Этот смаз – motion blur, тот самый «киношный» вид. И он же – точный антиалиасинговый фильтр для оси времени: он намеренно усредняет быстрое движение внутри одного кадра, так что содержимое кадра всегда представлено движением, «достаточно медленным», чтобы уложиться в полосу Найквиста. Такое соотношение выдержки и кадра называется 180-градусным правилом затвора – по имени полукруглых механических затворов плёночной эпохи. 8
Если, наоборот, снимать с очень короткой выдержкой – скажем, 1/8000 секунды на кадр, – каждый кадр получится бритвенно резким: видны все спицы колеса, замёрзшие капли воды. И каждый быстро движущийся объект в таком кадре алиасируется по полной: нет смаза, который ограничил бы спектр движения. Поэтому даже на 60 кадр/с экшен-сцены, снятые с короткой выдержкой, дают «странные» колёса.
В компьютерной графике реального времени – играх, VR – нужен программный аналог. Рендер слегка смещает точки выборки от кадра к кадру и смешивает результаты; получается тот же эффект ограничения полосы, что и от физического затвора. Эта техника называется временны́м антиалиасингом (Temporal Anti-Aliasing, TAA) – и именно она объясняет, почему современные игры выглядят плавно при высокой частоте кадров и очень коротких эффективных «выдержках».
Рубеж 3 – корректная низкочастотная фильтрация при каждом уменьшении разрешения
Третий рубеж находится уже внутри программного конвейера – он срабатывает каждый раз, когда вы уменьшаете разрешение видео. Если у вас 4K-мастер и вы готовите из него 1080p-вариант для доставки, вы заново дискретизируете 4K-картинку с меньшей частотой. Правило Котельникова работает точно так же: всё, что выше нового предела Найквиста, нужно отфильтровать до уменьшения, иначе получите алиасинг.
Любой адекватный видеоинструмент делает это автоматически. Скейлер по умолчанию в FFmpeg – самом популярном опенсорсном видеоинструменте – использует алгоритм Lanczos, качественное приближение идеального низкочастотного фильтра для уменьшения разрешения. Проблема возникает, только если вы явно сказали FFmpeg использовать что-то худшее. Сравните:
# Хорошо: Lanczos — качественный низкочастотный фильтр, у FFmpeg по умолчанию
ffmpeg -i 4k.mp4 -vf "scale=1920:1080:flags=lanczos" 1080p.mp4
# Плохо: nearest-neighbour просто выбрасывает каждый второй пиксель без фильтрации
ffmpeg -i 4k.mp4 -vf "scale=1920:1080:flags=neighbor" aliased.mp4Вторая команда практически полезна ровно для одного случая – показать клиенту, что алиасинг существует, если он не верит. Результат буквально кишит муаром на любой узорчатой поверхности в исходнике.
Частая ошибка: винить кодек в проблеме матрицы
Сцена, через которую мы в Фора Софт проходим с неприятной регулярностью. Свадебный оператор сдаёт клиенту 4K-фильм. Кружевное платье невесты на всех общих планах покрыто заметным муаром. Клиент винит монтажёра. Монтажёр винит кодек. Кто-нибудь обязательно спросит, не поможет ли поднять битрейт.
Не поможет. Муар сидит не в кодеке – он в самой записи матрицы. Снимали высокоразрешающей беззеркалкой без OLPF, у кружева оказались пространственные частоты выше предела Найквиста матрицы, и муар запёкся в каждом кадре в момент съёмки. Никакая правка битрейта, смена кодека или повышение выходного разрешения его не уберут. Лечится это только на этапе захвата: другая камера с более «сильным» OLPF; другой ракурс, ломающий узор кружева; другое фокусное расстояние, меняющее пространственные частоты на матрице; либо съёмка в заметно более высоком разрешении и аккуратное уменьшение через Lanczos.
Алиасинг всегда возникает выше по течению от того места, где вы его заметили. Чтобы починить, надо двигаться вверх по тракту – к точке нарушения.
Три оси на одной картине
Вот вся картина в одной таблице. Каждая видеокоманда так или иначе принимает одни и те же три решения. Сделайте их явными – и повесьте на стену.
| Ось | Частота дискретизации | Предел Найквиста | Типичный сбой | Решение в продакшене |
|---|---|---|---|---|
| Горизонтальная | пикселей на см | половина числа пикселей | муар на регулярных узорах | OLPF · выше разрешение · сменить кадр |
| Вертикальная | пикселей на см | половина числа пикселей | «лесенки» на почти горизонтальных краях | то же самое · повернуть камеру |
| Время | кадров в секунду | fps ÷ 2 | колесо повозки · дрожание · потеря движения | выше fps · 180° затвор · TAA |
| Цветность | зависит от формата | половина яркости в 4:2:0 | цветовая кайма на красном тексте | 4:2:2 или 4:4:4 для графики и презентаций |
Последнюю строку чаще всего недооценивают. Если ваша платформа хостит презентационные ролики с красным или синим текстом на белом фоне, кодирование в 4:2:0 по умолчанию будет давать кайму на краях букв. Дешёвое и эффективное решение – держать в линейке битрейтов отдельный «графический пресет» с цветностью 4:2:2, или принимать исходники с таким профилем уже на этапе загрузки.
Чем мы занимаемся в Фора Софт
С задачей дискретизации мы работаем с обоих концов. В телемедицинских и охранных проектах вопрос стоит на стороне захвата: какой OLPF в выбранной камере и соответствует ли разрешение, которое выбирает клиент, реальной детализации поля зрения. В OTT- и конференц-проектах – на стороне доставки: каким фильтром конвейер уменьшает разрешение, подходит ли цветовая субдискретизация под тип контента, есть ли в линейке битрейтов отдельный шаг 4:2:2 для презентаций. Принцип с обоих концов один и тот же – меняются только рычаги.
Ключевые выводы
- Дискретизация – это измерение непрерывного сигнала с фиксированным шагом. Слишком редкие отсчёты – и пропавшие детали возвращаются как ложный, видимый узор: это алиасинг (наложение спектров).
- Правило Котельникова: дискретизируйте более чем вдвое быстрее самой быстрой составляющей сигнала. Ниже – алиасинг.
- Пространственный алиасинг даёт муар на узорах и «лесенки» на диагональных краях.
- Временно́й алиасинг даёт эффект колеса повозки: быстрое вращение «крутится назад».
- Цветовая субдискретизация (4:2:0) – намеренное нарушение теоремы, потому что глаз почти не видит мелких цветовых деталей. Экономия битрейта – около 50 %.
- Антиалиасинг должен стоять у источника: OLPF на матрице, 180-градусная выдержка для движения, Lanczos перед каждым уменьшением разрешения.
- Кодек не уберёт алиасинг, который уже запечён в исходник. Лечить нужно на этапе захвата.
Что читать дальше
- Что такое цифровое видео: от аналогового сигнала к битам
- Прогрессивная и чересстрочная развёртка
- Цветовые пространства: RGB, YCbCr, BT.709, BT.2020, DCI-P3
Источники
- Теорема отсчётов; авторство Котельникова (1933) и Шеннона (1949), исторический вклад Найквиста (1928). Википедия: Теорема Котельникова. https://ru.wikipedia.org/wiki/Теорема_Котельникова
- Частота Найквиста – половина частоты дискретизации; граничная частота спектра, выше которой возможно наложение. Википедия: Частота Найквиста. https://ru.wikipedia.org/wiki/Частота_Найквиста
- Алиасинг (наложение спектров) – основной артефакт при недостаточной частоте дискретизации. Википедия: Алиасинг. https://ru.wikipedia.org/wiki/Алиасинг
- Муар как проявление пространственного алиасинга в фото и видео. Источник: материалы по цифровой фотографии и видеосъёмке. Wikipedia: Aliasing. https://en.wikipedia.org/wiki/Aliasing
- Механика эффекта колеса повозки; спицы, «вращающиеся» назад. Fighting the wagon-wheel effect – a new anti-aliasing method for video signal generation, IEEE Xplore. https://ieeexplore.ieee.org/document/5655724/
- Асимметрия чувствительности глаза к яркости и цвету; форматы 4:4:4 / 4:2:2 / 4:2:0. Wikipedia: Chroma subsampling. https://en.wikipedia.org/wiki/Chroma_subsampling
- Оптический низкочастотный фильтр: размытие пространственных частот выше предела Найквиста матрицы. Anti-Aliasing Filter / OLPF, Tony & Chelsea Northrup. https://northrup.photo/gear-basics/camera-body-features/anti-aliasing-filterolpf/
- Временно́й антиалиасинг через интегрирование затвором и через программное смещение точек выборки. Wikipedia: Temporal anti-aliasing. https://en.wikipedia.org/wiki/Temporal_anti-aliasing