Um filtro que pode ser usado para sinais digitais como processamento de áudio, vídeo ou imagem pode ser definido usando uma matriz ("kernel") que pesa a área circundante (esta é uma descrição que li nas notas de aula de outra pessoa).
O kernel define um filtro de erosão .
Você poderia me dizer como esse kernel é aplicado, por exemplo, a uma imagem (e, portanto, a um campo 2D de pixels)? Agradeço antecipadamente!
filters
image-processing
muffel
fonte
fonte
Respostas:
Seu filtro de corrosão está incorreto. O link que você forneceu diz que deve encontrar o máximo de pixels adjacentes, e sua matriz não faz isso. Em vez disso, fornece a soma dos pixels adjacentes. Se você normalizar o resultado (uma vez que todas essas adições aumentarão o brilho), você descobrirá que seu filtro calcula a média uniforme dos pixels adjacentes.
O que você geralmente faria é pegar sua imagem e envolver blocos de 3x3 (ou por maior que seja o filtro) com seu filtro. Você também pode fazer isso em paralelo, para obter velocidade.
fonte
No processamento de imagens, para aplicar esse filtro, você iteraria sobre todos os pixels da imagem de entrada e, em cada etapa, colocaria a máscara de filtro sobre a imagem, para que seu centro esteja localizado no pixel atual. Você "avalia" os pixels na vizinhança que são cobertos pela máscara de alguma forma e grava o resultado novamente no pixel atual.
Para uma convolução normal, você multiplica cada elemento do filtro pelo valor do pixel correspondente, soma os resultados e escreve a soma no pixel atual.
A erosão é uma operação morfológica e você a implementaria (em uma imagem binária), verificando se todos os valores "1" da sua máscara estão sobre os pixels "1" na imagem. Nesse caso, você escreve um "1" no pixel atual (caso contrário, um "0").
Nos dois casos, leia sempre os pixels de entrada de uma versão umodificada da imagem (em vez de modificar a imagem no local).
fonte