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

Увеличиваем число пикселов в изображении
Нестрогое сравнение различных реализаций функции Resample
___________________________________________________________

Для качественной полиграфической печати разрешение должно быть равно 300 dpi. Это означает, что для получения качественной фотографии размером 10 х 15 см (4 х 6 дюймов) необходимо располагать цифровым изображением 1200 х 1800 пикселов. Это в идеале. На практике же часто возникает желание и/или необходимость на основе имеющегося числа пикселов напечатать изображение большего формата.

В некоторых случаях задача решается очень просто. Величина 300 dpi предполагает, что изображение будет рассматриваться с минимального расстояния комфортного восприятия (ок. 25 см), то есть зритель будет держать картинку в руках. Если же картинка будет значительно удалена от зрителя, то величину 300 dpi можно смело уменьшить. Так, например, нет никакого смысла печатать уличный рекламный плакат с разрешением 300 dpi. Для такого случая вполне подойдет существенно меньшее разрешение.

А как все же быть в тех случаях, когда расстояние просмотра невелико, а формат печати надо увеличить? Выход только один — увеличить число пикселов в изображении. При этом, конечно же, не стоит рассчитывать на то, что в изображении появятся более мелкие детали. Увеличение числа пикселов преследует совсем другие цели. В общих чертах, требуется так раздвинуть исходные пиксели и заполнить образовавшиеся пустоты между ними, чтобы:

— контуры линий сохранили достаточную степень гладкости;
— тональные цветовые переходы получились достаточно плавными;
— субъективно воспринимаемые резкость и четкость ухудшились незначительно.

 

Откуда взять недостающие пикселы?

Увеличить число пикселов в изображении можно с помощью практически любого графического редактора. Для этого надо воспользоваться функцией, которая чаще всего носит одно из следующих названий: Image Size, Resize, Resample и т.п.
Детальное описание этих процедур можно найти в руководствах к программному обеспечению, а также в многочисленных книгах, посвященных графическим пакетам.

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

Возьмем в качестве исходного изображения простой квадрат размером 3 х 3 пиксела (см. рисунок ниже). Увеличим его линейные размеры в два раза. Площадь нового квадрата (6 х 6 пикселов) возрастет в четыре раза. На каждый исходный пиксел теперь будет приходится четыре пиксела (три новых + один исходный). Если мы просто выкрасим все три новых пиксела в цвет базового пиксела (а именно это и происходит при выполнении функций типа RESIZE:RESAMPLE:NEAREST NEIGHBOUR, и т.п.), то это будет равнозначно увеличению размера пиксела. В этом случае плавные линии контуров на изображении приобретут заметную «ступенчатость». Плавность тональных переходов тоже будет нарушена. В общем, это не самый хороший выход из положения, если мы не предполагаем увеличение дистанции просмотра.

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

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

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

Применение простейшей «бикубической интерполяции» (Bicubic Resample/Adobe®Photoshop®), позволяет окрасить новые пиксели в промежуточные цвета и сохранить при этом на приемлемом уровне контурную резкость.

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

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

Оригинальный результат получается при использовании модуля Genuine Fractals™ (платный plug-in для Adobe® Photoshop®). С одной стороны, для нашего примера применение этого фильтра нарушило осевую симметрию исходного блока пикселов (все остальные рассматриваемые фильтры симметрию сохранили). С другой стороны, разработчики этого инструмента явно по-своему подошли к вышеупомянутой альтернативе «резкость линий — плавность переходов». Категорические выводы делать, я полагаю, неуместно. Однако вполне допускаю, что этот оригинальный подход может спасти ситуацию в некоторых случаях.

 

Мини-тестирование на основе реального изображения

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

Перед тем как приступить к тестированию я уменьшил линейные размеры фрагмента в два раза. Затем я попробовал восстановить фотографию до исходного размера с помощью упомянутых выше фильтров. Результаты тестирования можно увидеть на приведенных ниже фотографиях. (Mitchel Filter дает практически такой же результат, что и B-Spline Filter, поэтому для экономии места я решил ограничиться демонстрацией работы только одного из них.)

Правее исходного изображения (Original) помещена фотография, полученная с помощью простейшего алгоритма интерполяции (Resize). Как и ожидалось, на наклонных линиях появились характерные зазубрины-ступеньки. Однако, если вы посмотрите на экран своего компьютера с расстояния 2 м (примерно), то изображение, полученное даже таким незамысловатым способом, уже не будет казаться столь несовершенным. Иными словами, мне еще раз хочется подчеркнуть, что даже простейший алгоритм интерполяции цвета пикселов дает вполне приемлемый результат, если предполагается увеличение дистанции между изображением и зрителем.

Во втором ряду приведены изображения, полученные с помощью «бикубической интерполяции» и фильтра B-Spline. Как и ожидалось, фильтр B-Spline чрезмерно размывает резкие линии, поэтому его трудно рекомендовать для изображений с четко выраженными контурами. Бикубическая интерполяция вполне прилично справилась с поставленной задачей. Пропавшие детали она, конечно, не восстановила, но зазубрины с наклонных линий убрала удовлетворительно. К плавности тональных переходов серьезных претензий предъявить также нельзя.

В последнем ряду приведены результаты работы фильтра Ланцоша (Lanczos Filter) и программного модуля Genuine Fractals™. На мой взгляд, оба эти алгоритма хорошо справились с поставленной задачей. Однако, я полагаю, гораздо интересней получить ответ на вопрос: насколько они лучше простейшей бикубической интерполяции? На мой взгляд, каждый должен ответить на этот вопрос самостоятельно. В конце концов, только вам решать, каким инструментом пользоваться, а каким — нет.

 
Выводы (вернее, рекомендации)

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

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

2. Если увеличение дистанции просмотра не планируется, то в 2/3 случаев вполне удовлетворительный результат дает простейшая бикубическая интерполяция.

3. Если бикубическая интерполяция по каким-либо причинам вас не устраивает, попробуйте воспользоваться бесплатным, но весьма эффективным, фильтром Ланцоша (Lanczos filter).

4. Если ничто из упомянутого выше не приводит к удовлетворительному результату, попробуйте более сложные фильтры (как платные, так и бесплатные), например, упомянутый выше модуль Genuine Fractals™. Следует также иметь в виду, что зачастую сложные инструменты менее универсальны. Иными словами, если вам в сложной ситуации помог какой-то сложный фильтр, то это вовсе не значит, что именно этот фильтр приведет к успеху в других нестандартных случаях. Каждый необычный случай требует индивидуального подхода.

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

6. Очень часто фильтры с одним и тем же названием в разных графических программах работают по-разному. Если вас (не) устроил какой-либо фильтр в одном графическом пакете, то это автоматически не означает, что вас (не) устроит фильтр с таким же названием в другой программе.

 
Ссылки

1. Фильтр Ланцоша входит в бесплатный пакет IrfanView (www.irfanview.com).
2. Модуль Genuine Fractals™ можно загрузить на сайте LizardTech.

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

* * *

 

 

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


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

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

Hosted by uCoz