Abordagens
Existem muitos métodos para a Deconvolução (ou seja, o operador de degradação é linear e invariante no tempo / espaço) por aí.
Todos eles tentam lidar com o fato de que o problema está mal resolvido em muitos casos.
Métodos melhores são aqueles que adicionam alguma regularização ao modelo dos dados a serem restaurados.
Pode ser modelos estatísticos (Priors) ou qualquer conhecimento.
Para imagens, um bom modelo é suave ou esparso dos gradientes.
Mas, para obter a resposta, será necessária uma abordagem paramétrica simples - Minimizar o erro dos mínimos quadrados entre os dados restaurados no modelo e as medições.
Modelo
O modelo de mínimos quadrados é simples.
A função objetivo em função dos dados é dada por:
f( x ) = 12∥ h ∗ x - y∥22
O problema de otimização é dado por:
argminxf( x ) = argminx1 12∥ h ∗ x - y∥22
xhy
x ∈ Rnh ∈ Rky∈ Rmm = n - k + 1
Esta é uma operação linear em espaço finito, portanto, pode ser escrita usando um formulário de matriz:
argminxf( x ) = argminx1 12∥ Hx - y∥22
Onde H∈ Rm × n é a matriz de convolução.
Solução
A solução dos mínimos quadrados é dada por:
x^= ( HTH)- 1HTy
Como pode ser visto, requer uma inversão da matriz.
A capacidade de resolver isso adequadamente depende do número da condição do operadorHTH que obedece cond( H) = cond( HTH)----------√.
Análise do número da condição
O que há por trás desse número de condição?
Pode-se responder usando Álgebra Linear.
Mas uma abordagem mais intuitiva, na minha opinião, seria pensar no domínio da frequência.
Basicamente, o operador de degradação atenua a energia, geralmente, de alta frequência.
Agora, como na frequência isso é basicamente uma multiplicação por elementos, alguém poderia dizer que a maneira mais fácil de invertê-la é a divisão por elemento pelo filtro inverso.
Bem, é o que é feito acima.
O problema surge com os casos em que o filtro atenua a energia praticamente em zero. Então temos problemas reais ...
Isso é basicamente o que o Número da Condição nos diz, quão difícil algumas frequências foram atenuadas em relação a outras.
Acima, era possível ver o número da condição (usando unidades [dB]) como uma função do parâmetro STD do filtro gaussiano.
Como esperado, quanto maior a DST, pior o número da condição, pois maior a DST significa LPF mais forte (os valores que caem no final são questões numéricas).
Solução Numérica
O conjunto de Gaussian Blur Kernel foi criado.
Os parâmetros são n = 300, k = 31 e m = 270.
Os dados são aleatórios e nenhum ruído foi adicionado.
No MATLAB, o Sistema Linear foi resolvido usando o pinv()
Pseudo Inverso baseado em SVD e o \
operador.
Como se pode ver, usando o SVD, a solução é muito menos sensível conforme o esperado.
Por que existe um erro?
Procurando uma solução (para a maior DST):
Como se pode ver, o sinal é restaurado muito bem, exceto no início e no fim.
Isso se deve ao uso da Valid Convolution, que nos diz pouco sobre essas amostras.
Ruído
Se adicionássemos ruído, as coisas pareceriam diferentes!
A razão pela qual os resultados eram bons antes se deve ao fato do MATLAB poder manipular o DR dos dados e resolver as equações, mesmo que eles tenham um número de condição grande.
Porém, um grande número de condições significa que o filtro inverso amplifica fortemente (para reverter a atenuação forte) algumas frequências.
Quando estes contêm ruído, significa que o ruído será amplificado e a restauração será ruim.
Como se pode ver acima, agora a reconstrução não funcionará.
Sumário
Se alguém souber exatamente o Operador de Degradação e o SNR for muito bom, métodos simples de desconvolução funcionarão.
A principal questão da desconvolução é a intensidade com que o operador de degradação atenua as frequências.
Quanto mais atenua, mais SNR é necessário para restaurar (esta é basicamente a ideia por trás do Wiener Filter ).
As frequências que foram definidas como zero não podem ser restauradas!
Na prática, a fim de obter resultados estáveis, deve adicionar alguns antecedentes.
O código está disponível no meu repositório StackExchange Signal Processing Q2969 GitHub .