Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
Учреждение образования
«БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ»
К защите допустить:
Руководитель курсовой работы
канд. техн. наук, доцент
__________________О. Ч. Ролич
___.___. 20___
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовой работе
на тему
(подпись студента)
Минск 2019
СОДЕРЖАНИЕ
2
РЕФЕРАТ
3
ВВЕДЕНИЕ
4
1 МАТЕМАТИЧЕСКОЕ ОБОСНОВАНИЕ МЕТОДА
ВОССТАНОВЛЕНИЯ ИСКАЖЕННОГО
ИЗОБРАЖЕНИЯ
7
Для восстановления функции f (x , y ) необходимо обратить свертку.
Операция обратной свертки называется деконволюцией. С помощью
теоремы о свертке, которая гласит, что операция свертки в
пространственной области эквивалентна поэлементному умножению в
частотной области, можно выполнить деконволюцию, не прибегая к
решению системы уравнений. Преобразование функции из пространственной
области в частотную область происходит с помощью преобразования Фурье.
Суть преобразования Фурье состоит в том, что любая функция может
быть аппроксимирована в точности суммой бесконечных функций синуса и
косинуса. Оно позволяет существенно сократить объём передаваемой
информации, достаточной для восстановления изображения в прежнем виде.
Также преобразование Фурье облегчает процесс фильтрации.
Преобразование Фурье хорошо тем, что оно обратимо.
В обработке цифровых изображений следует использовать дискретное
преобразование Фурье, так как значения функции изображения находятся в
определенном диапазоне. Для полутоновых изображений – это диапазон от 0
до 255. Дискретное преобразование Фурье является линейным
преобразованием, которое переводит вектор временных отсчётов в вектор
спектральных отсчётов той же длины.
Простейший способ вычисления дискретного преобразования Фурье –
прямое суммирование, представленное выражением (1.3). Оно приводит к N
операциям на каждый коэффициент.
N−1 N−1 −i2 π ( kiN + Nlj )(
F ( k , l )= ∑ ∑ f (i , j) e 1.3 )
i=0 j=0
Однако существуют и более эффективные способы вычисления,
называемые быстрым дискретным преобразованием Фурье. Количество
операций, затрачиваемых на вычисление суммы, можно значительно
сократить, если количество элементов выборки представить произведением
целых чисел. Быстрое преобразование Фурье применяется только к
последовательностям, имеющим длину, кратную степени 2. Одним из самых
известных алгоритмов одномерного БПФ является алгоритм Кули-Тьюки. При
использовании данного алгоритма количество отсчетов в выборке функции
должно быть кратно степени 2. Двумерное разбиение по основанию 2 делит
выборку элементов на четыре выборки и так далее до тех пор, пока не останется
два элемента, Фурье-преобразование которых и следует выполнить.
Существует алгоритм быстрого дискретного Фурье-преобразования,
который заключается в том, что выборка разбивается на две
последовательности половинной длины. Первая последовательность
заполняется данными с четными номерами, а вторая - с нечетными. В
обработке изображений как двумерных массивов использование данного
алгоритма приведет к наиболее эффективному результату.
Алгоритм быстрого преобразования Фурье основывается на таком
математическом преобразовании, как свёртка функций. Из теоремы свертке
8
(1.4), где H ( u , v ) и F (u , v ) – это Фурье-образы искажающей функции и функции
исходного изображения, видно, что операция, обратная свертке,
эквивалентна делению в частотной области рассматриваемых функций.
h ( x , y )∗f ( x , y ) ↔ H ( u , v ) F (u , v ) (1.4)
10
Поскольку локальные гистограммы можно вычислять рекурсивно,
вычислительная сложность алгоритмов ранговой фильтрации также мало
зависит от размеров окрестности. При вычислении конкретных ранговых
статистик и производных от них возможны упрощения, связанные с
информационной избыточностью изображений. Наиболее известный
алгоритм этого класса — алгоритм медианной фильтрации. Другими
примерами ранговых алгоритмов могут служить алгоритмы экстремальной
фильтрации, которые заменяют анализируемый элемент изображения
максимумом или минимумом по окрестности. Еще одно свойство ранговых
алгоритмов - локальная адаптация к характеристикам обрабатываемого
изображения и потенциальные возможности их использования не только для
сглаживания и очистки от шумов, но и для выделения признаков при
препарировании и автоматическом распознавании изображений.
Под фильтрацией изображений понимают операцию, имеющую своим
результатом изображение того же размера, полученное из исходного по
некоторым правилам. Обычно интенсивность (цвет) каждого пикселя
результирующего изображения обусловлена интенсивностями (цветами)
пикселей, расположенных в некоторой его окрестности в исходном
изображении.
Правила фильтрации могут быть самыми разнообразными. Фильтрация
изображений является одной из самых фундаментальных операций
компьютерного зрения, распознавания образов и обработки изображений. С
той или иной фильтрации исходных изображений начинается работа
подавляющего большинства методов обработки изображений.
Естественно, что при обработке изображений широко используются
методы и способы обработки одномерных сигналов, если возможно их
обобщение на многомерные сигналы. При этом, однако, приходится
учитывать, что математические методы описания дискретных многомерных
систем не отличаются завершённостью. Многомерные дискретные системы
обладают большим числом степеней свободы, и их проектирование
приобретает гибкость, не свойственную одномерным системам.
Для представления графической информации на двумерной плоскости
(например, экране монитора) применяются два основных подхода: растровый
и векторный. При векторном подходе графическая информация описывается
как совокупность абстрактных геометрических объектов - прямые, отрезки,
кривые, прямоугольники и т.д. Векторное описание предполагает априорные
знания о структуре изображения.
Растровая графика оперирует с произвольными изображениями в виде
растров. Растр – это описание изображения на плоскости путем разбиения
(дискретизации) его на одинаковые элементы по регулярной сетке и
присвоение каждому элементу своего цветового и любых других атрибутов
(для многослойных изображений). Самый простой и распространенный растр
– прямоугольный, самый экономичный по количеству отсчетов для передачи
изображений – гексагональный. С математических позиций растр – это
11
кусочно-постоянная аппроксимация на плоскости непрерывной функции
изображения. Элемент растра называют пикселем.
Стандартная идентификация пикселей определяется выражением (1.7),
где A ( i, j ) – область пикселя, C ( i , j )−¿ атрибуты пикселя.
f ( i , j )=( A ( i , j ) C (i , j ) ) (1.7)
12
Преобразования изображений в компьютере и хранение обработанных
данных выполняются в дискретном виде. Для получения дискретного
представления из непрерывных аналоговых изображений реального мира
применяется дискретизация. Практически ее осуществляют устройства ввода
(цифровой фотоаппарат, сканер или другие). Для визуального восприятия
обработанных изображений на устройствах вывода осуществляется
реконструкция аналогового изображения по его дискретизированному
представлению.
Двумерное изображение можно представлять как двумерный сигнал. В
аналоговой форме этот сигнал непрерывный, в дискретной – определенный
на точках растра области. Дискретный сигнал представляется как функция,
отличная от нуля только в точках растра, поэтому для рассмотрения
изображений, определенных на прямоугольнике, поступают двояко: либо
трактуют как сигнал, равный нулю, везде, кроме данного прямоугольника
(аналоговая математика спектральных преобразований), либо считают длину
и ширину главным периодом сигнала и за пределами растра пространство
заполняют сдвинутым на период копиями изображения (дискретная
математика преобразований).
В простейшем случае черно-белых изображений мы имеем двумерный
аналоговый массив. Для цветных изображений в модели RGB, учитывая
свойство аддитивности при сложении цветов, каждый слой также может
рассматриваться и обрабатываться, как двумерный массив, с последующим
суммированием результатов.
13
3 ОБЪЕКТНО-ОРИЕНТИРОВАННЫЕ ТЕХНОЛОГИИ
ПРОГРАММИРОВАНИЯ
3.3 Инкапсуляция
15
Другим немаловажным следствием инкапсуляции является легкость
обмена объектами, переноса их из одной программы в другую.
3.4 Наследование
3.5 Полиморфизм
16
объект становится “самодостаточным”. Будучи доступным в некоторой точке
программы, даже при отсутствии полной информации о типе этого объекта,
он всегда может корректно вызвать свойственные ему методы. Таким
образом, полиморфная функция - это семейство функций с одним и тем же
именем, но выполняющих различные действия в зависимости от условий
вызова.
Для изменения метода необходимо перегрузить его в потомке, т.е.
объявить в потомке одноименный метод и реализовать в нем нужные
действия. В результате в объекте-родителе и объекте-потомке будут
действовать два одноименных метода, имеющие разную кодовую
реализацию и, следовательно, придающие объектам разное поведение.
Благодаря полиморфизму, потомки могут перегружать общие методы
родителя с тем, чтобы реагировать специфическим образом на одно и то же
событие.
Python – язык с динамической типизацией, полиморфизм в нем
проявляется повсюду. Фактически все операции в языке Python являются
полиморфическими: вывод, извлечение элемента и многие другие. В языке
Python именно объекты определяют синтаксический смысл операции.
Если функции будут переданы объекты, которые не поддерживают
ожидаемый интерфейс, интерпретатор Python обнаружит ошибку при
выполнении и автоматически вызовет исключение. Это важнейшее отличие
философии языка Python от языков программирования со статической
типизацией. Такая модель полиморфизма предполагает необходимость
тестирования программного кода на наличие ошибок, так как из-за
отсутствия объявлений типов нет возможности с помощью компилятора
выявить некоторые виды ошибок на ранней стадии. Однако в обмен на
незначительное увеличение объема отладки мы получаем существенное
уменьшение объема программного кода, который требуется написать, и
существенное увеличение его гибкости.
17
Объектно-ориентированные технологии программирования
предоставляют возможность объявить базовый класс, который
инкапсулирует имена своих свойств, данных, методов и событий. Помимо
способности выполнять свою непосредственную задачу объектные методы
получают определенные привилегии доступа к значениям свойств и данных
класса.
Все объекты в Python инкапсулируют внутри себя данные и методы
работы с ними, предоставляя публичные интерфейсы для взаимодействия.
Атрибут может быть объявлен приватным (внутренним) с помощью нижнего
подчеркивания перед именем, но настоящего скрытия на самом деле не
происходит – в языке Python все происходит на уровне соглашений.
18
4 ПРОЕКТИРОВАНИЕ ГРАФИЧЕСКОГО
ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА
СРЕДСТВАМИ COM-ОБЪЕКТОВ
20
Рисунок 3 – Пример главного окна с виджетами
21
«RadioButton» для выбора типа искажения, «Scale» для настройки угла смаза,
радиуса PSF и резкости изображения. Все параметры изменяются с шагом 1.
Для отображения результатов настойки параметров предусмотрены
отдельные области пользовательского интерфейса, включающие, в том
числе, компоненты визуализации изображения, функции распределения
точки, просмотра информации о программе, построения графиков на основе
имеющихся данных.
Используется виджет «Canvas» для загрузки и отображения
изображения и PSF, «Label» для вывода на экран информации о программе.
Все виджеты группируются с помощью «LabelFrame».
Для отображения графиков и характеристик используется отдельный
модуль Python Matplotlib, созданный на основе Matlab. Модуль имеет
иерархическую структуру и разделяется на несколько уровней. Самый
верхний из них – подмодуль Matplotlib.pyplot, содержащий самые
высокоуровневые функции. Интерфейс pyplot позволяет сосредоточиться на
выборе готовых решений и настройке базовых параметров рисунка.
Главной единицей (объектом самого высокого уровня) при работе с
Matplotlib является рисунок (Figure), на котором располагаются одна или
несколько областей рисования (Axes), элементы рисунка Artisits (заголовки,
легенда) и основа-холст (Canvas). Область рисования является объектом
среднего уровня, который является, наверное, главным объектом работы с
графикой Matplotlib в объектно-ориентированом стиле. Каждая область
рисования Axes содержит две (или три в случае трёхмерных данных)
координатных оси, которые упорядочивают отображение данных.
Координатная ось являются объектом среднего уровня, которые определяют
область изменения данных, на них наносятся деления и подписи к делениям.
Пример двумерного графика (гистограммы), построенного с помощью
Matplotlib.pyplot, приведен на рисунке (4).
Многообразие и удобство создания графики в Matplotlib
обеспечивается не только за счёт созданных графических команд, но и за
счёт богатого арсенала по конфигурации типовых форм. Эта настройка
включает в себя работу с цветом, формой, типом линии или маркера,
толщиной линий, степенью прозрачности элементов, размером и типом
шрифта и другими свойствами.
Параметры, которые определяют эти свойства в различных
графических командах, обычно имеют одинаковый синтаксис. При создании
функций или методов классов, особенно в случае наследования, параметры
часто передают в виде объединений последовательностей: кортежа или
словаря.
Matprotlib.pyplot по умолчанию создает окно, на котором расположены
различные инструменты для удобства работы с графическим материалом.
Это кнопки для перемещения по двумерной области, масштабирования
графика, кнопки «назад» и «повторить действие», кнопка для сохранения
полученного графика.
22
Рисунок 4 – Пример двумерного графика, построенного с помощью
подмодуля Matplotlib.pyplot
23
5 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ АЛГОРИТМА
ВОССТАНОВЛЕНИЯ РАСФОКУСИРОВАННОГО
ИЗОБРАЖЕНИЯ
Программная реализация алгоритма восстановления
расфокусированного изображения выполнена с помощью таких
библиотечных модулей Python, как OpenCV и NumPy.
OpenCV (англ. Open Source Computer Vision Library, библиотека
компьютерного зрения с открытым исходным кодом) — библиотека
компьютерного зрения и машинного обучения с открытым исходным кодом.
В неё входят более 2500 алгоритмов, в которых есть как классические, так и
современные алгоритмы для компьютерного зрения и машинного обучения.
Эта библиотека имеет интерфейсы на различных языках, в том числе и на
Python.
NumPy – это модуль для python, который предоставляет общие
математические и числовые операции в виде пре-скомпилированных,
быстрых функций. Они объединяются в высокоуровневые пакеты. Они
обеспечивают функционал, который можно сравнить с функционалом
MatLab. NumPy (Numeric Python) предоставляет базовые методы для
манипуляции с большими массивами и матрицами.
С помощью модулей OpenCV и NumPy программная реализация
алгоритма восстановления расфокусированного изображения выполнена
эффективно и качественно.
В программе реализуется восстановление полутонового
изображения, поэтому после загрузки с помощью диалогового окна
изображение необходимо из RGB конвертировать в соответствующий
формат. Для этого используется метод из модуля NumPy convert(‘L’),
возвращающий преобразованное полутоновое изображение.
Следующий шаг в обработке изображения – предусмотрение появления
«краевых эффектов». Причина их появления в том, что когда делается
деконволюция для тех точек, которые расположены на краях, то при сборке
изображения не хватает пикселей, которые находятся за краями, и они
принимаются либо равным нулю, либо берутся с противоположной стороны
(зависит от реализации фильтра Винера и преобразования Фурье). От этого
возникает искажение на краях изображения. Чем интенсивнее примененный
фильтр, тем ярче будут выражены «краевые эффекты».
Чтобы избежать этого, необходимо предобработать края изображения.
В начале края размываются с помощью PSF. На практике это реализуется
следующем образом: входное изображение F ( x , y ) размывается по краям с
помощью размытия по Гауссу, образуя рамку вокруг фотографии. Для этого
используется специальный метод из библиотеки OpenCV. В дальнейшем,
при деконволюции края подвергнутся восстановлению вместе со всем
изображением, и краевые эффекты не возникнут.
24
Как было отмечено ранее, (???) а можно ли так писать? Может нужно
сделать отсылку к главе? от типа размытия зависит вид функции
распределения точки.
25
4. 6??? Алгоритм ПО
26
ЗАКЛЮЧЕНИЕ
27
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
28
ПРИЛОЖЕНИЕ А
Листинг кода
29
ПРИЛОЖЕНИЕ Б
30