Повышение разрешающей способности изображений
Также есть некий программный продукт для повышения разрешения (увеличения) изображений, разработанный при факультете вычислительной математики и кибернетики — в лаборатории математических методов обработки изображений, МГУ имени М. В. Ломоносова. Автором является Насонов А. В. В этом продукте и реализованы адаптивные методы повышения разрешения, в частности, программа увеличивает разрешение… Читать ещё >
Повышение разрешающей способности изображений (реферат, курсовая, диплом, контрольная)
СОДЕРЖАНИЕ Введение Глава I. Обзор и сравнительный анализ методов и алгоритмов повышения разрешения изображений
1.1 Анализ исследуемой проблемы
1.2 Сравнительная оценка существующих программ, повышающих разрешение изображений Выводы к главе I
Глава II. Проектная часть. Описание технологии выполнения
2.1 Выбор оптимального инструментария для разработки
2.2 Разработка логической схемы и реализация
2.2.1 Форма поиска файлов
2.2.2 Форма преобразования изображений
2.2.3 Реализация алгоритмов интерполяции Выводы к главе II
Заключение
Список использованной литературы Приложения
ВВЕДЕНИЕ
Работа посвящена обработке цифровых изображений, в частности задаче повышения разрешающей способности изображений. Рассматриваются методы повышения (увеличения) изображений, алгоритм реализации, его программная реализация.
Актуальность работы.
Выбор темы дипломного проекта обусловлен тем, что задача повышения разрешения (увеличения) изображений является одной из важнейших задач цифровой обработки изображений. Несмотря на рост разрешения сенсоров камер, эта задача остается актуальной, например, для изображений, снятых на камеры низкого разрешения.
Предметом исследования является технология разработки программы для решения задачи повышения разрешающей способности изображений.
Объектом исследования выступает процесс разработки программы для решения задачи повышения разрешающей способности изображений на языке программирования Borland Delphi.
Целью работы является разработка программного обеспечения для реализации задачи повышения разрешающей способности изображений. Основные задачи, решаемые в представленной работе, изложены ниже:
1. Рассмотрение методов повышения разрешения изображений, выделение подходов, которые будут использованы при реализации программного продукта, т. е. выбрать метод достаточно простой, быстрый и устойчивый к ошибкам.
2. Постановка и решение задачи повышения разрешения изображений
3. Поэтапная программная реализация построенного алгоритма повышения разрешающей способности изображений.
Практическая значимость работы.
Разработанную программу и выделенные алгоритмы по повышению разрешающей способности изображений можно успешно применить для обработки цифровых изображений плохого качества, для повышения качества изображений лиц в видеопотоке.
Структура дипломной работы:
Дипломная работа состоит из аннотации, введения, двух глав (теоретической и проектной части), заключения, использованной литературы и приложений.
ГЛАВА I. ОБЗОР И СРАВНИТЕЛЬНЫЙ АНАЛИЗ МЕТОДОВ И АЛГОРИТМОВ ПОВЫШЕНИЯ РАЗРЕШЕНИЯ ИЗОБРАЖЕНИЙ
1.1 Анализ исследуемой проблемы Суть интерполяции заключается в использовании имеющихся данных для получения ожидаемых значений в неизвестных точках.
В первую очередь отметим, что изображение представляется в виде функции f (x, y). Исходя из этого, строится математическая основа интерполяции.
Пиксели изображений являются точками, в которых значение функции известно.
Сутью повышения разрешения изображений, с помощью интерполяции, является нахождение значений функции в промежуточных точках.
Основной недостаток интерполяции — невозможно точно восстановить информацию.
Общепринятые алгоритмы интерполяции можно поделить на две категории: адаптивные и неадаптивные. В данной работе использованы неадаптивные алгоритмы интерполяции.
Адаптивные методы изменяются в зависимости от предмета интерполяции (резкие границы, гладкая текстура), тогда как неадаптивные методы обрабатывают все пиксели одинаково.
Неадаптивные алгоритмы включают:
· метод ближайшего соседа
· билинейный
· бикубический В зависимости от сложности, они используют от 0 до 256 (или более) смежных пикселей для интерполяции. Чем больше смежных пикселей они включают, тем более точными могут оказаться, но это достигается за счёт значительного прироста времени обработки. Эти алгоритмы могут использоваться как для развёртки, так и для масштабирования изображения. В полной мере работа этих алгоритмов реализована в Photoshop.
К адаптивным алгоритмам можно причислить:
· градиентные методы, основная идея которых использование разных ядер для интерполяции вдоль и поперек границ.
· Обратная задача, постановка задачи в которой производится в виде:
Az=U (1),
где
Z — увеличенное изображение;
U — уменьшенное изображение;
А — оператор, уменьшающий изображение.
Увеличение здесь реализуется как решение этого уравнения с применением итерационных методов. Главный минус этого метода — неустойчивость, т.к. задача поставлена некорректно.
· Регулязирующий метод. Одним из способов решения этой некорректной задачи (1) является метод регуляции, созданный академиком А. И. Тихоновым. В результате этот метод сводит некорректно поставленную задачу — к корректной, за счет использования дополнительных ограничений.
Адаптивные алгоритмы включают в себя многие коммерческие алгоритмы в лицензированных программах, таких как Qimage, PhotoZoom Pro, Genuine Fractals и другие. Многие из них применяют различные версии своих алгоритмов (на основе попиксельного анализа), когда обнаруживают наличие границы — с целью минимизировать неприглядные дефекты интерполяции в местах, где они наиболее видны. Эти алгоритмы в первую очередь разработаны для максимизации бездефектной детальности увеличенных изображений, так что некоторые из них для вращения или изменения перспективы изображения непригодны.
Рассмотрим более подробно работу неадаптивных алгоритмов интерполяции. В моем проекте применены алгоритмы: билинейная и бикубическая. Так как из простейших и доступных методов интерполяции билинейная более проста в реализации и дает приемлемое качество при увеличении разрешения. А бикубический метод он немного сложен в реализации, но дает очень хорошее качество.
Метод ближайшего соседа — это наиболее базовый из всех алгоритмов интерполяции, который требует наименьшего времени обработки, поскольку учитывает только один пиксель — ближайший к точке интерполяции. В результате каждый пиксель просто становится больше.
Билинейная интерполяция рассматривает квадрат 2×2 известных пикселя, окружающих неизвестный. В качестве интерполированного значения используется взвешенное усреднение этих четырёх пикселей. В результате изображения выглядят значительно более гладко, чем результат работы метода ближайшего соседа.
В вычислительной математике билинейная интерполяция — расширение линейной интерполяции для функций в двух переменных, то есть — это линейная интерполяция первого порядка в двумерном случае:
f (x, y)=(1-x)(1-y)f (0, 0)+x (1-y)f (1, 0)+(1-x)yf (0, 1)+xyf (1, 1) (2).
Ключевая идея заключается в том, чтобы провести обычную линейную интерполяцию сначала в одном направлении, затем в другом.
Рис. 1. Билинейная интерполяция Четыре красные точки представляют собой известные значения функции. Значение в зеленой точке должно быть интерполировано.
Допустим, что необходимо интерполировать значение функции f в точке P = (x, y). Для этого необходимо знать значения функций в (окружающих P) точках Q11 = (x1, y1), Q12 = (x1, y2), Q21 = (x2, y1), и Q22 = (x2, y2).
Первым шагом интерполируется (линейно) значение вспомогательных точек R1 и R2 вдоль оси абсцисс, где
R1 = (x, y1)
R2 = (x, y2)
(3)
(4)
Теперь проводится линейная интерполяция между вспомогательными точками R1 и R2.
(5)
Это и есть приблизительное значение функции в точке P, т. е. f (x, y).
(6)
В особом случае, когда известные точки находятся на вершинах единичного квадрата, т. е. имеют координаты (0, 0), (0, 1), (1, 0), и (1, 1), формула билинейной интерполяции упрощается до:
(7).
Или же с помощью умножения векторов с матрицей:
(8).
Обратите внимание: сам интерполянт нелинеен:
(9),
т.к. является произведением двух линейных функций. Альтернативное написание:
(10),
Где
. (11).
Результат билинейной интерполяции не зависит от порядка шагов. Возможно сначала интерполировать между известными точками вдоль оси ординат и затем, получив два вспомогательных значения, интерполировать между ними вдоль оси абсцисс. Результат будет тот же.
В компьютерной графике билинейная интерполяция получила широкое распространение в процессе ресэмплинга (или, проще говоря, масштабирования) изображений.
При увеличении цифровых изображений наблюдается сильная пикселизация картинки. Билинейная интерполяция используется для расчета цветов дополнительных пикселей (P) относительно основных, исходных (Q), что позволяет сглаживать переходы. Значением функции f в данном случае выступает цвет пикселя (его составляющие). При этом квадрат, образованный четырьмя рассматриваемыми основными точками принимается единичным.
Главным недостатком билинейной интерполяции при масштабировании изображений является тот факт, что при увеличении в N раз изображения размером W на H пикселей в результате будет получено изображение размером не NW на NH пикселей, а (N (W? 1) + 1) на (N (H? 1) + 1) пикселей.
Связано это с тем, что в исходном изображении, например, по горизонтали имеется W точек, т. е. (W? 1) смежных пар. При увеличении изображения в N раз между каждой парой основных точек вставляется по (N? 1) дополнительных точек (т.е. при увеличении вдвое между основными точками вставляется еще по одной, при увеличении втрое — по две и т. д.). Итого в результате ширина результирующего изображения будет равна сумме количества основных и дополнительных точек:
W + (W? 1)(N? 1) = N (W? 1) + 1 (12).
Проще говоря, для последнего пикселя (в каждой строке и столбце) исходного изображения не находится пары, с которой можно было бы провести интерполирование.
Бикубическая интерполяция Бикубическая интерполяция идёт на один шаг дальше билинейной, рассматривая массив из 4×4 окружающих пикселей — всего 16. Поскольку они находятся на разных расстояниях от неизвестного пикселя, ближайшие пиксели получают при расчёте больший вес. Бикубическая интерполяция производит значительно более резкие изображения, чем предыдущие два метода, и возможно, является оптимальной по соотношению времени обработки и качества на выходе. По этой причине она стала стандартной для многих программ редактирования изображений (включая Adobe Photoshop), драйверов принтеров и встроенной интерполяции камер.
В вычислительной математике бикубическая интерполяция — расширение кубической интерполяции на случай функции двух переменных, значения которой заданы на двумерной регулярной сетке. Поверхность, полученная в результате бикубической интерполяции, является гладкой функцией, в отличие от поверхностей, полученных в результате билинейной интерполяции или интерполяции методом ближайшего соседа.
Чтобы лучше понять принцип бикубической интерполяции, предлагаю рассмотреть принцип кубической интерполяции.
Если значения функции f (x) и ее производной известны в точках x=0 и x=1, тогда функция может быть интерполирована на интервале [0, 1] используя полином третьего порядка. Формула для вычисления может быть легко получена.
Полином третьего порядка и его производная:
(13)
Значения полинома и его производной в точках x=0 и x=1:
(14)
Эти четыре тождества могут быть записаны как:
(15)
программа изображение алгоритм интерполяция Итак мы получили нашу интерполяционную формулу. На практике алгоритм использует для интерполяции функции, имея некие известные значения в заданных точках. В этом случае мы не можем знать производную функции. Мы могли бы принять производную в заданных точках, как 0, однако для получения более гладких и правдоподобных графиков функций мы примем за производную уклон линии между предыдущей и следующей точкой. Таким образом для расчетов нам понадобится 4 точки. Предположим, мы имеем 4 значения функции в точках p0, p1, p2 и p3, расположенных соответственно на x=-1, x=0, x=1 и x=2. Подставим полученные значения f (0), f (1), f (2) и f (3):
(16)
Сопоставив эти данные с полученными ранее формулами мы имеем:
(17)
Результат:
Так как бикубическая интерполяция представляет собой кубическую интерполяцию в двух измерениях.
Мы можем, используя формулу кубической интерполяции, полученную выше, построить бикубическую интерполяционную формулу.
Представим, что нам известно 16 точек pij, с точкой начала координат в (i-1, j-1), где i, j изменяются от 0 до 3. Тогда, мы сможем интерполировать поверхность на участке [0,0] х [1,1], для этого интерполируем 4 колонки и потом интерполируем полученные результаты в горизонтальном направлении:
Расчет коэффициентов
Мы можем переписать формулу для бикубический интерполяции как многомерный полином:
(20)
С помощью этих значений для Ij, коэффициенты:
На основе этих данных реализуются алгоритмы увеличения разрешения в моей работе. Далее приведены основные недостатки, возникающие после работы описанных выше методов и алгоритмов.
Все неадаптивные интерполяторы пытаются подобрать оптимальный баланс между тремя нежелательными дефектами: граничными гало, размытием и ступеньчатостью.
Даже наиболее развитые неадаптивные интерполяторы всегда вынуждены увеличивать или уменьшать один из вышеприведенных дефектов за счёт двух других — как следствие, как минимум один из них будет заметен. Заметьте, насколько граничное гало похоже на дефект, порождаемый повышением резкости с помощью нерезкой маски, и как оно повышает кажущуюся резкость посредством усиления чёткости.
Адаптивные интерполяторы могут создавать или не создавать вышеописанные дефекты, но они тоже могут породить несвойственные исходному изображению текстуры или одиночные пиксели на крупных масштабах.
Далее в следующем параграфе приведена сравнительная оценка программ, в которых реализованы алгоритмы повышения разрешения изображений.
1.2 Сравнительная оценка существующих программ, повышающих разрешение изображений
Photoshop
Photoshop выполняет ресамплинг (увеличение) изображения при помощи методов интерполяции, присваивая новым пикселам значения цвета, полученные на основе значений цвета уже существующих пикселов. Выбрать используемый метод можно в диалоговом окне «Размер изображения» .
По соседним. Быстрый, но менее точный метод, который повторяет пикселы изображения. Этот метод используется в иллюстрациях, содержащих несглаженные края, для того чтобы сохранить четкие границы и создать файл меньшего размера. Однако этот метод может создать зубчатые края, которые станут заметными при искажении или масштабировании изображения или проведении множества операций с выделением.
Билинейная. Этот метод добавляет новые пикселы, рассчитывая среднее значение цвета окружающих пикселов. Он дает результат среднего качества.
Бикубическая. Более медленный, но и более точный метод, основанный на анализе значений цвета окружающих пикселов. За счет использования более сложных вычислений бикубическая интерполяция дает более плавные цветовые переходы, чем интерполяция по соседним пикселам или билинейная интерполяция.
Бикубическая, глаже. Хороший метод для увеличения изображений на основе бикубической интерполяции разработанный специально для получения более гладких результатов.
Бикубическая, четче. Хороший метод для уменьшения размера изображения на основе бикубической интерполяции с повышенной резкостью. Этот метод позволяет сохранить детали изображения, подвергнутого ресамплингу. Недостаток этого метода — делает слишком резкими некоторые области изображения .
Resize IT
Resize IT — это Adobe Photoshop-плагин, который работает со всеми приложениями, поддерживающими Adobe-совместимые плагины. Если вам необходимо увеличить 3-мегапиксельное изображение до 11 мегапикселов, то Resize IT предложит несколько интерполяционных алгоритмов, из которых можно будет выбрать оптимальный для конкретного случая.
Genuine Fractals
Genuine Fractals («Подлинные фракталы») от компании Lizard Technologies — популярный пакет для увеличения разрешения изображений. Реализованные в Genuine Fractals интерполяционные алгоритмы основаны на кодировании изображения методом IFS (Iterated functions system). Они позволяют растягивать отдельные фрагменты изображения с учетом их локальных геометрических характеристик и соответственно избегать обычных артефактов интерполяции:
· вертикальные и горизонтальные границы между контрастными областями не размываются;
· вдоль наклонных линий не образуются зубцы, а вокруг острых углов — ореолы;
· контрастные фактуры не теряют четкости, но и не превращаются в решетки из укрупненных пикселов и т. д.
Программа обеспечивает конвертирование изображения в собственный формат Genuine Fractals, в котором изображение хранится в более компактном виде. Это дает возможность хранить и передавать по Сети большее количество изображений.
В качестве плагина Photoshop Genuine Fractals добавляет к приложению Adobe Photoshop дополнительную функцию — разрешение по запросу (resolution on demand), то есть позволяет получать файлы разного разрешения из одного базового кода.
Программа обеспечивает возможность увеличения изображения до 600% без видимой потери качества.
Программы, подобные Genuine Fractals, необходимы всем, кому приходится иметь дело с изображениями низкого разрешения. Это и фотографии из любительских и профессиональных камер, и картинки из Интернета.
На мой взгляд, Genuine Fractals дает отличное качество интерполяции, быстро работает (что заметно выделяет ее среди других программ фрактального кодирования) и обладает при этом удобным интерфейсом. Единственный недостаток — довольно высокая цена. Еще одна проблема для простого смертного — отслеживать математические зависимости в разных окошках: что на что в них влияет и почему. Для человека, совсем непосвященного, будет непросто.
Qimage
Программа Qimage будет интересна пользователям, которых увеличение изображений интересует преимущественно в контексте вывода на печать. Она предназначена для того, чтобы печатать увеличенные изображения с надлежащим качеством. Qimage использует собственные алгоритмы — более интеллектуальные, чем бикубическая интерполяция.
Программа позволяет напечатать изображения с максимальным качеством, оптимально размещает несколько снимков на странице. Помимо интеллектуальных алгоритмов увеличения изображения имеются фильтры шума, удаление пятен, функции настройки яркости, контраста, резкости, вращения изображения, зеркального преобразования и т. д. Поддерживаются форматы JPEG, TIF, BMP, GIF, PCX, TGA, PCD, PNG, и NEF (Nikon D1 raw).
Pictura
Pictura — это программа обработки графики, которая использует оригинальные алгоритмы интерполяции, подавление шума, фокусировку и другие фильтры, которые применяются для редактирования цифровых фотографий и в допечатной подготовке.
Pictura основана на методе интерполяции AQua-2 (Adaptive Quadratic v.2), он основан на понятии оптимального восстановления заимствованного из теории обработки сигналов. В рамках данного методадля каждого из синтезируемых пикселов определяется распределение вероятности значений цветовых компонентов, зависящее от локальных характеристик изображения.
Проект находится на стадии тестирования предварительной альфа-версии.
Также есть некий программный продукт для повышения разрешения (увеличения) изображений, разработанный при факультете вычислительной математики и кибернетики — в лаборатории математических методов обработки изображений, МГУ имени М. В. Ломоносова. Автором является Насонов А. В. В этом продукте и реализованы адаптивные методы повышения разрешения, в частности, программа увеличивает разрешение изображений с использованием метода регуляризации Тихонова, что дает очень хорошее качество преобразования. Использованные в этой программе методы дают очень хорошее качество повышения (увеличения) разрешения изображения. Также в нем есть функция — подавления эффекта Гиббса, которое возникает в результате, повышения резкости изображения. За счет всего этого дается отличный результат. Могу только сказать, что проект еще дорабатывается, судя по публикациям конференции Графикон и в массовое распространение еще не вышел. Но в интернете есть демонстрационная версия программы.
В числе других перспективных разработок стоит упомянуть технологию под рабочим названием SmartEdge, создаваемую по заказу компании Samsung Алексеем Лукиным из МГУ. Ключевой особенностью SmartEdge является использование алгоритма, оптимальным образом компонующего результаты линейных и нелинейных способов интерполяции в зависимости от локальных характеристик изображения. Таким образом, каждый из методов проявляет свои лучшие качества, а риск возникновения артефактов сводится к минимуму.
Исходя из описаний выше изложенных программных продуктов, реализующих повышение (увеличение) разрешения изображений могу сделать вывод, что самый оптимальный метод — это комбинация нескольких взаимно дополняющих друг друга методов. Из этих описанных программ выгодно отличается Genuine Fractals — его алгоритмы превосходно справляются с заданной задачей, но по цене он менее приемлем обычному пользователю. Наиболее оптимален, по-моему, Adobe Photoshop-плагин. Также программы, которые находятся в стадии доработки тоже, по лично моему мнению, обещают быть вполне приемлемыми, если не лучшими.
В заключение отметим, что увеличение разрешения изображений потенциально неограничен в перспективах роста, дальнейшего развития. Также помимо этого некоторые рассмотренные в данном обзоре программы обладают еще одной вселяющей надежду особенностью: сам факт их существования свидетельствует о том, что рынок графических приложений еще не окончательно поделен компаниями-монополистами и на нем по-прежнему хватает места для энтузиастов-одиночек.
Выводы к главе I
Изложенный в этой главе материал в первую очередь содержит подготовительную информацию. Рассмотрены и в некоторой степени сравнены алгоритмы реализации увеличения разрешающей способности изображений, работающих с этой проблемой. А также произведен обзор некоторых уже существующих программ, какими алгоритмами они это реализуют, достоинства и недостатки.
ГЛАВА II. ПРОЕКТНАЯ ЧАСТЬ. ОПИСАНИЕ ТЕХНОЛОГИИ ВЫПОЛНЕНИЯ РАБОТЫ
2.1 Выбор оптимального инструментария для разработки
В этом параграфе описываются основные использованные компоненты, их работа:
Форма поиска файлов включает компоненты:
· MainMenu: TMainMenu
Рис. 2. Окно конструктора меню Form2 — формы поиска изображений
С помощью компонента MainMenu я создаю иерархическое меню. В Меню «Файл» Подменю «Открыть» открывает диалоговое окно для открытия изображений. Подменю «Выйти» закрывает форму и работа программы заканчивается. Меню «Справка» находится небольшое руководство по пользованию.
· OpenPictureDialog: TOpenPictureDialog
begin
if OpenPictureDialog1. Execute () then
begin
//открытие изображения через OpenFileDialog
form3.hint:=OpenPictureDialog1.FileName;
form3.ShowModal;
end;
end;
Компонент OpenPictureDialog вызывает диалоговое окно открытия файла. С помощью этого окна пользователь может выбрать изображения для преобразовывания из указонного пути, может установить тип файлов (их расширение).
· ImageList: TImageList. Набор рисунков. Представляет собой хранилище для нескольких рисунков одинакового размера.
· TreeView: TTreeView. Дерево выбора. Представляет собой совокупность связанных в древовидную структуру пиктограмм. Используется для просмотра структуры каталогов, связанных иерархическим образом.
С помощью этого компонента я провожу просмотр структуры каталогов, которые связаны иерархически.
· ListView: TListView. Панель пиктограмм. Организует просмотр нескольких пиктограмм и выбор нужной. Компонент способен располагать пиктограммы в вертикальных или горизонтальных рядах и показывать их в крупном или мелком масштабе.
С помощью этого компонента устанавливаю панель, где будут отображаться миниатюры изображений.
· FileListBox: TFileListBox
Форма преобразования изображений включает компоненты:
· MainMenu: TMainMenu
Рис. 4. Окно конструктора меню Form3 — формы преобразования изображений
С помощью компонента MainMenu я создаю иерархическое меню. В Меню «Файл» подменю «Сохранить» открывает диалоговое окно для сохранения изображений, подменю «Печать» открывает диалоговое окно для печати, подменю «Параметры страницы» открывает диалоговое окно, которое показывает параметры страницы для печати. В меню операции есть подменю «Преобразовать», которое выполняет операцию преобразования изображений по выбранному методу интерполяции.
· SavePictureDialog: TSavePictureDialog
if savepicturedialog1. Execute then
begin
bitmap:=image1.Picture.Bitmap;
//выбор типа сохранения
case RadioGroup1. ItemIndex of
//jpg
0: begin
SaveBitmapToJPG (bitmap, savepictureDialog1. FileName+'.jpg');
end;
//gif
1: begin
SaveBitmapToGif (bitmap, savepictureDialog1. FileName+'.gif');
end;
Рис. 5. Диалоговое окно сохранения изображения SavePictureDialog
Компонент SavePictureDialog вызывает диалоговое окно сохранения. В нем пользователь может указать имя сохраняемого файла, путь куда он сохраняет изображение, в каком формате он это сделает.
· PrintDialog: TPrintDialog
//Печать изображения
with Printer do
begin
BeginDoc;
koef:=image1.Picture.Height/image1.Picture.Width;
Canvas.StretchDraw (Rect (0,0,PageWidth, Round (PageWidth*koef)), Image1.Picture.Graphic);
EndDoc;
end;
Рис. 6. Диалоговое окно для печати изображения PrintDialog
Компонент PrintDialog вызывает диалоговое окно печати. В нем пользователь может выбрать принтер и установить его свойства, указать число копий и последователъность их печати, печатать в файл или непосредственно на принтер.
· PageSetupDialog: TPageSetupDialog
begin
PageSetupDialog1.Execute;
end;
Компонент PageSetupDialog вызывает диалоговое окно параметров страницы перед выводом на печать файла.
·
Image: TImage
· Panel: TPanel
2.2 Разработка логической схемы и реализация алгоритма
2.2.1 Форма поиска файлов
…
//построение дерева вложенных папок
procedure NextLevel (ParentNode: TTreeNode);
function DirectoryName (name: string): boolean;
begin
result := (name > '.') and (name > '.');
end;
var
sr, srChild: TSearchRec;
node: TTreeNode;
path: string;
begin
node := ParentNode;
path := '';
//построение полного пути к выбранной директории
repeat
path := node. Text + '' + path;
node := node. Parent;
until
node = nil;
//поиск файлов
if FindFirst (path + '*.*', faDirectory, sr) = 0 then
begin
repeat
//если директории
if (sr.Attr and faDirectory > 0) and DirectoryName (sr.name) then
begin
//добавляем дочерний узел
node := Form2. TreeView1.Items.AddChild (ParentNode, sr.name);
//присвоение номер иконки
node.ImageIndex := 0;
//устанавливает выделение на первую ветвь
node.SelectedIndex := 1;
//отключает очерние элементы
node.HasChildren := false;
//ищет следующие папки
if FindFirst (path + sr.name + '*.*', faDirectory, srChild) = 0 then
begin
//цикл для поиска всех вложенных
repeat
if (srChild.Attr and faDirectory > 0) and
DirectoryName (srChild.name) then
node.HasChildren := true;
until
(FindNext (srChild) > 0) or node. HasChildren;
end;
FindClose (srChild);
end;
until
FindNext (sr) > 0;
end
else
ParentNode.HasChildren := false;
// закрытие поиска
FindClose (sr);
end;
…
Рис. 7. Форма поиска. Отображение структуры каталогов
В левой стороне отображается дерево вложенных папок — каталог данных.
//добавление миниатюр файлов в ListView
for i := 0 to FileListBox1.Items.Count — 1 do
begin
try
bitmap:=TBitmap.Create;
//открытие файла в bitmap
bitmap:=ExtToBmp (path+''+FileListBox1.Items[i]);
//установка размеров
dx:=ImageList2.Width/bitmap.Width;
dy:=ImageList2.Height/bitmap.Height;
//уменьшение до миниатюры
bitmap:=interpolate (bitmap, dx, dy);
//добавление нового пункта
item:=listview1.Items.Add;
//установка заголвока
item.Caption:=FileListBox1.Items[i];
//установка иконки из списка изображений
item.ImageIndex:=ImageList2.Add (bitmap, nil);
except
bitmap.Free;
end;
end;
…
Рис. 9. Форма поиска. Отображение миниатюр изображений
В результате на правой стороне формы отображаются миниатюры изображений для выбора. Двойным щелчком выбирается изображение и следующим шагом открывается вторая форма — форма преобразования изображения. Форма поиска является основной формой, появляется при запуске .exe-файла. Основной функцией этой формы является поиск файлов (изображений). Элемент Меню «Файл» — подменю «Открыть»
…
begin
if OpenPictureDialog1. Execute () then
begin
//открытие изображения через OpenFileDialog
form3.hint:=OpenPictureDialog1.FileName;
form3.ShowModal;
end;
Реализуется открытие файла через компонент OpenFileDialog.
Элемент Меню «Файл» — подменю «Закрыть»
procedure TForm3. N4Click (Sender: TObject);
begin
close;
Производится закрытие формы поиска — всей оболочки.
Меню «Справка»
procedure TForm2. N7Click (Sender: TObject);
begin
panel1.Visible:=true;
end;
Рис. 7. Справка. Руководство по пользованию
В меню «Справка» дается краткое руководство по пользованию, чтобы пользователь мог быстро и правильно применить данную программу.
2.2.2 Форма преобразования изображений
Рис. 10. Форма преобразования. Отображение указанного изображения
Форма преобразования изображений визуально разделена на две части. В левой стороне скомпонованы:
· две рабочие кнопки («Преобразование» и «Сохранить»)
· группа — выбор «Тип интерполяции» (между билинейной и бикубической)
· группа — выбор расширения изображения (.jpg,. giv, .png, .bmp)
· группа — изменение данных исходного разрешения и опция сохранения пропорций изображения
· группа — отображение данных исходного разрешения изображения.
В правой части отображается изображение, которое преобразовывается. Для этого использован компонент Image (рисунок) для отображения изображений.
Кнопка «Преобразование»
Фрагмент кода:
procedure TForm3. Button1Click (Sender: TObject);
var
bm, bm1: TBitmap;
path, ext: string;
i, width, height, new_width, new_height: integer;
dx, dy: single;
begin
…
//билинейная
0: bm:=interpolate (bm, new_width/width, new_height/height);
//бикубическая
1: begin
bm1.Width:=new_width;
bm1.Height:=new_height;
//растягивание изображения
Unit4.deletescansrect (bm, bm1, bm.Canvas.ClipRect, bm1.Canvas.ClipRect);
//обработка бикубическим алгоритмом
bm:=Bicubic (bm1);
end;
end;
image1.Picture.Assign (bm);
label5.Caption:= inttostr (image1.picture.width);
label6.Caption:= inttostr (image1.picture.Height);
end;
end;
…
end;
end;
Рис. 11. Кнопка «Преобразовать»
Свойство этой кнопки — преобразовывать выделенное изображение по одному из алгоритмов повышения разрешения: билинейной или бикубичекой интерполяции.
Кнопка «Сохранить»
Фрагмент кода:
…
begin
if savepicturedialog1. Execute then
begin
bitmap:=image1.Picture.Bitmap;
//выбор типа сохранения
case RadioGroup1. ItemIndex of
//jpg
0: begin
SaveBitmapToJPG (bitmap, savepictureDialog1. FileName+'.jpg');
end;
//gif
1: begin
SaveBitmapToGif (bitmap, savepictureDialog1. FileName+'.gif');
end;
//png
2: begin
SaveBitmapToPNG (bitmap, savepictureDialog1. FileName+'.png');
end;
//bmp
3: begin
image1.Picture.SaveToFile (savepictureDialog1.FileName+'.bmp');
…
Рис. 12. Кнопка «Сохранить»
Кнопка «Сохранить» сохраняет измененные параметры по указанному пути. При сохранении преобразованного изображения, можно выбрать с каким расширением его сохранить.
//выбор типа сохранения
case RadioGroup1. ItemIndex of
//jpg
0: begin
SaveBitmapToJPG (bitmap, savepictureDialog1. FileName+'.jpg');
end;
//gif
1: begin
SaveBitmapToGif (bitmap, savepictureDialog1. FileName+'.gif');
end;
//png
2: begin
SaveBitmapToPNG (bitmap, savepictureDialog1. FileName+'.png');
end;
//bmp
3: begin
image1.Picture.SaveToFile (savepictureDialog1.FileName+'.bmp');
end;
Фрагмент кода выбора типа интерполяции:
…
//выбор типа интерполяции
case RadioGroup2. ItemIndex of
//билинейная
0: bm:=interpolate (bm, new_width/width, new_height/height);
//бикубическая
1: begin
bm1.Width:=new_width;
bm1.Height:=new_height;
…
Выполняется выбор типа интерполяции, с помощью RadioGroup — группы зависимых переключателей. Он содержит специальные свойства для обслуживания нескольких связанных между собой зависимых переключателей.
Меню «Файл»
Элемент Меню «Файл» — подменю «Параметры страницы»
procedure TForm3. N10Click (Sender: TObject);
begin
PageSetupDialog1.Execute;
end;
Вызывает диалоговое окно «Параметры страницы» через компонент PageSetupDialog.
Элемент Меню «Файл» — подменю «Вывод на печать»
procedure TForm3. N9Click (Sender: TObject);
var
relheight, relwidth: integer;
koef: real;
begin
if printDialog1. Execute then
begin
//Печать изображения
with Printer do
begin
BeginDoc;
koef:=image1.Picture.Height/image1.Picture.Width;
Canvas.StretchDraw (Rect (0,0,PageWidth, Round (PageWidth*koef)), Image1.Picture.Graphic);
…
Вызывает диалоговое окно «Печать» через компонент PrintDialog.
Элемент Меню «Файл» — подменю «Закрыть»
procedure TForm3. N4Click (Sender: TObject);
begin
close;
end;
Процедура закрывает форму «Преобразования изображений» .
2.2.3 Реализация алгоритмов интерполяции
Фрагмент кода алгоритма билинейной интерполяции:
function interpolate (bm: tbitmap; dx, dy: single):TBitmap;
var
bm1: tbitmap;
z1, z2: single;
k, k1, k2: single;
x1, y1: integer;
c: array [0.1, 0.1, 0.2] of byte;
res: array [0.2] of byte;
x, y: integer;
xp, yp: integer;
xo, yo: integer;
col: integer;
pix: tcolor;
begin
bm1 := tbitmap. create;
bm1.width := round (bm.width * dx);
bm1.height := round (bm.height * dy);
for y := 0 to bm1. height — 1 do begin
for x := 0 to bm1. width — 1 do begin
xo := trunc (x / dx);
yo := trunc (y / dy);
x1 := round (xo * dx);
y1 := round (yo * dy);
for yp := 0 to 1 do
for xp := 0 to 1 do begin
pix := bm.canvas.pixels[xo + xp, yo + yp];
c[xp, yp, 0] := getrvalue (pix);
c[xp, yp, 1] := getgvalue (pix);
c[xp, yp, 2] := getbvalue (pix);
end;
for col := 0 to 2 do begin
k1 := (c[1,0,col] - c[0,0,col]) / dx;
z1 := x * k1 + c[0,0,col] - x1 * k1;
k2 := (c[1,1,col] - c[0,1,col]) / dx;
z2 := x * k2 + c[0,1,col] - x1 * k2;
k := (z2 — z1) / dy;
res[col] := round (y * k + z1 — y1 * k);
end;
bm1.canvas.pixels[x, y] := rgb (res[0], res[1], res[2]);
end;
Form3.Caption := IntToStr (round (100 * y / bm1. Height)) + '%';
Application.ProcessMessages;
if Application. Terminated then
Exit;
end;
bm := bm1;
interpolate:=bm1;
end;
…
Изображение рассматривается как поверхность, цвет — третье измерение. Если изображение цветное, то интерполяция проводится отдельно для трех цветов.
Для каждой точки нового изображения с координатами (xo, yo) нужно найти четыре ближайшие точки исходного изображения. Эти точки образуют квадрат. Через две верхние точки проводится прямая f1(x), через две нижние — f2(x). Дальше находятся координаты для точек f1(xo) и f2(xo), через которые проводится третья прямая f3(y). Цвет искомой точки — это f3(yo).
Этот алгоритм хорошо работает при целых или больших коэффициентах увеличения.
Но резкие границы размываются. Для уменьшения изображения этот алгоритм также не подходит.
Фрагмент кода алгоритма бикубической интерполяции:
…
Begin
bmp1:=TBitmap.Create; bmp1. Width:=bmp.Width;bmp1.Height:=bmp.height;
//————————————————————————————————————
For j:=0 to bmp. Height do //Преобразование только по горизонтали
begin
For i:=0 to Round (bmp.Width/2) do
begin
i_new:=(i*2); //по номеру пикселя i в новом (формируемом) изображении находим номер i_new в исходном изображении
dx:=0.5;//Это смещение (сдвиг) весовой функции
R:=0; G:=0; B:=0; s:=0;
For k:=-1 to 2 do//яркость пикселя с номером i равна сумме яркостей этого пикселя, соседа слева и двух соседей справа, умноженных на весовые коэффициенты
Begin
S:=i_new+k;//Это просто для удобства
If s<0 then s:=0; If s>bmp.Width-1 then s:=bmp.Width-1;
R:=R+GetRValue (bmp.Canvas.Pixels[(s), j])*fR (k-dx);
G:=G+GetGValue (bmp.Canvas.Pixels[(s), j])*fR (k-dx);
B:=B+GetBValue (bmp.Canvas.Pixels[(s), j])*fR (k-dx);
If R>255 then R:=255; If R<0 then R:=0;
If G>255 then G:=255; If G<0 then G:=0;
If B>255 then B:=255; If B<0 then B:=0;
End;
//В выходном изображении дублируем каждый второй столбец
bmp1.Canvas.Pixels[i*2,j]: =RGB (Round®, Round (G), Round (B));
bmp1.Canvas.Pixels[i*2+1,j]:=RGB (Round®, Round (G), Round (B));
end;{For i}
Form3.Caption := IntToStr (round (100 * j/ bmp. Height)) + '%';
Application.ProcessMessages;
if Application. Terminated then
Exit;
end;
…
Яркость пикселя нового изображения находится как сумма яркостей соответствующего пикселя старого изображения и трех его соседей (один сосед слева и два — справа), умноженных на значения весовой функции.
Чтобы новое изображение не сжималось по горизонтали в два раза, я его расширяла методом ближайшего соседа — три строки в конце подпрограммы.
Экспериментальным путем подобраны коэффициенты весовой функции. Если разрешить использовать подобранные коэффициенты, то бикубическая интерполяция получается максимально похожей как в Фотошопе.
Выводы к главе II
В этой главе приведено общее описание технологии выполнения разработки. В первом параграфе главы приведены описания инструментария для разработки, основных использованных компонентов. Во втором параграфе главы построена логическая схема разрабатываемого продукта — пошаговое описание технологии выполнения.
Заключение
Могу сказать, что поставленная передо мной цель — разработка программного продукта для реализации задачи повышения разрешающей способности изображений, выполнена. Задачи, решаемые в процессе достижения цели, тоже в полной мере реализованы. Рассмотрены основные методы и алгоритмы повышения разрешающей способности изображений. Выделены и использованы приемлемые подходы для разработки программного обеспечения, то есть достаточно простые, быстрые и обеспечивающие качественное повышение. Выполнена поэтапная программная реализация выбранного алгоритма повышения разрешающей способности изображений. И в итоге получена работающая программа, которая преобразует изображения, повышая их разрешение.
И напоследок, программа имеет перспективы для дальнейшей доработки. Возможно, например, добавление функций для устранения некоторых, возникающих недостатков, так называемых артефактов, в результате интерполяции, в частности, если изображение будет увеличено во много раз: сглаживание, подавление эффекта Гиббса, повышение резкости в сильно размытых изображениях.
1. Визильтер Ю. В., Желтов С. Ю., Князь В. А. и др. Обработка и анализ цифровых изображений с примерами на LabVIEW и IMAQ Vision: [учебный курс]. — М.: ДМК Пресс, 2007. 464 с
2. Гонсалес Р. Цифровая обработка изображений. — М.:Диалог-МИФИ, 2005
3. Гонсалес Р., Вудс Р. Цифровая обработка изображений. — М.: Техносфера, 2006
4. Грузман И. С., Киричук В. С. Цифровая обработка изображений в информационных системах: Учебное пособие. — Новосибирск, НГТУ, 2002
5. Насонов А., Крылов А., Лукин А., Увеличение разрешения изображения с использованием метода нрегуляризации Тихонова, материалы международной конференции «Тихонов и современная математика», Москва, 2006
6. Петровский А. И. Adobe Photoshop 6.0: трюки в дизайне изображения. — М.: 2001
7. Прэтт У. Цифровая обработка изображений. — М.: Мир, 2004. Кн. 1 и 2
8. Ратушняк А. методы сжатия данных. — М.: Диалог-МИФИ, 2002
9. Тихонов А. Н, Арсенин В. Я. Методы решения некорректных задач. — М.: Наука, 1979
10. Яне Б. Цифровая обработка изображений. — М.: Мир, 2007
11. Lukin A., Krylov A., Nasonov A., Image Interpolation by Super-Resolution, труды конференции «Графикон-2006», стр. 239−242
12. http://comrssion.graphicon.ru/
13. http://imaging.cs.msu.ru
14. http://ru.wikipedia.org/wiki/Билинейная_интерполяция
15. http://ru.wikipedia.org/wiki/Бикубическая_интерполяция
16. http://www.cambridgeincolour.com/ru/tutorials/image-interpolation.htm
17. http://forum.graphicon.ru/viewtopic.php?f=8&t=2901
18. http://images.cambridgeincolour.com/…tion_temp1.png
19. http://graphicon.ru/oldgr/ru/publications/
20. http://balbesof.net/info/photoshop_map.html
21. http://photoshop.demiart.ru/
22. http://www.photoshop-master.ru/articles.php?rub=19