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 13 479 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.