- •Содержание
- •Введение
- •Постановка задачи
- •Анализ объектной среды
- •Требования к системе
- •Критерий качества системы
- •Концептуальная модель
- •Выбор средств разработки.
- •Физическая реализация
- •Загрузка изображения
- •Линейное усреднение пикселей по соседним
- •Медианная фильтрация
- •Размытие по Гауссу
- •Математическая морфология
- •Изменение яркости
- •Изменение контраста
- •Изменение цветового тона
- •ФильтрLight-Sharpen
- •Сохранение обработанного изображения
- •Тестирование продукта.
- •Руководство пользователя
- •Руководство разработчика
- •Вводная часть
- •Структура библиотекиImgPreProcessing
- •Структура программыNirs9
- •Использование классаImgPreProcessing
- •Заключение
- •Список литературы:
- •Глоссарий:
Руководство разработчика
Вводная часть
Разработанное в ходе физической реализации решение состоит из двух компонентов:
Подключаемая библиотека ImgPreProcessing
Программа с графическим интерфейсом NIRS9
Для решения характерно разделение предоставляемого функционала: каждая из его частей содержит класс, служащий для выполнения своих собственных задач. Описание классов приведено в соответствующих разделах настоящего руководства.
Библиотека ImgPreProcessingреализует функционал для выполнения различных алгоритмов предобработки изображений, а также операции вывода изображений на экран и сохранения в файл. В библиотеке не предусмотрена возможность прямого вызова содержащихся функций, т.к. в ней отсутствует пользовательский интерфейс, и использоваться сама по себе она не может.
Для полноценного использования функционала, предоставляемого библиотекой, ее необходимо подключить к программе (написанной на языке C++), которая содержит необходимые элементы управления для создания объекта класса, вызова встроенных методов и передачи в них требуемых параметров.
Программа NIRS9 разработана именно для этих целей. Она содержит в себе только элементы пользовательского интерфейса (кнопки, поля для ввода параметров, диалоговые окна и т.д.) и обработчики событий, возникающих при активации этих элементов. Все это служит сугубо для вызова функций подключенной к программе библиотеки.
Таким образом, библиотека и программа представляют собой полностью готовый к использованию продукт, содержащий функции для предобработки изображений и все необходимое для работы с ними. Для создания каждого компонента использованы одни и те же средства разработки.
Исходный код библиотеки и приложения после компиляции теоретически возможно использовать под операционными системами семейств LinuxиMacOS. Сборка, полученная в результате физической реализации, предназначена для использования на компьютерах под управлениемWindows.
Основной способ подключить библиотеку к программе – перед сборкой добавить заголовочные файлы imgpreprocessing.hиImgPreProcessing_global.hв проект программы, а файл библиотеки скопировать в ее текущий каталог. Для использования функций библиотеки в коде программы необходимо с помощью директивы #includeдобавить ссылку на заголовочный файлimgpreprocessing.h.
Необходимо отметить, что в процессе выполнения операций с изображением используется библиотека OpenCV, файлы которой также должны находиться в текущем каталоге программы.
В требованиях к установленному ПО содержаться программная платформа QtFrameworkи компиляторC/C++MinGW, библиотеки которых необходимы для запуска программы. Однако, ее можно использовать даже на "чистом" компьютере, не содержащем вышеуказанные средства разработки. Для этого необходимо поместить соответствующие библиотеки в текущий каталог программы.
Структура библиотекиImgPreProcessing
Весь функционал расположен в классе ImgPreProcessingс отделением описания от реализации. Исходный код библиотеки представлен в проектеQtCreator, состоящем из нескольких файлов:
ImgPreProcessing.pro – файл проекта Qt. Содержит данные о включаемых в проект файлах и информацию для сборки.
imgpreprocessing.h – файл заголовка C++. Содержит определение класса.
ImgPreProcessing_global.h – файл заголовка C++. Содержит макросы для импорта/экспорта класса
imgpreprocessing.cpp– файл исходниковC++. Содержит реализацию методов класса
Рисунок
38. Файловая структура проекта
ImgPreProcessing.
Результатом сборки проекта является файл динамически подключаемой библиотеки с расширением .dll.
Определение класса ImgPreProcessing:
Подключение глобального заголовка программы
#include "ImgPreProcessing_global.h"
Подключение заголовка OpenCV
#include <opencv2/opencv.hpp>
class IMGPREPROCESSINGSHARED_EXPORT ImgPreProcessing
{
Защищенные члены класса: поля
private:
Исходное загружаемое изображение
IplImage* img;
Выходное обработанное изображение
IplImage* dst;
Исходное изображение в цветовой модели HSV (для изменения Hue)
IplImage* img_hsv;
Выходное изображение в цветовой модели HSV (для изменения Hue)
IplImage* dst_hsv;
Доступные члены класса: конструкторы и методы
public:
Конструктор по умолчанию (без параметров)
ImgPreProcessing();
Конструктор с параметром (имя файла изображения)
ImgPreProcessing(const char* filename);
Метод для вывода исходного изображения на экран
void ImgShow();
Метод для вывода выходного изображения на экран
void DstShow();
Метод для сохранения выходного изображения
void DstSave(const char* filename);
Метод для размытия изображения по Гауссу
void Gaussian(int appSize = 3);
Метод для линейного усреднения пикселей изображения по соседним
void Blur(int appSize = 3);
Метод для медианной фильтрации изображения
void Median(int appSize = 3);
Метод для фильтрации изображения фильтром Light-Sharpen
void LightSharpen();
Метод для применения наращивания
void Dilation(int appSize = 3);
Метод для применения эрозии
void Erosion(int appSize = 3);
Метод для применения размыкания
void MathOpening(int appSize = 3);
Метод для применения замыкания
void MathClosing(int appSize = 3);
Метод для изменения контраста
void ChangeContrast(double correction = 0);
Метод для изменения яркости
void ChangeBright(int correction = 0);
Метод для изменения Red
void RedCorrection(int correction = 0);
Метод для изменения Green
void GreenCorrection(int correction = 0);
Метод для изменения Blue
void BlueCorrection(int correction = 0);
Метод для изменения Hue
void HueCorrection(int correction = 0); };
