Normalisation de filtres linéaires

Christian RONSE © (17/04/2008)
LSIIT UMR 7005 CNRS-ULP, Département d'Informatique de l'ULP



Supposons des images dont les niveaux de gris s'étendent dans l'intervalle [A,B], où A < B (typiquement, [0,255] pour les images affichées sur les écrans des ordinateurs). Si on filtre une telle image par convolution ou corrélation avec un masque, les valeurs résultantes n'appartiendront plus nécessairement à cet intervalle. Cela ne pose pas de problème si ce filtrage a pour but de faire une mesure sur l'image en vue d'une décision (par example une accentuation des arêtes, en vue de la localisation de celles-ci, c.-à-d. de l'extraction d'une image binaire des arêtes à partir de l'image accentuée). Par contre, si l'on veut afficher l'image filtrée, il convient de contrôler les valeurs d'intensité obtenues sur les pixels.

Soient P la somme des coefficients positifs du masque, et -N la somme de ses coefficients négatifs. Donc P et N sont non-négatifs. Pour obtenir la valeur la plus élevée possible dans la convolution, il faut que les coefficients positifs du masque se positionnent sur les intensités les plus élevées de l'image, et que les coefficients négatifs se positionnent sur les intensités les plus basses. Donc la valeur maximum obtenue par la convolution sera PB - NA. Inversément, pour obtenir la valeur la plus basse possible dans la convolution, il faut que les coefficients positifs du masque se positionnent sur les intensités les plus basses de l'image, et que les coefficients négatifs se positionnent sur les intensités les plus élevées. Donc la valeur minimum obtenue par la convolution sera PA - NB. On obtient ainsi l'intervalle de valeurs [PA - NB,PB - NA] dans l'image filtrée ; cet intervalle est de largeur (P + N)(B - A), contre B - A dans l'image de départ. Par exemple, pour [A,B] = [0,255], on obtiendra l'intervalle [-255N,255P].

L'opération sur les intensités à effectuer sur l'image filtrée dépend du type de filtrage: lissage, accentuation, rehaussement, accentuation des arêtes.

Lissage

Ici P = 1 et N = 0, donc l'intervalle de valeurs [A,B] est préservé. D'ailleurs, le lissage calcule en tout point une moyenne pondérée des valeurs dans son voisinage, et une telle opération donne toujours un résultat appartenant à l'intervalle des valeurs de départ. Donc ici il n'y a rien à faire.

On définit parfois des masques de lissage avec P > 0, mais pas nécessairement égal à 1. Ainsi on peut remplacer des coefficients fractionnaires par des entiers, en multipliant chaque coefficient par le dénominateur commun, qui donne la nouvelle valeur de P. Par exemple, les masques de lissage vus précédemment deviennent :

Alors on divisera le résultat de la convolution par P. Ainsi en chaque point on évite d'utiliser des fractions dans le calcul de la convolution, on ne fait qu'une division à la fin. On avait procédé de même pour les masques de chanfrein, en particulier ceux de Borgefors, pour le calcul des distances.

Accentuation

Ici P = N > 0, et généralement P < 1. Donc l'intervalle de valeurs devient [P(A - B),P(B - A)]. Par exemple, pour [A,B] = [0,255], cela donne [-255P,255P].

Nous avons vu que l'accentuation donne un résultat nul sur les zones de l'image où le niveau de gris est constant, mais une alternance de valeurs négatives et positives sur une arête. On a donc deux options d'affichage :

Rehaussement

On obtient typiquement un tel rehaussement en additionnant l'image et l'accentuation (éventuellement pondérée par un facteur). Ici les zones de l'image à niveau de gris constant sont préservées. Il importe de les préserver encore après normalisation, donc on ne peut pas modifier les valeurs incluses dans l'intervalle [A,B]. On va donc simplement tronquer les valeurs dépassant l'intervalle, ce qui donne la transformation de niveaux de gris :
    g -> B     si g > B,
    g -> A     si g < A,
    g -> g     sinon.

Accentuation des arêtes

Comme dans l'accentuation, on a P = N > 0, et on obtient l'intervalle [P(A - B),P(B - A)]. Ici le signe de la convolution dépend de l'angle entre les orientations du masque et de l'arête, et une rotation d'un demi-tour fait changer de signe la convolution. Donc seule la valeur absolue de celle-ci compte pour l'affichage, et on applique ainsi la transformation de niveaux de gris
    g -> A + |g|/P.

Pour l'opérateur de Sobel, on prend la combinaison quadratique sqrt(gx2 + gy2) des valeurs gx et gy des convolutions par les deux masques ; celle-ci appartiendra à l'intervalle [0,sqrt(2)P(B - A)], et on lui appliquera la transformation de niveaux de gris
    g -> A + g/sqrt(2)P.



Retour à l'index