PROCEDE DE NORMALISATION ET D'AMELIORATION DE CONTRASTE DANS UNE IMAGE DELIVREE PAR UN SENSEUR
La présente invention concerne un procédé d'amélioration du contraste dans une image délivrée par un senseur infrarouge. Elle s'applique dans le cadre d'un traitement de réduction de dynamique d'une image appelé encore traitement de normalisation du contraste de l'image, permettant d'adapter le codage des pixels de l'image à une dynamique de niveaux de gris de l'afficheur plus faible que celle du senseur qui la délivre.
Plus précisément, un traitement de normalisation de contraste a pour but de convertir une image numérique {x} de taille n*m pixels dans laquelle chaque pixel contient une information codée sur p bits en une image numérique {y} de taille n*m pixels dans laquelle chaque pixel contient une information codée sur q bits tel que q<p. On réalise ainsi une compression de l'image d'origine {x}. Cette compression est dit destructive, car elle conduit à supprimer une partie de l'information contenue dans l'image d'origine. Un tel algorithme est nécessaire pour adapter la dynamique de sortie d'un senseur à la dynamique d'entrée d'un calculateur, d'un moniteur, d'un enregistreur ou de tout système permettant la restitution ou l'enregistrement de l'image.
L'invention s'applique notamment aux produits aéroportés de type nacelle optronique, viseur ou drône, qui utilisent des senseurs infra-rouge. Ces senseurs génèrent habituellement une image dans laquelle l'information en chaque pixel est codée sur 13 ou 14 bits. Par exemple, sur 13 bits, on peut ainsi distinguer 8192 niveaux de gris. Les systèmes de restitution acceptent habituellement en entrée des images d'une profondeur maximale de 8 bits, correspondant à la limite de perception visuelle de l'œil humain, qui ne peut pas distinguer plus de 256 niveaux de gris.
L'opération de normalisation de contraste est une opération qui devient d'autant plus complexe que le spectre de l'image à traiter est étalé. L'expression "spectre étalé" signifie que l'on a des informations sur toute la plage de niveaux de gris que peut détecter le senseur. Par exemple, un senseur 13 bits a une plage de niveaux de gris de 8192 valeurs [0-8191 ]. Si le spectre est étalé, cela signifie que les niveaux bas de la plage et les
niveaux hauts de la plage sont occupés, correspondant à des points extrêmes fortement contrastés.
C'est notamment le cas des images obtenues par les senseurs infra-rouges en bande II, car ils réagissent aux réflexions solaires. Les images obtenues avec ces senseurs sont ainsi fortement contrastées.
L'application des techniques de normalisation de contraste habituelles, à base de tables de correspondance, connues sous l'acronyme anglo-saxon LUT ((.ook-Up Table) conduit alors à une perte d'informations contenues dans l'image fournie par le senseur. Si l'image fournie par le senseur a un spectre étroit, on n'aura pas ce problème de perte d'information. En effet, le spectre étant étroit, avec par exemple 200 niveaux de gris différents codés dans l'image parmi les 8192 valeurs de la plage du senseur, il est aisé de faire correspondre à chacun de ces 200 niveaux de gris, un niveau de gris correspondant choisi dans la plage des 256 niveaux de gris de l'afficheur. Ceci se fait donc sans perte d'informations. C'est ce qui se produit par exemple dans le cas des images issues d'un senseur infra¬ rouge en bande III, avec lequel on n'a pas le problème de la réflexion des rayons solaires. La réduction de dynamique entre le senseur et le système de restitution (afficheur) va essentiellement se traduire par une répartition de luminance différente.
Le cas d'un spectre étalé est différent, puisque l'étalement du spectre conduit à un nombre de niveaux de gris codés en entrée supérieur à ce que permet la dynamique de codage de l'afficheur. Cette réduction de dynamique appliqué sur un spectre étalé conduit donc à une perte d'informations. Par exemple, le spectre est tel que le niveau de gris minimum dans l'image est codé à 200 ; le niveau de gris maximum est codé à 6000 ; et une kyrielle de niveaux de gris est codée entre ces valeurs minimum et maximum. En particulier, si dans l'image fournie par le senseur, on a un objet avec des niveaux de gris proches, par exemple, des niveaux de gris à 400, 401 , 402, correspondant à des détails de cet objet, l'application d'une table de correspondance LUT calculée selon les techniques habituelles de normalisation de contraste conduit à une perte d'information qui peut se traduire par un codage de l'objet sur un seul niveau, compris entre le niveau 0 que l'on fait correspondre au niveau de gris minimum de l'image et le niveau 255 que l'on fait correspondre au niveau de gris maximum de l'image.
Par exemple, aux trois niveaux 400, 401 et 402 de l'objet, la LUT fera correspondre le niveau 124 sur l'afficheur. Ainsi l'algorithme de normalisation du contraste opère une compression de l'information contenue dans une image, de façon destructive. Différentes techniques de normalisation et d'amélioration du contraste dans l'image ont ainsi été développées pour gérer au mieux cette nécessaire perte d'information. Il s'agit de réaliser l'opération de normalisation, en sélectionnant de façon judicieuse l'information à traduire.
En d'autres termes, il s'agit de réaliser un choix dans la compression à réaliser. Cette contrainte définit un critère de qualité de l'algorithme : ce dernier doit permettre d'offrir en sortie une image qui doit être la plus intéressante possible, la plus riche et la plus exploitable.
Ces techniques reposent habituellement sur une analyse fine de l'histogramme de l'image délivrée par le senseur (fonction de distribution des niveaux dans l'image) et sur l'histogramme cumulé (fonction de distribution des populations dans l'image), pour calculer la table de correspondance LUT optimale à appliquer.
Soit er, de taille n xm pixels .
Soit
= L niveaux de gris de la dynamique de codage du senseur, où Xo représente le niveau le plus bas, égal 0 et XL-I , le niveau le plus élevé, égal à L-1 (soit 8191 , pour un codage sur p=13 bits).
L'histogramme de l'image est obtenu en calculant la densité p(Xι) de chaque niveau de gris Xi dans les n xm pixels de l'image. Cette densité s'écrit : p(x
;)=-^- où n est le nombre de fois où le niveau Xi est trouvé dans nxm l'image. L'histogramme de l'image Hist{x} est donné par l'ensemble des pOintS
.
L'histogramme cumulé Hist
c(x) est obtenu à partir de l'histogramme de l'image Hist{x}, en calculant pour chaque niveau Xi la somme c(Xι) des populations des niveaux précédents et de la population sur ce niveau : .
Sur la figure 1 a, on a représenté à titre d'exemple, un histogramme Hist{x} d'une image {x} et sur la figure 1 b, l'histogramme cumulé Histc{x} correspondant.
Des techniques connues de normalisation et d'amélioration du contraste consistent à élaborer une table de correspondance mixte, à partir de tables de correspondance dites table linéaire et table en S. Une table de correspondance linéaire LUTi se construit simplement à partir de l'histogramme Hist{x} en prenant le niveau de gris minimum (min) et le niveau de gris maximum (max), et en déterminant un gain GL et un offset. Le tracé de la droite qui en résulte est représenté sur la figure 2. Une table de correspondance linéaire LUT a comme défaut majeur de ne pas tenir compte de la répartition des population de niveaux de gris : en d'autres termes, elle ne s'intéresse pas au contenu de l'image. Ainsi, lorsque l'écart entre les niveaux de gris minimum et maximum devient important, ce qui est un cas rencontré dans le domaine des senseurs infrarouge en bande II (dû à l'étalement du spectre), alors on détruit de l'information qui peut aussi bien être du bruit, qu'une information utile, ou un pixel important mais unique : chaque pixel de l'image a autant de chance qu'un autre d'être codé en sortie.
Une table de correspondance en S LUT5, appelée encore table de correspondance égalisée, est basée sur la courbe obtenue avec l'histogramme cumulé Histc{x}. Un exemple d'une telle table LUT5 est représenté sur la figure 3. Elle se caractérise par une portion linéaire de pente GS avec aux deux extrémités, des parties courbes vers les niveaux minimum et maximum de l'histogramme.
Cette table est donc construite sur la répartition des populations de niveaux de gris dans l'image. Elle est favorable aux niveaux de gris en population importante dans l'image, correspondant typiquement à des zones radiométriques uniformes dans l'image : ciel, mer....au détriment des niveaux de gris peu présents dans l'image.
En pratique, les techniques habituelles utilisent en outre des paramètres de production fonction de l'image {x} à traiter, qui permettent de construire une table de correspondance optimisée LUTm pour une image donnée, notamment en utilisant une analyse plus fine des histogramme et histogramme cumulé de l'image.
Dans un exemple, une optimisation peut être obtenue à partir de la table linéaire LUT et/ou de la table en S LUT5. Dans un exemple, on peut
linéariser une courbe en S, notamment pour réduire une pente trop importante. De cette façon, on élargit la dynamique de codage disponible dans la zone de l'histogramme contenant beaucoup d'informations. Un tel exemple d'optimisation est représenté sur la figure 4, à titre purement indicatif. La table est issue d'une courbe en S, mais dont la pente Gm a été réduite. L'optimisation peut aussi porter sur l'offset, les valeurs min et max, la valeur de saturation sat.
Un procédé de normalisation et d'amélioration du contraste est représenté schématiquement sur la figure 5. L'image {x} délivrée par le senseur a un taille de nx m pixels. Elle est appliquée en entrée d'un calculateur numérique 1. Ce dernier applique un algorithme NAC de normalisation et d'amélioration du contraste sur l'image {x}. En particulier il calcule l'histogramme et l'histogramme cumulé de cette image selon les formules précédemment données, et analyse les courbes résultantes. Notamment, il détermine les niveaux de gris minimum et maximum, et construit une table de correspondance LUT applicable à l'image {x}, en utilisant les techniques de l'état de l'art, dont des exemples ont été détaillés ci-dessus. Le calculateur 1 applique alors la table de correspondance LUT sur l'image {x}. On obtient en sortie une image {y} de même taille nx m pixels mais de dynamique réduite, typiquement avec des pixels codés sur 8 bits. En pratique, dans l'image {y} obtenue, il manque des informations qui étaient présentes dans l'image {x}.
Si on prend l'exemple d'une vue aérienne d'un ensemble industriel, l'application de ces techniques ne va pas permettre de distinguer des fenêtres, des séparations entre les bâtiments de compter le nombre de personnes dehors ....
Dans certaines applications, en particulier l'analyse de séquences d'image fournies par des senseurs infrarouges, il est nécessaire d'améliorer la perception visuelle des images par un opérateur. Notamment, dans des nuisances lumineuses à proximité du senseur, telles que des départs de tir de missile, des torchères, des reflets solaires, des éblouissements lasers, les images obtenues sont très dégradées, avec des zones d'éblouissement dans les images. Sur l'image visualisée, on ne peut pas distinguer des détails proches de la source d'éblouissement.
Pour ces applications, il est nécessaire d'améliorer le procédé de normalisation et d'amélioration du contraste, pour perdre le moins d'information utile possible, même dans le cas de nuisances lumineuses à proximité du senseur. L'invention se propose de résoudre ce problème technique.
L'idée à la base de l'invention pour améliorer la qualité d'une image dégradée par des perturbations extérieures, est de réduire les zones d'éblouissement de l'image.
Ce but est atteint par un système de traitement selon lequel on découpe l'image en blocs, et on applique un procédé de normalisation et d'amélioration de contraste sur chacun des blocs de l'image. Sur chaque bloc, on dispose de toute la dynamique de codage de l'afficheur. De cette façon, il est possible de conserver toute l'information présente dans l'image délivrée par le senseur, même à proximité d'une source d'éblouissement, les zones d'éblouissement étant réduites. L'image visualisée ou enregistrée s'en trouve nettement améliorée.
De manière plus détaillée, si l'image à traiter comprend nxm pixels, on détermine u et v pour découper cette image en uxv blocs. Chaque bloc a donc une surface Su,v égale à — x — . u v Au lieu d'appliquer une unique fois l'algorithme NAC de normalisation et d'amélioration du contraste, l'invention propose de l'appliquer séparément sur chacun des blocs de l'image. Il est donc appliqué uxv fois. Sur chaque bloc, l'histogramme et son histogramme cumulé sont calculés, et une table de correspondance pour le bloc est construite. On comprend que, comme on travaille sur une surface d'image réduite Su,v et non plus sur la surface complète de l'image, l'histogramme obtenu est moins étalé, ce qui permet de conserver l'information sur chaque bloc.
Cette technique a cependant comme inconvénient de générer un effet de damier sur l'image : le quadrillage des blocs est bien visibles. Ceci est dû à l'application de l'algorithme NAC sur les bbcs de façon indépendante. Il en résulte dans l'image de sortie {y}, une discontinuité des histogrammes résultants des différents blocs d'image.
Un perfectionnement de l'invention consiste à appliquer un filtrage linéaire, permettant pour chaque bloc de l'image, de prendre en compte les informations présentes dans des blocs voisins.
En appliquant à une image délivrée par un senseur infrarouge, des techniques de normalisation et amélioration de contraste selon l'invention, on obtient en sortie une image de dynamique de codage réduite, qui reste particulièrement riche en information. Si l'image traitée est dégradée par des nuisances lumineuses à proximité du senseur, se traduisant par des zones d'éblouissement dans l'image, ces zones d'éblouissement sont rédutes, en sortent qu'elles ne perturbent alors plus que la localité de l'agression, et non pas l'image toute entière.
L'invention concerne un système de traitement d'images pour réduire les effets de nuisances lumineuses à proximité d'un senseur infrarouge fournissant les dites images, dans lesquelles le niveau de chaque pixel est codé sur p bits, à un support de visualisation ou d'enregistrement dans lequel le niveau de chaque pixel est codé sur q bits, avec q<p, caractérisé en ce qu'il comprend des moyens de calcul pour appliquer un procédé de normalisation et d'augmentation du contraste à chaque image délivrée par le senseur, ledit procédé comprenant l'application d'un algorithme sur ladite image pour produire une table de correspondance de niveaux, caractérisé en ce que l'image à traiter {x} est découpée en blocs et en ce que ledit algorithme est appliqué sur chaque bloc, pour produire une table de correspondance par bloc.
D'autres avantages et caractéristiques de l'invention apparaîtront plus clairement à la lecture de la description qui suit, faite à titre indicatif et non limitatif de l'invention et en référence aux dessins annexés, dans lesquels :
- les figures 1 a et 1 b illustrent un histogramme d'une image et son histogramme cumulé ;
- la figure 2 représente une table de correspondance linéaire entre la dynamique d'un senseur et celle d'un afficheur ;
- la figure 3 représente une table de correspondance en S entre la dynamique d'un senseur et celle d'un afficheur ;
- la figure 4 illustre un exemple d'optimisation de table de correspondance ;
- la figure 5 illustre schématiquement un procédé de normalisation et d'amélioration de contraste sur une image {x} délivrée par un senseur, selon l'état de l'art ;
- la figure 6 illustre schématiquement un procédé de normalisation et d'amélioration de contraste selon l'invention, avec un découpage de l'image {x} en uxv blocs et l'application de l'algorithme NAC sur les uxv blocs de l'image selon l'invention ;
- la figure 7 illustre une opération d'agrandissement d'une image à traiter, pour permettre un découpage de l'image en un nombre entier de blocs de taille uxv ;
- la figure 8 illustre une opération d'agrandissement d'une image à traiter, pour permettre l'application d'un filtrage linéaire sur chacun des blocs de l'image {x} à traiter ;
- la figure 9 illustre la sélection d'une zone de filtrage linéaire pour un bloc donné de l'image à traiter ;
- la figure 10 illustre les zones d'acquisition d'histogramme associées à un bloc donné de l'image à traiter, permettant l'application d'un filtrage bi linéaire ;
- la figure 11 illustre une mesure de distance entre un pixel d'un bloc de l'image à traiter et les zones d'acquisition illustrées à la figure 10 ; et
- la figure 12 illustre un perfectionnement, selon lequel le filtrage bilinéaire est réalisé partiellement, pour les pixels du bloc situés à proximité des frontières avec les blocs voisins.
Le principe de l'invention est schématisé sur la figure 6.
L'image {x} délivrée par le senseur est découpée en u x v blocs Br (r=1 à u xv). L'algorithme de calcul NAC applique sur chaque bloc Br de l'image, les étapes de production d'une table de correspondance LUTr associée. Chacune des tables LUTr calculées est appliquée sur le bloc Br, pour fournir l'image de sortie {y} de dynamique réduite. Si on note Br' le bloc obtenue du bloc Br après application de la table LUTr associée, on a en entrée une image à traiter {x}= \J~"* Br , de taille nx m pixels, avec des pixels codés sur p bits. En sortie, on obtient une image {y}= (J^"xv Br , de taille nx m pixels, avec des pixels codés sur q bits, q<p.
Le mode d'application de l'algorithme NAC selon l'invention, permet de conserver l'information utile sur chaque bloc, en disposant pour chaque bloc, de la dynamique de codage de l'afficheur. Sur l'image visualisée {y}, on pourra ainsi voir localement, c'est à dire sur les blocs, tous les détails d'un objet donné.
Cependant, le traitement indépendant des blocs entraîne des effets nuisibles, essentiellement au niveau des frontières entre les blocs : on a un effet de damier, correspondant au découpage de l'image. Ceci est dû au mode de production indépendant des différentes tables de correspondance LUTr de l'image {x}. Par exemple, on pourrait se retrouver dans un bloc avec un pixel dont le niveau de gris codé à 2 dans l'image {x} d'origine, serait transcodé à 230 dans l'image de sortie ; et dans un bloc voisin, un pixel dont le niveau de gris serait codé à 200 dans l'image {x} d'origine, et qui serait transcodé à ce même niveau 230 dans l'image de sortie. En pratique, le procédé selon l'invention entraîne des discontinuités entre les histogrammes des blocs dans l'image de sortie.
Ces discontinuités peuvent en outre provoquer un effet de clignotement temporel de l'image, lorsqu'un objet "chaud" se déplace d'un bloc à l'autre : si on reprend l'exemple précédent, l'objet chaud codé à 2, devient froid (transcodé à 230) dans l'image de sortie. Si cet objet est mobile et passe dans le bloc voisin, il va rester chaud dans l'image de sortie.
En outre, chacune des uxv tables de correspondance calculées pour l'image {x} contient moins de valeurs que la table calculée sur toute l'image selon l'art antérieur. Les histogrammes calculés par l'algorithme NAC sur chaque bloc sont ainsi plus irréguliers et plus sensibles au bruit.
Pour améliorer ces différents aspects, des perfectionnements du procédé selon l'invention sont proposés.
Un premier perfectionnement d'un procédé selon l'invention comprend une étape préalable d'agrandissement de l'image délivrée par le senseur, pour obtenir un découpage selon un nombre entiers de blocs de taille prédéterminée. Un tel perfectionnement permet d'atténuer le problème de clignotement temporel, en prenant des blocs de taille suffisante. On a pu déterminer que des dimensions de blocs de l'ordre de 30 x 30 pixels donnaient des résultats optimums.
Ainsi, par exemple, pour une image {x} de n= 320 pixels par m= 240 pixels, on prendra des valeurs de u (en x) et v (en y) respectivement de 10 et 8. Les surfaces S
u,
v des blocs B
r sont alors égales à xf— =30
pixels. En fonction de l'image, on pourra ainsi prévoir d'agrandir artificiellement l'image à traiter pour obtenir un nombre entier de blocs de la taille voulue. Si on note {>b} l'image délivrée par le senseur. Un agrandissement artificiel de cette image est obtenu en dupliquant les pixels sur la frontière, pris sur une certaine profondeur : x^ pixels en x et V
3 pixels en y. Une image agrandie {x} correspondante est représentée sur la figure 6. Elle a une taille égale à (n+2x
a).(m+2y
a). X
3 et V
3 sont choisis pour que l'on puisse découper l'image agrandie {x} en un nombre entiers de blocs de taille prédéterminée - x — pixels.
U V
Dans la suite on note {x} l'image sur laquelle on applique un procédé de découpage et d'application de l'algorithme NAC selon l'invention. Cette image peut être l'image réelle délivrée par le senseur, ou être une image préalablement agrandie pour obtenir un nombre entier de blocs.
Selon un deuxième perfectionnement de l'invention, on prévoit que le procédé de normalisation et d'amélioration du contraste applique un filtrage linéaire pour chaque bloc de l'image à traiter {x}, pour réduire la perception visuelle des sauts entre blocs, et donc améliorer la qualité visuelle de l'image de sortie {y}. Le filtrage linéaire appliqué permet de prendre en compte le contenu des blocs voisins dans la table de correspondance d'un bloc.
Selon un premier mode de réalisation, on prévoit que le filtrage linéaire est réalisé par l'algorithme NAC, dans une étape au moins parmi les étapes de production des tables de correspondance des blocs de l'image à traiter {x}. Le filtrage linéaire est réalisé en appliquant un masque matriciel
M-i. Ce masque permet la sélection de la zone image Z- d'application du filtrage linéaire, pour chaque bloc de l'image {x} à traiter. Cette zone d'application du filtrage linéaire ZL est plus large que le bloc, comprenant le bloc et des blocs voisins.
Pour être applicable aux blocs en bord d'image, le filtrage linéaire nécessite d'agrandir l'image sur chaque côté, d'une taille correspondant au nombre de blocs voisins en x et en y pris en compte par le masque M1. On note dans la suite {x'} l'image agrandie en fonction de la taille du filtre appliqué.
Soit un masque Mi dont la matrice est de taille (2n-ι +1 )x ( 2n-ι+1 ) blocs : il est défini pour atteindre ni blocs voisins de chaque côté du bloc à trier. On doit donc agrandir l'image de rπ fois la taille d'un bloc dans toutes les directions. On note tx= - et ty= — les dimensions en x, respectivement en y
U V d'un bloc de l'image.
Au final l'image agrandie {x'} aura donc une taille égale à (n+2.ni.tx).(m+2.ni.tv) pixels.
Dans un exemple, on prend un masque de taille 3x3 blocs, ce qui correspond à un bon compromis entre les résultats obtenus sur la qualité de la perception visuelle de l'image et le temps de calcul supplémentaire. La forme matricielle la plus générale de ce masque est donnée par : al ai
M1 = al α8 a.9
Où ai , a2,...a9 sont des entiers positifs ou négatifs.
On peut par exemple retenir des coefficients de valeurs 0 ou 1 , selon que l'on veut prendre en compte tous les blocs voisins, ou encore les blocs voisins pris selon les diagonales, ou selon les verticales et horizontales par rapport au bloc sur lequel il est centré.
Avec un masque de dimension 3x3, l'image agrandie permettant l'application du masque M1 sur les blocs en bord d'image {x}, a donc pour dimensions : (n+2tx).(m+2ty) pixels : l'agrandissement effectué est de la taille d'un bloc dans toutes les directions, comme représenté sur la figure 8.
Soit donc une image délivrée par un senseur. On découpe cette image en uxv blocs de taille tx et ty. Si nécessaire, on peut agrandir l'image comme vu en relation avec la figure 7, pour obtenir un nombre entier de blocs en x et en y.
Pour simplifier, on suppose que la taille nx m de l'image permet d'obtenir un nombre entier de blocs de taille txxty.
Soit donc {x} cette image à traiter.
Une première étape comprend le calcul de l'image agrandie {x1}, pour permettre l'application du masque Mi de définition du voisinage, pour l'application du filtrage linéaire. On a pris dans l'exemple un masque de taille 3x3 blocs. L'image agrandie {x'} comprend ainsi (u+2)x (v+2) blocs Br avec r= 1 à (u+2)x (v+2), que l'on peut encore écrire Br=Bij, avec i=1 à u+2 ; j=1 à v+2 dans le repère x'o'y' (Figure 8). Dans ce repère, les blocs By de l'image à traiter {x} sont ceux donnés par i=2 à u+1 , et j=2 à v+1.
L'algorithme NAC produit pour les uxv blocs By de l'image réelle à traiter {x}, uxv tables de correspondance LUTij, une par bloc By. Les blocs supplémentaires contenus dans l'image {x'} sont utilisés dans l'algorithme NAC, dans la définition de la zone d'application du filtrage linéaire, par application du masque Mi pour les blocs en bord d'image. La zone ZL d'application du filtrage linéaire, centrée sur le bloc By considérée est donc de dimension 3 x3 blocs. Dans un exemple, on définit Mi comme suit :
ce qui revient alors à intégrer dans la zone d'image ZL les deux blocs voisins selon les y et les deux blocs voisins selon les x par rapport au bloc à traiter comme illustré sur la figure 9. Si on applique ce masque Mi sur l'image, centré sur le bloc B
r=B
UJ de l'image à traiter {x}, où i identifie la position relativement à O'x' dans le découpage de l'image {x'}, (i=2 à u+1 ) et j la position relativement à O'y' (j=2 à v+1 ) comme représenté sur la figure 8, la zone d'image ZL sélectionnée comprend les blocs suivants B
1 ^
1, B
t_
x t] ,B^,B
ι+lJ ,B
ιJ+ι.
On notera que si B1J est un bloc en bord d'image {x}, la zone ZL comprend des blocs de l'image agrandie {x'}.
Cette zone ZL est représentée sur la figure 9. En pratique, on peut envisager différents modes d'application du filtrage linéaire dans les étapes de production des tables de correspondantes de l'algorithme NAC.
On peut notamment, appliquer un filtrage linéaire au niveau du traitement des pixels, dans l'étape de calcul de l'histogramme, au niveau des histogrammes, dans l'étape de détermination des niveaux minimum ou
maximum, ou au niveau de l'analyse des histogrammes et histogrammes cumulés, dans l'étape de détermination des paramètres de production de la table de correspondance : gains GL, GS, seuils min et max, offsets....
Dans un premier exemple, le filtrage linéaire peut être effectué dans l'algorithme au niveau du calcul de l'histogramme. Dans cette mise en œuvre, on considère une zone d'image ZL comprenant le bloc à traiter et des blocs voisins, sélectionnés par le masque Mi .
Dans ce cas, le filtrage linéaire revient à linéariser l'histogramme du bloc Bij/elativement aux histogrammes des autres blocs de la zone ZL
L'algorithme de traitement pourra par exemple comprendre les étapes suivantes :
* pour chaque bloc de l'image agrandie {x1} :
- une étape de calcul de l'histogramme ; * puis pour chaque bloc By de l'image à traiter {x} :
- une étape d'application du masque Mi du filtre linéaire, pour sélectionner la zone d'image ZL ;
- une étape de filtrage linéaire, par calcul d'un histogramme du bloc Bij à partir des histogrammes des blocs de la zone d'image ZL; - une étape de calcul de l'histogramme cumulé associé;
- une étape de détermination de la table de correspondance LUTij associée au bloc Bij à partir de ces histogrammes.
L'image de sortie {y} est obtenue en appliquant les uxv tables LUTij ainsi produites sur les uxv blocs Bij de l'image à traiter {x}.
Dans un deuxième exemple, le filtrage linéaire peut être effectué dans l'algorithme au niveau de la détermination du niveau de gris minimum et du niveau de gris maximum de l'histogramme. Dans cette mise en œuvre, pour un bloc donné Bij, on considère l'histogramme de ce bloc et ceux des blocs voisins de la zone Z- sélectionnée par le masque Mi, pour prendre comme niveau de gris minimum, le minimum des niveaux de gris minimums trouvés sur la zone ZL et comme niveau de gris maximum, le maximum des niveaux de gris maximums trouvés sur la zone ZL.
L'algorithme de traitement NAC pourra par exemple appliquer les étapes de traitement suivantes :
* pour chacun des blocs By de l'image agrandie {x1} :
- une étape de calcul de l'histogramme et de l'histogramme cumulé en fonction des dimensions du masque Mi de sélection de la zone ZL - une étape de détermination des niveaux de gris minimum et maximum dans chacun de ces histogrammes des blocs de l'image;
* puis pour chacun des blocs By de l'image à traiter {x} :
- une étape d'application du masque Mi de voisinage, le masque étant centré sur le bloc By à traiter, pour sélectionner la zone ZL de filtrage linéaire;
- une étape de filtrage linéaire, par exemple par sélection du minimum des niveaux minimums et du maximum des niveaux maximums des blocs de la zone ZL ainsi sélectionnée, à appliquer comme niveaux minimum et maximum sur le bloc By considéré; - une étape de production d'une table de correspondance associée LUTy au bloc By considéré, en utilisant dans les paramètres de production de cette table, les dits niveaux minimum et maximum ainsi sélectionnés.
L'image de sortie {y} est obtenue en appliquant les uxv tables LUTy ainsi produites sur les uxv blocs Bjj de l'image {x} à traiter.
Selon un troisième exemple, le filtrage linéaire peut être effectué dans l'algorithme NAC au niveau de la détermination des paramètres de production de la table de correspondance en fonction des paramètres des blocs voisins ainsi sélectionnés. Il s'agit alors de faire en sorte que le bloc considéré produise le même type de courbe, comme une courbe linéaire, en S, ou mixte, avec des paramètres de calcul : gain, offset ...uniformisés par rapport aux blocs voisins définis dans la zone ZL.
L'algorithme de traitement NAC pourra par exemple appliquer les étapes de traitement suivantes :
* pour chacun des blocs By de l'image agrandie {x'} :
- une étape de calcul de l'histogramme;
- une étape de calcul de l'histogramme cumulé,
- une étape d'analyse des histogrammes et des histogrammes cumulés, pour définir les paramètres de production (gains Q_, Gs, seuils, offset...) de la table de correspondance;
* puis, pour chaque bloc B1 1 de l'image {x} à traiter :
- une étape d'application du masque M du filtrage linéaire, centré sur le bloc Bjj à traiter, pour définir la zone Z- associée à ce bloc.
- une étape de filtrage linéaire des paramètres de production des tables de correspondances des blocs de la zone ZL ainsi sélectionnée, pour produire une table de correspondance LUTij.
L'image de sortie {y} est obtenue en appliquant les uxv tables LUTij ainsi produites sur les uxv blocs B1J de l'image à traiter {x}.
Dans un exemple d'uniformisation possible des paramètres sur la zone ZL, les pentes GL et/ou GS seront les pentes moyennes calculées sur les blocs de la zone ZL.
En pratique l'étape de filtrage linéaire appliquée dans l'algorithme NAC de production des tables de correspondance utilise des techniques classiques, bien connues de l'homme du métier, qui ne posent pas de problèmes particuliers de mise en œuvre pratique. Elles ne seront pas détaillées plus avant.
Au final, on doit obtenir u x v tables de correspondance, une par bloc de l'image à traiter {x}. L'application de ces tables donne une image {y}, dans laquelle l'effet de damier est atténué. En pratique, on a pu constater une amélioration de l'image, qui se traduit par un effet de damier "élargi", en fonction de la taille de la zone de corrélation.
Selon un mode de réalisation préféré de l'invention, on applique le filtrage linéaire aux tables de correspondances produites par l'algorithme NAC. Ce filtrage est donc appliqué à la suite de l'algorithme NAC, au moyen d'un filtre matriciel M2, sur les tables de correspondance calculées pour l'image agrandie {x'}, l'agrandissement étant fonction de la dimension du filtre appliqué.
On applique de préférence un filtre de taille 3x3 blocs, ce qui est un compromis acceptable entre le résultat du filtrage et le temps de calcul
nécessaire. Il est bien sûr possible de prendre un filtre de taille supérieure. Il définit une zone d'application du filtrage linéaire ZL de dimension 3x3 blocs, centrée sur le bloc Bjj considérée.
Soit une image {x} à traiter ;
Soit un filtre linéaire M2 de taille 3x3 blocs, d'expression générale :
M
2= où ak, k=1 à 9, sont des entiers positifs ou
négatifs ;
Soit l'image agrandie {x'} comme vu précédemment, suivant la taille 3x3 du filtre M2 (figure 7).
Un procédé de normalisation et d'amélioration du contraste selo n ce mode de réalisation de l'invention comprend par exemple les étapes suivantes :
* pour chaque bloc By de l'image agrandie {x'} :
- une étape d'application de l'algorithme NAC pour obtenir une table de correspondance LUTij.
* puis pour chaque bloc By de l'image à traiter {x} :
* - une étape de filtrage linéaire selon l'invention, comprenant l'application de la matrice M2 centrée sur le bloc considéré pour sélectionner la zone d'image ZL, et un filtrage linéaire des tables de correspondance de cette zone ZL pour obtenir une table de correspondance linéarisée LUTIjj.
En pratique, cette table linéarisée est obtenue en appliquant le calcul suivant pour chacun des L=2P niveaux de gris de la dynamique de codage d'entrée de la table :
LUn1 } égal à :
On peut optimiser le temps de calcul en choisissant un filtre dont certains coefficients ak sont nuls.
Par exemple, on peut choisir le filtre défini par M
2= La zone ZL
correspondante associée au bloc Bjj est illustrée sur la figure 9.
Ce filtrage linéaire appliqué aux tables de correspondance permet l'obtention d'une image {y} dans laquelle on a une bien meilleure cohérence entre les blocs que dans le premier mode de réalisation de l'invention : l'effet de damier a disparu. On obtient cependant une image bruitée, le filtrage linéaire gommant un peu les effets du traitement de l'image par blocs.
Dans un mode de réalisation perfectionné du filtrage des tables de correspondance, on applique un filtrage bilinéaire, qui permet de coupler un meilleur procédé de calcul de l'histogramme à une interpolation bilinéaire qui prend en compte une notion de distance. En pratique, un tel filtrage bilinéaire permet d'améliorer la cohérence entre les blocs, en gommant les transitions entre les blocs. Selon ce procédé, on couple une définition de plusieurs zones d'acquisition plus larges que le bloc, qui se chevauchent, à une interpolation bilinéaire des tables de correspondance calculées sur ces zones d'acquisition, applicable sur chaque pixel du bloc, en fonction d'une mesure de sa distance à chacune des zones d'acquisition.
Un procédé selon ce mode de réalisation préféré comprend ainsi pour chaque bloc de l'image à traiter, une étape de construction de la table de correspondance de chaque zone d'acquisition, et une étape d'interpolation bilinéaire des tables de correspondance, pour construire la table de correspondance LUTij applicable aux pixels du bloc By, en prenant en compte la position du pixel dans le bloc Bjj :
- L'étape de construction des tables de correspondance. Il s'agit dans cette étape de définir pour chaque bloc Ejj, une pluralité de zones d'acquisition ZA, plus larges que le bloc, qui se chevauchent. De préférence, une zone d'acquisition est plus large d'un nombre entier de blocs. Dans l'exemple représenté sur la figure 10, une zone d'acquisition couvre
2x2=quatre blocs de l'image, sélectionnés par application d'un masque IVb égal à : M3= f J jj.
On agrandit donc l'image à traiter {x1}, pour permettre l'application du masque sur les blocs de l'image {x} situés au bord : dans l'exemple d'un masque M3 de 2 x2 blocs, l'agrandissement est de la taille d'un bloc.
Pour chaque bloc By de l'image {x} à traiter, on applique ce masque M3, en le positionnant tour à tour selon les quatre positions possibles du bloc By dans ce masque. Pour chaque position du bloc dans le masque, on obtient une zone d'acquisition correspondante, soit dans l'exemple illustré sur la figure 10 : ZA 1 (bloc By dans le coin inférieur droit) ZA2 (bloc B,j dans le coin inférieur gauche), ZA3 (bloc B,j dans le coin supérieur droit) et ZΛ4 (bloc By dans le coin supérieur gauche). On obtient ainsi un chevauchement des zones d'acquisition d'histogramme pour le bloc considéré : les pixels d'un bloc sont ainsi pris en compte plusieurs fois.
Un masque de taille 2 x2 est un bon compromis entre le temps de calcul nécessaire et la qualité visuelle de l'image de sortie.
On notera que si le masque est de taille supérieure fxg, on doit considérer f xg zones d'acquisition pour chaque bloc de l'image {x}, correspondant aux f xg positions possibles du bloc dans ce masque.
Sur chaque zone d'acquisition ZAi associée au bloc By de l'image {x}, on calcule les histogrammes Hist(ZAi) et Histc(ZAi), et on construit la table de correspondance associée LUTj.
- L'étape d'interpolation bilinéaire des tables de correspondance, pour construire la table de correspondance LUTy applicable aux pixels du bloc Bjj, en prenant en compte la position du pixel dans le bloc By. On peut décrire cette étape de la façon suivante :
Soit p(x,y) un pixel du bloc By. x est son abscisse et y son ordonnée relativement au référentiel xoy du bloc, comme représenté sur la figure 11.
On note : tx = — etty = — , les dimensions en x et en y d'un bloc de u v l'image.
Dans l'exemple le pixel en haut à gauche du bloc Bjj a ainsi les coordonnées (0,0), le pixel en haut à droite, les coordonnées (tx,O), le pixel
en bas à gauche, les coordonnées (ty,O), et le pixel en bas à droite à les coordonnées (tx,ty).
On impose comme contrai nte que pour le point p(0,0), la table de correspondance qui s'applique est celle de la zone d'acquisition ZA1 ; pour le point p(tx,O), la table de correspondance qui s'applique est celle de la zone d'acquisition ZA2 ; pour le point p(O,ty), la table de correspondance qui s'applique est celle de la zone d'acquisition ZA3 ; et pour le point p(tx,ty), la table de correspondance qui s'applique est celle de la zone d'acquisition.
Pour les autres points, on a un mélange des différentes tables dans une proportion qui est fonction de la distance du pixel considéré aux différentes zones d'acquisition.
La mesure de distance doit être telle que la somme des distances du pixel aux différentes zones d'acquisition est égale à 1.
Dans un exemple, pour un masque de taille 2 x2, on mesure la distance du pixel(x,y) à la zone ZAi comme suit :
Di(x,y)= (ft~x)'(θ'~ :y) . Ainsi, plus le pixel considéré est à l'intérieur tx.ty du bloc vers la gauche et vers le bas, moins la contribution de la zone ZA1 sera importante.
De même on a :
D2(x,y)= {x)-{ty ~ y) pour la distance à la zone ZA2 tx.ty
D3(x,y)= {tx ~x)-{y) pour la distance à la zone ZA3, tx.ty
D4(x,y)= ww pour la distance à la zone ZA4, t txx..ttyy
Et on a bien ∑D, =I .
La table de correspondance en chaque point p(x,y) du bloc s'écrit de manière générale : LUT(x,y)= LUT1. Di(x,y) + LUT2. D2(x,y) + LUT3 D3(x,y) + LUT4. D4(x,y) .
soit, dans l'exemple de mesure de distance retenue :
LUT(χ ) = LUTι (tx-x)- (ty - y) | LUT2Jx) - (ty - y) | LUT3(tx - x) - (y) | LUT4(x) - (y) tx.ty tx.ty txXy txty
Au niveau de gris du pixel p(x,y) considéré, LUT(x,y) fait correspondre un niveau de gris de sortie issu de la moyenne des niveaux de gris de sortie des différentes LUTi pondérée en fonction d'une mesure de la distance du pixel aux différentes zones d'acquisition d'histogramme.
L'application d'un tel filtrage bilinéaire selon l'invention, fait quasiment disparaître la frontière entre deux blocs consécutifs car les pixels intérieurs passent progressivement d'une table à l'autre : on rentre progressivement à l'intérieur de chaque bloc, des informations issues du voisinage de ce bloc. Au final, l'image de sortie {y} offre une bonne qualité visuelle.
En pratique, la taille de la zone d'acquisition peut être prise plus large que dans l'exemple donné à titre illustratif ci-dessus.
Selon l'invention, on peut limiter l'introduction des informations issues du voisinage, en délimitant une zone d'interpolation limitée ZB, dans le bloc considéré, correspondant au bord, comme représenté sur la figure 12.
Dans la zone intérieure Zi du bloc, on n'a pas d'interpolation. La table de correspondance sera celle calculée sur le bloc, par application de l'algorithme NAC sur ce bloc. Pour la bordure, on applique le filtrage bilinéaire décrit ci-dessus. Dans un exemple, avec des blocs de 30x32 pixels, on prend une bordure de largeur ΔL de quatre pixels.
Ainsi, l'utilisation d'un filtrage bilinéaire à interpolation partielle se traduit pour les pixels de la zone intérieure Z du bloc, par l'application de la table calculée sur le bloc par l'algorithme NAC ; pour les pixels de la zone d'interpolation partielle ZB, par l'application de l'étape de filtrage bilinéaire.
Dans l'image de sortie {y}, on obtient quasiment la disparition des frontières comme précédemment, mais les performances de qualité visuelle à l'intérieur de chaque bloc dues à l'application de l'algorithme NAC sur le bloc sont conservées.
En conclusion, l'application d'un procédé de normalisation et d'augmentation du contraste selon l'invention permet de mieux visualiser des
détails dans l'image, du fait de la pluralité de tables de correspondance correspondant à la pluralité des blocs issus du découpage de l'image à traiter.
On obtient un rehaussement du bruit contenu dans l'image, en particulier le bruit des zones uniformes (champ, végétation, ciel..) est amplifié.
Le système de traitement des images du senseur appliquant un procédé de traitement de normalisation et augmentation du contraste selon l'invention, montre un durcissement de l'algorithme vis à vis des nuisances lumineuses éventuelles à proximité du senseur, qui se traduisent par des effets d'éblouissement sur l'image produite par le senseur.
De telles nuisances peuvent être par exemple, une attaque laser, un départ de missile, une torchère, un puit de pétrole en feu...., l'allumage d'un briquet proche du senseur.
Un système de traitement selon l'invention permet de réduire une zone d'éblouissement de façon très significative sur l'image visualisée ou enregistrée, après réduction de dynamique, permettant de distinguer des détails proches de la source de cet éblouissement, par rapport aux algorithmes classiques. En d'autres termes, avec un système de traitement selon l'invention, la présence de zones ponctuelles et extrêmes dans l'image perturbe uniquement la localité de l'agression et non pas l'image toute entière.