Покращення зображень за допомогою математичного пакета MathLab

Мета:

  • ознайомитися із базовими функціями обробки зображень у пакеті МАТЛАБ;
  • вивчити засоби покращення зображень;
  • ознайомитися із стандартними методами обробки гістограм;
  • вивчити типи шумів на зображенні;
  • навчитись видаляти шуми.

Порядок виконання роботи

1. Створимо новий M-File та завантажимо зображення за допомогою стандартного діалогу операційної системи

pathDat=([cd ‘work*.jpg’]);
[filename, pathname] = uigetfile(pathDat);
fullname=strcat(pathname, filename);
I=imread(fullname);
iptsetpref(‘ImshowAxesVisible’,‘on’)
figure;
imshow(I);

Виконуємо команду Debug/Save and run. На екрані повинно з’явитися вікно для обрання зображення “Select File to Open”. Обираємо файл та відкриваємо його.

2. Розглянемо приклад обробки тестового зображення МАТЛАБ. Спочатку треба загрузити його, а потім проаналізуємо його гістограму. Для цього необхідно виконати команди

I = imread(‘cameraman.tif’);
imshow(I);
figure, imhist(I)

Після виконання команди Debug/Save and run на екрані з’являється зображення (рис. 1). Як бачимо, це зображення світле.

Рис. 1 – Тестове зображення та його гістограма яскравості

Гістограма зображення широка, тобто діапазон значень яскравостей великий. Спробуємо ще більше покращити якість зображення за допомогою функції imadjust.

I = imread(‘cameraman.tif’);
imshow(I);
figure, imhist(I)

I1 = imadjust(I);
imshow(I1)
figure, imhist(I1)

Після виконання команди Debug/Save and run на екрані з’являється зображення (рис. 2).

Можна помітити, що зовнішній вигляд гістограми майже не змінився, окрім того, що вона стала більш розтягнута, діапазон значень став більше. Це призводить по появи нових яскравостей, і в свою чергу до покращення зображення.

Рис. 2 - Результат покращення гістограми

Спробуємо до вихідного зображення застосувати іншу функцію обробки гістограми histeq. Результати покращення гістограми приведений на рис. 3.

I = imread(‘cameraman.tif’);
imshow(I);
figure, imhist(I)

I1 = imadjust(I);
imshow(I1)
figure, imhist(I1)

I2 = histeq(I);
imshow(I2)
figure, imhist(I2)

Рис. 3 – Результат застосування функції histeq

Розглянемо тепер функцію adapthisteq. Приклад її застосування приведено нижче.

I = imread(‘cameraman.tif’);
imshow(I);
figure, imhist(I)

I1 = imadjust(I);
imshow(I1)
figure, imhist(I1)

I2 = histeq(I);
imshow(I2)
figure, imhist(I2)

I3 = adapthisteq(I);
imshow(I3)
figure, imhist(I3)

Рис. 4 - Результат застосування функції adapthisteq

3. Розглянемо приклади видалення шумів на фотографіях. Завантажимо тестову фотографію та додамо на неї шум типу «сіль та перець». Зробимо це за допомогою коду:

I = imread(‘eight.tif’);
imshow(I)
J = imnoise(I,‘salt & pepper’,0.02);
figure, imshow(J)

Рис. 5 – Комбінація зображення та шуму «salt&pepper»

Спробуємо тепер відфільтрувати зашумлене зображення за допомогою функцій МАТЛАБ.

L = medfilt2(J,[3 3]);
figure, imshow(L)

Завантажимо тестову фотографію та додамо на неї шум типу «gaussian».

I = imread(‘eight.tif’);
imshow(I)
J = imnoise(I,‘gaussian’,0.02);
figure, imshow(J)

Рис. 6 - Результат використання параметру «gaussian»

Завантажимо тестову фотографію та додамо на неї шум типу «poisson».

I = imread(‘eight.tif’);
imshow(I)
J = imnoise(I, ‘poisson’);
figure, imshow(J)

Рис. 7 - Результат використання параметру «poisson»

Завантажимо тестову фотографію та додамо на неї шум типу «speckle».

I = imread(‘eight.tif’);
imshow(I)
J = imnoise(I, ‘speckle’, 0.6);
figure, imshow(J)

Рис. 8 – Результат використання параметру «speckle»

4. Розглянемо роботу функцій imsubtract, imadd, imabsdiff, im2bw, rgb2gray.

іmsubtract – віднімає одне зображення з іншого або константу з зображення.

Z = imsubtract(X,Y)

Віднімемо фонове зображення.

I = imread(‘rice.png’);
figure, imshow(I);
background = imopen(I,strel(‘disk’,15));
Ip = imsubtract(I,background);
figure, imshow(Ip,[])

Рис. 9 – Результат віднімання фону від зображення

Віднімемо константне значення з зображення.

I = imread(‘rice.png’);
figure, imshow(I);
background = imopen(I,strel(‘disk’,15));
Ip = imsubtract(I,background);
figure, imshow(Ip,[])

Iq = imsubtract(I,60);
figure, imshow(Iq)

Рис. 10 – Результат віднімання константного значення від зображення

іmadd – складає два зображення або додає константу до зображення

Z = imadd(X,Y)

Складемо два зображення  та визначимо вихідний клас.

I = imread(‘rice.png’);
J = imread(‘cameraman.tif’);
K = imadd(I,J,‘uint16’);
imshow(K,[])

Рис. 11 – Результат складання двух зображень

I1 = imread(‘rice.png’);
J1 = imadd(I1,50);
subplot(1,2,1), imshow(I)
subplot(1,2,2), imshow(J)

Рис. 12 – Результат додавання константного значення до зображення

іmabsdiff визначає абсолютну відмінність двох зображень.

Z = imabsdiff(X,Y)

Виведемо абсолютну різницю між відфільтрованим зображенням та оригіналом.

I = imread(‘cameraman.tif’);
J = uint8(filter2(fspecial(‘gaussian’), I));
K = imabsdiff(I,J);
imshow(K,[]) % [] = scale data automatically

Рис. 13 – Абсолютна різниця між відфільтрованим зображенням та оригіналом

im2bw – переводить зображення в двiйковий образ, що заснований на порозi

BW = im2bw(I, level)

BW = im2bw(X, map, level)

BW = im2bw(RGB, level)

Завантажимо зображення з деревами.

BW = im2bw(X,map,0.4);
imshow(X,map), figure, imshow(BW)

Рис. 14 – Зображення в двійковому образі, що засноване на порозі

rgb2gray – переводить зображення в RGB або в палiтру вiдтiнкiв сiрого

I = rgb2gray(RGB)

newmap = rgb2gray(map)

Перетворио RGB зображення в зображення з вiдтiнками сiрого

I = imread(‘board.tif’);
J = rgb2gray(I);
figure, imshow(I), figure, imshow(J);

Рис. 17 – Перетворене RGB зображення в зображення з відтінками сірого


im2bw –  переводить зображення в двійковий образ, що заснований на порозі

BW = im2bw(I,level)

BW = im2bw(X,map,level)

BW = im2bw(RGB,level)

Завантажимо дерева.

Advertisements