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?


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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.