Ответ 1
h = fspecial('average', n);
filter2(h, img);
См. doc fspecial
:
h = fspecial('average', n)
возвращает фильтр усреднения. n
представляет собой вектор 1 на 2, определяющий количество строк и столбцов в h
.
Мне нужно протестировать некоторые основные методы обработки изображений в Matlab. Мне нужно проверить и сравнить особенно два типа фильтров: средний фильтр и медианный фильтр.
Чтобы сгладить изображение с помощью медианной фильтрации, существует отличная функция medfilt2
из инструментария обработки изображений. Есть ли аналогичная функция для среднего фильтра? Или как использовать функцию filter2
для создания среднего фильтра?
Одна из самых важных вещей для меня - возможность установки радиуса фильтра. То есть для медианного фильтра, если я хочу радиус [3 x 3] (маска), я просто использую
imSmoothed = medfilt2(img, [3 3]);
Я хотел бы добиться чего-то подобного для среднего фильтра.
h = fspecial('average', n);
filter2(h, img);
См. doc fspecial
:
h = fspecial('average', n)
возвращает фильтр усреднения. n
представляет собой вектор 1 на 2, определяющий количество строк и столбцов в h
.
Я вижу, что хорошие ответы уже были даны, но я подумал, что было бы неплохо просто дать возможность выполнять среднюю фильтрацию в MATLAB без использования специальных функций или наборов инструментов. Это также очень полезно для понимания того, как работает этот процесс, поскольку вам необходимо явно установить сверточное ядро. К счастью, среднее ядро фильтра очень просто:
I = imread(...)
kernel = ones(3, 3) / 9; % 3x3 mean kernel
J = conv2(I, kernel, 'same'); % Convolve keeping size of I
Обратите внимание, что для цветных изображений вам необходимо применить это к каждому из каналов на изображении.
I = imread('peppers.png');
H = fspecial('average', [5 5]);
I = imfilter(I, H);
imshow(I)
Обратите внимание, что фильтры могут применяться к изображениям интенсивности (2D-матрицы) с использованием filter2
, тогда как на многомерных изображениях (изображения RGB или 3D-матрицы) используется imfilter
.
Кроме того, на процессорах Intel imfilter
может использовать библиотеку Intel Integrated Performance Primitives (IPP) для ускорения выполнения.
а свертка определяется путем умножения в области преобразования:
conv2(x,y) = fftshift(ifft2(fft2(x).*fft2(y)))
если один канал считается... для большего количества каналов это нужно сделать для каждого канала
f=imread(...);
h=fspecial('average', [3 3]);
g= imfilter(f, h);
imshow(g);