|
Дорогая,
я уменьшил число пикселов в изображении Давным-давно (примерно лет 15 назад :-) ) с интервалом в несколько лет друг за другом появились два американских фильма: «Дорогая, я уменьшил детей» и «Дорогая, я увеличил ребёнка» («Honey, I shrunk the kids» и «Honey, I blew up the kid»). Похоже, уменьшение и увеличение — это два неразрывно связанных между собой процесса. Сказав что-то про один из них, надо обязательно сказать что-нибудь и про другой. :-) Два года назад я написал небольшую статью про увеличение числа пикселов в цифровых изображениях. Теперь настала пора сказать пару слов и про уменьшение. Как известно, ломать — не строить. Исходя из этой народной мудрости, можно было бы сделать вывод о том, что уменьшать число пикселов в изображении гораздо проще, чем увеличивать. Однако в действительности и при уменьшении элементов изображения вопросов возникает немало. Если просто выкинуть «лишние» пикселы, то встаёт вопрос: что выкидывать, а что оставлять? Если же возникает желание ничего не выкидывать, а вычислить новые значения пикселов, исходя из цвета близлежащих элементов, то для такой процедуры необходимо подобрать оптимальный алгоритм. При этом надо помнить, что естественность восприятия зависит от одновременного выполнения многих условий. Наиболее важные таковы:
При этом важно понимать, что ни одно из этих условий не является главным. Все они равноправны и должны учитываться в совокупности. Дело осложняется также тем, что критерий «естественности восприятия» — трудно формализовать и перевести на язык математических формул. Например, можно потребовать, чтобы в результирующем пространственном спектре были максимально сохранены высокочастотные компоненты. Или, например, можно стремиться к максимально возможному сохранению формы огибающей пространственного спектра. А можно, наоборот, прибегнуть к подавлению высоких пространственных частот на одном из этапов преобразования, ибо очевидно, что так или иначе, но высокими пространственными частотами придётся пожертвовать. Но, увы, какой бы формальный критерий мы не задали, мы никогда не можем быть уверены, что он обеспечит стопроцентный успех в любом случае. Только система «глаз + мозг» позволяет окончательно судить об эффективности того или иного алгоритма. Из вышесказанного, конечно, не следует, что любые автоматические процедуры изменения размера изображения бесполезны и неэффективны. Это не так. Если объём работы велик, а результат нам нужен не хуже среднестатистического, то грех не воспользоваться каким-либо универсальным алгоритмом. Но если нам важно получить максимально высокое качество, которое выше среднего уровня, то выход только один: надо попробовать вручную (т.е. не автоматически) реализовать несколько хорошо зарекомендовавших себя процедур, а потом субъективно выбрать лучший вариант. Сложность проблемы выбора оптимального алгоритма иллюстрирует рис. 1.
Предположим, что требуется уменьшить в два раза линейные размеры крайнего левого изображения (original). Самое простое решение — разбить исходную картинку на более крупные блоки и в каждом блоке из четырёх исходных элементов оставить только один. В варианте Nearest neighbor (рис. 1) в каждом блоке был оставлен цвет левого верхнего пиксела. Но такой подход связан, например, с такими проблемами:
Другой простейший подход — ничего не выкидывать, а вычислять цвет результирующего пиксела как математическую среднюю величину цветов, входящих в заменяемый блок (см. вариант Average на рис. 1). Более сложные алгоритмы могут опираться на различные математические процедуры интерполяции (см., например, вариант Bicubic resample на рис. 1). Итак, видно, что результат существенно зависит от выбранного алгоритма. Какой же вариант лучше? Увы, точный ответ дать невозможно. Если нам важны тонкости, то опираться можно только на метод субъективных экспертных оценок.
Рассмотрим пример уменьшения реального изображения (см. рис. 2). В качестве исходной фотографии была выбрана фотография розы с сайта www.bigfoto.com. Вначале я сделал из неё выкадровку размером 620 х 620 пикселов, а потом уменьшил её до размера 200 х 200 пикселов различными способами.
В столбцах таблицы на рис.2 показаны результаты полученные различными алгоритмами:
В первой строке (1 step) преобразование было получено за один шаг, то есть блок (620 х 620) был сразу преобразован в блок (200 х 200). Во второй строке (2 steps) представлены изображения, полученные в ходе преобразования с одним промежуточным этапом: (620 х 620) => (310 х 310) => (200 х 200). Никаких процедур повышения резкости к изображениям применено не было. Какое изображение лучше? Или (что то же самое): какой алгоритм лучше? Увы, объективно ответить на этот вопрос невозможно. Как я уже сказал, задача естественного восприятия трудно формализуема. Выполнение любого математического критерия обеспечивает лишь результат не хуже определённого уровня. Если же нам важен перфекционизм, то выход только один: выполнять преобразования вручную и затем субъективно сравнивать полученные результаты. Действительно, посмотрим на рис.2. Изображения в крайней левой колонке смотрятся весьма резко. У многих зрителей возникает даже мысль о том, что к ним был применён фильтр Unsharp Mask. Однако это не так. Да и сама резкость в данном случае смотрится несколько неестественно. Отсюда следует очевидный вывод: не в одной резкости дело! Результирующее изображение надо оптимизировать по многим параметрам. Опросы, проведённые автором статьи среди разных групп людей, выявили, что наиболее естественно воспринимаются крайнее правое верхнее и среднее нижнее изображения. Причём предпочтения разделились примерно поровну. Это ещё раз свидетельствует о том, что формальную рекомендацию по уменьшению изображений дать сложно. Так, например, одношаговое применение функции Lanczos Resapmling не является самым резким вариантом. Тем не менее, результат выглядит очень естественно. Даже на более простой вопрос о числе этапов преобразования ответить нелегко. В одних случаях достаточно одного этапа, а в других предпочтительней решать задачу за несколько шагов. Повторюсь: сказанное справедливо, если нам важен перфекционизм, и мы не хотим довольствоваться неким универсальным подходом, обеспечивающим результат не хуже некоторого (довольно высокого) уровня. С другой стороны, важно не забывать, что всё вышеизложенное справедливо лишь при рассматривании изображений с достаточно близкого расстояния. Иногда бывает достаточно отступить на шаг-другой от картинки — и все различия тотчас покажутся несущественными. Поэтому при изменении размеров изображений важно не упускать из виду конкретные условия просмотра. Если предполагается просмотр изображений под малым углом зрения (с достаточно большого расстояния), то относительно проблемы resize-resampling можно не волноваться.
Преимущества того или иного метода уменьшения числа элементов в изображении становятся заметны лишь при просмотре результата с достаточно близкого расстояния. Если мы встанем на путь перфекционизма, то нам неизбежно придётся отказаться от автоматических процедур и однозначных рекомендаций и встать на путь реализации метода проб и ошибок.
Не всегда различия между конечными изображениями, полученными при применении разных алгоритмов, легко обнаружить на глаз. В таких случаях целесообразно прибегнуть к инструментальному способу сравнения двух картинок. Процедура проста: первое изображение надо поместить в один слой; второе — в другой. Затем для слоёв надо установить режим: blending = difference. Если изображения одинаковы, то результатом будет чёрный прямоугольник. При применении такого способа сравнения важно не забывать, что различить на глаз «чёрный» и «почти чёрный» цвета порой бывает нелегко. Поэтому желательно поводить по результирующему прямоугольнику «компьютерной пипеткой», дабы полностью увериться в его черноте. Автор считает своим долгом поблагодарить всех, кто любезно согласился прокомментировать рис. 2 и высказать своё мнение о различных алгоритмах изменения размера изображений. Отдельная благодарность Сергею Хлопчуру за то, что он обратил внимание автора на программные продукты от компании PixelGenius.
|
|
|
© Игорь Ефремов, 2005, все права сохранены
Для использования материалов этого сайта в коммерческих или некоммерческих
целях необходимо получить от меня письменное разрешение, если обратное
не оговорено в явной форме. |