- •Міністерство освіти і науки україни
- •Лабораторна робота №1
- •Теоретична частина
- •Imread Зчитування зображення із файлу
- •Iptsetpref Установка глобальних змінних ipt
- •Imshow Висновок зображення на екран
- •Im2bw Бінаризація відсіканням по порогу яскравості
- •Imhist Побудова гістограми
- •Imadjust Контрастування з гамма - корекцією
- •Лабораторна робота №2
- •Лабораторна робота № 3
- •Теоретична частина
- •Imnoise Додавання шуму
- •Лабораторна робота № 4
- •Теоретичне введення
- •Im2bw Бінаризація відсіченням по порогу яскравості
- •Лабораторна робота № 5
- •Теоретичне введення
- •Imfeature Обчислення ознак об'єктів
- •Перелік літератури
Лабораторна робота № 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. Якщо палітра містить різні кольори, то кожен об'єкт буде забарвлений в унікальний колір.