Filtrado gaussiano Es ampliamente utilizado en el campo del procesamiento de imágenes. Se utiliza para reducir el ruido de una imagen. En este artículo generaremos un Núcleo gaussiano 2D. El núcleo gaussiano 2D sigue la distribución gaussiana que se proporciona a continuación.
G(x y)=frac{1}{2pi sigma ^{2}}e^{-frac{x^{2}+y^{2}}{2sigma ^{2}}}
Donde y es la distancia a lo largo del eje vertical desde el origen x es la distancia a lo largo del eje horizontal desde el origen y ? es la desviación estándar.
¿Qué es el filtrado gaussiano?
El filtrado gaussiano es una técnica utilizada en el procesamiento de imágenes para suavizarlas y reducir el ruido. Funciona aplicando un efecto de desenfoque mediante una función matemática llamada función gaussiana que da más peso a los píxeles centrales y menos a los circundantes. Esto da como resultado un desenfoque de apariencia natural que ayuda a eliminar detalles no deseados como granos o pequeños artefactos. El filtrado gaussiano se utiliza ampliamente como paso de preprocesamiento en tareas como el reconocimiento de objetos con detección de bordes y la mejora de imágenes, lo que facilita que los algoritmos se centren en características importantes.
Implementación en C++
C++// C++ program to generate Gaussian filter #include #include #include using namespace std; // Function to create Gaussian filter void FilterCreation(double GKernel[][5]) { // initialising standard deviation to 1.0 double sigma = 1.0; double r s = 2.0 * sigma * sigma; // sum is for normalization double sum = 0.0; // generating 5x5 kernel for (int x = -2; x <= 2; x++) { for (int y = -2; y <= 2; y++) { r = sqrt(x * x + y * y); GKernel[x + 2][y + 2] = (exp(-(r * r) / s)) / (M_PI * s); sum += GKernel[x + 2][y + 2]; } } // normalising the Kernel for (int i = 0; i < 5; ++i) for (int j = 0; j < 5; ++j) GKernel[i][j] /= sum; } // Driver program to test above function int main() { double GKernel[5][5]; FilterCreation(GKernel); for (int i = 0; i < 5; ++i) { for (int j = 0; j < 5; ++j) cout << GKernel[i][j] << 't'; cout << endl; } }
Producción:
0.00296902 0.0133062 0.0219382 0.0133062 0.00296902
0.0133062 0.0596343 0.0983203 0.0596343 0.0133062
0.0219382 0.0983203 0.162103 0.0983203 0.0219382
0.0133062 0.0596343 0.0983203 0.0596343 0.0133062
0.00296902 0.0133062 0.0219382 0.0133062 0.00296902
Aplicaciones del mundo real del filtrado gaussiano
Los filtros gaussianos se utilizan en muchas tecnologías cotidianas para mejorar la calidad de la imagen y extraer información útil :
- Visión por computadora : Ayuda a detectar bordes y formas reduciendo el ruido antes de aplicar algoritmos de detección.
- Imagenología Médica : Se utiliza para suavizar las exploraciones por resonancia magnética o tomografía computarizada, lo que facilita la identificación de tejidos y anomalías.
- Detección de objetos : Prepara imágenes eliminando distracciones, lo que permite a los modelos centrarse en características clave.
- Herramientas de edición de fotografías : comúnmente utilizado para aplicar efectos de desenfoque Suaviza las imágenes o reduce el granulado para una apariencia más limpia.
Comparación con otros filtros
Así es como filtro gaussiano se destaca de otros filtros comunes:
- Filtro de caja (filtro promedio) : Desenfoca la imagen dando igual peso a todos los píxeles circundantes. El filtro gaussiano es mejor porque proporciona más peso para centrar los píxeles creando un desenfoque más suave y natural.
- Filtro mediano : Reemplaza cada píxel con el mediana de valores cercanos, lo cual es excelente para eliminar ruido de sal y pimienta . A diferencia del gaussiano, no difumina tanto la imagen, pero puede distorsionar los bordes.
- Filtro bilateral : Como Gaussiano pero también considera intensidad de píxeles preservando las diferencias bordes mientras alisa. Es más avanzado pero también más computacionalmente pesado .
Filtrado gaussiano 2D frente a 1D
A Filtro gaussiano 2D se puede descomponer en dos filtros 1D - uno horizontal y otro vertical. esto se llama posibilidad de separación y significa que no necesitamos aplicar un kernel 2D completo a la vez.
Por qué es importante:
En lugar de hacer cálculos pesados con un núcleo 2D grande (por ejemplo, 5×5), aplicamos un Núcleo 1D horizontalmente entonces el mismo núcleo verticalmente . Esto reduce el tiempo de cálculo y proporciona la mismo resultado .
primera computadora portátil
Consideraciones de rendimiento
Generar y aplicar un núcleo gaussiano puede ser computacionalmente caro especialmente para imágenes grandes o núcleos.
- Complejidad del tiempo :
- Para un grano de tamaño k × k aplicado a un norte × norte imagen la complejidad del tiempo es O(n² × k²) .
- Esto se debe a que cada operación de píxel implica recorrer todo el núcleo.
- Optimización: filtros separables :
Los núcleos gaussianos son separable lo que significa que se puede dividir un filtro 2D dos filtros 1D : uno horizontal y otro vertical.- Esto reduce la complejidad del tiempo para O(n²×k) haciéndolo mucho más rápido para granos más grandes.
El uso de filtros separables es un truco común en los sistemas del mundo real para acelerar el filtrado gaussiano sin perder calidad.
Debe leer
- Aplicar un filtro Gauss a una imagen con Python
- ¿Cómo generar una matriz gaussiana 2-D usando NumPy?
- Integración de funciones gaussianas
Conclusión
El filtrado gaussiano es una técnica simple pero poderosa para reduciendo el ruido y la borrosidad de la imagen utilizando un promedio ponderado suave basado en la función gaussiana. En este artículo generamos un Núcleo gaussiano 2D y exploró su papel en varios aplicaciones del mundo real como visión por computadora, imágenes médicas y edición de fotografías. También lo comparamos con otros filtros y discutimos formas de optimizar el rendimiento utilizando filtros separables. El filtrado gaussiano general es un herramienta fundamental en el procesamiento de imágenes ayudando a mejorar la calidad de la imagen y facilitando que los algoritmos se centren en detalles visuales importantes.