Какой алгоритм изменения размера выбрать для видео?

21

Я использую VirtualDub для кодирования с этими настройками . алгоритмы изменения размера

Однако я записываю свои вещи в 1920x1080 и уменьшаю их до 1280x720. Теперь вопрос: какой алгоритм выбрать при принятии решения о соотношении качества и размера файла?

Я всегда ездил с Lanczos, потому что это то, что было предварительно настроено. Эти описания совсем не помогают мне в моем вопросе.

Сварливый медведь
источник

Ответы:

25

TL; DR

При выборке вниз: используйте фильтрацию Ланцоша или Сплайна.

При взятии проб: используйте фильтрацию Бикуба или Ланцоша.

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

Почему это имеет значение?

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

Все эти фильтры оказывают лишь незначительное влияние на размер файла. Поэтому вам не стоит беспокоиться об огромных различиях.

Факт, как всегда при кодировании видео, что результат сильно зависит от исходного материала. Вы не всегда можете предсказать результат, но просто посмотрите, что работает лучше для вас.

Разные алгоритмы

В качестве примера приведем бикубическую и билинейную интерполяцию :

     введите описание изображения здесь

Видите, что бикубическая интерполяция приводит к более гладким краям? Это очень общее утверждение ... но вы можете найти обзор алгоритмов масштабирования изображения здесь .

  • Билинейная интерполяция использует среду пикселя 2x2, а затем использует среднее значение этих пикселей для интерполяции нового значения. Это не лучший алгоритм, но довольно быстрый.

  • Бикубическая интерполяция использует среду пикселя 4x4, взвешивая самые внутренние пиксели выше, а затем берет среднее значение для интерполяции нового значения. Это - насколько я понимаю - самый популярный.

  • При усреднении области используется сопоставление исходных и целевых пикселей, при этом усреднение исходных пикселей осуществляется с учетом доли покрываемых пикселей назначения. Согласно этой странице , она должна давать лучшие результаты при понижении частоты дискретизации.

  • Сплайн и синк интерполяция используют полиномы более высокого порядка и поэтому сложнее вычислить, чем бикубическая интерполяция. Я не думаю, что общее увеличение времени обработки стоит того, чтобы их использовать.

  • Повторная выборка Lanczos также включает в себя фильтр sinc. Это дороже в вычислительном отношении, но обычно описывается как очень высокое качество и может использоваться для повышения и понижения частоты дискретизации.

  • Фильтры hqx и 2xSaI используются для масштабирования пиксельной графики (например, игровые эмуляторы). Я не думаю, что есть веская причина использовать их в видео.

Сравнение Джеффа Этвуда

Оказывается, Джефф Этвуд провел сравнение алгоритмов интерполяции изображений . Его эмпирическое правило состояло в том, чтобы использовать бикубическую интерполяцию для понижающей дискретизации и билинейную интерполяцию при повышающей дискретизации. Тем не менее, это не то, что обычно рекомендуется для кодирования видео - и некоторые комментаторы ставят под сомнение опыт Atwood в этой области.

Тем не менее, он также отметил, что ...

Уменьшение изображений - абсолютно безопасная и рациональная операция. Вы просто снижаете точность и разрешение, отбрасывая информацию. Сделайте изображение настолько маленьким, насколько вы хотите, и вы получите полную точность - в пределах количества пикселей, которое вы разрешаете. Вы получите хорошие результаты независимо от того, какой алгоритм вы выберете. (Ну, если вы не выберете алгоритмы изменения размера нефа Pixel или Nearest Neighbor.)

Другие примеры

Вот еще несколько примеров алгоритмов интерполяции изображений , в том числе те, которые я упоминал выше.

Я также нашел документы (правила сцены) из сцены кодирования видео, которые явно запрещают бикубическую фильтрацию для понижающей дискретизации. Вместо этого они одобряют повторную выборку Lanczos, Spline или «Blackman».

slhck
источник
Раньше я всегда использовал «точную бикубическую А = 100». При переустановке обновленной программы это был дефолт Ланцоша, многим это понравилось. Я оставил это так долго. В конце концов, я приступил к просмотру закодированных позже вещей Ланцоша, и подумал, что это не очень хорошо, следующий набор кодов, я снова переключил его на бикубический. Я также использовал сжатие, я думаю, что Lanczos мог бы показаться лучше, если бы я не пытался так сильно уменьшить общий объем данных.
Psycogeek
2
Я не считаю Джеффа Этвуда экспертом в обработке изображений, и в этой статье он не рассматривает ничего, кроме билинейного, ближайшего соседа или (одного конкретного варианта) бикубического. Большинство людей согласились бы с его рекомендацией использовать билинейный режим, когда увеличение является плохим.
Томасруттер
1
@thomasrutter Спасибо. Я согласен с вами - когда я писал это, я, вероятно, знал об обработке изображений не так много, как сейчас. Думаю, я удалю ссылку на эту статью и найду другой источник.
Slhck
9

Я нашел хорошее изображение, которое документирует некоторые из них.

введите описание изображения здесь

Полная версия здесь .

В общем, вы хотите получить эффект мягкой резкости при превращении большего изображения в более мелкое, и эффект мягкого размытия при превращении меньшего изображения в более крупное. По умолчанию для фильтра MadVR установлено значение Lanczos для увеличения масштаба изображения и бикубическое для уменьшения масштаба.

Джефф Этвуд
источник
2

Вы преобразуете 3x3 исходных пикселей в 2x2 целевых пикселей.

Если вы хотите сохранить четкие линии, выберите Lanczos или что-то, что использует больше окружающих пикселей, чтобы не размыть резкие линии (например, мех или отражения)

В противном случае будет достаточно средней площади и т. Д. (Также билинейной / трилинейной).

Заб
источник