Pergunta

Eu sei que isso não é muito relevante para a programação, mas eu preciso saber como uma matriz de convolução trabalha para uma função PHP GD. Eu procurei um monte no Google, mas não consigo encontrar nada que explica bem.

Foi útil?

Solução

Eu entrei em uma carga da teoria por trás convolução filtra aqui:

Como posso Gaussian Blur uma imagem sem o uso de quaisquer funções gaussianas embutido?

Outras dicas

A operação substitui cada pixel com a média ponderada dos pixels em torno dele, em que os pesos são dados pela matriz. Aqui está uma matriz exemplo convolução:

1 1 1
1 1 1
1 1 1

O que isto faz é substituir cada pixel com o valor médio do bloco 3x3 centrada naquele pixel. Aqui está outra:

0 0 0
0 1 0
0 0 0

Esta matriz não faz nada, dá-lhe a volta inicial.

Os pesos pode ser negativo, também. Esta matriz subtrai o valor médio dos pixels ao lado de um pixel:

 0 -1  0
-1  4 -1
 0 -1  0

Convolução matrizes permitem que você faça borrar e efeitos afiar afinado. Você pode ajustar a direção e a resposta dos filtros usando uma matriz de convolução, se é grande o suficiente frequência. No entanto, geralmente é usado para borrar-n-sujo rápido e nitidez.

eu não sei especificamente para PHP, mas de um modo geral matriz de convolução é usado para implementar certos tipos de efeitos de processamento de imagem.

Um exemplo simples retirado do manual do PHP em GD http: // www .php.net / manual / en / function.imageconvolution.php :

Vamos dizer que você tem uma matriz como este:

$M = array(array( 2,  0,  0),
           array( 0, -1,  0),
           array( 0,  0, -1));

Quando você aplicar essa matriz de convolução a uma imagem, em seguida, para cada pixel localizado em (x, y) na imagem, o pixel correspondente na saída torna-se:

$I = $in_image;
$out_image[x,y] = $I[x-1,y-1]*$M[0][0] + $I[x,y-1]*$M[0][1] + $I[x+1,y-1]*$M[0][2]
                + $I[x-1,y]  *$M[1][0] + $I[x,y]  *$M[1][1] + $I[x+1,y]  *$M[1][2]
                + $I[x-1,y+1]*$M[2][0] + $I[x,y+1]*$M[2][1] + $I[x+1,y+1]*$M[2][2];

Em outras palavras, a matriz de convolução é usado para calcular cada pixel resultado como uma combinação linear dos pixels de fonte e os pixels que o rodeiam.

O parâmetro divisor é usada para dividir todo o resultado por alguma coisa (geralmente é a soma de todos os valores na matriz) e o deslocamento é usado para adicionar um termo constante para o valor da produção final.

matriz Convolution funciona em cada canal do pixel da imagem de forma independente.
Então você tem que aprender sobre canais primeiro.
Então, você pode "brincar" com esta matriz de forma interativa se você tem um Photoshop: vá ao menu Filtros-> Outro-> Personalizado. O item central da matriz representa pixel atual, todos os outros representam em torno pixels. E não se esqueça sobre o valor "Scale" na parte inferior.
Eu acho que, você pode facilmente compreender a forma como este matriz obras.
Você pode ter um olhar para esta coisa aqui . Ele descreve a matriz de convolução também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top