Короткое определение

Диагональный порядок сканирования, превращающий 2D-блок DCT-коэффициентов в 1D-последовательность, где сначала идут наиболее значимые.

Zig-zag scan – конкретная траектория, по которой энкодер считывает коэффициенты преобразованного блока – стартует в верхнем-левом углу и зигзагообразно идёт по диагоналям к нижнему-правому. Смысл: после DCT верхний-левый коэффициент содержит самую важную информацию (среднюю яркость блока), значения рядом – следующие по важности (общие формы), а значения в нижнем-правом – наименее важные (самые мелкие детали). Zig-zag scan превращает двумерный блок в одномерную последовательность, где важные значения идут первыми, а неважные – последними.

Этот порядок критичен для эффективности сжатия. После квантизации большинство высокочастотных коэффициентов в нижнем-правом округляется в ноль. При zig-zag-сканировании все эти нули оказываются в конце последовательности, образуя длинную серию, которую `run-length` сжимает почти в ничто. Если бы сканировали построчно, нули были бы рассыпаны по последовательности, и run-length-кодированию нечего было бы сжимать. Простой геометрический трюк со сменой порядка чтения и делает остальной пайплайн эффективным.

Для продуктовой команды zig-zag scan – невидимая сантехника, унаследованная от JPEG. Настраивать нечего. Современные кодеки (HEVC, AV1, VVC) на самом деле используют более продвинутые scan-паттерны – vertical-first, horizontal-first или даже адаптивные на основе доминирующего направления границы в блоке – но базовая идея та же: расположить коэффициенты так, чтобы в конце были максимально длинные серии нулей. Это маленькая часть пайплайна, но та, от которой зависит всё дальнейшее.

Считаете параметры для своего продукта?

Поможем собрать энкодер-леддер и посчитать стоимость доставки – до старта разработки.