2016-10-03 2 views
0

W/r au code ci-dessous: (Code est Matlab, mais il est vraiment une question d'algorithme)Shoud un noyau de lissage 2d/image Savitsky-Golay être le même lors de l'utilisation des termes croisés ou non

Taille - la la taille désirée du noyau convolution image

polyDegree - degré de polynôme

crossterms - booléen ==> s'il devrait y avoir des termes croisés

Ainsi, si, par exemple, polyDegree = 2 et crossterms est faux, la matrice de conception,

A = [1, X, X^2, Y, Y^2]

Si les crossterms est vrai, alors

a = [1, y, y^2, X, XY, X^2]

note, il y avait un cube, il y aurait beaucoup des conditions plus transversales (par exemple, X^2Y, Y^2X). Cependant, j'ai essayé ceci pour les filtres 7x7 et 5x5 pour les quadratiques et les cubes, et pour chaque combinaison, le lissage SG Kernel est le même sans tenir compte des crossterms (c'est-à-dire vrai comme faux). EDIT - En fait, pour le même filtre Size, il donne le même résultat quel que soit le degré. Ainsi, par exemple, une taille = 7 filtre avec polyDegree == 2 et crossterms = 0 donne le même filtre SG (comme indiqué au bas) pour polyDegree = 3 et crossterms = 1! **

Est ou est-ce que je me fous?

x = -(Size(2)-1)/2 :(Size(2)-1)/2; % e.g Size(2)==5==>x=-2:2 
y = -(Size(1)-1)/2 :(Size(1)-1)/2; 
[x,y]=meshgrid(x,y); 
x=x(:); 
y=y(:); 

if crossterms 
    A=[]; 
    for kx=0:PolyDegree 
     for ky=0:(PolyDegree-kx) 
      A=[A x.^kx .* y.^ky]; 
     end 
    end 
else 
    A = ones(size(x)); 
    for k=1:1:PolyDegree 
     A=[A x.^k]; 
    end 
    for k=1:1:PolyDegree 
     A=[A y.^k]; 
    end 
end  
C=inv(A'*A)*A'; % == pinv(A) 
h=reshape(C(:,1),Size(1),Size(2)); % h=first row should be SG smoothing kernel. 

Ainsi, par exemple, quel que soit crossterms, et/ou même si je spécifié un 2 ou 3 polynôme degré, une taille de 7x7 bicubique (polyDegree == 3) donne:

h = 

    -0.0476 -0.0136 0.0068 0.0136 0.0068 -0.0136 -0.0476 
    -0.0136 0.0204 0.0408 0.0476 0.0408 0.0204 -0.0136 
    0.0068 0.0408 0.0612 0.0680 0.0612 0.0408 0.0068 
    0.0136 0.0476 0.0680 0.0748 0.0680 0.0476 0.0136 
    0.0068 0.0408 0.0612 0.0680 0.0612 0.0408 0.0068 
    -0.0136 0.0204 0.0408 0.0476 0.0408 0.0204 -0.0136 
    -0.0476 -0.0136 0.0068 0.0136 0.0068 -0.0136 -0.0476 

Répondre

0

de https://en.wikipedia.org/wiki/Savitzky%E2%80%93Golay_filter

:

En général, les polynômes de degré (0 et 1), [note 3] (2 et 3), (4 et 5) etc. donnent les mêmes coefficients de lissage et même des dérivés. Les polynômes de degré (1 et 2), (3 et 4) etc. donnent les mêmes coefficients pour les dérivés impairs.

donc 2 et 3 degrés étaient les mêmes mais 4 était différent, mais alors 4 était le même que 5 avec le même réglage d'entrecroisement. Cependant, contrairement aux degrés 2 et 3, 4 et 5 étaient différents lorsque le réglage de l'intersection était désactivé. Il n'est toujours pas certain que les biz de mots croisés soient identiques (c'est-à-dire qu'ils génèrent le même filtre si les crossters sont 1 de 0). Note: La fonction sgsdf_2da appelée ci-dessous correspond au code ci-dessus (dans ma question). La fonction a l'API sgsdf_2da (Size, PolyDegree,, crossterms).Une taille scalaire ==> un filtre carré de taille x taille et des "crossterms", comme dans le code ci-dessus, est vrai pour avoir des termes croisés polynomiaux, faux pour non.

>> hi=sgsdf_2da(7,2,0,0) 

    hi = 

     -0.0476 -0.0136 0.0068 0.0136 0.0068 -0.0136 -0.0476 
     -0.0136 0.0204 0.0408 0.0476 0.0408 0.0204 -0.0136 
     0.0068 0.0408 0.0612 0.0680 0.0612 0.0408 0.0068 
     0.0136 0.0476 0.0680 0.0748 0.0680 0.0476 0.0136 
     0.0068 0.0408 0.0612 0.0680 0.0612 0.0408 0.0068 
     -0.0136 0.0204 0.0408 0.0476 0.0408 0.0204 -0.0136 
     -0.0476 -0.0136 0.0068 0.0136 0.0068 -0.0136 -0.0476 

>> hi=sgsdf_2da(7,2,0,1) 

hi = 

    -0.0476 -0.0136 0.0068 0.0136 0.0068 -0.0136 -0.0476 
    -0.0136 0.0204 0.0408 0.0476 0.0408 0.0204 -0.0136 
    0.0068 0.0408 0.0612 0.0680 0.0612 0.0408 0.0068 
    0.0136 0.0476 0.0680 0.0748 0.0680 0.0476 0.0136 
    0.0068 0.0408 0.0612 0.0680 0.0612 0.0408 0.0068 
    -0.0136 0.0204 0.0408 0.0476 0.0408 0.0204 -0.0136 
    -0.0476 -0.0136 0.0068 0.0136 0.0068 -0.0136 -0.0476 

>> hi=sgsdf_2da(7,3,0,0) 

hi = 

    -0.0476 -0.0136 0.0068 0.0136 0.0068 -0.0136 -0.0476 
    -0.0136 0.0204 0.0408 0.0476 0.0408 0.0204 -0.0136 
    0.0068 0.0408 0.0612 0.0680 0.0612 0.0408 0.0068 
    0.0136 0.0476 0.0680 0.0748 0.0680 0.0476 0.0136 
    0.0068 0.0408 0.0612 0.0680 0.0612 0.0408 0.0068 
    -0.0136 0.0204 0.0408 0.0476 0.0408 0.0204 -0.0136 
    -0.0476 -0.0136 0.0068 0.0136 0.0068 -0.0136 -0.0476 

>> hi=sgsdf_2da(7,3,0,1) 

hi = 

    -0.0476 -0.0136 0.0068 0.0136 0.0068 -0.0136 -0.0476 
    -0.0136 0.0204 0.0408 0.0476 0.0408 0.0204 -0.0136 
    0.0068 0.0408 0.0612 0.0680 0.0612 0.0408 0.0068 
    0.0136 0.0476 0.0680 0.0748 0.0680 0.0476 0.0136 
    0.0068 0.0408 0.0612 0.0680 0.0612 0.0408 0.0068 
    -0.0136 0.0204 0.0408 0.0476 0.0408 0.0204 -0.0136 
    -0.0476 -0.0136 0.0068 0.0136 0.0068 -0.0136 -0.0476 

>> hi=sgsdf_2da(7,4,0,0) 

hi = 

    -0.0142 -0.0359 0.0291 0.0637 0.0291 -0.0359 -0.0142 
    -0.0359 -0.0575 0.0074 0.0421 0.0074 -0.0575 -0.0359 
    0.0291 0.0074 0.0724 0.1070 0.0724 0.0074 0.0291 
    0.0637 0.0421 0.1070 0.1416 0.1070 0.0421 0.0637 
    0.0291 0.0074 0.0724 0.1070 0.0724 0.0074 0.0291 
    -0.0359 -0.0575 0.0074 0.0421 0.0074 -0.0575 -0.0359 
    -0.0142 -0.0359 0.0291 0.0637 0.0291 -0.0359 -0.0142 

>> hi=sgsdf_2da(7,4,0,1) 

hi = 

    0.0425 -0.0359 -0.0049 0.0183 -0.0049 -0.0359 0.0425 
    -0.0359 -0.0575 0.0074 0.0421 0.0074 -0.0575 -0.0359 
    -0.0049 0.0074 0.0928 0.1342 0.0928 0.0074 -0.0049 
    0.0183 0.0421 0.1342 0.1779 0.1342 0.0421 0.0183 
    -0.0049 0.0074 0.0928 0.1342 0.0928 0.0074 -0.0049 
    -0.0359 -0.0575 0.0074 0.0421 0.0074 -0.0575 -0.0359 
    0.0425 -0.0359 -0.0049 0.0183 -0.0049 -0.0359 0.0425 

>> hi=sgsdf_2da(7,5,0,0) 

hi = 

    -0.0142 -0.0359 0.0291 0.0637 0.0291 -0.0359 -0.0142 
    -0.0359 -0.0575 0.0074 0.0421 0.0074 -0.0575 -0.0359 
    0.0291 0.0074 0.0724 0.1070 0.0724 0.0074 0.0291 
    0.0637 0.0421 0.1070 0.1416 0.1070 0.0421 0.0637 
    0.0291 0.0074 0.0724 0.1070 0.0724 0.0074 0.0291 
    -0.0359 -0.0575 0.0074 0.0421 0.0074 -0.0575 -0.0359 
    -0.0142 -0.0359 0.0291 0.0637 0.0291 -0.0359 -0.0142 

>> hi=sgsdf_2da(7,5,0,1) 

hi = 

    0.0425 -0.0359 -0.0049 0.0183 -0.0049 -0.0359 0.0425 
    -0.0359 -0.0575 0.0074 0.0421 0.0074 -0.0575 -0.0359 
    -0.0049 0.0074 0.0928 0.1342 0.0928 0.0074 -0.0049 
    0.0183 0.0421 0.1342 0.1779 0.1342 0.0421 0.0183 
    -0.0049 0.0074 0.0928 0.1342 0.0928 0.0074 -0.0049 
    -0.0359 -0.0575 0.0074 0.0421 0.0074 -0.0575 -0.0359 
    0.0425 -0.0359 -0.0049 0.0183 -0.0049 -0.0359 0.0425