что такое ресемплинг в фотошопе
Интерполяция (Resample Image) в Фотошопе
В этом уроке Фотошопа мы рассмотрим интерполяцию в Фотошопе.
Сложность: Низкая
Дата: 17.10.2011
Обновлено: 24.08.2017
Для увеличения или уменьшения размера изображения Фотошоп использует метод Интерполяции. Так, например, при увеличении изображения, Фотошоп создает дополнительные пиксели на основе значений соседних. Грубо говоря, если один пиксель черный, а другой белый, то Фотошоп вычислит среднее значение и создаст новый пиксель серого цвета.
Некоторые виды интерполяции быстрые и некачественные, другие более сложные, но с помощью них достигаются хорошие результаты.
1. «Nearest Neighbor» (По соседним)
Этот способ редко используется для работы с фото, так как результат оставляет желать лучшего.
Здесь пиксели грубо копируются, переходы цветов получаются неровные.
2. «Bilinear» (Билинейная)
Результат от применения этого способа будет лучше.
Здесь значение новых пикселей вычисляется путем нахождения средней величины, а не просто копируется. Качество получается среднее.
3. «Bicubic» (Бикубическая)
Этот способ интерполяции работает с большим количеством смежных пикселей, производит серьезные вычисления значений этих элементов и создает новые пиксели, которые должны быть на этом месте. При небольших увеличениях фото этот способ вполне подойдет.
Версии Photoshop CS и выше предлагают два новых алгоритма интерполяции: «Bicubic Smoother» (Бикубическая глаже) и «Bicubic Sharper» (Бикубическая четче). Они видоизменяют вычисления стандартного «Бикубического» способа в зависимости от эффекта, который вы хотите получить.
4. «Bicubic Smoother» (Бикубическая глаже)
Прекрасно сделает свою работу, если вы хотите увеличить фото.
5. «Bicubic Sharper» (Бикубическая четче)
Подойдет в том случае, если вы уменьшаете фото.
Пример использования «Bicubic Sharper» (Бикубическая четче).
Есть фото, размеры 448 х 336 px разрешение 96 dpi.
Нам нужно его увеличить.
Размеры документа сразу установятся на значения 100%.
Будем постепенно увеличивать изображение.
Измените значение 100% на 110%.
Когда вы измените ширину, высота автоматически подгонится сама.
Нажмите ОК. Посмотрите на изображение.
Теперь его размеры уже 493 х 370 px.
Повторяя данные действия можно добиться хороших результатов.
Конечно, идеальной четкости нам добиться будет достаточно сложно, так как фото было маленькое и низкого разрешения.
Но посмотрите, какие изменения произошли в пикселях.
Насколько большими мы можем делать фотографии благодаря методу интерполяции?
Все зависит от качества фотографии, как оно было сделано и для каких целей вы его увеличиваете. Лучший ответ: возьмите и проверьте сами.
Photoshop CS3
Ресамплинг
изменяет объем данных изображения при изменении его размеров в пикселах либо разрешения. При (уменьшении числа пикселов) изображение теряет часть информации. При (увеличении числа пикселов или ) добавляются новые пикселы. Метод определяет, каким образом удаляются или добавляются пикселы.
В. Ресамплинг (выбранные пикселы отображаются для каждого набора изображений)
Не забывайте, что ресамплинг может привести к снижению качества изображения. Например, при ресамплинге изображения до большего размера в пикселах уменьшаются его детализация и резкость. Применение фильтра «Контурная резкость» к изображению, подвергнутому ресамплингу, может повысить резкость деталей изображения.
Избежать ресамплинга можно сканированием или созданием изображений с достаточно высоким разрешением. Для просмотра результатов изменения размеров в пикселах или печати цветопробы при различных разрешениях выполните ресамплинг дубликата исходного файла.
По соседним Быстрый, но менее точный метод, который повторяет пикселы изображения. Этот метод используется в иллюстрациях, содержащих несглаженные края, для того чтобы сохранить четкие границы и создать файл меньшего размера. Однако этот метод может создать зубчатые края, которые станут заметными при искажении или масштабировании изображения или проведении множества операций с выделением.
Билинейная Этот метод добавляет новые пикселы, рассчитывая среднее значение цвета окружающих пикселов. Он дает результат среднего качества.
Бикубическая Более медленный, но и более точный метод, основанный на анализе значений цвета окружающих пикселов. За счет использования более сложных вычислений бикубическая интерполяция дает более плавные цветовые переходы, чем интерполяция по соседним пикселам или билинейная интерполяция.
Бикубическая, глаже Хороший метод для увеличения изображений на основе бикубической интерполяции, разработанный специально для получения более гладких результатов.
Бикубическая, четче Хороший метод для уменьшения размера изображения на основе бикубической интерполяции с повышенной резкостью. Этот метод позволяет сохранить детали изображения, подвергнутого ресамплингу. Если интерполяция «Бикубическая, четче» делает слишком резкими некоторые области изображения, попробуйте воспользоваться бикубической интерполяцией.
Интерполяция в фотошопе
Очень часто задают вопрос, что такое интерполяция в фотошопе и для чего она нужна (нужна ли вообще).
Еще большую путаницу сделала новая версия фотошопа СС, в которой интерполяцией назвали ресамплинг.
В этой статье я рассказал, для чего нужна интерполяция или теперь ресамплинг, и как использовать различные виды интерполяции для уменьшения или увеличения картинки в фотошопе.
Как мы выяснили из предыдущей статьи «Разрешение в фотошопе» монитор может неверно показывать истинное разрешение изображения.
Это удобно сделать с помощью диалогового окна «Размер изображения» («Image Size»).
Оно не только показывает текущее разрешение любого открытого документа, но и позволяет вам изменить его.
В версии СС программы Photoshop это диалоговое окно было переработано и теперь включает в себя область предварительного просмотра, позволяющую видеть результаты значений, вводимых в нем до их применения, а также ряд других существенных изменений.
Чтобы вызвать это диалоговое окно и проверить разрешение документа, выберите команду меню «Изображение => Размер изображения» («Image => Image Size») или нажмите сочетание клавиш Alt+Ctrl+I.
Диалоговое окно сообщает следующую информацию о вашем изображении:
Меняя значения в полях Ширина (Width), Высота (Height) и Разрешение (Resolution), вы можете изменить размер и разрешение изображения.
Флажок Ресамплинг (Resample) (до версии фотошопа СС назывался «Интерполяция») данного диалогового окна — ваш ключ к изменению разрешения без влияния на качество изображения.
Ресамплинг («Интерполяция») — это процесс, при котором программа Photoshop реагирует на команду изменения размера, добавляя или вычитая пикселы. Проблема, заключается в том, что при ресамплинге Photoshop «строит предположения», а это может испортить качество изображения.
Когда флажок Ресамплинг («Интерполяция») установлен, программа увеличивает или уменьшает количество пикселов в изображении, для начала создавая пикселы, которых раньше не было, либо выбирая, какие из них удалить, соответственно. Сбросив этот флажок, вы защитите качество своего изображения, закрепив размер в пикселах.
Если вы планируете выводить документ на печать, отключение данного параметра позволит Вам подобрать разрешение, не меняя качество изображения, потому что вы только измените размеры пикселов, а не их количество.
Существуют два режима ресамплинга (интерполяции):
Если установлен флажок Ресамплинг («Интерполяция»), необходимо выбрать метод интерполяции в раскрывающемся списке, расположенном правее.
Зачем это может потребоваться? К примеру, если у вас есть изображение с разрешением 300ppi, размер которого составляет 10х15 см, а вам нужно изображение размером 15×20 см с таким же разрешением, то устанавливаем данный флажок. С другой стороны, если у вас очень крупное изображение, слишком большое, чтобы переслать его по электронной почте, можно применить ресамплинг (интерполяцию) для уменьшения размера изображения в пикселах (и, следовательно, размера файла).
В раскрывающемся списке Ресамплинг («Интерполяция») определяется, какие математические вычисления выбирает программа Photoshop для добавления или удаления пикселов.
Этот вариант позволяет программе Photoshop выбрать лучший метод в зависимости от содержимого изображения и того, требуется ли его увеличить или уменьшить. Этот метод также применяется инструментом Рамка (Crop) и командой Свободное трансформирование (Free Transform), a вот функция изменения размера в диалоговом окне «Сохранить для Web» (Save for Web) его не использует.
Новый метод в версии СС, усиливающий резкость в областях мелких деталей вашего изображения с целью сохранить их при увеличении (что приводит к более качественному увеличению). Недостатком является то, что при чрезмерном усилении резкости может появиться шум там, где его раньше не было.
Вот почему, когда вы выбираете этот вариант, под раскрывающимся списком появляется ползунковый регулятор «Уменьшить шум» (Noise). Перетащите его вправо, чтобы уменьшить шум. В этом случае очень удобна область просмотра диалогового окна «Размер изображения» (Image Size), так как эффект от перемещения ползункового регулятора «Уменьшить шум» (Noise) можно наблюдать в реальном времени.
Новые пикселы появляются за счет усреднения цвета пикселов вокруг нового пиксела. При этом пикселы немного размываются, чтобы можно было наложить новые пикселы на старые, придавая изображению более гладкий и естественный вид. Рекомендуется применять для увеличения изображений.
Этот метод по способу создания пикселов похож на метод Бикубическая с увеличением, однако, вместо того, чтобы размывать целые пикселы для улучшения наложения новых и старых пикселов, он смягчает только края пикселов. Рекомендуется применять данный метод для уменьшения изображений, хотя некоторые гуру Photoshop утверждают, что с его помощью выполняются также и более качественные увеличения, чем при использовании метода Бикубическая (с увеличением) (Bicubic Smoother (enlargement)).
Этот метод позволяет определить цвета новых пикселов, усреднив цвета пикселов вокруг нового пиксела. Этот метод занимает больше времени, чем предыдущие два, но создает более плавный переход в областях, где один цвет заменяется другим.
Это метод дает самое низкое качество изображения. В этом случае программа ориентируется на цвета пикселов, окружающих новые, и копирует их. Этот способ создает неровные края, поэтому стоит применять его только к изображениям с резкими краями, таким как иллюстрации, которые не были сглажены.
Указывает программе Photoshop, что необходимо угадать цвет новых пикселов, выбрав нечто среднее между цветом пикселов, расположенных непосредственно выше и ниже, а также слева и справа от добавляемого. Результат данного метода чуть лучше, чем при выборе варианта «По соседним пикселам (четкие края) (Nearest Neighbor)», к тому же он быстрее, но все же рекомендуется использовать другие методы.
Вот и все, что я хотел сказать об интерполяции в фотошопе.
Теперь Вы вооружены новыми знаниями и будете уже не в слепую увеличивать или уменьшать размер фотографии или иного документа.
Спасибо за прочтение.
Жду Ваши вопросы и комментарии в форме ниже статьи.
Подписывайтесь на рассылку новых статей и уроков от сайта PhotoshopSunduchok (все разделы фотошопа):
Комментарии
S-Spline XL
S-Spline
Lanczos
Бикубический
B-Spline
Catmull-Rom
Mitchell
Bell
Hermite
Билинейный
Ближайший сосед
Можете ли Вы дать разъяснения?
Очень благодарен за Вашу работу
СПАСИБО за полезный урок!
Часто приходится уменьшать/увеличиват ь картинки.
Ваше разъяснение как раз сделает эти преобразования еще качественнее.
Ликбез: методы ресайза изображений
Почему изображение, масштабированное с бикубической интерполяцией, выглядит не как в Фотошопе. Почему одна программа ресайзит быстро, а другая — нет, хотя результат одинаковый. Какой метод ресайза лучше для увеличения, а какой для уменьшения. Что делают фильтры и чем они отличаются.
Вообще, это было вступлением к другой статье, но оно затянулось и вылилось в отдельный материал.
Этот человек сидит среди ромашек, чтобы привлечь ваше внимание к статье.
Для наглядного сравнения я буду использовать изображения одинакового разрешения 1920×1280 (одно, второе), которые буду приводить к размерам 330×220, 1067×667 и 4800×3200. Под иллюстрациями будет написано, сколько миллисекунд занял ресайз в то или иное разрешение. Цифры приведены лишь для понимания сложности алгоритма, поэтому конкретное железо или ПО, на котором они получены, не так важно.
Ближайший сосед (Nearest neighbor)
Это самый примитивный и быстрый метод. Для каждого пикселя конечного изображения выбирается один пиксель исходного, наиболее близкий к его положению с учетом масштабирования. Такой метод дает пикселизированное изображение при увеличении и сильно зернистое изображение при уменьшении.
Вообще, качество и производительность любого метода уменьшения можно оценить по отношению количества пикселей, участвовавших в формировании конечного изображения, к числу пикселей в исходном изображении. Чем больше это отношение, тем скорее всего алгоритм качественнее и медленнее. Отношение, равное одному, означает что как минимум каждый пиксель исходного изображения сделал свой вклад в конечное. Но для продвинутых методов оно может быть и больше одного. Дак вот, если например мы уменьшаем изображение методом ближайшего соседа в 3 раза по каждой стороне, то это соотношение равно 1/9. Т.е. большая часть исходных пикселей никак не учитывается.
1920×1280 → 330×220 = 0,12 ms
1920×1280 → 1067×667 = 1,86 ms
1920×1280 → 4800×3200 = 22,5 ms
Теоретическая скорость работы зависит только от размеров конечного изображения. На практике при уменьшении свой вклад вносят промахи кеша процессора: чем меньше масштаб, тем меньше данных используется из каждой загруженной в кеш линейки.
Метод осознанно применяется для уменьшения крайне редко, т.к. дает очень плохое качество, хотя и может быть полезен при увеличении. Из-за скорости и простоты реализации он есть во всех библиотеках и приложениях, работающих с графикой.
Аффинные преобразования (Affine transformations)
Аффинные преобразования — общий метод для искажения изображений. Они позволяют за одну операцию повернуть, растянуть и отразить изображение. Поэтому во многих приложениях и библиотеках, реализующих метод аффинных преобразований, функция изменения изображений является просто оберткой, рассчитывающей коэффициенты для преобразования.
Принцип действия заключается в том, что для каждой точки конечного изображения берется фиксированный набор точек исходного и интерполируется в соответствии с их взаимным положением и выбранным фильтром. Количество точек тоже зависит от фильтра. Для билинейной интерполяции берется 2×2 исходных пикселя, для бикубической 4×4. Такой метод дает гладкое изображение при увеличении, но при уменьшении результат очень похож на ближайшего соседа. Смотрите сами: теоретически, при бикубическом фильтре и уменьшении в 3 раза отношение обработанных пикселей к исходным равно 4² / 3² = 1,78. На практике результат значительно хуже т.к. в существующих реализациях окно фильтра и функция интерполяции не масштабируются в соответствии с масштабом изображения, и пиксели ближе к краю окна берутся с отрицательными коэффициентами (в соответствии с функцией), т.е. не вносят полезный вклад в конечное изображение. В результате изображение, уменьшенное с бикубическим фильтром, отличается от изображения, уменьшенного с билинейным, только тем, что оно еще более четкое. Ну а для билинейного фильтра и уменьшения в три раза отношение обработанных пикселей к исходным равно 2² / 3² = 0.44, что принципиально не отличается от ближайшего соседа. Фактически, аффинные преобразования нельзя использовать для уменьшения более чем в 2 раза. И даже при уменьшении до двух раз они дают заметные эффекты лесенки для линий.
Теоретически, должны быть реализации именно аффинных преобразований, масштабирующие окно фильтра и сам фильтр в соответствии с заданными искажениями, но в популярных библиотеках с открытым исходным кодом я таких не встречал.
1920×1280 → 330×220 = 6.13 ms
1920×1280 → 1067×667 = 17.7 ms
1920×1280 → 4800×3200 = 869 ms
Время работы заметно больше, чем у ближайшего соседа, и зависит от размера конечного изображения и размера окна выбранного фильтра. От промахов кеша уже практически не зависит, т.к. исходные пиксели используются как минимум по двое.
Мое скромное мнение, что использование этого способа для произвольного уменьшения изображений попросту является багом, потому что результат получается очень плохой и похож на ближайшего соседа, а ресурсов на этот метод нужно значительно больше. Тем не менее, этот метод нашел широкое применение в программах и библиотеках. Самое удивительное, что этот способ используется во всех браузерах для метода канвы drawImage() (наглядный пример), хотя для простого отображения картинок в элементе используются более аккуратные методы (кроме IE, в нем для обоих случаев используются аффинные преобразования). Помимо этого, такой метод используется в OpenCV, текущей версии питоновской библиотеки Pillow (об этом я надеюсь написать отдельно), в Paint.NET.
Кроме того, именно этот метод используется видеокартами для отрисовки трехмерных сцен. Но разница в том, что видеокарты для каждой текстуры заранее подготавливают набор уменьшенных версий (mip-уровней), и для окончательной отрисовки выбирается уровень с таким разрешением, чтобы уменьшение текстуры было не более двух раз. Кроме этого, для устранения резкого скачка при смене mip-уровня (когда текстурированный объект приближается или отдаляется), используется линейная интерполяция между соседними mip-уровнями (это уже трилинейная фильтрация). Таким образом для отрисовки каждого пикселя трехмерного объекта нужно интерполировать между 2³ пикселями. Это дает приемлемый для быстро движущейся картинки результат за время, линейное относительно конечного разрешения.
Суперсемплинг (Supersampling)
С помощью этого метода создаются те самые mip-уровни, с помощью него (если сильно упростить) работает полноэкранное сглаживание в играх. Его суть в разбиении исходного изображения по сетке пикселей конечного и складывании всех исходных пикселей, приходящихся на каждый пиксель конечного в соответствии с площадью, попавшей под конечный пиксель. При использовании этого метода для увеличения, на каждый пиксель конечного изображения приходится ровно один пиксель исходного. Поэтому результат для увеличения равен ближайшему соседу.
Можно выделить два подвида этого метода: с округлением границ пикселей до ближайшего целого числа пикселей и без. В первом случае алгоритм становится малопригодным для масштабирования меньше чем в 3 раза, потому что на какой-нибудь один конечный пиксель может приходиться один исходный, а на соседний — четыре (2×2), что приводит к диспропорции на локальном уровне. В то же время алгоритм с округлением очевидно можно использовать в случаях, когда размер исходного изображения кратен размеру конечного, или масштаб уменьшения достаточно мал (версии разрешением 330×220 почти не отличаются). Отношение обработанных пикселей к исходным при округлении границ всегда равно единице.
1920×1280 → 330×220 = 7 ms
1920×1280 → 1067×667 = 15 ms
1920×1280 → 4800×3200 = 22,5 ms
Подвид без округления дает отличное качество при уменьшении на любом масштабе, а при увеличении дает странный эффект, когда большая часть исходного пикселя на конечном изображении выглядит однородной, но на краях видно переход. Отношение обработанных пикселей к исходным без округления границ может быть от единицы до четырех, потому что каждый исходный пиксель вносит вклад либо в один конечный, либо в два соседних, либо в четыре соседних пикселя.
1920×1280 → 330×220 = 19 ms
1920×1280 → 1067×667 = 45 ms
1920×1280 → 4800×3200 = 112 ms
Производительность этого метода для уменьшения ниже, чем у аффинных преобразований, потому что в расчете конечного изображения участвуют все пиксели исходного. Версия с округлением до ближайших границ обычно быстрее в несколько раз. Также возможно создать отдельные версии для масштабирования в фиксированное количество раз (например, уменьшение в 2 раза), которые будут еще быстрее.
Данный метод используется в функции gdImageCopyResampled() библиотеки GD, входящей в состав PHP, есть в OpenCV (флаг INTER_AREA), Intel IPP, AMD Framewave. Примерно по такому же принципу работает libjpeg, когда открывает изображения в уменьшенном в несколько раз виде. Последнее позволяет многим приложениям открывать изображения JPEG заранее уменьшенными в несколько раз без особых накладных расходов (на практике libjpeg открывает уменьшенные изображения даже немного быстрее полноразмерных), а затем применять другие методы для ресайза до точных размеров. Например, если нужно отресайзить JPEG разрешением 1920×1280 в разрешение 330×220, можно открыть оригинальное изображение в разрешении 480×320, а затем уменьшить его до нужных 330×220.
Свертки (Convolution)
Этот метод похож на аффинные преобразования тем, что используются фильтры, но имеет не фиксированное окно, а окно, пропорциональное масштабу. Например, если размер окна фильтра равен 6, а размер изображения уменьшается в 2,5 раза, то в формировании каждого пикселя конечного изображения принимает участие (2,5 * 6)² = 225 пикселей, что гораздо больше, чем в случае суперсемплинга (от 9 до 16). К счастью, свертки можно считать в 2 прохода, сначала в одну сторону, потом в другую, поэтому алгоритмическая сложность расчета каждого пикселя равна не 225, а всего (2,5 * 6) * 2 = 30. Вклад каждого исходного пикселя в конечный как раз определяется фильтром. Отношение обработанных пикселей к исходным целиком определяется размером окна фильтра и равно его квадрату. Т.е. для билинейного фильтра это отношение будет 4, для бикубического 16, для Ланцоша 36. Алгоритм прекрасно работает как для уменьшения, так и для увеличения.
1920×1280 → 330×220 = 76 ms
1920×1280 → 1067×667 = 160 ms
1920×1280 → 4800×3200 = 1540 ms
Скорость работы этого метода зависит от всех параметров: размеров исходного изображения, размера конечного изображения, размера окна фильтра.
Именно этот метод реализован в ImageMagick, GIMP, в текущей версии Pillow с флагом ANTIALIAS.
Одно из преимуществ этого метода в том, что фильтры могут задаваться отдельной функцией, никак не привязанной к реализации метода. При этом функция самого фильтра может быть достаточно сложной без особой потери производительности, потому что коэффициенты для всех пикселей в одном столбце и для всех пикселей в одной строке считаются только один раз. Т.е. сама функция фильтра вызывается только (m + n) * w раз, где m и n — размеры конечного изображения, а w — размер окна фильтра. И наклепать этих функций можно множество, было бы математическое обоснование. В ImageMagick, например, их 15. Вот как выглядят самые популярные:
Примечательно, что некоторые фильтры имеют зоны отрицательных коэффициентов (как например бикубический фильтр или фильтр Ланцоша). Это нужно для придания переходам на конечном изображении резкости, которая была на исходном.