Йожык вне тумана (youzhick) wrote,
Йожык вне тумана
youzhick

Интерполяция в Photoshop CS6

На днях Паша Косенко писал о коварном фотошопе CS6, который по умолчанию выставляет при ресайзе тип интерполяции "Bicubic Automatic", что может приводить к крайне неприятным результатам.

Себе-то я сразу выставил обычный Bicubic, чтобы фотошоп не занимался самодеятельностью, но раз проблема актуальна, решил сейчас немного поковыряться с этим автоматиком, а заодно и другие типы интерполяции потестить. Помимо прочего, в комментах к упомянутому посту кто-то озвучил весьма расхожую легенду о том, что при изменении размера в кратное двум число раз (x2, x4, x8...) все типы интерполяции работают одинаково. Легенда эта из тех, ошибочность которых быстрее показать, чем объяснить - и этим тоже займемся.

Для ленивых, которым нужны только выводы:
1. Введенный в CS6 (и сделанный дефолтным) тип интерполяции Bicubic Automatic не является реализацией какого-то самостоятельного алгоритма, а лишь выбирает один из старых бикубиков в зависимости от ситуации. При уменьшении картинки он использует Bicubic Sharper, при увеличении - Bicubic Smoother, а при геометрических трансформациях - обычный Bicubic.
2. Да, на геометрические трансфорамции установка типа интерполяции тоже влияет.
3. Более того, влияет она и на фильтры группы Distort. Хотя, влияет как-то странно и, сдается мне, это влияние - баг, а не фича.
4. Легенда о кратном двум изменении размеров - всего лишь легенда. При ровно двукратном уменьшении все типы интерполяции выдают разный результат.

Ну, а под катом - иллюстрированная версия для не ленивых.





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




Все иллюстрации ниже построены по общему принципу: каждая строка соответствует одному типу интерполяции; слева картинка, пропущенная через какое-нибудь преобразование, а справа - она же с наложенной поверх версией Bicubic Automatic в режиме наложения Difference. В столбце с Difference-наложением дополнительно поднята яркость (везде одинаково), чтобы сделать более заметными небольшие отличия.

Тестил я не совсем вслепую. Раз уж в списке типов интерполяции к ним приписаны рекомендации (best for reduction, best for enlargement), то логично предположить, что автоматик в случае его несамостоятельности работает по-разному при уменьшении и увеличении. Поэтому, начнем с увеличения и уменьшения тестовой картинки.

Уменьшение в 2 раза (заодно и легенду проверим):



Хорошо видно, что картинка, полученная с Bicubic Automatic полностью эквивалентна картинке с Bicubic Sharper. Кроме того, по Difference-столбцу очевидны различия между ВСЕМИ остальными методами, т.е. никакой одинаковости методов для магических кратных двум степеней уменьшения нет.

Для очистки совести проверим другие степени уменьшения. Очень сильно уменьшенная картинка:



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

Теперь увеличение. Полную сравнительную картинку привожу опять ссылкой, а ниже кропнутый кусок, сравнения которого, в общем, вполне достаточно:



Как и предполагалось: при увеличении картинка, выдаваемая Bicubic Automatic, стала совпадать с версией Bicubic Smoother.


Но ресайз - это еще не все. Тип интерполяции можно задавать не только в окне ресайза, но и в настройках самого фотошопа (Edit -> Preferences -> General -> Image Interpolation). Установленный здесь тип интерполяции выбирается по умолчанию в окне ресайза и используется в инструментах, не спрашивающих явно, как интерполировать цвет пикселей.

Вот, например, как влияет тип интерполяции на 30-градусный поворот картинки. Полная версия опять по ссылке, а ниже показательный кроп:



Занятно. Здесь уже результат Bicubic Automatic стал эквивалентен старому доброму обычному Bicubic. Аналогично обстоят дела и с прочими геометрическими трансформациями.

Помимо реайза и стандартных трансформаций с интерполяцией пикселей работают еще фильтры группы Distort. Вообще, я ожидал, что фильтры окажутся независимы от дефолтного типа интерполяции и будут выбирать его сами. Но реальность оказалась хитрее. Вот что происходит при Pinch'е (полная версия по ссылке, кроп ниже):



Я бы сказал, похоже на то, что Pinch различает только два типа интерполяции: "Nearest Neighbor" и "Все остальные". Вот только Nearest Neighbor он использует, когда в дефолтных установках фотошопа установлен Bilinear. И это не моя промашка - специально проверял несколько раз. Аналогичным странным образом ведут себя и остальные фильтры группы Distort (проверял на Wave и Polar Coordinates). Очень может статься, что это глюк, и в каком-нибудь патче он будет исправлен.

Вот как-то так это все и работает. Красивых вам картинок и гладких функций :)
Tags: Заметки
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 11 comments