Domanda

So che questo non è molto rilevante per la programmazione, ma ho bisogno di sapere come funziona una matrice di convoluzione per una funzione PHP GD. Ho cercato molto su Google, ma non riesco a trovare nulla che spiega bene.

È stato utile?

Soluzione

Sono andato in un carico della teoria dietro circonvoluzione filtri qui:

Come faccio a Controllo sfocatura un'immagine senza utilizzare alcuna funzione gaussiana in-built?

Altri suggerimenti

L'operazione sostituisce ogni pixel con la media ponderata dei pixel intorno, dove i pesi sono dati dalla matrice. Ecco un esempio di matrice di convoluzione:

1 1 1
1 1 1
1 1 1

Quello che fa è sostituire ogni pixel con il valore medio del blocco 3x3 centrata su quel pixel. Ecco un altro:

0 0 0
0 1 0
0 0 0

Questa matrice non fa niente, ti dà la schiena originale.

I pesi possono essere negativi, troppo. Questa matrice sottrae il valore medio dei pixel vicini al pixel:

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

matrici di convoluzione permettono di fare fine-tuned sfocatura e affilatura effetti. È possibile ottimizzare la direzionalità e la risposta in frequenza di filtri utilizzando una matrice di convoluzione, se è abbastanza grande. Tuttavia, di solito è utilizzato per un rapido-n-sporco sfocatura e nitidezza.

Non so specificamente per PHP, ma in generale una matrice di convoluzione viene utilizzato per implementare certi tipi di effetti di elaborazione delle immagini.

Un semplice esempio tratto dal manuale di PHP su GD http: // www .php.net / manuale / it / function.imageconvolution.php :

Diciamo che avere una matrice in questo modo:

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

Quando si applica la matrice di convoluzione a un'immagine, quindi per ogni pixel trova a (x, y) dell'immagine, il pixel corrispondente in uscita diventa:

$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];

In altre parole, la matrice di convoluzione viene utilizzato per calcolare ciascun pixel risultato come una combinazione lineare del pixel sorgente ei pixel circostanti.

Il parametro divisore è utilizzato per dividere il risultato intero da qualcosa (in genere la somma di tutti i valori della matrice) e viene utilizzata per aggiungere un termine costante al valore di uscita finale l'offset.

matrice di convoluzione funziona su ogni canale del pixel dell'immagine in modo indipendente.
Quindi devi conoscere i canali prima.
Quindi, è possibile "giocare" con questa matrice in modo interattivo se si dispone di un Photoshop: passare al menu Filtri-> Altri-> Custom. L'elemento centrale della matrice rappresenta pixel corrente, tutti gli altri rappresentano pixel circostanti. E non dimenticare il valore di "Scale" in fondo.
Credo che, si può facilmente capire il modo in cui funziona questa matrice.
Si può avere uno sguardo a questa cosa qui . Esso descrive la matrice di convoluzione pure.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top