libro - procesamiento de imagenes en matlab programa
Filtro medio para suavizar imágenes en Matlab (5)
I = imread(''peppers.png'');
H = fspecial(''average'', [5 5]);
I = imfilter(I, H);
imshow(I)
Tenga en cuenta que los filtros se pueden aplicar a imágenes de intensidad (matrices 2D) utilizando filter2
, mientras que en imágenes multidimensionales (imágenes RGB o matrices 3D) se usa imfilter
.
También en los procesadores Intel, imfilter
puede usar la biblioteca Intel Integrated Performance Primitives (IPP) para acelerar la ejecución.
Necesito probar algunas técnicas básicas de procesamiento de imágenes en Matlab. Necesito probar y comparar especialmente dos tipos de filtros: filtro de media y filtro de mediana.
Para suavizar la imagen utilizando el filtrado mediano, hay una gran función medfilt2
de la caja de herramientas de procesamiento de imágenes. ¿Hay alguna función similar para el filtro medio? ¿O cómo usar la función filter2
para crear el filtro medio?
Una de las cosas más importantes para mí es tener la posibilidad de establecer el radio del filtro. Es decir, para el filtro mediano, si quiero el radio [3 x 3] (máscara), solo uso
imSmoothed = medfilt2(img, [3 3]);
Me gustaría lograr algo similar para el filtro medio.
h = fspecial(''average'', n);
filter2(h, img);
Ver doc fspecial
: h = fspecial(''average'', n)
devuelve un filtro de promedio. n
es un vector de 1 por 2 que especifica el número de filas y columnas en h
.
Veo que ya se dieron buenas respuestas, pero pensé que sería bueno dar una manera de realizar filtros medios en MATLAB sin usar funciones especiales o cajas de herramientas. Esto también es muy bueno para entender exactamente cómo funciona el proceso, ya que se requiere establecer explícitamente el kernel de convolución. El núcleo de filtro medio es afortunadamente muy fácil:
I = imread(...)
kernel = ones(3, 3) / 9; % 3x3 mean kernel
J = conv2(I, kernel, ''same''); % Convolve keeping size of I
Tenga en cuenta que para las imágenes en color, deberá aplicar esto a cada uno de los canales de la imagen.
y la convolución se define mediante una multiplicación en el dominio de transformación:
conv2(x,y) = fftshift(ifft2(fft2(x).*fft2(y)))
si se considera un canal ... para más canales, esto tiene que hacerse en cada canal
f=imread(...);
h=fspecial(''average'', [3 3]);
g= imfilter(f, h);
imshow(g);