Йожык вне тумана (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: Заметки
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 11 comments