Domanda

Durante l'utilizzo MATLAB 2D filtro funcion filter2(B,X) e la funzione di convoluzione conv(X,B,''), vedo che la funzione è essenzialmente filter2 convoluzione 2D ma con una rotazione di 180 gradi della matrice coefficienti del filtro. In termini di uscite di filter2 e conv2, vedo che la relazione di seguito vale:

 output matrix of filter2 = each element negated of output of conv2

EDIT: ero errato; la relazione di cui sopra non vale in generale, ma ho visto che per un paio di casi. In generale, le due matrici di uscita sono indipendenti, a causa del fatto che 2 kernel completamente diverse si ottengono sia che sono utilizzati per convoluzione.

I capire come viene eseguita convoluzione 2D. Quello che voglio capire è l'implicazione di questo in termini di elaborazione delle immagini. Come faccio a visualizzare ciò che sta succedendo qui? Cosa significa per ruotare una matrice di coefficienti di filtro di 180 gradi?

È stato utile?

Soluzione

Comincerò con una breve discussione di convoluzione , utilizzando la seguente immagine da Wikipedia :

alt text

Come illustrato, convolvendo due funzioni 1-D comporta riflette uno di essi (cioè il nucleo di convoluzione), facendo scorrere i due funzioni l'una sull'altra, e calcolando l'integrale del loro prodotto.

Quando convolvendo matrici 2-D, il nucleo di convoluzione viene riflessa in entrambe le dimensioni , e quindi la somma dei prodotti viene calcolato per ogni combinazione unica sovrapposizione con l'altra matrice. Questa riflessione delle dimensioni del kernel è un passo intrinseca della convoluzione.

Tuttavia, quando si esegue il filtraggio ci piace pensare alla matrice filtraggio come se fosse un "stencil" che è direttamente disposto come è (cioè senza riflessioni) oltre la matrice da filtrare. In altre parole, si desidera eseguire un'operazione equivalente a convoluzione, ma senza riflettere le dimensioni della matrice di filtraggio. Per annullare la riflessione eseguita durante la convoluzione, possiamo quindi aggiungere una riflessione ulteriore delle dimensioni della matrice del filtro prima di effettuare la convoluzione.

Ora, per ogni data 2-D matrice A, è in grado di dimostrare a te stesso che lanciando entrambe le dimensioni è equivalente alla rotazione della matrice di 180 gradi utilizzando le funzioni di FLIPDIM e ROT90 in MATLAB:

A = rand(5);  %# A 5-by-5 matrix of random values
isequal(flipdim(flipdim(A,1),2),rot90(A,2))  %# Will return 1 (i.e. true)

Questo è il motivo per cui filter2(f,A) è equivalente a conv2(A,rot90(f,2),'same'). Per illustrare ulteriormente come ci siano diverse percezioni di matrici di filtro contro i kernel di convoluzione, possiamo guardare a ciò che accade quando si applica FILTER2 e CONV2 allo stesso insieme di matrici f e A, definito come segue:

>> f = [1 0 0; 0 1 0; 1 0 0]  %# A 3-by-3 filter/kernel
f =
     1     0     0
     0     1     0
     1     0     0
>> A = magic(5)  %# A 5-by-5 matrix
A =
    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

Ora, quando si esegue il calcolo B = filter2(f,A); dell'elemento uscita B(2,2) può essere visualizzato allineando l'elemento centrale del filtro con A(2,2) e moltiplicando elementi sovrapposti:

    17*1  24*0   1*0   8    15
    23*0   5*1   7*0  14    16
     4*1   6*0  13*0  20    22
    10    12    19    21     3
    11    18    25     2     9

Poiché il fuori matrice del filtro vengono ignorati, possiamo vedere che la somma dei prodotti sarà 17*1 + 4*1 + 5*1 = 26. Si noti che qui stiamo semplicemente posando f in cima A come un "stencil", che è come matrici filtranti sono percepiti per operare su una matrice.

Quando eseguiamo B = conv2(A,f,'same');, il calcolo della produzione dell'elemento B(2,2) appare invece in questo modo:

    17*0  24*0   1*1   8    15
    23*0   5*1   7*0  14    16
     4*0   6*0  13*1  20    22
    10    12    19    21     3
    11    18    25     2     9

e la somma dei prodotti saranno invece 5*1 + 1*1 + 13*1 = 19. Si noti che quando f è considerato un nucleo di convoluzione, dobbiamo capovolgere sue dimensioni prima della posa in cima A.

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