Interpolazione per trovare il massimo locale

Messaggioda asterix45 » 29/03/2011, 17:48

Salve a tutti, sono nuovo del forum, sto studiando il rilevamento dei contorni di un'immagine e mi sto impegnando per risolvere un problema che mi attanaglia.

Per rilevare i contorni di una immagine 3D sto provando a realizzare l'algoritmo di canny in 3D tramite matlab
http://unaviolarosa.altervista.org/files/edge_detection.pdf

Il filtro proposto da questo algoritmo è ben approssimato dalla derivata di Gaussiana secondo x, y e z. Nel mio script io

[list=]
calcolo una approssimazione della derivata di Gaussiana tramite meshgrid
faccio la convoluzione dell'immagine di partenza prima con una Gaussiana, poi con la matrice calcolata al passo precedente
dovrei calcolare i massimi locali dell'oggetto ottenuto al passo precedente secondo il gradiente di crescita
[/list]

ed è qui che mi fermo perché pur calcolando il gradiente non riesco a seguire l'algoritmo 2D ed a riportarlo nel 3D.

Nel pdf proposto in precedenza ho trovato questa dicitura:
Per trovare i pixel dove le norme del gradiente sono massimi locali abbiamo applicato l'interpolazione, tale funzione in MATLAB è interp2.


Ora dato che esiste la funzione interp3 in matlab vorrei utilizzare un approccio simile a questo, ma non so come utilizzare l'interpolazione per calcolare i massimi di una matrice...

Qualcuno sa aiutarmi??

Se può servire inserisco le parti salienti del codice


Codice: Seleziona tutto
    width=7;

    [x,y,z]=meshgrid(-width:width,-width:width,-width:width);
    dgau3Dx = -x.*exp(-(x.*x+y.*y+z.*z)/(2*sigma^2))/((2*pi)^(3/2)*sigma^5);
    dgau3Dy = -y.*exp(-(x.*x+y.*y+z.*z)/(2*sigma^2))/((2*pi)^(3/2)*sigma^5);
    dgau3Dz = -z.*exp(-(x.*x+y.*y+z.*z)/(2*sigma^2))/((2*pi)^(3/2)*sigma^5);

   
    %apply directional derivatives
    Ix = imfilter(I, dgau3Dx, 'conv','replicate');   
    Iy = imfilter(I, dgau3Dy, 'conv','replicate');
    Iz = imfilter(I, dgau3Dz, 'conv','replicate');

    %operatore Derivate of Gaussian
    DroG=(exp(-(x.*x+y.*y+z.*z)/(2*sigma^2))/(2*pi*sigma^4)).*(-x-y-z);

[/url]
asterix45
Starting Member
Starting Member
 
Messaggi: 1
Iscritto il: 29/03/2011, 17:19

Torna a Analisi Numerica e Ricerca Operativa

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti