Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР4 / МТ ЛР4

.pdf
Скачиваний:
8
Добавлен:
25.06.2023
Размер:
1.38 Mб
Скачать

ГУАП

КАФЕДРА №41

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

доц., канд. техн. наук

 

 

 

О.О. Жаринов

 

 

 

 

 

 

 

 

 

должность, уч. степень, звание

 

подпись, дата

 

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №4

ОСНОВЫ ЦИФРОВОЙ ФИЛЬТРАЦИИ ИЗОБРАЖЕНИЙ СРЕДСТВАМИ MATLAB

по курсу: МУЛЬТИМЕДИА ТЕХНОЛОГИИ

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

подпись, дата

 

инициалы, фамилия

Санкт-Петербург 2023

Цель работы

Изучить методологию управления контрастностью полутоновых изображений с целью улучшения их визуального восприятия. Реализовать типовые методы контрастирования изображений в среде Matlab.

Краткие сведения о методах управления контрастностью полутоновых

изображений

Обработка изображений — это процесс изменения цифрового изображения с целью улучшения его качества или извлечения информации. Один из наиболее распространенных методов обработки изображений — это фильтрация, которая используется для удаления шумов и улучшения качества изображения.

Фильтрация изображений может осуществляться двумя основными методами:

спектральной фильтрацией и двумерной пространственной фильтрацией.

Спектральная фильтрация основана на преобразовании Фурье, которое используется для представления изображения в частотном пространстве. Фильтры могут быть применены к спектру изображения, чтобы изменить его частотный состав. Примеры спектральных фильтров включают фильтры низких и высоких частот, полосовые фильтры и фильтры усиления.

Двумерная пространственная фильтрация основана на применении фильтра к каждому пикселю изображения в двумерном пространстве. Фильтр — это матрица, которая перемещается по изображению, и каждый пиксель умножается на соответствующий элемент фильтра. Это позволяет вычислить новое значение каждого пикселя, используя его соседей. Примеры двумерных фильтров включают фильтры усреднения, медианные фильтры и фильтры Собеля.

Правильный выбор фильтра может улучшить качество изображения, уменьшить шумы и увеличить четкость. Однако выбор правильного фильтра может быть сложным и зависит от конкретной задачи обработки изображения. MATLAB предоставляет широкий набор инструментов для обработки изображений, включая функции для создания и применения различных типов фильтров в спектральном и пространственном пространствах.

2

Индивидуальный вариант

Индивидуальный вариант в соответствии с таблицей 1.

 

 

 

Таблица 1 – Индивидуальный вариант задания

 

 

 

 

Вариант

Описание

Код

варианта

задания

 

 

 

3

Вид шума

%% мультипликативный шум (спекл-шум)

 

distorted_image = imnoise(S,'speckle',0.0001);

 

 

 

9

 

 

%% движение фотоаппарата на P пикселей под углом А

 

Вид

градусов

 

1

 

искажений

PSF = fspecial('motion',P,A);

 

 

 

 

 

S = imfilter(input_image,PSF,'replicate');

Ход работы

 

 

1. Тестовое изображение с большим количеством деталей в соответствии с

рисунком 1.

Рисунок 1 – Исходное изображение

3

Первая часть

Выполнили фильтрацию тестового изображение с целью выделения краев объектов при помощи алгоритмов, реализованных в программах, приведенных в листингах 1 и 2.

Подобрали значения параметра space_freq, при котором результат работы получился субъективно наилучшим. Сохранили несколько изображений, полученных при различных значениях параметра space_freq. Код в соответствии с листингом 1.

Попробовали реализацию фильтрации изображения методом Фурье.

Листинг 1 – MATLAB-программа, реализующая метод Фурье-фильтрации изображения с целью выделения краев объектов

clc, clear, close all %очистка памяти

raw_image = imread('simg1.jpg');

input_image = rgb2gray(raw_image); % перевод изображения в оттенки серого

Spectr_input_image = fftshift(fft2(input_image)); % 2D-БПФ изображения

figure(1)

imagesc(20*log(abs(Spectr_input_image))) % вывод двумерного спектра изображения

[x y] = size(Spectr_input_image); % получение размера изображения space_freq = 8; % настраиваем пространственную частоту среза фильтра

mask=ones([x y]); % пустой массив для маски фильтрации в частотной области mask(round(x/2) - space_freq : round(x/2) + space_freq, ...

round(y/2) - space_freq : round(y/2) + space_freq)=0; %задание маски ФВЧ

Spectr_output_image = Spectr_input_image.* mask; %изменение спектра

figure(2)

imagesc(20*log(abs(Spectr_output_image))) % вывод измененного спектра

output_image = (ifft2(ifftshift(Spectr_output_image), 'symmetric')); %обратное 2D-БПФ

max_output_image = max(max(output_image));

output_image = uint8(255.*output_image./max_output_image); %нормировка output_image = 255 - output_image; % инверсия

figure(3), imshow(input_image) figure(4), imshow(output_image)

imwrite(output_image, 'output_gray_image.jpg'); %запись полученного изображения в файл

4

Результат фильтрации методом Фурье в соответствии с рисунком 2.

Рисунок 2 – Результат обработки

Попробовали разные значения параметра space_freq в диапазоне от 1 до 100 и

заметили, что при слишком большом значении изображение выцветает и грани становятся почти не различимы, а при чрезмерно малых появляется много артефактов. Эмпирически пришли к оптимальному для нашего изображения значению равному 8, при котором получается изображение с оптимальным количеством деталей и без артефактов в соответствии с рисунком 2.

Неудачные варианты параметра space_freq при значениях 1 и 100 соответственно представлены на рисунке 3.

Рисунок 3 – Неудачные результаты обработки

5

Попробовали реализацию фильтрации изображения методом Лапласиана Гауссова фильтра (“log”). Код в соответствии с листингом 2.

Листинг 1 – MATLAB-программа фильтрации изображения при помощи метода с (“log”),

выделяющего края объектов

clc,clear, close all

input_image = imread('simg1.jpg'); %чтение изображения input_image = rgb2gray(input_image); %перевод в оттенки серого figure(1)

imshow(input_image)

output_image = edge(input_image,'log'); %реализуем фильтр для выделения краев с применением фильтра log

max_output_image = max(max(output_image));

output_image = uint8(255.*output_image./max_output_image); %нормировка output_image = 255 - output_image;

output_image = imbinarize(output_image, 'global'); figure(2)

imshow(output_image) title('output image')

imwrite(output_image, 'output_spatial_filtered.jpg'); %запись восстановленного изображения в файл

Результат фильтрации методом Лапласиана Гауссова фильтра в соответствии с рисунком 4.

Рисунок 4 – Фрагмент, преобразованного изображения методом Лапласиана Гауссова фильтра

Попробовав все предложенные для функции edge() алгоритмы фильтрации,

остановились на методе Лапласиана Гауссова фильтра, так как он позволил получить для нашего изображения достаточно детализированное изображение граней изображённых на рисунке объектов без чрезмерного количества артефактов, которые возникали с другими алгоритмами.

На приведенном выше фрагменте полученного изображения особенно заметно насколько, четко выделились грани мотора и колеса.

6

Неудачные варианты результатов обработки для алгоритмов roberts и approxcanny

соответственно представлены на рисунке 5.

Рисунок 5 – Неудачные результаты обработки Явно заметно, что на левом изображении потерянно много деталей, а на правом

чрезмерное количество шумов.

7

Вторая часть

Получили модельное изображение с заданными искажениями типа “смазывание” или расфокусировкой.

Применили заданные в варианте функции fspecial('motion',P,A) для моделирования изображения получаемого движением фотоаппарата на P пикселей под углом А градусов,

и imnoise(S,'speckle',0.0001) для моделирования мультипликативного шума (спекл-шум) на изображении. Код программы в соответствии с листингом 3

Листинг 3 – MATLAB-программа, позволяющая формировать изображение, искаженное смазом и зашумливанием, отображать его и сохранять в файл в формате *.jpg

%Пример моделирования смаза и зашумления изображения clc,clear, close all %очистка памяти

RGB = imread('img1.jpg'); %чтение изображения

input_image = rgb2gray(RGB); %преобразование в черно-белое изображение

%Вывод изображения (с повышенным контрастом) в 1-е подокно: figure

subplot(1,2,1), imshow(input_image,[])

title('input image','FontSize',10, 'FontName','Tahoma')

%Создание маски (модель искажений) для смазывания изображения: % движение фотоаппарата на P пикселей под углом А градусов

P = 10; A = 25;

PSF = fspecial('motion',P,A);

%Смазывание изображения:

S = imfilter(input_image,PSF,'replicate');

%Зашумление смазанного изображения мультипликативный шум (спекл-шум): distorted_image = imnoise(S,'speckle',0.0001);

%Вывод смазанного и зашумленного изображения во 2-е подокно: subplot(1,2,2), imshow(distorted_image,[])

title('distorted image','FontSize',10,'FontName','Tahoma')

imwrite(distorted_image, 'distorted_image3.jpg'); %запись искаженного изображения в файл

8

Результат искажения и зашумливания изображения в соответствии с рисунком 6.

Рисунок 6 – Фрагменты, искаженных и зашумленых изображений Получили серию изображений разной степени искажения, последнее из них

значительно потеряло в четкости и разборчивости, многие мелкие детали вообще почти пропали. При формировании изображений использовались значения параметра P = 5, 10, 20

и параметра A = 5, 15, 25 соответственно порядку приведенных изображений.

9

Осуществили восстанавливающую фильтрацию искаженного изображения,

используя программу, приведенную на листинге 4

Листинг 4 – Код программы подбора значения параметра фильтра

clc, clear, close all %очистка памяти

input_image = imread('distorted_image1.jpg'); %чтение изображения %input_image = rgb2gray(input_image); %перевод в оттенки серого

figure

subplot(2,2,1), imshow(input_image)

%Параметры смаза изображения: Delta = 20; %длина смаза в пикселях theta = 25; %угол смаза в град

PSF = fspecial('motion',Delta,theta); %PSF (модель искажений)

%устранение смаза изображения

Tikh = deconvreg(input_image,PSF,[],1e-2); %по Тихонову subplot(2,2,2), imshow(Tikh)

title('Restored image Tikhonov')

imwrite(Tikh, 'restored_image_Tikhonov3.jpg'); %запись восстановленного изображения в файл

Wnr = deconvwnr(input_image,PSF,1e-2); %по Винеру subplot(2,2,3), imshow(Wnr)

title('Restored image Wnr')

imwrite(Wnr, 'restored_image_Wiener3.jpg'); %запись восстановленного изображения в файл

10

Соседние файлы в папке ЛР4