Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
laba1_1_Shleev_Bliznuk.docx
Скачиваний:
21
Добавлен:
26.03.2016
Размер:
947.3 Кб
Скачать

Задание 2: Изучите морфологические операции над изображениями, выполните фильтрацию тонких линий с помощью морфологических фильтров.

cvMorphologyEx(). обеспечивает более сложные морфологические преобразования изображения.

CVAPI(void) cvMorphologyEx( const CvArr* src, CvArr* dst,

CvArr* temp, IplConvKernel* element,

int operation, int iterations CV_DEFAULT(1) );

src — исходное изображение

dst — изображение для сохранения результата

temp — для промежуточного хранения результатов (размер изображения должен совпадать с размером исходного изображения) — требуется при определённом значении operation

operation — определяет тип морфологического преобразования:

#define CV_MOP_OPEN 2

#define CV_MOP_CLOSE 3

#define CV_MOP_GRADIENT 4

#define CV_MOP_TOPHAT 5

#define CV_MOP_BLACKHAT 6

CV_MOP_OPEN и CV_MOP_CLOSE — комбинация сужения и расширения:

CV_MOP_OPEN — сначала сужается, а затем расширяется. Обычно используется для подсчёта регионов на двоичном изображении.

CV_MOP_CLOSE — сначала расширяется, а затем сужается. Обычно используется для уменьшения шумовых выбросов на границах регионов.

CV_MOP_GRADIENT:

gradient(src) = Dilate(src)–Erode(src)

Результатом этой операции над двоичным изображением станет выделение периметров существующих пятен. На картинке с градациями серого градиент покажет как быстро меняется яркость (поэтому и называется — градиент).

CV_MOP_TOPHAT и CV_MOP_BLACKHAT:

TopHat(src) = src–Open(src)

BlackHat(src) = Close(src)–src

CV_MOP_TOPHAT — изолирует яркие локальные пики.

CV_MOP_BLACKHAT — изоляция тёмных регионов.

Результаты:

Рис.3-7. Результат морфологических преобразований

Фрагмент кода выполнения

//========================================================================================

// Создание окон

cv::namedWindow("Morphology Transformations", CV_WINDOW_AUTOSIZE);

// Create Trackbar to select Morphology operation

cv::createTrackbar("Operator:\n 0: Opening - 1: Closing \n 2: Gradient - 3: Top Hat \n 4: Black Hat", "Morphology Transformations",

&morph_operator, max_operator, MorphOperations);

// Create Trackbar to select kernel type

cv::createTrackbar("Element:\n 0: Rect - 1: Cross - 2: Ellipse", "Morphology Transformations",

&morph_elem, max_elem, MorphOperations);

// Create Trackbar to choose kernel size

cv::createTrackbar("Kernel size:\n 2n +1", "Morphology Transformations",

&morph_size, max_kernel_size, MorphOperations);

// Default start

MorphOperations(0, 0);

cvWaitKey(0);

cvDestroyWindow("Morphology Transformations");

//==========================================================================================

void MorphOperations(int, void*)

{

int operation = morph_operator + 2;

cv::Mat element = cv::getStructuringElement(morph_elem, cv::Size(2 * morph_size + 1, 2 * morph_size + 1), cv::Point(morph_size, morph_size));

morphologyEx(src, dst, operation, element);

imshow("Morphology Transformations", dst);

}

//==========================================================================================

Задание 3: Работа с подобластями. Измените яркость и контраст заданной части изображения. Впишите в одно изображение другое меньшего размера.

Почти все функции должны поддерживать работу с ROI, т.е. работу с выделенной областью изображения, что полезно для ускорения работы алгоритмов. Т.о. если нас интересует только определённая область изображения — можно её выделить и работать только с ней, не затрагивая всё изображение целиком.

Вот какие функции для работы с ROI предоставляет OpenCV:

CVAPI(void)cvSetImageROI(IplImage*image,CvRectrect)— установка интересующей области рисунка (COI не меняется)

image — указатель на изображение

rect — прямоугольник интересующей области

CVAPI(void)cvResetImageROI(IplImage*image)— сбрасывает область интересов (и COI)

image — указатель на изображение

CVAPI(CvRect)cvGetImageROI(constIplImage*image)— возвращает область интересов изображения

image — указатель на изображение

Если ROI не установлена функция вернёт cvRect(0,0,image->width,image->height). ROI можно использовать для вырезания части изображения или, наоборот, добавления изображения.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]