С TauWiki

Photo: Resampling: сжать и не испортить!

Прежде, чем фотографию опубликовать в Сети ее размер нужно уменьшить. Как минимум потому, что размер мониторов отстает от размеров картинки и это отставание, я думаю, будет только усугубляться со временем. Проблема в том, что при уменьшении размера (ресэмплинге) четкость изображения уменьшается. Причина этому проста: при уменьшании изображения количество пикселов, например, по горизонтали уменьшается; в каждый пиксел итогового изображения нужно упихнуть несколько пикселей исходного, которые естественно, разные по цвету и яркости. В редакторах для этого применяются разные алгоритмы, но в любом случае, цвет и яркость пикселей придется усреднить и присвоить новой точке. А что если здесь проходила четка граница света и тени: половина пикселов строго белая, другая - строго черная? В результате мы получим серый итоговый пиксел, терминатор размылится.

Правильный выход - после ресэмплинга пройтись фильтром повышения четкости.

Для больших объемов этот метод неподходит вот почему: фотографии нужно не только в Сеть выкладывать (800x600), но и дома смотреть (1600x1200) и печатать (исходный размер). По каждой фотографии трижды фильтром проходить - это слишком нудно!

Хочется иметь оптимальный метод ресэмплинга, от которого не страдает четкость.

В Сети ходит легенда о последовательном ресэмплинге. Идея ее в том, чтобы уменьшать размер картинки не одним действием ImageSize, а в несколько шагов. Называются даже таинственные цифры: 1/(корень из 2) за один раз. Пробовал ли кто это в деле и сравнивал ли результаты? Я попробовал. Результат сравнений здесь.

В PS CS3 в ImageSize есть несколько режимов ресэмплинга. "По соседу" и "линейный" мы отбрасываем как примитивные, бикубический имеет три ипостаси: "для гладкого градиента" (smooth grdient; раньше он назывался, кажется, как-то "для уменьшения веса"...), "для увеличения" (enlagement; не наш случай) и "для уменьшения" (reduction; раньше он назывался "для четкости") - именно на него и поглядываем.

Фотография была подготовлена с необходимой четкостью в "полнопиксельном" формате 4272x2878, а затем ужата до 718x479 четырьмя различными способами:

Из уменьшенной картинки вырезался кусочек и сохранялся в формате .jpg с максимальным качеством. (Фотографии целиком доступны здесь: http://virtualphotoalbum.tau-site.ru/2008Test_Resampling/index.htm .)

 один шагпоследовательно
мягкомягко за размягко последовательно
четкочетко за разчетко последовательно

Визуально заметить различия довольно сложно. Анализ результата "под лупой" и с вычитанием слоев позволяет сделать следующие выводы.

  1. Метод "последовательных шагов" не работает: изображения "мягко за раз" и "мягко последовательно" идентичны (с точностью до сдвига на полупиксел); вероятно, концепция "последовательных шагов" сложилась, когда бикубический ресэмплинг еще не был реализован в редакторах (он требует большего счета) и применялась для уменьшения деффектов линейной интерполяции (это мое предположение, но проверять его эксперементально мне неинтересно);
  2. четкость итогового изображения "четко последовательно" > "четко за раз" > "мягко"; при этом, очевидно, "четко последовательно" стало таким четким не из-за применения концепции "последовательных шагов", а просто потому, что заложенное в нем увеличение четкости сработало несколько раз;
  3. "мягкий" ресэплинг очень похож по четкости на исходную большую фотографию, соответственно смасштабированную, что, впрочем, не удивительно: масштабирование делает тоже самое, только на лету! - правда, по, вероятно, линейному алгоритму и менее качественно, чем бикубический полноценный ресэмплинг.

Вывод: современные алгоритмы обычного (smooth grdient) бикубического ресэмплинга дают вполне адекватные результаты.

По прошествии времени в Фотошопе CS и выше появились различные варианты ресайза, требующие дополнительного исследования. Впрочем, главный вывод остается прежним: метод "последовательных шагов" избыточен.

Chapay — 03 March 2009, 02:00

В-принципе, согласен с выводами. Метод "последовательно-чётко" даёт излишнию резкость. Но если нужно ещё больше сжать картинку, то всё же фильтр резкости всё же необходим на участках, содержажих мелкие детали (если нужно обозначить их присутствие). Пришёл к этому, сжимая фотографии деталей для сайта от примерно 3000х2000 до 250х... или даже 150х...

Получено с http://www.tau-site.ru/wiki/index.php?n=Photo.Resampling
Последняя редакция от 08.09.2011 11:22