Enfoques
Existen muchos métodos para la deconvolución (es decir, el operador de degradación es lineal e invariante en el tiempo / espacio).
Todos ellos tratan de lidiar con el hecho de que el problema está mal preparado en muchos casos.
Los mejores métodos son aquellos que agregan cierta regularización al modelo de los datos a restaurar.
Pueden ser modelos estadísticos (Priors) o cualquier conocimiento.
Para las imágenes, un buen modelo es una pieza suave o escasa de los gradientes.
Pero por el bien de la respuesta, se tomará un enfoque paramétrico simple: -Minimizar el error de mínimos cuadrados entre los datos restaurados en el modelo y las mediciones.
Modelo
El modelo de mínimos cuadrados es simple.
La función objetivo en función de los datos viene dada por:
f(x)=12∥h∗x−y∥22
El problema de optimización viene dado por:
argminxf(x)=argminx12∥h∗x−y∥22
Donde son los datos a restaurar, es el núcleo borroso (gaussiano en este caso) es el conjunto de medidas dadas.
El modelo supone que las mediciones se dan solo para la parte válida de la convolución. Es decir, si y entonces donde .h y x ∈ R n h ∈ R k y ∈ R m m = n - k + 1xhy
x∈Rnh∈Rky∈Rmm=n−k+1
Esta es una operación lineal en espacio finito, por lo tanto, se puede escribir usando una Forma Matriz:
argminxf(x)=argminx12∥Hx−y∥22
Donde es la matriz de convolución.H∈Rm×n
Solución
La solución de mínimos cuadrados viene dada por:
x^=(HTH)−1HTy
Como se puede ver, requiere una inversión de matriz.
La capacidad de resolver esto adecuadamente depende del número de condición del operador que obedece a . cond ( H ) = √HTHcond(H)=cond(HTH)−−−−−−−−−−√
Análisis de número de condición
¿Qué hay detrás de este número de condición?
Se podría responder con álgebra lineal.
Pero un enfoque más intuitivo, en mi opinión, sería pensarlo en el dominio de frecuencia.
Básicamente, el operador de degradación atenúa la energía de, generalmente, alta frecuencia.
Ahora, dado que en frecuencia esto es básicamente una multiplicación sabia de elementos, uno diría que la forma más fácil de invertirlo es la división sabia de elementos por el filtro inverso.
Bueno, es lo que se hizo arriba.
El problema surge con los casos en que el filtro atenúa la energía prácticamente en cero. Entonces tenemos problemas reales ...
Esto es básicamente lo que nos dice el número de condición, cuán fuerte se atenuaron algunas frecuencias en relación con otras.
Arriba se podía ver el número de condición (usando unidades [dB]) en función del parámetro Gaussian Filter STD.
Como se esperaba, cuanto mayor es la ETS, peor es el número de condición, ya que una ETS más alta significa un LPF más fuerte (los valores que bajan al final son problemas numéricos).
Solución numérica
Conjunto de Gaussian Blur Kernel fue creado.
Los parámetros son , y .
Los datos son aleatorios y no se agregaron ruidos.k = 31 m = 270n=300k=31m=270
En MATLAB, el Sistema Lineal se resolvió utilizando pinv()
el Pseudo Inverso basado en SVD y el \
operador.
Como se puede ver, usando el SVD la solución es mucho menos sensible como se esperaba.
¿Por qué hay un error?
Buscando una solución (para la ETS más alta):
Como se podía ver, la señal se restaura muy bien, excepto por el inicio y el final.
Esto se debe al uso de la convolución válida, que nos dice poco sobre esas muestras.
ruido
Si agregamos ruido, ¡las cosas se verían de otra manera!
La razón por la que los resultados fueron buenos antes se debe al hecho de que MATLAB podría manejar el DR de los datos y resolver las ecuaciones a pesar de que tenían un número de condición grande.
Pero un número de condición grande significa que el filtro inverso amplifica fuertemente (para revertir la atenuación fuerte) algunas frecuencias.
Cuando estos contienen ruido, significa que el ruido se amplificará y la restauración será mala.
Como se puede ver arriba, ahora la reconstrucción no funcionará.
Resumen
Si uno conoce exactamente al Operador de degradación y la SNR es muy buena, los métodos simples de desconvolución funcionarán.
El principal problema de la deconvolución es la intensidad con que el operador de degradación atenúa las frecuencias.
Cuanto más se atenúa, más SNR se necesita para restaurar (esta es básicamente la idea detrás del filtro Wiener ).
¡Las frecuencias que se establecieron en cero no se pueden restaurar!
En la práctica, para tener resultados estables debería agregar algunos antecedentes.
El código está disponible en mi StackExchange Signal Processing Q2969 Repositorio de GitHub .