A operação de convolução, simplificando, é a combinação do produto elemento-elemento de duas matrizes. Contanto que essas duas matrizes concordem em dimensões, não deve haver um problema, e assim eu posso entender a motivação por trás da sua consulta.
A.1 No entanto, a intenção da convolução é codificar a matriz de dados de origem (imagem inteira) em termos de um filtro ou kernel. Mais especificamente, estamos tentando codificar os pixels na vizinhança dos pixels âncora / fonte. Dê uma olhada na figura abaixo:
Normalmente, consideramos cada pixel da imagem de origem como âncora / pixel de origem, mas não somos obrigados a fazer isso. De fato, não é incomum incluir um passo, onde os pixels âncora / fonte são separados por um número específico de pixels.
Ok, então qual é o pixel de origem? É o ponto de ancoragem no qual o kernel está centralizado e estamos codificando todos os pixels vizinhos, incluindo o pixel de ancoragem / origem. Como o kernel é simétrico (não simétrico nos valores do kernel), há um número igual (n) de pixels em todos os lados (4- conectividade) do pixel âncora. Portanto, qualquer que seja esse número de pixels, o comprimento de cada lado do nosso núcleo simétrico é 2 * n + 1 (cada lado da âncora + o pixel da âncora) e, portanto, os filtros / núcleos são sempre de tamanho ímpar.
E se decidíssemos romper com a 'tradição' e usarmos núcleos assimétricos? Você sofreria erros de alias e, portanto, não fazemos isso. Consideramos o pixel a menor entidade, ou seja, não existe um conceito de sub-pixel aqui.
A.2 O problema dos limites é tratado com diferentes abordagens: alguns o ignoram, outros zero, outros refletem o espelho. Se você não deseja calcular uma operação inversa, ou seja, deconvolução, e não está interessado na reconstrução perfeita da imagem original, não se preocupa com a perda de informações ou a injeção de ruído devido ao problema de contorno. Normalmente, a operação de conjunto (conjunto médio ou conjunto máximo) removerá os artefatos de limite de qualquer maneira. Portanto, fique à vontade para ignorar parte do seu 'campo de entrada', sua operação de pool fará isso por você.
-
Zen de convolução:
No domínio de processamento de sinais da velha escola, quando um sinal de entrada era convolvido ou passado através de um filtro, não havia como julgar a priori quais componentes da resposta convolvida / filtrada eram relevantes / informativos e quais não eram. Conseqüentemente, o objetivo era preservar os componentes do sinal (todos) nessas transformações.
Esses componentes de sinal são informações. Alguns componentes são mais informativos que outros. A única razão para isso é que estamos interessados em extrair informações de nível superior; Informação pertinente para algumas classes semânticas. Portanto, os componentes de sinal que não fornecem as informações em que estamos especificamente interessados podem ser removidos. Portanto, diferentemente dos dogmas da velha escola sobre convolução / filtragem, somos livres para agrupar / podar a resposta de convolução como quisermos. A nossa maneira de fazer isso é remover rigorosamente todos os componentes de dados que não estão contribuindo para melhorar nosso modelo estatístico.