7 votos

Laplaciana discreta de Gauss (LoG)

En el procesamiento de imágenes, a menudo se utiliza el Laplaciano discreto de Gauss (LoG) para detectar bordes con

$LoG(x,y) = -\frac{1}{\pi \sigma^4}[1-\frac{x^2+y^2}{2\sigma^2}]\cdot e^{-\frac{x^2+y^2}{2\sigma^2}}$

Varias fuentes aquí , aquí o aquí dan Kernels discretos del LoG que se convolucionan con la imagen de entrada para obtener la versión filtrada. Sin embargo, no entiendo la derivación de este Kernel de la función.

Un posible núcleo para $\sigma = 1.4$ es

$K = \begin{bmatrix}0.0& 1.0& 1.0& 2.0& 2.0& 2.0& 1.0& 1.0& 0.0\\ 1.0& 2.0& 4.0& 5.0& 5.0& 5.0& 4.0& 2.0& 1.0\\ 1.0& 4.0& 5.0& 3.0& 0.0& 3.0& 5.0& 4.0& 1.0\\ 2.0& 5.0& 3.0& -12.0& -24.0& -12.0& 3.0& 5.0& 2.0\\ 2.0& 5.0& 0.0& -24.0& -40.0& -24.0& 0.0& 5.0& 2.0\\ 2.0& 5.0& 3.0& -12.0& -24.0& -12.0& 3.0& 5.0& 2.0\\ 1.0& 4.0& 5.0& 3.0& 0.0& 3.0& 5.0& 4.0& 1.0\\ 1.0& 2.0& 4.0& 5.0& 5.0& 5.0& 4.0& 2.0& 1.0\\ 0.0& 1.0& 1.0& 2.0& 2.0& 2.0& 1.0& 1.0& 0.0\end{bmatrix}$

Mi pregunta es, ¿cómo estos Kernels discretos se derivan de la $LoG(x,y)$ función. ¿Hay algún factor de escala? ¿Es una integración sobre el área de píxeles discretos?

Mis valores calculados para el punto central (-40,0) son:

$LoG(0,0) \approx -0.1624$

y

$\iint\limits_{-0.5}^{0.5}{LoG(x,y)} dx dy \approx -0.0761$

5voto

Sunny Molini Puntos 350

La respuesta es escalar. La matriz $K$ es simplemente un $n\times n$ matriz con $n$ siendo impar y

$K(i,j)=LoG(i-\frac{n-1}{2},j-\frac{n-1}{2})$ .

Toda la matriz puede escalarse para facilitar el cálculo en el rango de los números enteros.

El siguiente código python produce una matriz, que es "suficientemente cercana" a la salida deseada:

import numpy as np

def LoG(sigma, x, y):
    laplace = -1/(np.pi*sigma**4)*(1-(x**2+y**2)/(2*sigma**2))*np.exp(-(x**2+y**2)/(2*sigma**2))
    return laplace

def LoG_discrete(sigma, n):
    l = np.zeros((n,n))
    for i in range(n):
        for j in range(n):
            l[i,j] = LoG(sigma, (i-(n-1)/2),(j-(n-1)/2))
    return l

sigma = 1.4

l = np.round(LoG_discrete(sigma, 9)*(-40/LoG(sigma,0,0)))

$K = \begin{bmatrix}0& 0& 1& 2& 2& 2& 1& 0& 0\\ 0& 1& 3& 5& 5& 5& 3& 1& 0\\ 1& 3& 5& 3& 0& 3& 5& 3& 1\\ 2& 5& 3&-12& -23& -12& 3& 5& 2\\ 2& 5& 0& -23& -40& -23& 0& 5& 2\\ 2& 5& 3&-12& -23& -12& 3& 5& 2\\ 1& 3& 5& 3& 0& 3& 5& 3& 1\\ 0& 1& 3& 5& 5& 5& 3& 1& 0\\ 0& 0& 1& 2& 2& 2& 1& 0& 0\end{bmatrix}$

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X