## HorizontalReduceBy2 / VerticalReduceBy2 / ReduceBy2

`HorizontalReduceBy2` (clip)
`VerticalReduceBy2` (clip)
`ReduceBy2` (clip)

`HorizontalReduceBy2` уменьшает горизонтальный размер изображения вдвое, а `VerticalReduceBy2` уменьшает вертикальный размер изображения вдвое. Если их связать в цепочку, то изображение будет уменьшено вдвое по каждой оси, для чего можно использовать просто `ReduceBy2`, что то же самое, что уменьшить сначала по горизонтали, потом по вертикали или наоборот.

Фильтр использует матрицу с весами (1/4,1/2,1/4), такую же как и фильтр "2:1 reduction (high quality)" в VirtualDub. Это предотвращает алиазинг (ступенчатость), возникающий в случае матрицы (1/2,1/2). Фильтр "resize" VirtualDub'a использует третью, еще более навороченную матрицу для уменьшения 2:1, но я экспериментировал с ней и заметил, что на самом деле она дает чуть худший результат на MPEG файлах -- возможно потому, что перешарпливает картинку (излишняя резкость), а этого кодеки не любят.

Если исходное видео - чересстрочное (interlaced), то `VerticalReduceBy2` еще и преобразует его в прогрессивное в качестве побочного эффекта (путем смешивания полей). Если планируется вывод видео размером, например, 320x240, то я советую делать захват с полным вертикальным разрешением в чересстрочном режиме и использовать `VerticalReduceBy2`. Результат будет выглядеть намного лучше. Программа Huffyuv сжимает захваченный поток примерно 2:1, без потерь качества, так что можно записать 320x480 примерно на то же дисковое пространство, что и 320x240. (Если хватит места, можно даже ставить разрешение 640x480 и использовать как `HorizontalReduceBy2`, так и `VerticalReduceBy2`. Однако это не сильно улучшит качество.)

Заметьте, что это быстрый и упрощенный фильтр (компромисс по производительности). В отличие от стандартных фильтров изменения размеров XXXresize, фильтр `ReduceBy2` не сохраняет положение центра изображения. Он смещает цветовые плоскости на полпиксела. Фактически, `ReduceBy2()` эквивалентен:

`BilinearResize(Width/2, Height/2, 0.5, -0.5)` для RGB,

`MergeChroma(BilinearResize(Width/2,Height/2,0.5,0.5),BilinearResize(Width/2,Height/2,1.0,1.0))` для YV12,

`MergeChroma(BilinearResize(Width/2,Height/2,0.5,0.5),BilinearResize(Width/2,Height/2,1.0,0.5))` для YUY2.

`$English Date: 2008/12/24 19:19:07 $
Русский перевод 25.05.2005 Alexander Nickolsky (anickol@yahoo.com)
Обновления 24.12.2008 Fizick http://www.avisynth.org.ru`