Основы оцифровки. Типы сканирующих устройств. Пример вращения изображения. Описание метода интерполяции

Основы оцифровки. Типы сканирующих устройств. Пример вращения изображения. Описание метода интерполяции

Рынок мобильных телефонов заполнен моделями с камерами с огромными разрешениями. Встречаются даже относительно недорогие смартфоны с сенсорами разрешением 16-20 Мп. Незнающий покупатель гонится за "крутой" камерой и отдает предпочтение тому телефону, у которого разрешение камеры выше. Он даже и не догадывается, что попадается на удочку маркетологов и продавцов.

Что такое разрешение?

Разрешение камеры - это параметр, который указывает на конечный размер изображения. Он определяет только то, насколько полученное изображение будет большим, то есть его ширину и высоту в пикселях. Важно: качество картинки при этом не изменяется. Фотография может получиться некачественной, но большой из-за разрешения.

Разрешение не влияет на качество. Нельзя было не упомянуть об этом в контексте интерполяции камеры смартфона. Теперь можно переходить непосредственно к сути.

Что такое интерполяция камеры в телефоне?

Интерполяция камеры - это искусственное увеличение разрешения изображения. Именно изображения, а не То есть это специальное программное обеспечение, благодаря которому снимок с разрешением 8 Мп интерполируется до 13 Мп или больше (или меньше).

Если проводить аналогию, то интерполяция камеры подобна или биноклю. Эти устройства увеличивают изображение, но не делают его более качественным или детализированным. Так что если в характеристиках к телефону указана интерполяция, то фактическое разрешение камеры может быть ниже заявленного. Это не плохо и не хорошо, это просто есть.

Для чего это нужно?

Интерполяцию придумали для увеличения размера изображения, не более того. Сейчас это уловка маркетологов и производителей, которые пытаются продать продукт. Они большими цифрами указывают на рекламном постере разрешение камеры телефона и позиционируют это как преимущество или нечто хорошее. Мало того, что само по себе разрешение не оказывает влияния на качество фотографий, так оно еще может быть интерполировано.

Буквально 3-4 года тому назад многие производители гнались за количеством мегапикселей и разными способами пытались впихнуть их в свои смартфоны сенсоры с как можно большим числом. Так появлялись смартфоны с камерами с разрешением 5, 8, 12, 15, 21 Мп. Фотографировать они при этом могли как самые дешевые мыльницы, но покупатели, увидев наклейку "Камера на 18 Мп", сразу хотели купить такой телефон. С появлением интерполяции продавать такие смартфоны стало проще из-за возможности искусственно добавить мегапикселей камере. Конечно, качество фото со временем начало расти, но точно не из-за разрешения или интерполяции, а из-за естественного прогресса в плане разработки сенсоров и программного обеспечения.

Техническая сторона

Что такое интерполяция камеры в телефоне технически, ведь весь текст выше описывал только основную идею?

С помощью специального программного обеспечения на изображении "рисуются" новые пиксели. Например, для увеличения изображения в 2 раза после каждой строки пикселей картинки добавляется новая строка. Каждый пиксель в этой новой строке заполняется цветом. Цвет заливки высчитывается специальным алгоритмом. Самый первый способ - залить новую строку цветами, которыми обладают ближайшие пиксели. Результат такой обработки будет ужасным, но зато подобный способ требует минимум вычислительных операций.

Чаще всего используется другой метод. То есть на исходное изображение добавляются новые строки пикселей. Каждый пиксель заливается цветом, который, в свою очередь, вычисляется как среднее значение соседних пикселей. Этот способ дает лучшие результаты, но требует больше вычислительных операций.

Благо, современные мобильные процессоры быстры, и на практике пользователь не замечает, как программа редактирует изображение, пытаясь искусственно увеличить его размер.

Есть много продвинутых способов и алгоритмов интерполяции, которые совершенствуются постоянно: улучшаются границы перехода между цветами, линии становятся более точными и четкими. Неважно, как построены все эти алгоритмы. Сама идея интерполяции камеры банальна и вряд ли приживется в ближайшем будущем. С помощью интерполяции невозможно сделать изображение более детализированным, добавить новые детали или улучшить его каким-либо еще образом. Только в фильмах маленькая размытая картинка после наложения пары фильтров становится четкой. На практике такого быть не может.

Нужна ли вам интерполяция?

Многие пользователи по своему незнанию задают на разных форумах вопросы, как сделать интерполяцию камеры, полагая, что это улучшит качество изображений. На самом деле интерполяция не только не улучшит качество картинки, но даже может сделать хуже, ведь к фотографиям будут добавляться новые пиксели, и из-за не всегда точного вычисления цветов для заливки на фото могут быть недетализированные участки, зернистость. В результате качество падает.

Так что интерполяция в телефоне - это маркетинговая уловка, которая совершенно не нужна. Она может увеличивать не только разрешение фото, но и стоимость самого смартфона. Не попадайтесь на уловки продавцов и производителей.

Интерполяция изображений происходит во всех цифровых фотографиях на определённом этапе, будь то дематризация или масштабирование. Она происходит всякий раз, когда вы изменяете размер или развёртку изображения из одной сетки пикселей в другую. Изменение размера изображения необходимо,когда вам нужно увеличить или уменьшить число пикселей, тогда как изменение положения может происходить в самых различных случаях: исправление искажений объектива, смена перспективы или поворот изображения.

Даже если изменению размера или развёртки подвергается одно и то же изображение, результаты могут значительно отличаться в зависимости от алгоритма интерполяции. Поскольку любая интерполяция является всего лишь приближением, изображение будет несколько терять в качестве всякий раз, когда подвергается интерполяции. Данная глава призвана обеспечить лучшее понимание того, что оказывает влияние на результат, - и тем самым помочь вам минимизировать любые потери качества изображения, вызванные интерполяцией.

Концепция

Суть интерполяции заключается в использовании имеющихся данных для получения ожидаемых значений в неизвестных точках. Например, если вам захотелось знать, какова была температура в полдень, но измеряли её в 11 и в час, можно предположить её значение, применив линейную интерполяцию:

Если бы у вас имелось дополнительное измерение в половине двенадцатого, вы могли бы заметить, что до полудня температура росла быстрее, и использовать это дополнительное измерение для квадратической интерполяции:

Чем больше измерений температуры вы будете иметь около полудня,тем более комплексным (и ожидаемо более точным) может быть ваш алгоритм интерполяции.

Пример изменения размера изображения

Интерполяция изображений работает в двух измерениях и пытается достичь наилучшего приближения в цвете и яркости пикселя, основываясь на значениях окружающих пикселей. Следующий пример иллюстрирует работу масштабирования:

оригинал до после без интерполяции

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

Пример вращения изображения

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

оригинал поворот на 45 поворот на 90 (без потерь) 2 поворота на 45° 6 поворотов на 15°

Поворот на 90° не вносит потерь, поскольку ни один пиксель не требуется поместить на границу между двумя (и как следствие разделить). Заметьте, как большая часть деталей теряется при первом же повороте, и как качество продолжает падать при последующих. Это означает, что следует избегать вращений, насколько возможно; если неровно выставленный кадр требует поворота, не следует вращать его более одного раза.

Вышеприведенные результаты используют так называемый «бикубический» алгоритм и показывают существенное ухудшение качества. Обратите внимание, как снижается общий контраст в связи со снижением интенсивности цвета, как вокруг светло-синего возникают тёмные гало. Результаты могут быть значительно лучше в зависимости от алгоритма интерполяции и изображаемого предмета.

Типы алгоритмов интерполяции

Общепринятые алгоритмы интерполяции можно поделить на две категории: адаптивные и неадаптивные. Адаптивные методы изменяются в зависимости от предмета интерполяции (резкие границы, гладкая текстура), тогда как неадаптивные методы обрабатывают все пиксели одинаково.

Неадаптивные алгоритмы включают: метод ближайшего соседа, билинейный, бикубический, сплайны, функция кардинального синуса (sinc), метод Ла́нцоша и другие. В зависимости от сложности, они используют от 0 до 256 (или более) смежных пикселей для интерполяции. Чем более смежных пикселей они включают, тем более точными могут оказаться, но это достигается за счёт значительного прироста времени обработки. Эти алгоритмы могут использоваться как для развёртки, так и для масштабирования изображения.

Адаптивные алгоритмы включают в себя многие коммерческие алгоритмы в лицензированных программах, таких как Qimage, PhotoZoom Pro, Genuine Fractals и другие. Многие из них применяют различные версии своих алгоритмов (на основе попиксельного анализа), когда обнаруживают наличие границы - с целью минимизировать неприглядные дефекты интерполяции в местах, где они наиболее видны. Эти алгоритмы в первую очередь разработаны для максимизации бездефектной детальности увеличенных изображений, так что некоторые из них для вращения или изменения перспективы изображения непригодны.

Метод ближайшего соседа

Это наиболее базовый из всех алгоритмов интерполяции, который требует наименьшего времени обработки, поскольку учитывает только один пиксель - ближайший к точке интерполяции. В результате каждый пиксель просто становится больше.

Билинейная интерполяция

Билинейная интерполяция рассматривает квадрат 2x2 известных пикселя, окружающих неизвестный. В качестве интерполированного значения используется взвешенное усреднение этих четырёх пикселей. В результате изображения выглядят значительно более гладко, чем результат работы метода ближайшего соседа.

Диаграмма слева относится к случаю, когда все известные пиксели равны, так что интерполированное значение просто является их суммой, поделенной на 4.

Бикубическая интерполяция

Бикубическая интерполяция идёт на один шаг дальше билинейной, рассматривая массив из 4x4 окружающих пикселей - всего 16. Поскольку они находятся на разных расстояниях от неизвестногопикселя, ближайшие пиксели получают при расчёте больший вес. Бикубическая интерполяция производит значительно более резкие изображения, чем предыдущие два метода, и возможно, является оптимальной по соотношению времени обработки и качества на выходе. По этой причине она стала стандартной для многих программ редактирования изображений (включая Adobe Photoshop), драйверов принтеров и встроенной интерполяции камер.

Интерполяция высшего порядка: сплайны и sinc

Есть много других интерполяторов, которые принимают во внимание больше окружающих пикселей и таким образом требуют более интенсивных вычислений. Эти алгоритмы включают в себя сплайны и кардинальный синус (sinc), и они сохраняют большинство информации об изображении после интерполяции. Как следствие, они являются исключительно полезными, когда изображение требует нескольких поворотов или изменений перспективы за отдельные шаги. Однако, для однократных увеличений или поворотов такие алгоритмы высшего порядка дают незначительное визуальное улучшение при существенном увеличении времени обработки. Более того, в некоторых случаях алгоритм кардинального синуса на гладком участке отрабатывает хуже, чем бикубическая интерполяция.

Наблюдаемые дефекты интерполяции

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

оригинал ступенчатость размытие гало

Даже наиболее развитые неадаптивные интерполяторы всегда вынуждены увеличивать или уменьшать один из вышеприведенных дефектов за счёт двух других - как следствие, как минимум один из них будет заметен. Заметьте, насколько граничное гало похоже надефект, порождаемый повышением резкости с помощью нерезкой маски, и как оно повышает кажущуюся резкость посредством усиления чёткости.

Адаптивные интерполяторы могут создавать или не создавать вышеописанные дефекты, но они тоже могут породить несвойственные исходному изображению текстуры или одиночные пиксели на крупных масштабах:

Материал с малоразмерной текстурой Участок при увеличении 220%

С другой стороны, некоторые «дефекты» адаптивных интерполяторов тоже могут рассматриваться как преимущества. Поскольку глаз ожидает увидеть в областях с мелкой текстурой, таких как листва, детали вплоть до мельчайших подробностей, подобные рисунки могут обмануть глаз на расстоянии (для определённых видов материала).

Сглаживание

Сглаживание или анти-алиасинг является процессом, который пытается минимизировать появление ступенчатых или зубчатых диагональных границ, которые придают тексту или изображениям грубый цифровой вид:

Сглаживание удаляет эти ступеньки и создаёт впечатление более мягких границ и высокого разрешения. Оно принимает во внимание, насколько идеальная граница перекрывает смежные пиксели. Ступенчатая граница просто округлена вверх или вниз без промежуточного значения, тогда как сглаженная граница выдаёт значение, пропорциональное тому, насколько много от границы попало в каждый пиксель:

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

Оптический и цифровой зум

Многие компактные цифровые камеры могут осуществлять как оптическое, так и цифровое увеличение (зум). Оптический зум осуществляется движением вариобъектива, так чтобы свет усиливался до попадания на цифровой сенсор. На контрасте, цифровой зум понижает качество, поскольку осуществляет простую интерполяцию изображения - уже после получения его сенсором.

Оптический зум (х10) Цифровой зум (х10)

Даже несмотря на то, что фото с использованием цифрового зума содержит то же число пикселей, его детальность отчётливо меньше, чем при использовании оптического зума.Цифровой зум следует практически полностью исключить, за вычетом случаев, когда он помогает отобразить удалённый объект на ЖК-экране вашей камеры. С другой стороны, если вы обычно снимаете в JPEG и хотите впоследствии обрезать и увеличить снимок, цифровой зум имеет преимущество в том, что его интерполяция осуществляется до внесения дефектов компрессии. Если вы обнаруживаете, что цифровой зум вам нужен слишком часто, купите телеконвертор, а ещё лучше объектив с большим фокусным расстоянием.

Изображение, оцифрованное на сканере, в процессе редактирования представляется на мониторе компьютера и обрабатывается в редакторе таким образом, чтобы получилась печатная версия высокого качества. Эта цепочка операций настолько привычна для большинства пользователей, что мало кто задумывается о тех непростых трансформациях, которые претерпевает оригинал на этом пути.

Экранная версия изображения - это просто матрица точек, которая описывается своими размерами по высоте и ширине. Изображение с размерами 600 на 400 будет занимать фиксированную долю экранного пространства на любом мониторе, независимо от его принципа действия. Оно закроет почти весь экран, если для него выбрано разрешение 640*480, на экране с разрешением 1024*768 оно займет примерно четверть пространства, наконец, при разрешении 1600*1200 будет занято чуть более одной девятой площади экрана. При этом физические размеры, т.е. размеры, которые рассчитываются в дюймах и сантиметрах, будут зависеть от диагонали монитора.

А каковы будут размеры картинки при выводе ее на печать? Для искушенного пользователя Photoshop ответ очевиден. Размеры печатной версии совпадают с габаритами сканированного оригинала (если быть предельно точным, то с размерами области сканирования). Это естественное соглашение для всех программ обработки графики является установкой по умолчанию; но большая часть растровых редакторов располагает специальными средствами изменения размеров печати.

Чтобы установить такой размер экранной версии изображения, который совпадает с его печатным вариантом, требуется выполнить команду главного меню View - Print Size (Просмотр - Размер при печати) редактора Photoshop или воспользоваться кнопкой панели с тем же названием.

Пусть требуется отпечатать изображение размером 600*600 пикселов. Эти размеры - данность, сейчас не имеет значения способ их получения разрешение сканирования и установки печати. Если задать размеры печатной версии в 10 дюймов, то разрешение будет равно 600 dot / 10 inch = 60 dpi . Приведем ряд значений разрешения для разных габаритов печатного оттиска:

  • 600dot / 5inch = 120dpi;
  • 600dot / 3inch = 200dpi;
  • 600dot / 2inch = 300dpi.

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

Для любого печатного оборудования есть некоторое оптимальное значение разрешения цифрового изображения, когда устройство печати будет способно передать максимальное число деталей оригинала. Качество результата зависит и от типа выбранной бумаги. Это влияние особенно сильно проявляется для наиболее популярных в наше время печатных устройств - цветных струйных принтеров.

Пусть, для выбранного принтера и сорта бумажного носителя оптимальным является значение разрешение, равное 200 dpi . Какие последствия вызовет вывод на печать выбранного оригинала с разрешением в 120 dpi ? Это решение приведет к потере качества, поскольку часть деталей будет потеряна при печати. А если побороться за результат, выбрав более высокое разрешение печати? Если, например, выставить 300 dpi или более, то принтеру будет передана избыточная информация, которой он просто не сможет воспользоваться.

Предположим, что сканированная версия изображения демонстрирует посредственное качество при выводе на монитор. Можно ли поправить дело, отпечатав ее на высококачественной бумаге с высоким разрешением? Фокус не получится, поскольку печать не добавляет новой информации к оригиналу, принтер использует только те данные, которые заложены в изображение на этапе оцифровки. Эти мысленные эксперименты, конечно, упрощают реальное положение дел, но действие принципа разумной достаточности для выбора оптимального разрешения печати вряд ли можно оспорить.

Итак, если зафиксировать точечные размеры изображения, то любые изменения разрешения влекут за собой модификацию области печати. Справедливо и обратное утверждение. В растровой графике это преобразование принято называть масштабированием.

Зачем масштабировать изображение? Причины для этого многообразны и часто очень весомы. Многие современные цифровые камеры среднего уровня продуцируют изображения небольшого размера, которые, будучи отпечатанными, занимают площадь почтовой марки. Настольные издательские системы требуют изображения фиксированных размеров, которые могут не совпадать с оригинальными габаритами и пр.

Масштабирование не меняет физические размеры графического файла, поскольку не воздействует ни на один из параметров (число точек, глубина цвета), от которых зависит его значение.

Дискретизация

Изменение числа точек изображения называется дискретизацией. Эта операция очевидным образом влияет на размеры экранной версии изображения, которая на мониторе с неизменными характеристиками становится больше или меньше, в зависимости от заданных значений.


Рис. 2.4.

Поясним эту операцию на примере изображения из стандартной коллекции редактора (рис. 2.4). Оригинальная версия картинки, которая занимает среднюю позицию, имеет разрешение в 72 dpi . Увеличение разрешения в два раза до 144 dpi влечет за собой возрастание количества точек и рост линейных размеров экранной версии изображения (правый образец). Уменьшение разрешения до 36 dpi продуцирует прямо противоположные последствия (левый образец).

В отличие от масштабирования дискретизация - это не элементарная с вычислительной точки зрения операция, поскольку она решительно вмешивается в структуру изображения.

Пусть имеется изображение размером 400*400 точек. Если сократить его экранные размеры до 300*300 , то, на первый взгляд, это означает незначительное вмешательство в оригинал - сокращение всего лишь на три четверти. Иная картина открывается если подсчитать количество точек до операции и после. Исходная картинка состояла из 400*400 = 160 000 точек, а после преобразования насчитывает 300*300 = 90000 точек - почти наполовину меньше. Понятно, что такая масштабная по своим последствиям операция не может не сказаться на качестве картинки.

Еще более сложные задачи приходится решать при увеличении количества точек. Если при их уменьшении программа просто отбрасывает лишние пикселы, то при увеличении матрицы дополнительные точки надо "придумать". Добавление новых пикселов выполняется по специальным алгоритмам интерполяции.

Уменьшение количества точек изображения - это сравнительно безопасная процедура, которая не оказывает прямого влияния на качество оригинала Увеличение точек сложнее по своим алгоритмам и последствиям Небольшое приращение растра не влечет за собой заметных отрицательных последствий. Масштабное преобразование такого рода почти всегда ухудшает резкость изображения, отчасти размывая образ.

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

  • Nearest Neighbor (По соседним пикселам). Самый простой метод интерполяции, обладающий высокой скоростью работы и результатами не самого высокого качества. В качестве образца для нового пиксела берутся характеристики его ближайшего фактического соседа. Метод дает неплохие результаты для областей с регулярной геометрией, например прямых линий, прямоугольников и пр.;
  • Bilinear (Билинейная). Этот метод несколько сложнее в реализации, но дает лучшие результаты по сравнению с методом Nearest Neighbor . Параметры новой точки рассчитываются усреднением цветовых или тоновых характеристик соседних действительных пикселов изображения. Свои преимущества метод показывает при уменьшении количество точек изображения. Рациональной областью его применения является обработка изображений среднего качества;
  • Bicubic (Бикубическая). Это лучший метод интерполяции, по этой причине он принят по умолчанию в редакторе Photoshop . Новые точки рассчитываются по существующим соседям на основе несколько более сложных алгоритмов, чем в предыдущем методе;
  • Bicubic Smoother (Бикубическая со сглаживанием). Вариант метода бикубической интерполяции. Он предназначен для дискретизации изображений высокого качества при увеличении их размеров;
  • Bicubic Sharper (Бикубическая с настройкой резкости). Вариант метода бикубической интерполяции. Он предназначен для обработки качественных изображений при уменьшении их размеров.

Что происходит с разрешением и областью печати при выполнении процедуры дискретизации? Ответ дает определение понятия разрешение: Длина ( inch ) * Разрешение (dpi)= Количество точек .

Это соотношение показывает, что при любой дискретизации изображения должны меняться его фактическая длина или разрешение. С точки зрения математики обе возможности равноправны, важно только сохранить равенство правой и левой частей уравнения. При дискретизации изображения в Photoshop меняются размеры печати, при этом разрешение остается неизменным. Путем чуть более сложных манипуляций с числовыми полями того же диалогового окна можно компенсировать изменение числа точек при помощи новых значений разрешения.

Операцию дискретизации могут выполнять и устройства оцифровки. При обработке оригинала с разрешением, которое не является целой частью максимального оптического разрешения сканера осуществлена процедура во многом напоминающая билинейную интерполяцию, выполняемую растровыми редакторами при изменении числа точек изображения. Рассмотрим эту ситуацию более подробно. Пусть требуется оцифровать оригинал шириной в три дюйма на сканере с максимальным оптическим разрешением в 600 dpi . Простым умножением можно найти количество светочувствительных, которые будут задействованы в этой процедуре. Оно равно 600 * 3 = 1800 . Если установлено разрешение, равное половине максимального (300 dpi ), то в процессе оцифровки будет участвовать 900 датчиков, т.е. каждый второй. Работу в таком режиме можно организовать элементарными средствами, не внося глубокие изменения в алгоритмы управления прибором. Совсем иная ситуация возникает, если выбрать такую плотность оцифровки, которая не является целой частью максимального оптического разрешения. Это приведет к нарушению регулярности расположения активных датчиков, поэтому подлинный вид сканируемого оригинала может быть сформирован только с участием специальных корректирующих алгоритмов, работающих по принципу программной интерполяции.

Выбор разрешения сканирования часто обосновывается рациональными доводами, но, несмотря на веские физические аргументы и стройные логические рассуждения, у пользователя почти всегда остается значительная свобода выбора. Даже в мысленном эксперименте трудно представить себе такую ситуацию, когда невозможно отступить от рассчитанного разрешения сканирования. В большинстве случаев качество изображения не претерпевает критических изменений даже при значительных отклонениях разрешения от рассчитанных оптимальных значений. Поэтому следует выбирать такую плотность оцифровки, которая приближает расчетное значение сверху и одновременно является целой частью максимального оптического разрешения выбранного устройства сканирования. Иными словами, если сканер способен работать с разрешением в 300 dpi , то кратные числа 75, 100, 150 dpi предпочтительнее, чем установки сканирования, не являющиеся целой частью от 300, например 120 или 175 dpi . Если для некоторого оригинала при помощи расчета или иным путем получено оптимальное разрешение, равное 140 dpi , то в реальной сессии сканирования целесообразно установить 150 dpi .

Отметим еще раз принципиальные различия между масштабированием и дискретизацией. Первая операция влияет только на печатную версию изображения, она никоим образом не воздействует на актуальные пикселы, поэтому экранная версия картинки не претерпевает никаких изменений даже при значительных преобразованиях масштаба. Ее результаты можно заметить только при выводе документа на печать. Вторая операция более сложная по технике и более ответственная по своим результатам. Она выполняет глубокую перестройку изображения, при определенных условиях, воздействуя на каждый его пиксел.

В англоязычной литературе часто проводят тонкое терминологическое различие между увеличением и уменьшением количества точек. Первая операция называется upsampling, а вторая - downsampling, а сам родовой термин - resampling. В отечественной литературе можно встретить дословный, калькированный перевод этих операций на русский язык - апсамплинг, даунсамплинг и ресамплинг! Если с последним термином еще можно примириться, то первые два слова явно не согласуются со строем русской речи и их существование не диктуется технической необходимостью.

Масштабирование и дискретизация в Photoshop

Photoshop - это профессиональный растровый редактор, поэтому он полноценно поддерживает функции масштабирования и дискретизации. Все возможные операции этого типа выполняются средствами одного диалогового окна Image Size (Размер изображения). Для вывода его на экран достаточно выполнить команду Image - Image Size (рис. 2.5).


Рис. 2.5.

Рассмотрим основные возможности этого окна:

  • Pixel Dimensions (Размерность). В этом разделе выводятся размеры изображения, заданные в пикселах или процентах, и общий размер текущего документа в килобайтах или мегабайтах. Поля этого раздела доступны, если опция Resample Image (Интерполяция) является активной. В противном случае программа запрещает прямое изменение этих величин;
  • Document Size (Размер печатного оттиска). В этой секции выводится сведения о фактических габаритах печатного оттиска и разрешении, при котором изображение получает текущие размеры. Эти поля допускают прямое изменение. Увеличение размеров печатного оттиска влечет за собой возрастание числа пикселов цифровой версии изображения и наоборот;
  • Constrain Proportion (Сохранить пропорции). Данная опция управляет сохранением пропорций документа. Если она включена, то при любых операциях с изображением будет сохранено исходное соотношение сторон. Если опция не выбрана, то размеры сторон разрешается менять независимо друг от друга.
  • Resample Image (Интерполяция). Эта опция управляет процессом дискретизации. Если она включена, то программа разрешает менять точечные размеры оригинала, а следовательно и общее количество пикселов, по выбору пользователя. В противном случае все поля раздела Pixel Dimension становятся недоступными, и управление габаритами осуществляется только посредством настройки печатных размером или разрешения.
  • Изменение размеров растра выполняется при помощи алгоритмов интерполяции. Для выбора метода интерполяции служит безымянный список, расположенный рядом с переключателем. В нем можно выбрать один из пяти доступных методов пересчета изображения Nearest Neighbor (По соседним пикселам), Bilinear (Билинейная) и три варианта метода Bicubuc (Бикубическая). Особенности этих алгоритмов дискретизации обсуждались в предыдущем разделе.

Если манипуляции с установками диалогового окна Image Size оказались неудачными, то можно их сбросить и вернуться к стартовым значениям параметров. Для этого надо нажать и удерживать клавишу Alt, в результате кнопка Cancel превратиться в Reset, которая служит для отказа от сделанных окне изменений. Этот стандартный для редактора прием используется во многих диалогах программы.

Какие причины заставляют прибегать к масштабированию? Невозможно упомянуть обо всех ситуациях, когда это прием оказывается необходимым. Приведем лишь один пример. Многие цифровые камеры продуцируют оригиналы низкого разрешения и значительных размеров. Пусть получено изображение с разрешением 72 dpi и с размерами 30 на 20 сантиметров. Если отправить его на печать в таком состоянии, то качество оттиска будет невысоким. Можно с уверенностью прогнозировать появление неровностей на краях линий и отчетливо различимые ступеньки на областях с плавными цветовыми переходами. Количество точек в оригинале достаточно велико (почти полмиллиона) для того, чтобы получить печатную версию высокого качества. Требуется просто уменьшить размеры печатной версии. Для этого надо отключить опцию Resample Image и в полях раздела Document Size ввести разумные размеры печати, например 10 сантиметров по ширине. Программа пересчитает все остальные доступные параметры. Высота при этом будет равняться 6,5 см, а разрешение станет равным 215. Эти значения гарантируют печать достаточно высокого качества.

Ключевые термины

Бикубическая интерполяция - метод интерполяции, в котором новые точки растрового изображения создаются по цветовым и яркостным значениям нескольких соседних пикселов. Этот метод интерполяции основан на более сложном алгоритме расчета, чем метод ближайшего соседа, поэтому он требует больших вычислительных ресурсов, но дает более качественные результаты.

Глубинацвета - общее количество двоичных разрядов, приходящихся на один пиксел растрового изображения. Пусть некоторое изображение записано в системе RGB , и на каждую хроматическую координату R, G, и B отводится по 8 двоичных разрядов (1 байт). Можно утверждать, что это изображение имеет глубину цвета 8 бит на канал или 3 * 8 = 24 бита на пиксел.

Дискретизация - изменение числа точек растрового изображения.

Интерполированное разрешение - характеристика устройств оцифровки, у которых точки цифрового изображения получаются комбинацией физического считывания и программной интерполяции.

Интерполяция растрового изображения - процедура расчета и добавления новых точек в растровое изображение.

Масштабирование растрового изображения - изменение разрешения изображения при выводе его на различные носители, при условии сохранения точечных размеров оригинала.

Метод ближайшего соседа - метод интерполяции, который порождает новые точки растрового изображения, заимствуя цветовые и яркостные характеристики от ближайшей соседней точки. Самый быстрый и грубый метод интерполяции.

Механическое разрешение - характеристика планшетных сканеров, равная вертикальной плотности выборки. Этот параметр, как правило, равняется минимальному смещению каретки планшетного сканера, поэтому называется вертикальным разрешением.

Оптическое разрешение - характеристика планшетных сканеров, равная плотности фоторецепторов. Иногда этот параметр называют горизонтальным разрешением.

Оцифровка - процедура перевода изображения в растровую электронную форму.

Разрешение изображения - характеристика растрового изображения, задающая плотность точек (пикселов) на единицу длины. Измеряется обычно в точках на дюйм (dot per inch , dpi ) или пикселах а дюйм (pixel per inch , ppi ).

Разрешение цифрового фотоаппарата - общее количество рецепторов фоточувствительной матрицы, например 8 мегапикселов = 8 млн. пикселов.

Разрешение экрана - два числа, равные максимальному количеству независимых адресуемых точек по ширине и высоте, например 800*600, 1024*768 .

Цветовое пространство True Color - цветовое пространство системы RGB с глубиной цвета 24 бита на точку. Множество цветов этого пространства составляет 16 777 216. Этой палитры достаточно для представления и обработки большей части цифровых изображений в электронном издательстве и полиграфии.

Интерполяция изображений происходит во всех цифровых фотографиях на определённом этапе, будь то дематризация или масштабирование. Она происходит всякий раз, когда вы изменяете размер или развёртку изображения из одной сетки пикселей в другую. Изменение размера изображения необходимо,когда вам нужно увеличить или уменьшить число пикселей, тогда как изменение положения может происходить в самых различных случаях: исправление искажений объектива, смена перспективы или поворот изображения.


Даже если изменению размера или развёртки подвергается одно и то же изображение, результаты могут значительно отличаться в зависимости от алгоритма интерполяции. Поскольку любая интерполяция является всего лишь приближением, изображение будет несколько терять в качестве всякий раз, когда подвергается интерполяции. Данная глава призвана обеспечить лучшее понимание того, что оказывает влияние на результат, - и тем самым помочь вам минимизировать любые потери качества изображения, вызванные интерполяцией.

Концепция

Суть интерполяции заключается в использовании имеющихся данных для получения ожидаемых значений в неизвестных точках. Например, если вам захотелось знать, какова была температура в полдень, но измеряли её в 11 и в час, можно предположить её значение, применив линейную интерполяцию:

Если бы у вас имелось дополнительное измерение в половине двенадцатого, вы могли бы заметить, что до полудня температура росла быстрее, и использовать это дополнительное измерение для квадратической интерполяции:

Чем больше измерений температуры вы будете иметь около полудня,тем более комплексным (и ожидаемо более точным) может быть ваш алгоритм интерполяции.

Пример изменения размера изображения

Интерполяция изображений работает в двух измерениях и пытается достичь наилучшего приближения в цвете и яркости пикселя, основываясь на значениях окружающих пикселей. Следующий пример иллюстрирует работу масштабирования:

плоскостная интерполяция
Оригинал до после без интерполяции

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

Пример вращения изображения

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

Деградация изображения
Оригинал поворот на 45° поворот на 90°
(без потерь)
2 поворота на 45° 6 поворотов на 15°

Поворот на 90° не вносит потерь, поскольку ни один пиксель не требуется поместить на границу между двумя (и как следствие разделить). Заметьте, как большая часть деталей теряется при первом же повороте, и как качество продолжает падать при последующих. Это означает, что следует избегать вращений, насколько возможно ; если неровно выставленный кадр требует поворота, не следует вращать его более одного раза.

Вышеприведенные результаты используют так называемый «бикубический» алгоритм и показывают существенное ухудшение качества. Обратите внимание, как снижается общий контраст в связи со снижением интенсивности цвета, как вокруг светло-синего возникают тёмные гало. Результаты могут быть значительно лучше в зависимости от алгоритма интерполяции и изображаемого предмета.

Типы алгоритмов интерполяции

Общепринятые алгоритмы интерполяции можно поделить на две категории: адаптивные и неадаптивные. Адаптивные методы изменяются в зависимости от предмета интерполяции (резкие границы, гладкая текстура), тогда как неадаптивные методы обрабатывают все пиксели одинаково.

Неадаптивные алгоритмы включают: метод ближайшего соседа, билинейный, бикубический, сплайны, функция кардинального синуса (sinc), метод Ла́нцоша и другие. В зависимости от сложности, они используют от 0 до 256 (или более) смежных пикселей для интерполяции. Чем более смежных пикселей они включают, тем более точными могут оказаться, но это достигается за счёт значительного прироста времени обработки. Эти алгоритмы могут использоваться как для развёртки, так и для масштабирования изображения.

Адаптивные алгоритмы включают в себя многие коммерческие алгоритмы в лицензированных программах, таких как Qimage, PhotoZoom Pro, Genuine Fractals и другие. Многие из них применяют различные версии своих алгоритмов (на основе попиксельного анализа), когда обнаруживают наличие границы - с целью минимизировать неприглядные дефекты интерполяции в местах, где они наиболее видны. Эти алгоритмы в первую очередь разработаны для максимизации бездефектной детальности увеличенных изображений, так что некоторые из них для вращения или изменения перспективы изображения непригодны.

Метод ближайшего соседа

Это наиболее базовый из всех алгоритмов интерполяции, который требует наименьшего времени обработки, поскольку учитывает только один пиксель - ближайший к точке интерполяции. В результате каждый пиксель просто становится больше.

Билинейная интерполяция

Билинейная интерполяция рассматривает квадрат 2x2 известных пикселя, окружающих неизвестный. В качестве интерполированного значения используется взвешенное усреднение этих четырёх пикселей. В результате изображения выглядят значительно более гладко, чем результат работы метода ближайшего соседа.

Диаграмма слева относится к случаю, когда все известные пиксели равны, так что интерполированное значение просто является их суммой, поделенной на 4.

Бикубическая интерполяция

Бикубическая интерполяция идёт на один шаг дальше билинейной, рассматривая массив из 4x4 окружающих пикселей - всего 16. Поскольку они находятся на разных расстояниях от неизвестногопикселя, ближайшие пиксели получают при расчёте больший вес. Бикубическая интерполяция производит значительно более резкие изображения, чем предыдущие два метода, и возможно, является оптимальной по соотношению времени обработки и качества на выходе. По этой причине она стала стандартной для многих программ редактирования изображений (включая Adobe Photoshop), драйверов принтеров и встроенной интерполяции камер.

Интерполяция высшего порядка: сплайны и sinc

Есть много других интерполяторов, которые принимают во внимание больше окружающих пикселей и таким образом требуют более интенсивных вычислений. Эти алгоритмы включают в себя сплайны и кардинальный синус (sinc), и они сохраняют большинство информации об изображении после интерполяции. Как следствие, они являются исключительно полезными, когда изображение требует нескольких поворотов или изменений перспективы за отдельные шаги. Однако, для однократных увеличений или поворотов такие алгоритмы высшего порядка дают незначительное визуальное улучшение при существенном увеличении времени обработки. Более того, в некоторых случаях алгоритм кардинального синуса на гладком участке отрабатывает хуже, чем бикубическая интерполяция.

Наблюдаемые дефекты интерполяции

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

Даже наиболее развитые неадаптивные интерполяторы всегда вынуждены увеличивать или уменьшать один из вышеприведенных дефектов за счёт двух других - как следствие, как минимум один из них будет заметен. Заметьте, насколько граничное гало похоже на дефект, порождаемый повышением резкости с помощью нерезкой маски , и как оно повышает кажущуюся резкость посредством усиления чёткости .

Адаптивные интерполяторы могут создавать или не создавать вышеописанные дефекты, но они тоже могут породить несвойственные исходному изображению текстуры или одиночные пиксели на крупных масштабах:

С другой стороны, некоторые «дефекты» адаптивных интерполяторов тоже могут рассматриваться как преимущества. Поскольку глаз ожидает увидеть в областях с мелкой текстурой, таких как листва, детали вплоть до мельчайших подробностей, подобные рисунки могут обмануть глаз на расстоянии (для определённых видов материала).

Сглаживание

Сглаживание или анти-алиасинг является процессом, который пытается минимизировать появление ступенчатых или зубчатых диагональных границ, которые придают тексту или изображениям грубый цифровой вид:


300%

Сглаживание удаляет эти ступеньки и создаёт впечатление более мягких границ и высокого разрешения. Оно принимает во внимание, насколько идеальная граница перекрывает смежные пиксели. Ступенчатая граница просто округлена вверх или вниз без промежуточного значения, тогда как сглаженная граница выдаёт значение, пропорциональное тому, насколько много от границы попало в каждый пиксель:

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

Оптический и цифровой зум

Многие компактные цифровые камеры могут осуществлять как оптическое, так и цифровое увеличение (зум). Оптический зум осуществляется движением вариобъектива, так чтобы свет усиливался до попадания на цифровой сенсор. На контрасте, цифровой зум понижает качество, поскольку осуществляет простую интерполяцию изображения - уже после получения его сенсором.


оптический зум (10x) цифровой зум (10x)

Даже несмотря на то, что фото с использованием цифрового зума содержит то же число пикселей, его детальность отчётливо меньше, чем при использовании оптического зума. Цифровой зум следует практически полностью исключить , за вычетом случаев, когда он помогает отобразить удалённый объект на ЖК-экране вашей камеры. С другой стороны, если вы обычно снимаете в JPEG и хотите впоследствии обрезать и увеличить снимок, цифровой зум имеет преимущество в том, что его интерполяция осуществляется до внесения дефектов компрессии. Если вы обнаруживаете, что цифровой зум вам нужен слишком часто, купите телеконвертор, а ещё лучше объектив с большим фокусным расстоянием.

Почему изображение, масштабированное с бикубической интерполяцией, выглядит не как в Фотошопе. Почему одна программа ресайзит быстро, а другая - нет, хотя результат одинаковый. Какой метод ресайза лучше для увеличения, а какой для уменьшения. Что делают фильтры и чем они отличаются.

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

Этот человек сидит среди ромашек, чтобы привлечь ваше внимание к статье.

Для наглядного сравнения я буду использовать изображения одинакового разрешения 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

Теоретическая скорость работы зависит только от размеров конечного изображения. На практике при уменьшении свой вклад вносят промахи кеша процессора: чем меньше масштаб, тем меньше данных используется из каждой загруженной в кеш линейки.

Метод осознанно применяется для уменьшения крайне редко, т.к. дает очень плохое качество, хотя и может быть полезен при увеличении. Из-за скорости и простоты реализации он есть во всех библиотеках и приложениях, работающих с графикой.

Аффинные преобразования (Affine transformations)

Аффинные преобразования - общий метод для искажения изображений. Они позволяют за одну операцию повернуть, растянуть и отразить изображение. Поэтому во многих приложениях и библиотеках, реализующих метод аффинных преобразований, функция изменения изображений является просто оберткой, рассчитывающей коэффициенты для преобразования.

Принцип действия заключается в том, что для каждой точки конечного изображения берется фиксированный набор точек исходного и интерполируется в соответствии с их взаимным положением и выбранным фильтром. Количество точек тоже зависит от фильтра. Для билинейной интерполяции берется 2x2 исходных пикселя, для бикубической 4x4. Такой метод дает гладкое изображение при увеличении, но при уменьшении результат очень похож на ближайшего соседа. Смотрите сами: теоретически, при бикубическом фильтре и уменьшении в 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 раза, потому что на какой-нибудь один конечный пиксель может приходиться один исходный, а на соседний - четыре (2x2), что приводит к диспропорции на локальном уровне. В то же время алгоритм с округлением очевидно можно использовать в случаях, когда размер исходного изображения кратен размеру конечного, или масштаб уменьшения достаточно мал (версии разрешением 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. Вот как выглядят самые популярные:

Билинейный фильтр (bilinear или triangle в ImageMagick)


Бикубический фильтр (bicubic , catrom в ImageMagick)


Фильтр Ланцоша (Lanczos)

Примечательно, что некоторые фильтры имеют зоны отрицательных коэффициентов (как например бикубический фильтр или фильтр Ланцоша). Это нужно для придания переходам на конечном изображении резкости, которая была на исходном.



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows