¿Cuál es la relación entre sigma y radio? He leído que sigma es equivalente a radio, no veo cómo se expresa sigma en píxeles. ¿O es "radio" solo un nombre para sigma, no relacionado con píxeles?
Hay tres cosas en juego aquí. La varianza, ( σ2 ), el radio y el número de píxeles. Como se trata de una función gaussiana bidimensional, tiene sentido hablar de la matriz de covarianza . Sea como fuere, sin embargo, esos tres conceptos están débilmente relacionados.Σ
En primer lugar, la gaussiana 2-D viene dada por la ecuación:
g(z)=1(2π)2|Σ|−−−−−−−√e−12(z−μ)TΣ−1 (z−μ)
Donde es un vector columna que contiene el y de coordenadas en la imagen. Entonces, , y es un vector de columna que codifica la media de su función gaussiana, en las direcciones e . x y z = [ x y ] μ x y μ = [ μ x μ y ]zxyz=[xy]μxyμ=[μxμy]
Ejemplo:
Ahora, digamos que establecemos la matriz de covarianza , y . También estableceré el número de píxeles en x . Además, mi 'cuadrícula', donde evalúo este PDF, irá de a , tanto en como en . Esto significa que tengo una resolución de cuadrícula de . Pero esto es completamente arbitrario. Con esa configuración, obtendré la imagen de función de densidad de probabilidad a la izquierda. Ahora, si cambio la 'varianza', (realmente, la covarianza), de modo queΣ=[1001]μ=[00]100100−1010xy10−(−10)100=0.2Σ=[9009] y mantiene todo lo demás igual, obtengo la imagen a la derecha.
El número de píxeles sigue siendo el mismo para ambos, x , pero cambiamos la varianza. Supongamos, en cambio, que hacemos el mismo experimento, pero usamos x píxeles, pero todavía corrí de a . Entonces, mi cuadrícula tiene una resolución de . Si uso las mismas covarianzas que antes, obtengo esto:1001002020−101010−(−10)20=1
Así es como debes entender la interacción entre esas variables. Si desea el código, también puedo publicarlo aquí.
¿Cómo elijo sigma?
La elección de la matriz de varianza / covarianza de su filtro gaussiano depende en gran medida de la aplicación. No hay respuesta correcta. Es como preguntar qué ancho de banda se debe elegir para un filtro. De nuevo, depende de su aplicación. Por lo general, desea elegir un filtro gaussiano de modo que anule una cantidad considerable de componentes de alta frecuencia en su imagen. Una cosa que puede hacer para obtener una buena medida es calcular el DFT 2D de su imagen y superponer sus coeficientes con su imagen gaussiana 2D. Esto le dirá qué coeficientes están siendo penalizados fuertemente.
Por ejemplo, si su imagen gaussiana tiene una covarianza tan amplia que abarca muchos coeficientes de alta frecuencia de su imagen, entonces debe hacer que sus elementos de covarianza sean más pequeños.
El parámetro sigma es suficiente para definir el desenfoque gaussiano desde un punto de vista continuo. Sin embargo, en la práctica, las imágenes y los núcleos de convolución son discretos. ¿Cómo elegir una aproximación discreta óptima del núcleo gaussiano continuo?
La aproximación discreta estará más cerca del núcleo gaussiano continuo cuando se usa un radio mayor. Pero esto puede tener el costo de la duración de cálculo adicional.
Idealmente, uno seleccionaría un valor para sigma, luego calcularía un radio que permita representar fielmente el núcleo gaussiano continuo correspondiente. Para un error de aproximación dado, cuanto mayor sea la sigma, mayor será el radio.
Curiosamente, esto puede ser muy complicado para hacerlo bien. Al construir la matriz gaussiana, ¿es la mejor solución para muestrear el núcleo continuo o hay mejores aproximaciones? ¿Cómo normalizar el núcleo discreto calculado para tener en cuenta el truncamiento? etc.
Como referencia, en Mathematica la función GaussianMatrix presenta varias formas de calcular una matriz discreta gaussiana, por ejemplo, usando la aproximación discreta de Bessel. Por defecto, radio = 2 * sigma, lo que significa que con sigma = 1, la matriz será 5x5.
fuente
Resulta que las filas del Triángulo de Pascal se aproximan bastante a un Gaussiano y tienen la ventaja práctica de tener valores enteros cuya suma es una potencia de 2 (podemos almacenar estos valores exactamente como enteros, valores de punto fijo o flotantes). Por ejemplo, supongamos que deseamos construir un núcleo gaussiano 7x7, podemos hacerlo usando la 7ma fila del triángulo de Pascal de la siguiente manera:
Tenga en cuenta que este filtro tiene la influencia mínima en las esquinas mientras se mantiene el valor entero. Puede usar el valor medio 20/64 para determinar la desviación estándar correspondiente sigma que es 64 / (20 * sqrt (2 * pi)) = 1.276 para el gaussiano aproximado en este caso. Puede graficar el gaussiano para ver que este ajuste es excelente.
Entonces, un buen punto de partida para determinar una desviación estándar razonable para un Kernel gaussiano proviene del Triángulo de Pascal (también conocido como Coeficientes Binomiales ), para un filtro (N + 1) x (N + 1) correspondiente al uso de construcción anterior
GaussianMatrix de Wolfram Alpha [3] solo usa r / 2 = 1.5. Por extraño que parezca, GaussianMatrix [{3,1.276}] no produce el mismo filtro 2D que el mío y no es el siguiente para x, y entre -3 y 3:
No estoy seguro de por qué no Mi filtro 2D es un excelente ajuste.
fuente