Convolução circular e linear

7

Qual é a diferença entre convolução circular e linear? Quando eu escolheria um sobre o outro? No processamento de imagens, onde um filtro é aplicado a uma imagem com uma máscara, que tipo de convolução devo escolher?

Juan
fonte
Recomendo que você peça aos moderadores que migrem esta pergunta para o site de processamento de sinais dsp.SE
Dilip Sarwate
Talvez você possa mexer com o Mathematica Demo Regards
mmm, entendo mas ... eu sempre leio que convolução circular é usada para sinalizar com suporte finito, mas também é usada quando o sinal tem periodicidade. Eu não entendo isso porque um sinal com suporte finito nem sempre tem periodicidade, por exemplo, imagens #
317 Juan Juan

Respostas:

7

Se você tiver um vetor de dados, d, que é composto de elementos d1,d2,...dN, então a convolução linear opera sobre eles em ordem, começando com d1 e terminando com dN.

Imagine que o vetor de dados d é representado por um pedaço de papel com a Nelementos escritos em ordem. Agora, imagine formar um pedaço de papel em um círculo tocando no final (ondedN está escrito) até o início (onde d1está escrito). Isso implica convolução circular. Na prática, convolução linear e convolução circular são quase as mesmas, a diferença acontecendo no início e no final da convolução linear. Na convolução linear, você assume que existem zero antes e depois dos seus dados (ou seja, assumimos que "d0"e"dN+1"são 0), enquanto que com a convolução circular, agrupamos os dados para torná-los periódicos (ie"d0" é igual a dN e "dN+1" é igual a d1)

Os mesmos princípios são válidos para matrizes multidimensionais. Para convolução linear, existe um início e um fim definidos para cada eixo, com zeros assumidos antes e depois. Para convolução circular, os dados são agrupados em cada eixo.

When would I choose one over the other?

Com algumas exceções muito raras, não "escolhemos" a convolução circular. Quase sempre queremos convolução linear. A razão pela qual as convoluções circulares surgem tanto quanto ocorre é porque convoluções via FFT (FFT, FFT multiplicada, FFT inversa) são convoluções circulares, não lineares.

Jim Clay
fonte
Se eu usei convolução linear sem zeros no preenchimento, o nome do problema no limite é alternativo? e outra pergunta: o que tem uma melhor performance (computacional) linear ou circular?
Juan
Com a convolução linear, você não precisa preencher com zeros - isso está implícito na maneira como você faz o cálculo. Com a convolução circular, você aplica zeros para produzir os mesmos resultados que a convolução linear.
Jim Clay
Para pequenos núcleos de convolução, a convolução linear tem o melhor desempenho. Para grandes núcleos de convolução, a convolução circular via FFT tem o melhor desempenho. Existe a complicação de precisar zerar para obter a resposta certa.
Jim Clay
agora estou confuso porque, na resposta a seguir, diga "se você preencher os valores ausentes com zeros, então permanecerá em convolução linear", mas você diz "Com a convolução linear, você não precisa realmente zeros"
Juan
Você pode fazer o encurtamento do kernel de convolução com convolução linear ou circular. É uma questão separada. O preenchimento zero é apenas para convolução circular.
Jim Clay
6

Quando você implementa a convolução nas imagens, é necessário cuidar dos valores dos limites, porque em algum momento sua máscara de convolução sairá "da imagem" para processar. Dependendo de como você preenche os valores ausentes, irá determinar se você implementa ou não a convolução circular:

  • se você preencher os valores ausentes com 0, você permanecerá em convolução linear
  • se você preencher os valores ausentes por periodicidade, provavelmente usará convolução circular.

Observe que, se você implementar a convolução no domínio de Fourier, não terá outra escolha senão convolução circular, porque o algoritmo FFT periodicamente implicará em suas imagens.

- EDITAR -

A convolução é frequentemente implementada no domínio de Fourier (=> convolução circular) porque é significativamente mais rápida na maioria dos casos, graças ao algoritmo FFT. Existem algoritmos de convolução linear rápida, mas geralmente são reservados para o caso do kernel separável, no qual é possível filtrar a imagem horizontal e verticalmente separadamente, o que também gera menos operações do que uma implementação 2D ingênua.

sansuiso
fonte
3
+1. Você pode preencher a imagem com zeros suficientes para evitar essa "periodização" de Fourier.
Andrei Rubshtein
Qual é a vantagem de um ou outro?
Juan
Conv. Circular é mais rápido graças à FFT. Veja a resposta editada.
Sansuiso
agora estou confuso porque, na resposta a seguir, diga "Com convolução linear, você não precisa realmente zeros", mas você diz "se você preencher os valores ausentes com zeros, permanecerá em convolução linear"
Juan
Eu acho que a primeira parte do comentário de Jim Clay está correta: a convolução linear normalmente evita o preenchimento explícito com zeros, mas é um artefato de implementação (se você não verificar os limites, precisará alocar uma imagem grande e usar o preenchimento). As abordagens baseadas em FFT podem usar preenchimento para i) execução mais rápida (porque existem algoritmos ainda mais rápidos para alguns tamanhos de imagem bons) ou ii) para zoom de imagem (isso é equivalente a interpolação sincera). A convolução circular (incluindo a convolução baseada na FFT) não depende de preenchimento por si só.
Sansuiso