Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСИ / АСУ_Меркулова_Обработка изображений_метод_лаб.doc
Скачиваний:
26
Добавлен:
03.03.2016
Размер:
3.07 Mб
Скачать

Лабораторна робота № 5

Тема: Сегментація зображень, пошук об'єктів та обчислення їх ознак.

Мета роботи: Здобути практичні вміння поділення зображення на сегменти, пошуку об’єкту, та навчитися вираховувати ознаки об’єкту.

Теоретичне введення

EDGE Виділення кордонів

Синтаксис:

BW = edge ( I, method )

BW = edge ( I, method, thresh )

BW = edge ( I, method, thresh, P )

[ BW, thresh ] = edge ( I, method,...)

Опис:

Для сегментації на зображеннях часто необхідно виявити межі об'єктів - ділянки зображення, в яких є перепад яскравості.

Функція BW = edge ( I, method ) призначена для виділення меж на вихідному напівтоновому зображенні I. Ця функція повертає бінарне зображення BW такого ж розміру, як вихідне L. Піксель BW ( r, с) дорівнює 1, якщо піксель I ( r, с) належить кордоні. Для виявлення кордонів може використовуватися кілька методів. Застосовуваний метод задасться в параметрі method у вигляді однієї з наступних рядків: ' sober ', ' prewitt ', ' roberts ', ' log ', ' zerocross ', ' canny '. Якщо параметр method при виклику функції опущений, то за замовчуванням він вважається рівним ' sober '.

Для кожного з методів визначення меж можна задати додаткові параметри. Для цього використовується одна з функцій BW = edge ( I, method, thresh ). BW = edge ( I, method, thresh, P ), де параметр thresh задає поріг для визначення того, чи належить піксель до границі, а в параметрі Р передаються налаштування, специфічні для кожного з методів. Якщо при виклику функції параметр thresh опущений, то значення порогу вибирається автоматично. Отримати значення порогу можна, додатково визначивши вихідний параметр thresh: [ BW, thresh ] = edge ( I, method,...). Розглянемо використання функції edge для кожного з методів виділення кордонів.

Функція BW = edge ( I, ' sobel ', tresh ) для визначення меж використовує фільтрацію вихідного зображення I фільтром Собеля [ 1, 3 ], піксель відноситься до границі, якщо відповідний йому піксель результату фільтрації має значення більше thresh. Для даного методу можна вказати додатковий параметр direction: BW = edge ( I, ' sobel ', thresh, direction ), який визначає, які кордони будуть виявлятися. Параметр direction може приймати значення:

- ' horizontal ' - виділення горизонтальних кордонів;

- ' vertical ' - виділення вертикальних кордонів;

- ' both ' - виділення кордонів на всіх напрямках ( дане значення використовується за умовчанням, коли параметр direction не визначено).

Функцня BW = edge (I, 'prewitt', thresh) для визначення меж використовує фільтрацію вихідного зображення I фільтром Превіта [1, 3]; піксель відноситься до кордону, якщо відповідний йому піксель результату фільтрації має значення більше thresh. Для даного методу можна вказати додатковий параметр direction: BW = edge (I, 'prewitt', thresh, direction), який визначає, які кордони будуть виявлятися. Можливі значення параметра direction описані вище.

Функція BW = edge (I, 'roberts', thresh) для визначення границь використовує фільтрацію вихідного зображення I фільтром Робертса; піксель належить до границі, якщо відповідний йому піксель результату фільтрації має значення більше thresh.

Функція BW = edge (I, 'log', thresh) для визначення меж використовує фільтрацію вихідного зображення I фільтром лапласіан - гауссіана [1, 2], піксель відноситься до кордону, якщо відповідний йому піксель результату фільтрації має значення більше thresh. Для формування маски фільтру використовується функція fspecial з параметрами sigma = 2 (середньоквадратичне відхилення) і n = ceil (sigma * 3) * 2 1 (розмір маски). Параметр sigma можна задати в параметрі функціі edge: BW = edge (I, 'log', thresh, sigma).

Функція BW = edge (I, 'zerocross', thresh, h) для визначення меж використовує фільтрацію вихідного зображення I лінійним фільтром з маскою h; піксель відноситься до кордону, якщо відповідний йому піксель результату фільтрації має значення більше thresh.

Функція BW = edge (I, 'canny', thresh) використовує для визначення меж метод Канни. Це досить складний метод, що складається з великої кількості етапів [4]. Суть методу полягає у пошуку локальних ділянок з перепадами яскравості. Перепади яскравості шукаються за допомогою фільтрації по кожній з осей одновимірним фільтром лапласіан - гауссіана. У методі Канни для класифікації перепадів на "слабкі" і "сильні" використовується два пороги - нижній і верхній. "Слабкі" кордони відзначаються в остаточному зображенні, тільки якщо вони з'єднані з "сильними". Для зашумлених зображень даний метод забезпечує найкраще виявлення кордонів в порівнянні з іншими методами функції edge, але вимагає істотно більшого часу.

Параметр thresh може бути двоелементний вектором. У цьому випадку перший елемент вектора задає значення нижнього порогу, а другий елемент - значення верхнього порогу. Якщо параметр thresh є скалярним значенням, то thresh задає значення верхньої межі, а для нижнього порогу використовується значення 0.4 * thresh. Якщо параметр thresh при виклику функції опущений або в якості thresh переданий порожній масив ([]), то значення порогів визначаються автоматично.

У функцію BW = edge (I, 'canny', thresh, sigma) додатково передається параметр sigma, який задає середньоквадратичне відхилення розподілу Гауса, яке використовується при формуванні маски фільтра, що виділяє межі яскравості.

Приклад:

Розглянемо виділення кордонів методом Собеля. Вихідне зображення показано на рис. 2.32, а. Результуюче зображення, на якому відмічені кордону, показано на рис. 2.32, б.

% examp31.m

% Приклад демонструє виділення кордонів методом Собеля.

% Читання вихідного зображення і виведення його на екран.

I = imread ( ' zrn.brnp ' );

imshow ( I );

% Виділення кордонів методом Собеля і вивід результату на екран.

BW = edge ( I, ' sobel ', 0.09 );

figure, imshow ( BW );

BWPERIM Виділення кордонів бінарних об'єктів

Синтаксис:

BWD = bwperim ( BWs, n )

Опис:

Функція BWD = bwperim ( BWs, n ) створює бінарне зображення BWD, у якого значення граничних пікселів об'єктів вихідного зображення встановлені в 1, а значення інших пікселів результуючого зображення встановлені в 0. Піксель вважається граничним, якщо він дорівнює 1 і хоча б один з її n сусідів дорівнює 0. Параметр п для всіх розглянутих функцій bwperim задає критерій зв'язності для пікселів кордону і може приймати значення 4 або 8. Якщо при виклику функції bwperim параметр n опущений, то перевіряються на рівність нулю всі 8 сусідів пікселя.

Результуюче зображення BWD має формат представлення даних uint8.

Ця функція незначно відрізняється від виклику функції bwmorph ( BW, ' remove ', inf ).

BWLABEL Пошук об'єктів

Синтаксис:

L = bwlabel ( BW, n )

[ L, num ] = bwlabel ( BW, n )

Опис:

Функція L в bwlabel ( BW, n ) шукає на бінарному зображенні BW зв'язні області пікселів об'єктів і створює матрицю L, кожен елемент якої дорівнює номеру об'єкта, якому належить відповідний піксель зображення BW. Розмір матриці номерів об'єктів L дорівнює розміру BW. Об'єкти нумеруються по порядку починаючи з 1. Елементи, що мають значення 1, відносяться до першого об'єкту, що мають значення 2 відносяться до другого об'єкта і т.д. Якщо елемент в матриці L дорівнює 0, то це означає, що відповідний піксель вихідного зображення відноситься до фону. Параметр n вказує критерій зв'язності, використаний для знаходження зв'язних областей - об'єктів. Параметр n може приймати значення 4 або 8 ( значення за замовчуванням).

Функція [ L, num ] = bwlabel ( BW, n ) додатково в параметр num повертає кількість об'єктів, знайдених на зображенні BW.

Матриця L має формат представлення даних double.

Матрицю номерів об'єктів L зручно відображати на екрані як палітрове зображення. Для цього слід разом з L використовувати палітру з кількістю кольорів більше або рівним num 1. Якщо палітра містить різні кольори, то кожен об'єкт буде забарвлений в унікальний колір.