Red de conocimiento informático - Aprendizaje de código fuente - ¿Cuál es la forma más eficaz de eliminar ruido como el ruido gaussiano?

¿Cuál es la forma más eficaz de eliminar ruido como el ruido gaussiano?

Algunos nuevos avances en el procesamiento de imágenes médicas en la actualidad. Nuestra tarea es implementar el filtrado bilateral en matlab. Primero, permítanme explicar brevemente nuestra motivación: el filtrado de imágenes es una tarea muy común en el procesamiento de imágenes en general. Por lo general, desea suavizar su imagen, por ejemplo, eliminar las frecuencias altas de la imagen con un filtro gaussiano. Por supuesto, el efecto de suavizado es agradable, pero el efecto secundario es que los bordes se vuelven borrosos. Para superar este problema, solo hacemos filtrado que preserva los bordes (qué idea tan inteligente ;-)).

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

"% 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");