Відновлення змазаного і зашумленого зображення
Лабораторна робота №4
Тема: «Відновлення зображень»
Виконав:
ст. гр. ФТМ5
Романчук С.
Перевірила:
Тумська О.В.
Львів - 2016
Мета роботи: дослідити способи генерування випадкового шуму з заданими параметрами та ефективність різних методів відновлення спотворених зображень.
Функції системи MATLAB:
1. imnoise - моделювання спотворення зображення шумом.
В основному дана функція призначена для створення тестових зображень, використовуваних при виборі методів фільтрації шуму , проте може застосовуватися і для додання фотореалістичності штучно синтезованим зображенням.
2. imnoise2 - генерування випадкового шуму.
На відміну від imnoise, функція imnoise2 породжує шумову матрицю R розміру MxN, яка не нормується. Інша значна відмінність від функції imnoise полягає в тому, що виходом imnoise служить зашумлене зображення, a imnoise2 породжує тільки шумову матрицю. Користувач повинен сам задавати бажані параметри шуму. Шумова матриця, що генерується за методом «сіль і перець», приймає три можливих значення: 0 - це «перець», 1 - «сіль», а 0.5 відповідає відсутності шуму.
3. imnoise3 - моделювання періодичного шуму.
4. roipoly - інтерактивний вибір області «інтересу» (ROI).
Ця функція виводить зображення S у вікно і очікує від користувача визначення області інтересу. Якщо при виконанні функції параметр S опущений, то зображення береться з поточного вікна. Интересующая область зображення повинна бути обведена полігоном, вершини якого задаються одноразовим натисканням лівої клавіші миші. Попередню задану вершину можна видалити, якщо натиснути на клавіші Backspace або Delete. Натискання на праву кнопку миші або подвійне клацання лівою клавішею задає останню вершину полігону. Також завершити процес завдання вершин без вказівки останньої можна натисканням на клавішу Enter.
5. histroi - побудова гістограми області ROI.
6. statmoments - обчислення середнього значення і центральних статистичних моментів.
7. checkerboard - побудова макетного зображення шахової дошки.
8. fspecial - формування просторового фільтра (маски).
Повертає маску h з умовного двовимірного лінійного фільтра, що задається рядком type . Маска h призначена для передачі у функції filter2 або conv2 , що виконують двовимірну лінійну фільтрацію. Залежно від типу фільтра для нього можуть бути визначені один або два додаткові параметри Р1, Р2.
9. imfilter - виконання фільтрації зображення.
Фільтрує багатовимірний масив A багатовимірним фільтром H. Масив A повинен бути числовим масивом будь-якого формату і розмірності. Результуючий масив B має ту ж розмірність і формат представлення даних , що і масив A.
Кожен елемент результуючого масиву B обчислюється з використанням чисел подвоєної точності плаваючою крапкою. Якщо A є масив цілих чисел, тоді елементи результуючого масиву , що перевищують допустимий діапазон , усікаються і округляються .
10. deconvwnr - застосування інверсної та вінеровської фільтрації.
Відновлює зображення I, яке було зіпсовано з функцією протяжності точки PSF і можливим доповненням шуму. Алгоритм оптимізується з погляду найменшої середньоквадратичної помилки між обчислюваним і вихідним зображеннями і використовує матрицю кореляції та шуму . При відсутності шумовий складової, фільтр Вінера перетворюється в ідеальний інверсний фільтр.
Хід роботи:
Задача виявлення спотворення зображення виконується за зображеннями, на які накладається шум.
Порядок опрацювання зображень:
1) Моделювання зображення, спотвореного адитивним шумом.
a) Генерування шуму з обраними параметрами.
b) Накладання шуму на зображення.
2) Оцінка параметрів шуму.
a) Вибір області «інтересу».
b) Побудова гістограми по області «інтересу».
c) Визначення статистичних параметрів за гістограмою області «інтересу».
d) Побудова теоретичних гістограм розподілів функцій шуму за визначеними статистичними параметрами.
e) Порівняння гістограми області «інтересу» з теоретичними гістограмами.
f) Визначення характеру шуму.
3) Відновлення зображення(усунення шуму).
a) Вибір функцій для усунення шуму.
b) Усунення шуму на зображенні за вибраною функцією.
c) Побудова кінцевої гістограми за областю «інтересу» на відфільтрованому зображенні.
d) Порівняння гістограм.
Спотворення зображення адитивним шумом виконуємо в наступному порядку:
· Завантажуємо зображення, використовуючи оператор imread та виводимо його на екран з допомогою оператора imshow.
· Виконуємо інтерактивний вибір на зображенні області однорідного сірого тону – області «інтересу» (ROI) за допомогою функції roipoly . (Практично це така область, в якій розподіл яскравостей створений головним чином шумом.) В нашому випадку ми будемо моделювати зашумлене зображення.
· Будуємо гістограму області інтересу, використовуючи функцію histroi.
· За допомогою функції imnoise накладаємо шум Гаусса.
· Будуємо гістограму зашумленого зображення.
Далі виконуємо оцінку параметрів зашумленого зображення:
· Використовуючи функцію statmoments визначаємо середнє значення та дисперсію розподілу шуму.
· За визначеними параметрами за допомогою функції imnoise2 будуємо теоретичну гістограму .
Відновлення спотвореного зображення за допомогою фільтрів виконуємо у такому порядку:
· Відновлюємо зображення за допомогою нелінійного середнього геометричного фільтра та будуємо його гістограму.
· Спотворюємо зображення шумом «сіль та перець» і відновлюємо його за допомогою медіанного фільтра.
Для моделювання періодичного шуму використовуємо такий програмний код:
clc % очищення командного вікна
clear % очищеня робочої області
f=imread(' D:\Маткад\Романчук\Cyfrova obrobka \vazon.tif');% ввід зашумленого зображення
figure (1)
imshow(f); %вивід зображення на екран
title ('Зашумлене зображення');
xlabel(Romanchyk., ФТМ5');
% Ввід заданої бінарної маски
B=imread(' maskbinary.tif');
figure (2)
imshow(B);
title ('Бінарна маска В');
%вимірювання координат вершин бінарної маски
% К - бінірна маска, с - коорд. стовпців, r - коорд. рядків
% в режимі step вимірюємо координати вершин бінарної маски
[K, c, r]=roipoly(B);
figure (3)
imshow(K);
title ('Бінарна маска K');
xlabel(Romanchyk., ФТМ5');
% Гістограма області ROI на зображенні t під K
p=imhist(f(K));
%figure (4)
%imshow(K);
% р - гістограма, npix - кількість пікселів ROI
[p,npix]=histroi(f,c,r);
npix
figure (4)
bar(p, 1);
title ('Гістограма області ROI на зображенні t під K');
xlabel(Romanchyk., ФТМ5');
% v(1)- середнє значення, v(2) - дисперсія
[v, unv]=statmoments(p,2);
var=sqrt(v(2))*256;
ms=v(1)*256;
% Генерування Гаусового шуму
X=imnoise2('gaussian', npix, 1, ms, var);
figure (5)
hist(X, 130);
axis([0 300 0 140])
title (['Теоретична гістограма, середн.=', num2str(ms, 3), ' скв=', num2str(var, 3)]);
xlabel(Romanchyk., ФТМ5');
Отримані результати:
Рис.1.Зашумлене зображення
Рис.2.
Рис.3.Бінарна маска K
Рис.4.Гістограма області ROI
Рис.5.Теоретична гістограма
Для моделювання зашумленого зображення створюємо М-файл, у який записуємо наступний програмний код:
clc % очищення командного вікна
clear % очищеня робочої області
% Моделювання зашумленого зображення
f=imread('Tracy.tif');% ввід зображення
figure (1)
imshow(f); %вивід зображення на екран
title ('Початкове зображення');
xlabel(Romanchyk., ФТМ5');
t=imnoise(f, 'gaussian',0, 0.01);
figure (2)
imshow(t);
title ('Зашумлене зображення');
xlabel(Romanchyk., ФТМ5');
% Запис на диск
imwrite(t, 'Shum_Tracy.tif')
%Вибір області інтересу
B=roipoly(t);
figure (3)
imshow(B);
title ('Бінарна маска В');
xlabel(Romanchyk., ФТМ5');
%Вимірювання координат вершин бінарної маски
% К - бінірна маска, с - коорд. стовпців, r - коорд. рядків
% в режимі step вимірюємо координати вершин бінарної маски
[K, c, r]=roipoly(B);
figure (3)
imshow(K);
title ('Бінарна маска K');
xlabel(Romanchyk., ФТМ5');
% Гістограма області ROI на зображенні t під K
p=imhist(t(K));
%figure (4)
%imshow(K);
% р - гістограма, npix - кількість пікселів ROI
[p,npix]=histroi(f,c,r);
npix
figure (4)
bar(p, 1);
title ('Гістограма області ROI на зображенні t під K');
% v(1)- середнє значення, v(2) - дисперсія
[v, unv]=statmoments(p,2);
var=sqrt(v(2))*256;
ms=v(1)*256;
% Генерування Гаусового шуму
X=imnoise2('gaussian', npix, 1, ms, var);
figure (5)
hist(X, 130);
axis([0 300 0 140])
title (['Теоретична гістограма, середн.=', num2str(ms, 3), ' скв=', num2str(var, 3)]);
Отримані результати:
Рис.6.Вихідне зображення
Рис.7.Бінарна маска Гауса
Рис.8.Бінарана маска К
Рис.9.
Рис.10.Теоретична гістограма
Для відновлення зображення створюємо новий М-файл з наступним програмним кодом:
clc % очищення командного вікна
clear % очищеня робочої області
% Відновлення зображення
g=imread('Shum_Tracy.tif');% ввід зашумленого зображення
figure (1)
imshow(g); %вивід зображення на екран
title ('Зашумлене зображення');
xlabel(Romanchyk., ФТМ5');
% Арифметичний середній фільтр
w=fspecial('average', [3,3]); % Формування маски 3*3
gr=imfilter(g, w, 'replicate'); % поширення зображення з використанням опції replicate
figure (2)
imshow(gr, []);
title ('Відновлене зображення, арифметичний середній фільтр');
% Геометричний середній фільтр
f=im2double(g);
f1=padarray(f, [5,5], 'replicate');
f=colfilt(f1, [3,3], 'sliding', @gmean);
f1=im2uint8(f);
figure (3)
imshow(f1);
title ('Відновлене зображення, геометричний середній фільтр');
% Медіанний фільтр
f=imread('Tracy.tif');% ввід зображення
figure (4)
imshow(f);
fn=imnoise(f, 'salt & pepper');
figure (5)
imshow(fn);
title ('Спотворене зображеня, сіль і перець');
Q=medfilt2(fn, [3,3], 'symmetric');
figure (6)
imshow(Q);
title ('Відновлене зображення, Медіанний фільтр');
% Фільтр мінімуму
f2=ordfilt2(g, 1, ones(3*3));
figure (7)
imshow(f2);
title ('Відновлене зображення, Фільтр мінімуму');
% Фільтр максимуму
f3=ordfilt2(g, 3*3, ones(3*3));
figure (8)
imshow(f3);
title ('Відновлене зображення, Фільтр максимуму');
Отримані результати:
Рис.11.Зашумлене зображення
Рис.12.Арефметичний середній фільтр
Рис.13. Геометричнийй середній фільтр
Рис.14.Створене зображення,сіль і перець
Рис.15.Медіанний фільтр
Рис.16.Фільтр мінімуму
Рис.17.Фільтр максимуму
Висновок:як бачимо з наведених гістограм, для усунення гауссового шуму найкращі результати дає середній геометричний фільтр. Медіанний фільтр дає результати тільки, якщо зображення спотворене шумом типу «сіль і перець».
Відновлення змазаного і зашумленого зображення
a) Генерування макетного зображення.
b) Генерування змазаного та спотвореного зображення.
c) Відновлення змазаного та спотвореного зображення.
Створюємо М-файл, у який вводимо відповідний програмний код:
%Генерування змазаного та спотвореного зображення
clc
clear
%f=checkerboard(8);
f1= imread('Tracy.tif');
f=im2double(f1);
PSF= fspecial ('motion', 70, 45);
figure (1);
imshow(f);
title ('Початкове зображення,')
%Генеруємо змазане зображення, спотворюємо його Гаусовим шумом та виведемо
%його на екран за допомогою наступного тексту програми:
g=imfilter(f, PSF, 'circular');
figure(2);
imshow(g);
noise=imnoise(zeros(size(f)), 'gaussian', 0,0.1);
gb=g+noise;
figure(3);
imshow(gb,[]);
title ('Змазане та спотворене зображення');
% fr1 - результат прямого застосування інверсної фільтрації
fr1=deconvwnr(gb,PSF);
% обчислення числа R
Sn=abs(fft2(noise)).^2; % noise power spectrum
nA=sum(Sn(:))/prod(size(noise)); % noise avarage power
Sf=abs(fft2(f)).^2; % image power spectrum
fA=sum(Sf(:))/prod(size(noise)); % image avarage power
R=nA/fA;
% Відновлення зображення з R
fr2=deconvwnr(gb,PSF,R);
% відображення
figure(4), imshow(fr1, [])% пряме застосування інверсної фільтрації
title ('Пряме застосування інверсної фільтрації');
figure(5), imshow(fr2, [])% параметричний вінеровський фільтр
title ('Параметричний вінеровський фільтр');
% Використаня автокореляційних функцій
NCORR=fftshift(real(ifft2(Sn)));
ICORR=fftshift(real(ifft2(Sf)));
fr3=deconvwnr(gb,PSF,NCORR,ICORR);
% відображення
figure(6), imshow(fr3, [])% використання автокореляційної функції
title ('Використання автокореляційних функцій');
Отримані результати:
Рис.18.
Рис.19.
Рис.20.
Рис.21.
Рис.22.
Рис.23.
Висновок:для відновлення змазаного і спотвореного зображення використовуємо інверсну фільтрацію, параметричний вінеровський фільтр і автокореляційну функцію. Найкращі результати дає автокореляційна функція.