
LR6 / Z9411_КафкаРС_ММТ_ЛР6
.pdf
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ
КАФЕДРА 41
ОЦЕНКА |
|
|
|
|
|
ПРЕПОДАВАТЕЛЬ |
|
|
|
|
|
|
доц., канд. техн. наук, доц. |
|
|
|
О. О. Жаринов |
|
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ЛАБОРАТОРНАЯ РАБОТА №6
ОСНОВЫ ЦИФРОВОЙ ФИЛЬТРАЦИИ ИЗОБРАЖЕНИЙ СРЕДСТВАМИ MATLAB. МЕТОД ФИЛЬТРАЦИИ В СПЕКТРАЛЬНОМ ПРОСТРАНСТВЕ
по дисциплине: Мультимедиа технологии
РАБОТУ ВЫПОЛНИЛ |
|
|
|
|
|
СТУДЕНТ гр. № |
Z9411 |
|
|
|
Р. С. Кафка |
|
номер группы |
подпись, дата |
|
инициалы, фамилия |
|
|
|
|
|
||
Студенческий билет № |
2019/3603 |
|
|
|
|
|
|
|
|
|
|
Шифр ИНДО
Санкт-Петербург 2024
Цель работы: изучить основы обработки изображений на примере
методов фильтрации, реализуемых в спектральном пространстве.
Краткие теоретические сведения о задачах обработки изображений
и их практическом применении, а также об изученных методах
фильтрации.
Обработка изображений — это форма сигнальной обработки, где входной сигнал является изображением, например фотография или видео.
Цели могут включать улучшение изображений для человеческого восприятия, обработку для автономной интерпретации, извлечение информации и создание графических представлений.
Применяется в самых разнообразных областях — от медицинской визуализации и сателлитной фотографии до автоматизированного видеонаблюдения и искусственного интеллекта. Особенно важно в областях,
где необходимо выделение и распознавание объектов, реставрация изображений и преобразования для улучшения визуального восприятия.
Один из методов обработки изображений — фильтрация в спектральном пространстве, часто используемая для улучшения качества изображений (увеличения резкости, уменьшения смазанности) или для выделения границ объектов.
Принципы работы:
•Преобразование Фурье: изображение преобразуется из пространственного представления в частотное с помощью двумерного быстрого преобразования Фурье (2D-БПФ).
•Модификация спектра: спектр исходного изображения модифицируется путём умножения на передаточную функцию фильтра, которая может действовать как фильтр нижних (ФНЧ),
высоких (ФВЧ) или полосовых частот.
•Обратное преобразование: после изменения спектра применяется обратное 2D-БПФ для получения финального изображения.
2
Применение фильтров:
•Фильтр нижних частот (ФНЧ): используется для сглаживания изображения, уменьшения детализации и шума.
•Фильтр высоких частот (ФВЧ): применяется для усиления или выделения деталей и границ объектов на изображении.
•Полосовые и режекторные фильтры: находят применение в задачах, где нужно выделить или подавить определенные частотные составляющие изображения.
Технические аспекты:
•Центрирование спектра: используется функция fftshift для центрирования спектра, что упрощает работу с ФНЧ и ФВЧ.
•Проблемы и решения: спектральные методы могут вводить искажения,
такие как эффекты "звонов" или "Гиббса", которые могут быть уменьшены с использованием более гладких функций для фильтра.
Практическое применение:
•Медицина: обработка рентгеновских снимков, МРТ и УЗИ изображений для более точной диагностики.
•Безопасность: распознавание лиц, анализ видеонаблюдения для обеспечения безопасности.
•Промышленность: автоматический контроль качества, сортировка и упаковка товаров.
•Научные исследования: обработка изображений с космических аппаратов, микроскопических снимков и т.д.
Ход работы:
Тестовое изображение представлено на рисунке 1.
3

Рисунок 1 – Исходное изображение
1. Выполнили фильтрацию тестового изображение с целью выделения краев объектов при помощи алгоритмов, реализованных в программах,
приведенных в листинге 1.
Подобрали значения параметра space_freq, при котором результат работы получился субъективно наилучшим. Сохранили несколько изображений,
полученных при различных значениях параметра space_freq.
Листинг 1 - MATLAB-программа, реализующая простейший способ реализации метода Фурье-фильтрации изображения с целью выделения краев объектов
clc, clear, close all %очистка памяти I = imread('image.jpg');
%перевод изображения в оттенки серого
%(получение матрицы яркости):
if (size(I,3) == 3) I = rgb2gray(I); end I = im2double(I);
% Вычисление 2D-БПФ изображения:
%(получение матрицы центрированного спектра):
Spectr_input_image = fftshift(fft2(I));
A = abs(Spectr_input_image); % амплитудный спектр
4

A_max = max(max(A));
eps = A_max*10^(-6); %добавка, чтобы не вычислить lg(0)
A_dB = 20*log10(A + eps); % перевод в дБ figure(1)
%вывод графика спектра изображения imagesc(A_dB)
[M,N] = size(Spectr_input_image); % получение размера массива
%*********************************************************
%настраиваем пространственную частоту среза фильтра:
space_freq = 1;
%массив из единиц для маски фильтрации в частотной области mask=ones([M, N]);
%задание маски ФВЧ (обнуляем элементы
%в прямоугольной области в окрестности центра): mask(round(M/2) - space_freq : round(M/2) + space_freq, ...
round(N/2) - space_freq : round(N/2) + space_freq)=0;
%**********************************************************
%изменение спектра по формуле (1):
Spectr_output_image = Spectr_input_image.* mask; figure(2)
%визуализация измененного спектра: imagesc(20*log10(abs(Spectr_output_image)+eps))
%обратное 2D-БПФ:
J = (ifft2(ifftshift(Spectr_output_image), ...
'symmetric')); %обратное 2D-БПФ
%нормировка значений пикселей: max_J = max(max(J));
output_image = im2uint8((J./max_J));
%инверсия яркостей пикселей,
%чтобы получить черные границы на белом фоне output_image = 255 - output_image; figure(3), imshow(I)
figure(4), imshow(output_image) imwrite(output_image, 'edges_image.jpg');
Результат фильтрации методом Фурье представлен на рисунке 2.
5

Рисунок 2 – Результат Фурье-фильтрации изображения при помощи фильтра, выделяющего края объектов (см. программу на листинге 1): слева исходное изображение, справа – результат фильтрации, под каждым визуализирован амплитудный спектр
Попробовали разные значения параметра space_freq в диапазоне от 2 до
100 и заметили, что при слишком большом значении изображение выцветает и грани становятся нечёткими, а при малых появляется больше артефактов.
Эмпирически пришли к оптимальному для нашего изображения значению равному 1, при котором получается изображение с оптимальным количеством деталей и без артефактов.
Неудачные варианты параметра space_freq при значениях 10, 50 и 100
соответственно представлены на рисунке 3.
6

а) |
б) |
|
|
|
|
в)
Рисунок 3 – Неудачные результаты обработки при space_freq равным:
а) 10, б) 50, в)100
2.Выполнили фильтрацию изображения усовершенствованным способом реализации метода Фурье-фильтрации. Код представлен в листинге 2.
Листинг 2 – MATLAB-программа, реализующая усовершенствованный способ реализации метода Фурье-фильтрации изображения с целью выделения краев объектов с использованием пространственного ФВЧ Баттерворта
clc, clear, close all
I = imread('image.jpg');
if (size(I,3) == 3) I = rgb2gray(I); end I = im2double(I);
S_I = fftshift(fft2(I)); % 2D-БПФ ярк. составляющей % **************************************************
7

D_up = 45; K=4; deg |
= 2*K; |
|
[M, N] = size(I); W |
= zeros([M N]); |
%пустой массив для W |
Cn = round(N/2); Cm |
= round(M/2); % |
координаты центра |
%формируем массив W for n = 1:N
for m = 1:M
d = sqrt((m - Cm)^2 + (n - Cn)^2); W(m,n) = (d/D_up)^K/sqrt(1+(d/D_up)^deg); end
end
%**************************************************
S_J = S_I.* W; %изменение спектра фильтром
%визуализируем полученный спектр. вых. изобр.:
A = abs(S_J); % амплитудный спектр
A_max = max(max(A));
eps = A_max*10^(-6); %добавка, чтобы не вычислить lg(0)
A_dB = 20*log10(A + eps); % перевод в дБ imagesc(A_dB)
J = (ifft2(ifftshift(S_J), 'symmetric')); %2D-ОБПФ figure('Name','Изобр. на вых. фильтра');
max_J = max(max(J));
output_image = im2uint8(J./max_J); output_image = 255 - output_image; % инверсия
% output_image = imbinarize(output_image, 'global'); imshow(output_image)
imwrite(output_image, 'edge_image.jpg');
Также попробовали улучшить качество результата, получаемого в программе, приведенной в листинге 2, с помощью раскомментирования строчки «% output_image = imbinarize(output_image, 'global');».
Результат фильтрации усовершенствованным методом Фурье представлен на рисунке 4.
8

а)
в)
б)
г)
Рисунок 4 – Результат усовершенствованного способа Фурье-
фильтрации изображения (см. программу на листинге 2): а)
исходное изображение, б) результат фильтрации, в) результат фильтрации с улучшенным качеством, г) амплитудный спектр
3.Выполнили фильтрацию изображения при помощи метода Собеля. Код представлен в листинге 3.
Листинг 3 – MATLAB-программа фильтрации изображения при
помощи метода Собеля, выделяющего края объектов
clc, clear, close all
I = imread('image.jpg');
if (size(I,3) == 3) I = rgb2gray(I); end I = im2double(I);
S_I = fftshift(fft2(I)); % 2D-БПФ ярк. составляющей % **************************************************
D_up = 45; K=4; deg = 2*K;
[M, N] = size(I); W = zeros([M N]); %пустой массив для W Cn = round(N/2); Cm = round(M/2); % координаты центра
9

%формируем массив W for n = 1:N
for m = 1:M
d = sqrt((m - Cm)^2 + (n - Cn)^2); W(m,n) = (d/D_up)^K/sqrt(1+(d/D_up)^deg); end
end
%**************************************************
S_J = S_I.* W; %изменение спектра фильтром
%визуализируем полученный спектр. вых. изобр.:
A = abs(S_J); % амплитудный спектр
A_max = max(max(A));
eps = A_max*10^(-6); %добавка, чтобы не вычислить lg(0)
A_dB = 20*log10(A + eps); % перевод в дБ imagesc(A_dB)
J = (ifft2(ifftshift(S_J), 'symmetric')); %2D-ОБПФ figure('Name','Изобр. на вых. фильтра');
max_J = max(max(J));
output_image = im2uint8(J./max_J); output_image = 255 - output_image; % инверсия
% output_image = imbinarize(output_image, 'global'); imshow(output_image)
imwrite(output_image, 'edge_image.jpg');
Рисунок 5 – Результат фильтрации изображения при помощи метода Собеля, выделяющего края объектов: слева исходное изображение, справа –
результат фильтрации
В MATLAB реализованы многие другие алгоритмы, предназначенные для выделения границ объектов, такие как "Prewitt" "Roberts", "log",
"zerocross", "Canny", "approxcanny". Проверил алгоритм "zerocross" в
программе, приведенной в листинге 3, написав это слово вместо метода 'Sobel'.
Получившийся результат представлен на рисунке 6.
10