Si le rayon vaut 1 par exemple, alors le noyau sera de taille 2*rayon+1 en largeur et 2*rayon +1 en hauteur.
Pour accèder à un élément du noyau, on note : kernel(i,j) ou (i,j) désigne la position (commence à 0 et pas à 1)
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | fonction creerNoyauGaussien(Entier rayon, Reel sigma) -> Noyau
kernel : Noyau de convolution de taille
largeur = 2*rayon+1
hauteur = 2*rayon+1
et centré en (rayon, rayon)
Si sigma == 0
Erreur
Si rayon<1
Erreur
Réel gaussianKernelFactor <- 0
Réel e <- 0
Pour ky = -rayon à rayon
Pour kx = -rayon à rayon
{
e <- exp( - (kx*kx+ky*ky) / (2*sigma*sigma))
gaussianKernelFactor <- gaussianKernelFactor + e
kernel(kx+rayon, ky+rayon) <- e
}
/*on divise tout par le facteur afin que la somme de tous les éléments
* soient égaux à 1
*/
Pour ky = -rayon à rayon
Pour kx = -rayon à rayon
{
kernel(kx+rayon, ky+rayon) <- kernel(kx+rayon, ky+rayon) / gaussianKernelFactor
}
retourner kernel |

Rayon 3 : sigma 5

Rayon 5 : sigma 5

A noter que le temps d'attente devient infernal au dessus d'yn rayon 5 (matrice de convolution de taille 11*11), il vaut mieux passer dans l'espace de Fourier.
Vous avez lu gratuitement 21 741 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.
