Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЧиРкОв.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.26 Mб
Скачать

2.7.1 Использование адаптивной фильтрации

В основе функции wiener2 лежит винеровский фильтр (один из типов линейного фильтра) для адаптивной локальной обработки изображений. Если значение среднеквадратического отклонения интенсивностей пикселей в данной локальной области большое, то wiener2 выполняет небольшое сглаживание. Если же это отклонение небольшое, то область сглаживания больше.

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

Функция wiener2 лучше работает с "белым" шумом, например гауссовским.

2.7.2 Использование медианной фильтрации

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

Использование медианного фильтра для удаления шума на изображении и визуализация результата. К преимуществам функции medfilt2 относится то, что удаление шума не приводит к размытию границ объектов изображения.

3. Проектирование вспомогательной функции matlab

3.1. Считывание изображения и создание его копии.

I=imread('breast.tif'); %Запись изображения в переменную I

imwrite(I,'copie_image.tif'); %Создание копии изображения

L=imread('copie_image.tif'); %Чтение копии

subplot(2,3,2), imshow(L); % Вывод изображения

title('Original'); %Подпись изображения

3.2. Добавление шумов к копии исходного изображения.

%Формирование зашумленных изображений.

%1) Добавление к изображению гауссовского белого шума (по умолчанию

%математическое ожидание равно 0, а дисперсия - 0,01):

L1=imnoise(L,'gaussian');

subplot(2,3,4), imshow(L1);

title('Gaussian');

%2) Добавление к изображению импульсного шума (по умолчанию плотность шума

%равна доле искаженных пикселей):

L2=imnoise(L,'salt & pepper', 0.05);

Subplot (2,3,5), imshow(L2);

title('Salt & Pepper');

%3) Добавление к изображению мультипликативного шума (по умолчанию

%математическое ожидание равно 0, а дисперсия 0,04):

L3=imnoise(L,'speckle',0.04);

subplot(2,3,6), imshow(L3);

title('Speckle');

3.3. Обработка зашумленной копии при помощи медианного фильтра.

%Обработка изображений медианным фильтром.

figure;

R1=medfilt2(L1);

subplot(1,3,1), imshow(R1), title('medFilter_Gaussian');

R2=medfilt2(L2);

subplot(1,3,2), imshow(R2), title('medFilter_Salt & Pepper');

R3=medfilt2(L3);

subplot(1,3,3), imshow(R3), title('medFilter_Speckle');

% Тело функции medfilt2

function b = medfilt2(varargin)

[a, mn, padopt] = parse_inputs(varargin{:});

domain = ones(mn);

if (rem(prod(mn), 2) == 1)

order = (prod(mn)+1)/2;

b = ordfilt2(a, order, domain, padopt);

else

order1 = prod(mn)/2;

order2 = order1+1;

b = ordfilt2(a, order1, domain, padopt);

b2 = ordfilt2(a, order2, domain, padopt);

if islogical(b)

b = b | b2;

else

b = imlincomb(0.5, b, 0.5, b2);

end

end

a = varargin{1};

charLocation = [];

for k = 2:nargin

if (ischar(varargin{k}))

charLocation = [charLocation k];

end

end

if (length(charLocation) > 1)

eid = 'Images:medfilt2:tooManyStringInputs';

error(eid,'%s','Too many input string arguments.');

elseif isempty(charLocation)

padopt = 'zeros';

else

options = {'indexed', 'zeros', 'symmetric'};

padopt = iptcheckstrs(varargin{charLocation}, options, mfilename, ...

'PADOPT', charLocation);

varargin(charLocation) = [];

end

if (strcmp(padopt, 'indexed'))

if (isa(a,'double'))

padopt = 'ones';

else

padopt = 'zeros';

end

end

if length(varargin) == 1,

mn = [3 3];

elseif length(varargin) >= 2,

mn = varargin{2}(:).';

if size(mn,2)~=2,

msg = 'MEDFILT2(A,[M N]): Second argument must consist of two integers.';

eid = 'Images:medfilt2:secondArgMustConsistOfTwoInts';

error(eid, msg);

elseif length(varargin) > 2,

msg = ['MEDFILT2(A,[M N],[Mb Nb],...) is an obsolete syntax. [Mb Nb]' ...

' argument is ignored.'];

wid = 'Images:medfilt2:obsoleteSyntax';

warning(wid, msg);

end

end