5 votos

parcialmente reconstruir la información de la función convoluted con el kernel del carrocería

la función (f) quiero reconstruir parcialmente podría tener este aspecto: original function f

Las siguientes propiedades son conocidas:

  • Consiste en la alternancia de la meseta (alta/baja).

  • Así que la primera derivación es cero, respectivamente indefinido en los bordes.

La función fue complicado con un núcleo que cumple las siguientes condiciones:

  • Es un furgón de la función

  • Su centro está en x=0

  • Su integral es 1.

Quiero reconstruir sólo las posiciones de los bordes de la función original (f) a partir del resultado de convolución (c). Tan sólo estas posiciones son de interés para mí: interesting edge positions in f

Si el núcleo de circunvolución de ancho (k) es menor que el mínimo de la meseta de anchura (b, 40 en el ejemplo de arriba) de f, c ve de la siguiente manera: boxcar convolution result c with k=31 (El ancho de la caja del coche núcleo de circunvolución aquí es k=31.)

En ese caso es fácil reconstruir el borde posiciones: Busco (posiblemente amplio) extrema, y entre los vecinos [e1_x, e1_y] y [e2_x, e2_y] (uno de ellos es de un mínimo y un máximo, por supuesto), la búsqueda de la x0 cumplir: c(x0) = (e1_y + e2_y) / 2.

La reconstrucción de la posición del filo lucir así: successfully reconstructed edge positions

Pero si k > b, mi enfoque no: failing in reconstructing edge positions (k=57)

Existe una posibilidad de calcular el original de borde de posiciones en f, si d (y, entonces, k) y c son conocidos, también para el k>b casos?

4voto

Joel Puntos 101

Esto parece una combinación perfecta para el total de la variación de deconvolución. En pocas palabras, usted tiene un modelo que su función es $u^0 = h\ast u^\dagger$ con el cuadro de coches kernel $h$ y una función constante a trozos $u^\dagger$. Para reconstruir $u^\dagger$ a partir del conocimiento de $u^0$ $h$ minimizar $$ \|u*h - u^0\| + \lambda TV(u) $$ más de $u$ por algún parámetro de $\lambda>0$. El primer término velarán por el cumplimiento de reconstrucción, mientras que el segundo término debe tanto a la regularización de la deconvolución y también impulsar la solución hacia la constante a trozos. El plazo $TV$ se refiere a la variación total y en el discreto y caso unidimensional es $TV(u) = \sum |u_{i+1}-u_i|$, es decir, la suma de la magnitud de las primeras diferencias. El parámetro $\lambda$ permite equilibrar ambos efectos - ya que no parecen tener ruido, un muy pequeño $\lambda$ debería funcionar.

2voto

Tobias Hermann Puntos 148

Sólo añadir lo que he encontrado como una solución para mí:

Ya me dijo que es fácil reconstruir los bordes de los casos con k < b:

convolution with result

Para los casos b < k < 2*b se puede utilizar la conmutatividad de la convolución operador: f*g = g*f

Entonces el mal se mide la distancia entre los dos extremos es K, pero lo interesante de valor (B) puede ser encontrado en la x de la longitud de la pendiente (en diagonal la parte del resultado). :-)

También me enteré de que ya hay multa implementaciones para la deconvolución con completamente conocido kernels hay. Este es decir, funciona como un encanto en mi caso: http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.deconvolve.html

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