¿Cuál es la forma más eficaz de eliminar ruido como el ruido gaussiano?
C.Tomasi y R.Manduchi introdujeron el primer método en su artículo, llamado filtrado bilateral: filtrado bilateral. de imágenes en escala de grises y en color. en curso. Sexta Conferencia Internacional sobre Visión por Computador, Mumbai, India, enero de 1998. Permítanme citar la primera línea de su resumen:
El filtrado bilateral suaviza las imágenes mediante una combinación no lineal de valores de imágenes cercanas mientras preserva los bordes. El método es no iterativo, local y simple. Combina niveles de grises o colores en función de su proximidad geométrica y similitud fotométrica, y prefiere valores cercanos a valores lejanos en dominio y rango.
Código Matlab
Esto es exactamente lo que vamos a hacer, aquí está el código Matlab (también puedes descargarlo aquí):
Función FA = filtro bilateral (A, tamaño, estándar c, estándar s)
% Filtro bilateral Utilice un filtro bilateral para filtrar imágenes en escala de grises.
% FA = BILATERALFILTER(A,size,std_c,std_s) filter
%La imagen en escala de grises A usa una ventana de tamaño [size(1) size(2)]
% Filtro bilateral estándar.
% El filtrado bilateral suaviza las imágenes conservando los bordes contrastantes.
% Por lo tanto, para cada elemento de imagen en
% se crea una convolución. El núcleo es el producto del % de núcleo gaussiano (la función de proximidad) y la función de similitud ponderada gaussiana como porcentaje de la intensidad de los píxeles. std_c y std_s son derivadas estándar
% para funciones de proximidad y similitud.
%
%Referencia
% -
%Esta implementación se basa en el "filtrado bilateral" del artículo original p>
"% para imágenes en escala de grises y en color" por C. Tomasi y R. Manduchi
% (Actas de la Conferencia Internacional IEEE de 1998 sobre Visión por Computadora).
%
% (c)Christopher Rockall
% christopher@oneder.de
%Parison
Se utilizó el siguiente código para crear este ejemplo:
% Crear una imagen de ruido aleatorio
im = rand(128);
im([40 :80 ], [40:80]) = im([40:80], [40:80])+2.0;
im = (im - min(min(im))). /(max(max(im))-min(min(im)));
im(im(:)<0) = 0;
%Crear filtro bilateral imagen
imbi = bilateralfilter(im, [7 7], 6, 0.2);
%Crear imagen filtrada gaussiana
imgauss = imfilter(im, fspecial ('Gaussiano', [7 7], 6), 'conv');
% resultados de visualización
Gráfico();
Gráfico de rama ( 1 , 3, 1); imshow (im, []); título ("imagen original");
Gráfico de rama (1, 3, 2); Imagen filtrada bilateral");
Gráfico de rama (1, 3, 3); imshow (imgauss, []); título ("Imagen filtrada gaussiana");