
- •Міністерство освіти і науки україни
- •Лабораторна робота №1
- •Теоретична частина
- •Imread Зчитування зображення із файлу
- •Iptsetpref Установка глобальних змінних ipt
- •Imshow Висновок зображення на екран
- •Im2bw Бінаризація відсіканням по порогу яскравості
- •Imhist Побудова гістограми
- •Imadjust Контрастування з гамма - корекцією
- •Лабораторна робота №2
- •Лабораторна робота № 3
- •Теоретична частина
- •Imnoise Додавання шуму
- •Лабораторна робота № 4
- •Теоретичне введення
- •Im2bw Бінаризація відсіченням по порогу яскравості
- •Лабораторна робота № 5
- •Теоретичне введення
- •Imfeature Обчислення ознак об'єктів
- •Перелік літератури
Лабораторна робота №2
Тема: Операції з зображеннями.
Мета роботи: здобути практичні здібності роботи з математичними виразами в середовищі MATLAB.
Завдання:
1. Зчитати зображення файлу.
2. Вивести його на екран з різними установками глобальної змінної IptSetPref
3. Перевести зображення в півтонове ( grayscale )
4. Побудувати гістограму зображення
5. За гістограмою визначити границю яскравості об'єкта, відокремити об'єкт від фону переводом до чорно-білого виду
6. Відконтрастувати кольорове зображення з гамма-корекцією за допомогою команди imadjust
7. Записати отримане зображення у файл.
Контрольні питання:
1. Різниця між бінарним, напівтоновим, повнокольоровим, палітровим зображенням.
2. Перевірка на півтонове, бінарне, палітрове зображення. ( isbw, isgray, isind ).
3. Гістограма зображення, інформація, яку можна з неї витягти.
4. Отримання заданої кількості стовпців гістограми і значення яскравості для кожного стовпця.
5. Побудова огинаючої гістограми.
6. Застосування функції imadjut.
7. Поліпшення контрастності зображення за допомогою функції histeq, перетворення гістограми до рівномірного виду, до довільного виду.
Лабораторна робота № 3
Тема: Робота з зашумленими зображеннями
Мета: Навчитися працювати з різними видами шумів та вміти їх подолати.
Теоретична частина
Imnoise Додавання шуму
Синтаксис:
ID = imnoise ( Is, type, params )
Опис:
Функція imnoise створює нове зображення ID шляхом додавання шуму до вихідного напівтонового зображення IS. В основному дана функція призначена для створення тестових зображень, використаних при виборі методів фільтрації шуму, проте може застосовуватися і для додання фотореалістичності штучно синтезованим зображенням.
Функція може додавати шум трьох типів. Тип шуму задається строковою константою type, яка може приймати одне з наступних значень:
- 'Gaussian' - для гаусового білого шуму;
- 'Salt & pepper' - для імпульсного шуму (шум типу "сіль і перець");
- 'Speckle' - для мультиплікативного шуму.
Кількість і зміст параметрів params визначаються обраним типом шуму. Якщо параметри не зазначені, то будуть використані значення за замовчуванням.
ID = imnoise (Is, 'gaussian', m, v) додає до зображення Is гаусів білий шум з математичним очікуванням m і дисперсією v. За замовчуванням математичне очікування дорівнює 0, а дисперсія - 0.01.
ID = imnoise (Is, 'salt & pepper', d) додає до зображення Is імпульсний шум. Параметр d визначає щільність шуму і дорівнює частці спотворених пікселів. За замовчуванням d = 0.05.
ID = imnoise (Is, 'speckle', v) додає до зображення IS мультиплікативний шум ID = Is n * Is, де n-рівномірно розподілений випадковий шум з математичним очікуванням 0 і дисперсією v. За замовчуванням v = 0.04.
Формат представлення даних вихідного і результуючого зображень збігаються.
ORDFILT2 Рангова фільтрація
Синтаксис:
D = ordfilt2 (S, order, domain)
D = ordfilt2 (S, order, domain, A)
Опис:
Функція D = ordfilt2 (S, order, domain) створює півтонове зображення D, кожен піксель якого формується наступним чином. Пікселі вихідного півтонового зображення S, відповідні ненульовим елементам маски фільтра domain, сортуються за зростанням. Пікселю зображення D, який відповідає центральному елементу маски, присвоюється значення з номером order у відсортованій множині. Операція застосовується нерекурсивно для всіх положень. Фільтрацію такого виду називають порядковою або ранговою [1].
Для того щоб розміри зображень S і D були однаковими, при проведенні обчислень зображення S тимчасово доповнюється необхідною кількістю рядків і стовпців нульових пікселів. Формат представлення даних результуючого зображення D збігається з форматом вихідного зображення S.
Функція D = ordfilt2 (S, order, domain, А) працює аналогічно функції ordfilt2 (S, order, domain), за винятком того, що перед сортуванням до значень пікселів, відповідних ненульовим елементам маски фільтра domain, додаються значення з матриці А. Матриці domain і А повинні бути однакового розміру. Матриця А має формат представлення даних double. Відповідно формат представлення даних результуючого зображення D також double.
Приклад:
За допомогою функції рангового фільтра можна здійснювати морфологічні операції ерозії і нарощення над напівтоновими зображеннями. Ерозії відповідає заміна значення центрального пікселя на мінімальне зі значень пікселів в межах маски фільтра. Нарощенню відповідає заміна значення центрального пікселя на максимальне зі значень пікселів в межах маски фільтра.
На рис. 2.29,а наведено вихідне зображення, на рис. 2.29,б і 2.29, в - відповідно результати ерозії і нарощення фону з маскою з одиниць,розміру 3x3. Так як фон даного зображення світлий, то ерозія призводить до зменшення фону, а нарощення - до його збільшення.
% examp27.m
% Приклад демонструє операції ерозії і нарощення
% над напівтоновим зображенням.
% Читання вихідного зображення і виведення його на екран.
im = imread ( ' rs.tif ' );
imshow ( im );
% Ерозія напівтонового зображення.
im_erd = ordfilt2 ( im, 1, ones ( 3,3 ) );
figure, imshow ( im_erd );
% Нарощення напівтонового зображення.
im_dil = ordfilt2(im, 9, ones(3,3)); figure, imshow(im_dil);
MEDFILT2 Медіанна фільтрація
Синтаксис:
D = medfilt2 ( S, [ m n ] )
XD = medfilt2 ( Xs, ' indexed '....)
Опис:
Медіанна фільтрація є окремим випадком рангової фільтрації.
Функція D = medfilt2 ( S, [ mn ] ) створює півтонове зображення D, кожен піксель якого формується наступним чином. Пікселі вихідного напівтонового зображення S, відповідно всіх елементів маски фільтра розміру mxn, складають упорядковану послідовність А. Пікселю D ( r, с), де r та с - координати поточного положення центрального елемента маски, присвоюється значення медіани послідовності A. Операція застосовується нерекурсивно для всіх положень маски.
Медіаною впорядкованої послідовності A ( i ), де i = 1... N, є значення A ( ( N 1) / 2, якщо N непарне, і ( А ( N / 2 ) A ( ( N 2) / 2 ) / 2, якщо N парне.
Для того щоб розміри зображень S і D були однаковими, при проведенні обчислень зображення S тимчасово доповнюється необхідною кількістю рядків і стовпців нульових пікселів. Формат представленняданих результуючого зображення D збігається з форматом вихідного зображення S.
Якщо вектор [ mn ] при виконанні функції D = medfilt2 ( S ) не заданий, то в якості маски фільтра використовується маска розміру 3x3.
Функція XD = medfilt2 ( Xs, ' indexed ',...) аналогічна розглянутої вище, але призначена для обробки палітрових зображень. При проведенні обчислень вихідне зображення тимчасово доповнюється або одиницями при форматі представлення даних Xs = double, або нулями при форматі представлення даних Xs = uint8.
Приклад:
Медіанна фільтрація може ефективно застосовуватися для усунення імпульсного шуму [ 1, 2 ]. На рис. 2.30 наведено результат медіанної фільтрації з маскою 3x3 зображення з рис. 2.28, а.
% examp28.m
% Приклад демонструє роботу медіанного фільтра.
% Читання вихідного зображення і виведення його на екран.
I = imread ( ' chrom.tif ' );
imshow ( I );
% Медіанна фільтрація.
I = medfilt2 ( I );
% Вивід на екран результату фільтрації,
figure, imshow ( I );
WIENER2 Адаптивна винерівска фільтрація
Синтаксис:
ID = wiener2 ( Is, [ m n ], noise )
[ ID, noise ] = wiener2 ( IS, [ m n ] )
Опис:
Функція ID = wiener2 ( Is, [ mn ], noise ) формує півтонове зображення ID, яке є результатом адаптивної фільтрації Вінера вихідного напівтонового зображення Is. Параметри тип задають розміри ковзаючого вікна, в межах якого оцінюються середнє і середньоквадратичне відхилення значень яскравості. Якщо при виклику функції параметри m і n опущені, то розмір вікна встановлюється рівним 3x3.
Параметр noise встановлює потужність гаусового білого шуму, яким пошкоджено зображення. Цей параметр повинен бути визначений з будь - яких апріорних відомостей про зображення. Якщо це зробити не вдається, то при виклику функції wiener2 параметр noise можна опустити. У цьому випадку потужність шуму буде оцінюватися автоматично.
Функція [ ID, noise ] = wiener2 ( Is, [ mn ] ) працює аналогічно описаній вище і додатково повертає оцінку потужності гаусового білого шуму.
Формати подання даних вихідного і результуючого зображень збігаються.
Алгоритм:
Функція wiener2 використовує алгоритм адаптивної винерівської фільтрації для придушення адитивного гаусового білого шуму. Даний алгоритм заснований на статистичних оцінках фрагментів зображення в межах ковзаючого вікна η розміру nxm пікселів [ 1,2 ].
Для всіх положень ковзаючого вікна з центральним пікселем з координатами ( r, с) обчислюються
μ = - середнє значення яскравості
- дисперсія
Пікселі результуючого зображення D формуються так:
ID(r,c)=μ+,
де v -потужність гаусового білого шуму.
Дана формула застосовується нерекурсивно для всіх положень ковзаючого вікна.
Якщо потужність гаусового білого шуму не задана, то вона оцінюється як середнє з усіх σ.
ROIFILT2 Фільтрація областей інтересу
Синтаксис:
ID = roifilt2 ( h, Is, BW )
ID = roifill2 ( IS, BW, fun )
ID = roifill2 ( IS, BW, fun, P1, P2,...)
Опис:
Функції roifilt2 призначені для фільтрації окремих фрагментів напівтонових зображень. Ці фрагменти - області інтересу ( regions of interest) задаються за допомогою бінарного зображення BW. Розміри BW і вихідного напівтонового зображення IS повинні збігатися. Одиничні значення в BW вказують на те, що пікселі вихідного зображення з такими ж координатами належать області інтересу. Таким чином, якщо BW ( r, с) дорівнює 1, то ID ( r, с) дорівнює значенню пікселя з координатами ( r, с), отриманого в результаті фільтрації вихідного зображення Is. Якщо BW ( r, с) дорівнює 0, то ID ( r, с) дорівнює Is ( r, с), тобто зміна зображення відбувається тільки в областях інтересу.
Функція ID = roifilt2 ( h, Is, BW ) створює зображення ID як результат фільтрації областей інтересу BW вихідного зображення Is лінійним фільтром з маскою h. Для фільтрації функція roifilt2 викликає функцію filter2. Результуюче зображення ID має формат представлення даних double.
Функція ID = roifilt2 (Is, BW, fun) створює зображення ID як результат фільтрації областей інтересу BW вихідного зображення Is за допомогою функції fun. Існує 3 варіанти завдання параметра fun. Вони приведені в таблиці в описі функції blkproc. Іменем х повинно бути позначено оброблюване півтонове зображення Is. Повернене функцією fun результуюче зображення y повинне мати розміри, рівні розмірами зображення х.
Функція ID = roifilt2 (Is, BW, fun, P1, P2,...) формує зображення ID, передаючи у функцію fun додаткові параметри P1, Р2,...
Формат представлення даних зображень IS і ID визначається реалізацією функції fun.
Приклад:
Розглянемо фільтрацію області інтересу на прикладі зображення з рис. 2.31, а. На цьому зображенні присутні темні вертикальні смуги. Але зображення характеризується низьким контрастом і нерівномірною яскравістю по полю зображення. У результаті цього смуги погано помітні. Для підкреслення темних смуг в центральній частині зображення використовується фільтрація, що підвищує контраст в області інтересу. Результат фільтрації зображений на рис. 2.31, б.
% Examp29.m
% Приклад демонструє фільтрацію області інтересу.
% Читання зображення і виведення його на екран.
I = imread ('micron.tif');
imshow (I);
% Створюємо область інтересу в середині вихідного зображення.
[N m] = size (I);
BW = zeros (n, m);
BW (n / 4: 3 * n / 4, m / 4: 3 * m / 4) = 1;
% Встановлюємо маску для фільтрації.
h = [-1 -2 -1 3 5 3 -1 -2 -1, -1 -2 -1 3 5 3 -1 -2 -1,
-1 -2 -1 3 5 3 -1 -2 -1,
-1 -2 -1 3 5 3 -1 -2 -1,
-1 -2 -1 3 5 3 -1 -2 -1]/15;
% Фільтрація області інтересу.
I2 = roifilt2 ( h, I, BW );
% Вивід результату фільтрації на екран,
figure, imshow ( I2 );
ROIFILL Заповнення областей інтересу
Синтаксис:
ID = roifill ( Is )
ID = roifill ( Is, с, r )
ID = roifill ( Is, BW )
ID = roifill ( XData, YData, Is, xi, yi )
[ ID, BW ] = roifill (...)
[ XData, YData, ID, BW, xi, yi ) = roifill (...)
Опис:
Функція roifill призначена для усунення невеликих за площею дефектів напівтонових зображень. Вона заповнює задані області плавними переходами яскравості, використовуючи інтерполяцію за значеннями яскравості граничних пікселів області.
Функція ID = roifill ( Is ) дозволяє інтерактивно задати область на вихідному напівтоновому зображенні IS і створює нове півтонове зображення ID, яке відрізняється від початкового зображення Is тим, що задана область заповнена. Ця функція виводить зображення Is у вікно і очікує від користувача завдання області інтересу, призначеної для заповнення. Область інтересу повинна бути укладена в полігон (багатокутник ), вершиниякого задаються одноразовим натисканням лівої клавіші миші.
Попередню задану вершину можна видалити, якщо натиснути на клавіші Backspace або Delete. Натискання на праву клавішу миші або подвійне клацання лівою клавішею задає останню вершину полігону. Також завершити процес задання вершин без вказівки останньої можна натисканням на клавішу Enter. Для визначення точок, що лежать всередині полігону, використовується правило Non - Zero Winding. Якщо при виклику функції параметр Is опущений, то зображення береться з поточного вікна.
Функція ID = roifill ( Is, с, r ) дозволяє явно задати координати вершин полігону, що обмежує заповнену область, у векторах r ( номери рядків ) і з ( номери шпальт ) однакової довжини.
Функція ID = roifill ( XData, YData, Is, xi, yi ) аналогічна попередній, але в ній координати полігону, що передаються у векторах xi і yi, задаються у просторовій системі координат. Двохелементні вектори XData і YData визначають діапазон зміни значень по осях просторової системи координат.
Області, які необхідно заповнити, можуть бути задані за допомогою бінарного зображення BW. У цьому випадку використовується функція ID = roifill ( Is, BW ). Зображення BW і IS мають однаковий розмір. Пікселі зображення BW, пов'язані з областях, призначеним для заповнення, повинні бути рівні I.
Для розглянутих функцій можна додатково визначити вихідний параметр - бінарне зображення BW: [ ID, BW ] = roifill (...), у якого в 1 встановлені пікселі, що належать заповненим областям. Зображення BW має формат представлення даних uint8.
Якщо для розглянутих функцій додатково визначити 4 вихідних параметри: [ XData, YData. ID, BW, xi, yi ] = roifill (...), то в параметрах xi і yi будуть повернуті координати вершин полігону, що обмежує заповнену область, а в XData і YData будуть повернуті діапазони значень по осях просторової системи координат, яка використовувалася для зображення Is.
Якщо функцію roifill викликати без вихідних параметрів, то результуюче зображення виводиться на екран у новому вікні.
Формати подання даних вихідного Is і результуючого ID зображень збігаються.
Приклад:
Розглянемо використання функції roifill для усунення невеликих дефектів напівтонового зображення. На рис. 2.21а, про показано вихідне мікроскопічне зображення з чорними вкрапленнями, які утворились з-за пилу в оптичному тракті, яка була присутня при реєстрації даного зображення. Приберемо з зображення найбільший дефект, розташований у правому нижньому куті. Для цього за допомогою функції roipoly створимо бінарне зображення, що задає область інтересу, а потім скористаємося функцією roifill. Зауважимо, що функцією roipoly можна задати область інтересу інтерактивно, якщо при виклику roipoly опустити параметри xi і yi. Результуюче зображення показано на рис. 2.21, б.
% examp21.m
% Приклад демонструє усунення на зображенні
% малих за площею дефектів.
% Читання вихідного зображення і виведення його на екран.
I = imread { ' micron ( tif );
imshow ( l );
% Завдання області інтересу ( може здійснюватися інтерактивно,
% якщо опустити параметри xi і yi при виклику roipoly ).
xi = [ 140 128 136 152 158 151 140 ];
yi = [ 149 162 177 162 150 143 149 ];
BW = roipoly ( I, xi, yi );
% Заповнення області інтересу.
I = roifill ( I, BW );
% Вивід результату на екран,
figure, imshow ( I );
Завдання:
1. Зчитати зображення з файлу, вивести його на екран
2. Додати в зображення шум за варіантом
3. Підібрати параметри винерівського, медіанного, рангового фільтрів для найкращого очищення зображення від шуму, порівняти результати роботи фільтрів, вибрати фільтр, який найбільш підходить для даного виду шуму.
4. За допомогою команди roifill прибрати дрібний предмет на зображенні.
Види шуму:
Гаусівський білий
Імпульсний « Сіль і перець »
Мультиплікативний
Контрольні питання:
1. Алгоритми накладення шуму на зображення.
2. Алгоритми виконання фільтрації.
3. Нарощування і ерозія об'єктів за допомогою операції ordfilt2.
4. Як визначається потужність гаусівського білого шуму в Matlab за замовчуванням?
5. Фільтрація областей інтересу без допомоги миші.
6. Як можна замінити найтемніші або найсвітліші елементи зображення за допомогою функції roifilt2.