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?
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?
Respostas:
Se você tiver um vetor de dados, , que é composto de elementos , então a convolução linear opera sobre eles em ordem, começando com e terminando com .
Imagine que o vetor de dados é representado por um pedaço de papel com a elementos escritos em ordem. Agora, imagine formar um pedaço de papel em um círculo tocando no final (onde está escrito) até o início (onde está 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 ""e""são 0), enquanto que com a convolução circular, agrupamos os dados para torná-los periódicos (ie"" é igual a e "" é igual a )
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.
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:
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.