Iremos efetuar processamento de imagens utilizando a Convolution Matrix para detecção de bordas fornecido pela biblioteca GD.
Exceto pelos pixels nas bordas, cada pixel em uma imagem é cercado por oito outros pixels. Efeitos como desfoque ou detecção de borda são calculados para cada pixel, dependendo do valor desse pixel e dos valores dos pixels adjacentes. Na detecção de bordas, por exemplo, uma mudança brusca na cor indica que alcançamos a borda de algum objeto na imagem. Por exemplo, uma mudança repentina de branco para marrom na imagem abaixo irá significar o limite do copo e da mesa.
Uma maneira fácil de especificar esse tipo de filtro é com o que é chamado de “Convolution Matrix “. O GD fornece a função imageconvolution ($image, $matrix, $div, $offset) para aplicar uma matriz de convolução 3×3 a uma imagem de recurso de $image.
O parâmetro $matrix é uma matriz de três matrizes, cada uma contendo três valores flutuantes – ou seja, é uma matriz 3×3.
O primeiro elemento do primeiro array é multiplicado pelo valor de cor do pixel superior esquerdo.
Da mesma forma, o segundo elemento da primeira matriz é multiplicado pelo valor da cor do pixel diretamente na parte superior do pixel central. A cor final do pixel é obtida adicionando o resultado de todas essas multiplicações e dividindo-o por $div para normalização. A normalização geralmente mantém o valor final da cor abaixo de 255.
Como vimos, o parâmetro $div é usado como um divisor para o resultado da convolução para normalizar seu valor. O parâmetro $offset, por outro lado, é usado para especificar um valor de deslocamento para todas as cores.
Abaixo o código:
E o resultado: