|
При прохождении теста 1 в нем оказались вопросы, который во-первых в 1 лекции не рассматривались, во-вторых, оказалось, что вопрос был рассмаотрен в самостоятельно работе №2. Это значит, что их нужно выполнить перед прохождением теста? или это ошибка? |
Сборка и установка Intel® Integrated Performance Primitives. Использование библиотеки в среде Microsoft® Visual Studio
4. Разработка приложения для медианной фильтрации с использованием библиотеки Intel® Integrated Performance Primitives
4.1. Постановка задачи
Фильтрация изображения – одна из наиболее типичных операций обработки изображений. Медианный фильтр – простейший фильтр, который позволяет удалить шумы, либо выполнить размытие изображения. Медианный фильтр строится подобно линейному фильтру. Выбирается некоторый шаблон, который накладывается на каждый пиксель изображения, в соответствии с шаблоном определяется новое значение интенсивности. Набор интенсивностей пикселей, которые накрыты шаблоном, сортируются, и выбирается интенсивность, находящаяся в середине отсортированного множества. По сути, определяется медиана в отсортированном наборе данных.
Задача первой части лабораторной работы состоит в том, чтобы разработать приложение, которое отвечает следующим требованиям:
- Поддержка медианной фильтрации с использованием библиотеки OpenCV.
- Поддержка медианной фильтрации средствами библиотеки Intel® IPP.
- Проверка корректности результата медианной фильтрации, полученного с помощью реализации на базе Intel® IPP, посредством сравнения с результатом работы соответствующей функции библиотеки OpenCV.
Условимся, что на входе программы имеется цветное изображение в формате RGB и размер шаблона медианного фильтра.
4.2. Общая структура приложения и основной функции
Приложение состоит из основной функции и модуля median_filtering, содержащего пару функций-оберток, которые реализуют медианную фильтрацию средствами библиотек Intel® IPP и OpenCV соответственно.
Рассмотрим структуру основной функции. На входе программы имеется цветное изображение и размер шаблона фильтра, поэтому функция имеет два параметр командной строки – название файла изображения и величину стороны шаблона фильтра (необязательный параметр). Основная функция включает выполнение нескольких действий:
- Загрузка исходного изображения с использованием функции imread библиотеки OpenCV.
- Вызов функции медианной фильтрации median_opencv, реализованной в модуле median_filtering, которая по существу является оберткой соответствующей операции OpenCV.
- Вызов функции median_ipp, также реализованной в модуле median_filtering. Функция выполняет медианную фильтрацию средствами библиотеки Intel® IPP.
- Попиксельное сравнение результатов медианной фильтрации с помощью функции compare, которая объявлена и реализована в модуле median_filtering. Функция возвращает количество пикселей с различающимися цветами (проверка выполняется по трем каналам).
- Отображение отфильтрованных изображений.
- Освобождение ресурсов, использованных для работы с изображениями.
#include <opencv2/opencv.hpp>
#include "median_filtering.h"
using namespace cv;
char helper[] =
"01_IPP_MedianFiltering.exe <image> [<kernel>]\n\
\t<image> - image name\n\
\t<kernel> - kernel size\n\
";
int main(int argc, char **argv)
{
Mat srcImgOCV, srcImgIPP, dstImgOCV, dstImgIPP;
int kDiffPoints, kSize = 5;
if (argc < 2)
{
printf("%s", helper);
return 1;
}
if (argc > 2)
{
kSize = atoi(argv[2]);
}
// 1. загрузить изображение
srcImgOCV = imread(argv[1]);
if (srcImgOCV.data == 0)
{
printf("ERROR!!! imread(...)");
return 1;
}
srcImgOCV.copyTo(srcImgIPP);
// 2. отфильтровать с помощью OpenCV
median_opencv(srcImgOCV, dstImgOCV, kSize);
// 3. отфильтровать с помощью IPP
median_ipp(srcImgIPP, dstImgIPP, kSize);
// 4. сравнить результаты фильтрации
kDiffPoints = compare(dstImgOCV, dstImgIPP);
if (kDiffPoints == 0)
{
printf("OpenCV and IPP give the same result.\n");
}
else
{
printf("Number of different points %d\n",
kDiffPoints);
}
// 5. отобразить то, что получилось
namedWindow("srcImg");
imshow("srcImg", srcImgOCV);
namedWindow("dstImgOCV");
imshow("dstImgOCV", dstImgOCV);
namedWindow("dstImgIPP");
imshow("dstImgIPP", dstImgIPP);
waitKey();
// 6. освободить память
srcImgOCV.release();
srcImgIPP.release();
dstImgOCV.release();
dstImgIPP.release();
return 0;
}
4.3. Реализация с использованием функций библиотеки OpenCV
Перейдем к рассмотрению функции median_opencv. По существу функция представляет собой обертку для операции medianBlur библиотеки OpenCV. В качестве входных параметров функция принимает исходное и результирующее изображения srcImg и dstImg, а также размер шаблона медианного фильтра.
int median_opencv(const Mat &srcImg, Mat &dstImg,
const int kSize)
{
medianBlur(srcImg, dstImg, kSize);
return 0;
}
