Sorry, not available yet
   

На главную страницу
Список статей

Дорогая, я уменьшил число пикселов в изображении
_______________________________________________________

   
   Небольшое вступление

   Давным-давно (примерно лет 15 назад :-) ) с интервалом в несколько лет друг за другом появились два американских фильма: «Дорогая, я уменьшил детей» и «Дорогая, я увеличил ребёнка» («Honey, I shrunk the kids» и «Honey, I blew up the kid»). Похоже, уменьшение и увеличение — это два неразрывно связанных между собой процесса. Сказав что-то про один из них, надо обязательно сказать что-нибудь и про другой. :-)

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

 
   Суть вопроса

   Как известно, ломать — не строить. Исходя из этой народной мудрости, можно было бы сделать вывод о том, что уменьшать число пикселов в изображении гораздо проще, чем увеличивать. Однако в действительности и при уменьшении элементов изображения вопросов возникает немало. Если просто выкинуть «лишние» пикселы, то встаёт вопрос: что выкидывать, а что оставлять? Если же возникает желание ничего не выкидывать, а вычислить новые значения пикселов, исходя из цвета близлежащих элементов, то для такой процедуры необходимо подобрать оптимальный алгоритм. При этом надо помнить, что естественность восприятия зависит от одновременного выполнения многих условий. Наиболее важные таковы:

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

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

   Дело осложняется также тем, что критерий «естественности восприятия» — трудно формализовать и перевести на язык математических формул. Например, можно потребовать, чтобы в результирующем пространственном спектре были максимально сохранены высокочастотные компоненты. Или, например, можно стремиться к максимально возможному сохранению формы огибающей пространственного спектра. А можно, наоборот, прибегнуть к подавлению высоких пространственных частот на одном из этапов преобразования, ибо очевидно, что так или иначе, но высокими пространственными частотами придётся пожертвовать. Но, увы, какой бы формальный критерий мы не задали, мы никогда не можем быть уверены, что он обеспечит стопроцентный успех в любом случае. Только система «глаз + мозг» позволяет окончательно судить об эффективности того или иного алгоритма.

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

   Сложность проблемы выбора оптимального алгоритма иллюстрирует рис. 1.

Рис. 1

   Предположим, что требуется уменьшить в два раза линейные размеры крайнего левого изображения (original). Самое простое решение — разбить исходную картинку на более крупные блоки и в каждом блоке из четырёх исходных элементов оставить только один. В варианте Nearest neighbor (рис. 1) в каждом блоке был оставлен цвет левого верхнего пиксела. Но такой подход связан, например, с такими проблемами:

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

   Другой простейший подход — ничего не выкидывать, а вычислять цвет результирующего пиксела как математическую среднюю величину цветов, входящих в заменяемый блок (см. вариант Average на рис. 1). Более сложные алгоритмы могут опираться на различные математические процедуры интерполяции (см., например, вариант Bicubic resample на рис. 1).

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


   Анализ реального изображения

   Рассмотрим пример уменьшения реального изображения (см. рис. 2). В качестве исходной фотографии была выбрана фотография розы с сайта www.bigfoto.com. Вначале я сделал из неё выкадровку размером 620 х 620 пикселов, а потом уменьшил её до размера 200 х 200 пикселов различными способами.

Рис. 2

   В столбцах таблицы на рис.2 показаны результаты полученные различными алгоритмами:

1. Алгоритм Nearest neighbor по сути означает отсутствие ресэмплинга, т.е. процедуры пересчёта цвета пикселов. Этот алгоритм ориентирован на простое выбрасывание «лишних» пикселов. При этом цвет оставшегося элемента устанавливается по цвету ближайшего соседа в исходном изображении.

2. Алгоритм Bicubic resampling входит во все популярные программы обработки изображений. Он прост, быстр и весьма эффективен.

3. Пересчёт цвета пикселов по алгоритму Ланцоша (Lanczos resampling из программы Irfan View) является ещё одной удачной попыткой достичь компромисса между резкостью и плавностью тональных переходов.

   В первой строке (1 step) преобразование было получено за один шаг, то есть блок (620 х 620) был сразу преобразован в блок (200 х 200). Во второй строке (2 steps) представлены изображения, полученные в ходе преобразования с одним промежуточным этапом: (620 х 620) => (310 х 310) => (200 х 200).

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

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

   Действительно, посмотрим на рис.2. Изображения в крайней левой колонке смотрятся весьма резко. У многих зрителей возникает даже мысль о том, что к ним был применён фильтр Unsharp Mask. Однако это не так. Да и сама резкость в данном случае смотрится несколько неестественно. Отсюда следует очевидный вывод: не в одной резкости дело! Результирующее изображение надо оптимизировать по многим параметрам.

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

   С другой стороны, важно не забывать, что всё вышеизложенное справедливо лишь при рассматривании изображений с достаточно близкого расстояния. Иногда бывает достаточно отступить на шаг-другой от картинки — и все различия тотчас покажутся несущественными. Поэтому при изменении размеров изображений важно не упускать из виду конкретные условия просмотра. Если предполагается просмотр изображений под малым углом зрения (с достаточно большого расстояния), то относительно проблемы resize-resampling можно не волноваться.


   Выводы

   Преимущества того или иного метода уменьшения числа элементов в изображении становятся заметны лишь при просмотре результата с достаточно близкого расстояния.

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

 
   Ссылки

1. И. Ефремов. Увеличиваем число пикселов в изображении. Нестрогое сравнение различных реализаций функции Resample. Первая статья, посвящённая применению функции Resize/Resample.

2. Свежую версию Irfan View можно скачать с сайта http://www.irfanview.com/

3. Большое количество бесплатных изображений доступно для загрузки на сайте bigfoto.com

4. При изменении размера изображений зачастую наиболее остро стоит задача сохранения естественно воспринимаемой резкости. Если у вас недостаточно практического опыта или объём работы весьма велик, то целесообразно воспользоваться каким-либо универсальным, но при этом гибким, программным обеспечением. Например, можно использовать PhotoKit Sharpener от PixelGenius.

 
    Приложение

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

   Процедура проста: первое изображение надо поместить в один слой; второе — в другой. Затем для слоёв надо установить режим: blending = difference. Если изображения одинаковы, то результатом будет чёрный прямоугольник.

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

 
   Благодарности

   Автор считает своим долгом поблагодарить всех, кто любезно согласился прокомментировать рис. 2 и высказать своё мнение о различных алгоритмах изменения размера изображений. Отдельная благодарность Сергею Хлопчуру за то, что он обратил внимание автора на программные продукты от компании PixelGenius.

* * *

 

На главную страницу
Список статей


© Игорь Ефремов, 2005, все права сохранены

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

Hosted by uCoz