Estou escrevendo programa (Qt widgets / c ++) para remover o ruído das imagens. Como método de denoising, selecionei o método de meios não locais . Este método tem uma qualidade incrível de imagens restauradas (é por isso que é o único método de denoising no OpenCV), mas tem um custo de computação enorme , então eu fiz muitas variantes modificadas desse método (algumas com multithreading, outras algorítmicas). Mas estou tendo problemas com o que envolve a FFT
Eu segui todas as etapas deste artigo (apenas uma página, 1430) e tudo funciona perfeitamente, exceto a parte FFT, existem apenas duas linhas sobre isso no jornal e não consigo entender, como usar fft
Esse problema me incomoda há meses, qualquer ajuda ou insight seria muito apreciado.
Versão resumida da pergunta: Como posso obter a soma da diferença quadrática de duas matrizes na imagem (a na parte superior e a no meio, os valores são cores) rapidamente? (O (n ^ 2) é um custo enorme, existem muitas operações desse tipo, acima dos estados, que podem ser feitas via FFT com O (n * log n) (diz que essas duas matrizes formam alguma convolução circular) )
Respostas:
O truque dentro do papel é o seguinte:
A transformação de Fourier é obviamente uma transformação 2D, pois você está trabalhando com dados 2D. O que você obtém para um determinado patch é uma matriz 2D de valores complexos.
Notas Adicionais
Na minha opinião, este artigo não é a melhor estratégia de aceleração de NL-significa. As experiências que fiz em 2007/2008 mostram que a pré-seleção de patches é melhor (em termos de velocidade e qualidade dos resultados). Comecei a blogar sobre isso aqui , mas infelizmente estou procurando tempo para terminar as postagens.
Os documentos originais de NL significa mencionar implementações em blocos que podem ser interessantes. Existem basicamente duas maneiras de implementar meios NL:
A primeira impolementação é a abordagem original, porque em 2005 as CPUs de memória e multicore eram caras. Por outro lado, eu escolhi o número 2 em hardware recente nos últimos 2 anos. Depende do tamanho típico da imagem e se você deseja calcular transformações de domínio como DFT / DCT (como no artigo proposto e no BM3D).
fonte