Visao Computacional - filtros

Elas são chamadas de kernels, matrizes de convolução, filtros, máscaras. São algotítimos simples que isoladamente não possuem grande relevância, mas executados em escala no processamento de uma imagem por exemplo, fazem emergir padrões ocultos. Aos analistas de dados e cientistas de plantão nada novo.

Se já usou o photoshop, gimp e outras ferramentas gráficas você conhece o que vou apresentar. Ainda sim sairá deste artigo com novos termos, mais entendimento e novas perspectivas.


Filtros são fundamentais para o processamento de sinais em geral. Não menos para a visão computacional. Para identificar um carro, um olho, uma pessoa, uma cabeça, realizamos computacionalmente (ou em nossas mentes) uma série de transformações automáticas a fim de determinar encerramento, cores, padrões, linhas, pontos, marcas, contornos, diferenças, sombras e por aí a fora. Esta é a aprensetação destas funcionalidades intrinssecas e que passam quase despercebidas.

Pois bem. O que apresento aqui começa com um pequeno icone com o rosto de uma antiga musa: Shakira. Eu era moleque ainda quando escutava Pies Descalzos, ahh bons tempos.

Eis aqui a imagem original (24 x 24 pixels):

No fim da postagem, encontrará o link para o código fonte Python que usa o OpenCv, para operar a imagem e todas as filtragens, é realmente muito simples e seria um disperdício de tempo da minha parte e de vós leitor, repetír o código em partes. Assim, vou extender sobre o formato computacional utilizado em cada um dos Filtros.

Kernel, Matriz de Transformação ou Máscara

Todos esses nomes são kernels. Kernel é um calculo matricial (multiplicação e soma) que varia em tamanho, aplicado a uma imagem. Geralmente implica em aplicar mudanças a um ponto e seus pixels vizinhos, ressaltando características específicas. Se você possuísse capacidade de zoom de 20 vezes acoplados em seus olhos veria os pixels como a imagem abaixo.


Segmento da imagem e um kernel que será aplicado a este segmento.Lembremos-nos que cada pixel colorido ou PB possui um código de cor correspondente. 
O kernel implicará na mudança das características de cor da imagem, 
podendo ser reaplicado à imagem ou separado em uma máscara.

Magnificação

Gaussiana
Um kernel gaussiano é aplicado a cada pixel irradiando para os vizinhos.  
Se perceber, verá que é a magnificação que os traços do rosto são melhorados.
O Kernel Gaussiano basicamente espalha a tonalidade 
do pixel em todas as direções circularmente.


kernel gaussiano 5 x 5



Linear
Um kernel linear, vertical e horizontal é aplicado para melhor espalhar as 
cores durante a expansão da imagem.


Area
Um pixel é amplicado proporcionalmente a expansão da imagem, mantendo sua área. 

Bi-Cubica
Semelhante ao kernel gaussiano este algoritimo, espalha a intensidade do pixel aos seus vizinhos circularmente. 
Porém ele obedece uma intensidade cubica (x^2) que dá mais ênfase as cores mais 
fortes. Aparenta maior nitidez e mantém melhor os contornos das linhas.

A partir daqui as operações morpholócas são realizadas sobre a ampliação linear da imagem aumentada.

Operações Morphológicas


Erosão
O Kernel  homgeiniza as cores de maior intensidade tornando-as predominantes. 
É possível claramente identificar a posição dos olhos, boca e nariz.


Fechamento
O filtro aqui irá suavizar à esquerda e reforçar as cores a direita. 
Ao mesmo tempo que suaviza a imagem, realiza o reforço das cores. 
Útil por ser rápido e muito utilizado antes de reducação de limiaridade.

Edges / Cantos
A base do cálculo da detecção de bordas é a famosa matriz identidade que aprendemos no colegial.
Variações desta são desenvolvidas na intenção de detectar com mais detalhes as bordas.


Contornos
Kernel de contorno que ressalta a curva visual que une todos os pontos 
contínuos com a mesma cor ou intensidade. 
Destaque para a capacidade incrível de extrair características tão complexas 
a partir de uma imagem inicialmente mínma !



Gradiente
Kernel final que representa a diferença dos kernels de dilatação e a erosão.


Todos esses kernels e operações podem ser encadeados entre si ou repetidos para ressaltar ainda mais características interessantes. Podemos aplicar por exemplo a identificação de contornos após o gradiente e teríamos quase que uma segmanetação de área por predominância de cores, conforme pode ser visto abaixo:


Ou a busca dos cantos, após a aplicação do filtro básico de contornos:



As técnicas variam e somente a experiência e prática vão facilitar o caminho entre a informação que você precisa extrair e os filtros que precisa aplicar.

O link para o código fonte encontra-se no repo do github.

Não exite em conectar-se a mim no linkedin !.