PREPROCESADO: SUAVIZADO Y REALCE
Consideremos algunas imágenes:
br=imread('im/breast.jpg');
cam=imread('im/cameraman.jpg');
lena=imread('im/lena.jpg');
pr=imread('im/parts.tif');
rice=imread('im/rice.png');
imread('im/rice.png');
Los filtros en el dominio espacial son máscaras que representan pesos asociados a una vecindad arbitraria mientras que en el dominio frecuencial son coeficientes asociados a todos los elementos del espectro. Unos y otros se definen en Matlab como matrices del tipo adecuado o con la función fspecial
h=fspecial('average')
h=fspecial('laplacian',
0.2
)
h=fspecial('prewitt',)
h=fspecial('sobel')
h=fspecial('unsharp',0.2)
Por ejemplo, el suavizado Gaussiano en el dominio espacial:
figure(1),imshow(cam)
h=fspecial('gaussian',5,2)
figure(2),imshow(imfilter(cam,h))
y en el dominio frecuencial
h=fspecial('gaussian',size(cam),max(size(cam))/10);
h=h/max(max(h));
figure(3),imshow(uint8(ifft2(ifftshift(fftshift(fft2(double(cam))).*h
))))
El filtro de mediana para la eliminación de ruido preservando detalles:
figure(3),imshow(medfilt2(cam,[5 5]))
Detección de bordes basada en gradientes:
[BW,thresh,gv,gh]
=
edge(cam,'sobel');
figure(2),imshow(BW)
figure(3),imagesc(gv)
figure(4),imagesc(gh)
figure(5),imagesc(sqrt(gv.^2+gh.^2))
Detección basada en la laplaciana:
figure(2),imshow(edge(cam,'zerocross',fspecial('laplacian')));
Filtro de Marr-Hildreth
figure(2),imshow(edge(cam,'log'));
Filtro de Canny
figure(2),imshow(edge(cam,'canny'));
Ejercicios:
Calcula el gradiente (componentes, modulo y angulo) directamente usando fspecial. Inventa una manera de mostrar los angulos como una imagen.
Calcula el filtro “log” a partir del filtro Gaussiano calculado mediante fspecial. Comparalo con el “log” de fspecial.
Implementa la detección de bordes basada en el filtro “log” en el dominio frecuencial.