En convolution, deux fonctions mathématiques sont combinées pour produire une troisième fonction. Dans le traitement des images, les fonctions sont généralement appelées noyaux. Un noyau n'est rien d'autre qu'un tableau (carré) de pixels (une petite image pour ainsi dire). Habituellement, les valeurs du noyau totalisent un. Cela permet de s’assurer qu’aucune énergie n’est ajoutée ou retirée de l’image après l’opération.
Plus précisément, un noyau gaussien (utilisé pour le flou gaussien) est un tableau carré de pixels dont les valeurs de pixel correspondent aux valeurs d’une courbe gaussienne (en 2D).
Chaque pixel de l'image est multiplié par le noyau gaussien. Pour ce faire, placez le pixel central du noyau sur le pixel de l'image et multipliez les valeurs de l'image d'origine par les pixels du noyau qui se chevauchent. Les valeurs résultant de ces multiplications sont additionnées et ce résultat est utilisé pour la valeur au pixel de destination. En regardant l'image, vous multiplieriez la valeur en (0,0) dans le tableau en entrée par la valeur en (i) dans le tableau du noyau, la valeur en (1,0) dans le tableau en entrée par la valeur en (h ) dans le tableau du noyau, et ainsi de suite. puis ajoutez toutes ces valeurs pour obtenir la valeur de (1,1) sur l'image de sortie.
Pour répondre à votre deuxième question en premier, plus le noyau est gros, plus l'opération est coûteuse. Ainsi, plus le rayon du flou est large, plus l'opération durera longtemps.
Pour répondre à votre première question, comme expliqué ci-dessus, la convolution peut être effectuée en multipliant chaque pixel d'entrée par le noyau entier. Cependant, si le noyau est symétrique (ce qui est un noyau gaussien), vous pouvez également multiplier chaque axe (x et y) indépendamment, ce qui réduira le nombre total de multiplications. En termes mathématiques appropriés, si une matrice est séparable, elle peut être décomposée en matrices (M × 1) et (1 × N). Pour le noyau gaussien ci-dessus, cela signifie que vous pouvez également utiliser les noyaux suivants:
1256⋅⎡⎣⎢⎢⎢⎢⎢⎢1464141624164624362464162416414641⎤⎦⎥⎥⎥⎥⎥⎥=1256⋅⎡⎣⎢⎢⎢⎢⎢⎢14641⎤⎦⎥⎥⎥⎥⎥⎥⋅[14641]
Vous devez maintenant multiplier chaque pixel de l'image d'entrée avec les deux noyaux et ajouter les valeurs résultantes pour obtenir la valeur du pixel de sortie.
Pour plus d'informations sur la manière de savoir si un noyau est séparable, suivez ce lien .
Edit: les deux noyaux présentés ci-dessus utilisent des valeurs légèrement différentes. En effet, le paramètre (sigma) utilisé pour la courbe gaussienne afin de créer ces noyaux était légèrement différent dans les deux cas. Pour une explication sur les paramètres qui influencent la forme de la courbe gaussienne, les valeurs dans le noyau suivent ce lien.
Edit: dans la deuxième image ci-dessus, il est indiqué que le noyau utilisé est retourné. Cela ne fait bien sûr aucune différence si le noyau que vous utilisez n'est pas symétrique. La raison pour laquelle vous devez retourner le noyau est liée aux propriétés mathématiques de l'opération de convolution (voir le lien pour une explication plus détaillée de la convolution). En termes simples: si vous n’inversez pas le noyau, le résultat de l’opération de convolution sera inversé. En retournant le noyau, vous obtenez le résultat correct.