Шеховцов С.О.Название статьи: Анализ недостатков алгоритмов масштабирования. Контентно-зависимое масштабирование Источник: «Інформаційні управляючі системи та комп'ютерний моніторинг» (ІУС та КМ-2010)./ Матеріали І всеукраїнської науково-технічної конференції студентів, аспірантів та молодих вчених — ДонНТУ, Донецьк, 19-21 травня 2010. — 634с. Общая постановка проблемы. Применение компьютерной техники в современной жизни стало незаменимым. Компьютерная графика используется практически во всех научных и инженерных дисциплинах для наглядности восприятия и передачи информации. Одной из её задач является масштабирование – изменение размера изображения. При этом в зависимости от типа графики (растровая, векторная), масштабирование производится по разным алгоритмам. Если графика векторная, то масштабирование происходит без потерь качества изображения, если растровая, то при масштабировании происходит потеря качества изображения, особенно при изменении размера без сохранения пропорций. Постановка задач исследования. Необходимо провести улучшение алгоритма масштабирования, для чего необходимо проанализировать существующие алгоритмы и их недостатки. В качестве улучшения предложен метод контентно-зависимого масштабирования, в основе которого лежит предварительный анализ изображения Решение задач и результаты исследований. Существуют два стандартных алгоритма масштабирования изображений, билинейная и бикубическая интерполяция. Поскольку цветовые значения пикселей обычно вычисляются путем интерполяции четырех соседних, изображение на выходе получается размытым. Хотя это приемлемо для полноцветных изображений, применение интерполяции ведет к снижению контрастности (резкости на границах), и поэтому данный метод дает плохие результаты на изображениях с индексированной палитрой. Недостатком билинейной интерполяции при масштабировании изображений является тот факт, что при увеличении в N раз изображения размером W на H пикселей в результате будет получено изображение размером не NW на NH пикселей, а (N(W − 1) + 1) на (N(H − 1) + 1) пикселей. Пример масштабирования с применением билинейной интерполяции показан на рисунке 1. Бикубическая интерполяция идёт на один шаг дальше билинейной, рассматривая массив из 4x4 окружающих пикселей — всего 16. Поскольку они находятся на разных расстояниях от неизвестного пикселя, ближайшие пиксели получают при расчёте больший вес. Бикубическая интерполяция производит значительно более резкие изображения, чем предыдущие два метода, и возможно, является оптимальной по соотношению времени обработки и качества на выходе. По этой причине она стала стандартной для многих программ редактирования изображений (включая Adobe Photoshop), драйверов принтеров и встроенной интерполяции камер.
Рисунок 1 – Увеличение изображения простым масштабированием (а) и с применением билинейной интерполяции (б) Многие алгоритмы работают только при увеличении в целое число раз: 2x, 3x и 4x. Существует так же группа адаптивных алгоритмов, включающая в себя многие коммерческие алгоритмы в лицензированных программах, таких как Qimage, PhotoZoom Pro, Genuine Fractals и другие. Многие из них применяют различные версии своих алгоритмов (на основе попиксельного анализа), когда обнаруживают наличие границы — с целью минимизировать неприглядные дефекты интерполяции в местах, где они наиболее видны. Эти алгоритмы в первую очередь разработаны для максимизации бездефектной детальности увеличенных изображения, так что некоторые из них для вращения или изменения перспективы изображения непригодны. Рассмотрим алгоритм контентно-зависимого масштабирования Seam Carving — это алгоритм изменения размеров изображения, который учитывает содержимое изображения (как называют авторы — Content-Aware Image Resizing Algorithm). Впервые был предложен в 2007 году. Способ учитывает содержимое изображения: сначала вычисляется важность разных участков изображения, после чего изменяются в размере только те части, которые, по мнению алгоритма, являются не такими важными. Основные проблемы алгоритма: как определить насколько важными являются части изображения, как найти и сжать менее важные участки изображения и т. д. Основные шаги алгоритма для горизонтального масштабирования (для вертикального – аналогично):
Рассмотрим алгоритм более детально.
Шаг 1. Для определения важности пикселя изображения необходимо посчитать его энергию: чем больше энергия — тем важнее точка. Существует множество способов вычисления энергии. Одна из самых простых функций дает наиболее оптимальные результаты (формула 1). Энергия пикселя равна изменению цвета соседних пикселей по сравнению с данным пикселем. То есть чем больше разница в цвете между данным пикселем и соседними — тем больше его энергия. Шаг 2. После определения значения энергий необходимо выбрать те пиксели, у которых это значение минимальное. Для начала необходимо определить «правильную» цепочку пикселей — это набор точек, такой, что в каждой строчке изображения выбран ровно 1 пиксель, а пиксели в соседних строчках «соединены» или сторонами, или углами (рисунок 2). Выбирать следует цепочку, в которой сумма энергий образующих ее пикселей минимальна. Для ее нахождения следует применить динамическое программирование. Сначала создается новый массив, который по размеру равен массиву с энергиями пикселей. В этот массив для каждого пикселя записывается сумма элементов минимальной цепочки пикселей, которая начинается у верхнего края изображения и заканчивается на данном пикселе. Сначала определяется, какой пиксель из нижней строчки изображения принадлежит этой цепочке: искомый элемент будет иметь наименьшее значение в массиве сумм среди элементов нижней строчки. Цепочки, которые нас интересуют, заканчиваются на пикселе из последнего ряда. Соответственно для всего рисунка минимальная цепочка будет выбрана как минимальная из всех минимальных цепочек, которые заканчиваются на пикселях из нижней строчки. После определения пикселя, на котором заканчивается минимальная цепочка, возможно нахождение пикселя из предпоследней строчки. Как указывалось ранее, из нижнего пикселя возможен переход к трем соседним: на строчку выше слева и сверху, сверху или справа и сверху. Среди этих пикселей выбирается тот, для которого значение в массиве сумм минимально, и выполняется переход к нему. Алгоритм заканчивает работу, когда обработана верхняя строчка. После выполнения всех этих операций будет получен набор пикселей, которые возможно изменить с минимальными потерями для изображения. Шаг 3. Наша задача — изменение размера изображения. Увеличение и уменьшение изображение немного отличаются, поэтому сначала будет рассмотрено уменьшение, а потом уже увеличение. Если необходимо уменьшить ширину изображения на 1 пиксель, то все просто: находится вертикальную цепочка, как описано выше, и просто удаляется. Если необходимо уменьшение на большее значение, то выполняется операция удаления цепочки столько раз, сколько необходимо (каждый раз при этом надо будет искать новую цепочку). Следует обратить внимание, что операция уменьшения изображения на n пикселей и операция уменьшения изображения на 1 пиксель n раз не являются эквивалентными. При уменьшении на 1 пиксель n раз, для каждого из промежуточных изображений ищется энергия пикселей, а если сразу происходит уменьшение на n, то энергия пикселей берется из исходного изображения. Пример уменьшения показан на рисунке 3.
Рисунок 3 – Оригинальное(а) и уменьшенное по горизонтали(б) изображения При увеличении изображения нельзя просто выбирать цепочки и их «растягивать». Необходимо брать не одну минимальную цепочку, а столь¬ко, сколько надо, чтобы дополнить рисунок до нужной ширины (как при обычном растягивании), но увеличивать изображение следует поэтапно: так, чтобы на каждом этапе охватывалось как можно больше «не важных» частей изображения, и как можно мень¬ше «важных». Один из вариантов разбиения на этапы такой, что на каж¬дом этапе изображение не увеличиваетсябольше, чем на 50%. Пример увеличения показан на рисунке 4.
Рисунок 4– Оригинальное(а) и увеличенное по горизонтали(б) изображения Выводы.В результате анализа существующих алгоритмов масштабирования были выявлены их основные недостатки. Для оптимизации масштабирования был предложен метод контентно-зависимого масштабирования. В дальнейшем планируется совершенствование алгоритма и его программная реализация. Список литературы 1. «Liquid Rescale» - http://liquidrescale.wikidot.com/en:examples |