L'algorithme créait un noyau de convolution d'un certain rayon et d'un sigma défini.

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 - Visualiser dans une fenêtre à part
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 2


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.