L'objectif est de diminuer l'effet moiré qui apparaît dans des images issues de photos scannées. Le moiré résulte d'un phénomène d'interférences spatiales entre plusieurs réseaux de tramage de fréquences différentes. Ce phénomène a lieu en particulier lors de la numérisation de photos d'imprimés tels que des cartes postales, illustrations de livres ou images de magazines ou de journaux. Il se traduit par une texture ondulatoire uniformément répartie sur toute la surface de l'image. Il est dû au fait qu'une photo est imprimée sous la forme d'une série de points avec une certaine fréquence, alors que le scanner acquière une image sous la forme d'une série de pixels à une fréquence d'échantillonnage différente. Quelque fois il y a recouvrement parfait entre les point de la photo et les points d'échantillonnage du scan, mais d'autre fois il a décalage et ceci de manière régulière.
Le but est donc de détecter les fréquences de la texture du moiré et de les supprimer sans toucher aux informations présentes de l'image.
L'image initiale. | L'image résultat. |
Une façon simple pour supprimer le moiré est d'utiliser un lissage Gaussien (opérateur pgaussianfiltering dans Pandore).
La méthode décrite ici est plus sophistiquée. Elle est basée sur la suppression des pics de fréquence les plus importants dans les images de la transformée de Fourier de l'image originale. Vu que le moiré est assez fort dans les images, il présente donc des pics importants dans l'espace fréquentiel.
Les étapes de la méthode sont donc :
À noter que pour les images couleurs, ce plan doit être appliqué bande par bande.
La transformée est directe. On ne s'intéresse ici qu'à l'image du module de la transformée.
pany2pan input.png input.pan psetcst 0 input.pan tmp1.pan pfft input.pan tmp1.pan real.pan imag.pan pfftshift real.pan imag.pan tmp2.pan tmp3.pan pmodulus tmp2.pan tmp3.pan modulus.pan logtransform 0 0 255 modulus.pan mod.pan | |
mod.pan : L'image du module de la transformée de Fourier. |
La détection des pics est effectuée par un chapeau haut-de-forme blanc puis une binarisation. Au préalable un lissage médian permet de supprimer les petits points blancs isolés.
Le chapeau haut-de-forme blanc correspond à la différence entre l'image et son ouverture :
WTH(f) = f - δ(ε(f))
La valeur de seuil de la binarisation est déterminée comme la valeur de niveau de gris qui maximise la quantité totale d'information du fond et des pics pris séparément. L'information se mesure par l'entropie, on utilise donc une binarisation par entropie.
pmedianfiltering 3 mod.pan mod.pan perosion 1 8 mod.pan tmp4.pan pdilatation 1 8 tmp4.pan tmp5.pan pdif tmp5.pan mod.pan wth.pan pentropybinarization wth.pan freq.pan | |
freq.pan : Les pics détectés. |
La suppression se fait par le masquage des pics détectés sur l'image de la transformée de Fourier. Seuls les pics situés sur l'axe des abscisses et des ordonnées sont conservés. Pour cela, on crée une image artificielle d'une croix blanche.
pshapedesign 1024 512 0 3 23 1024 horiz.pan pshapedesign 1024 512 0 3 512 12 vertic.pan por horiz.pan vertic.pan mask1.pan pinverse mask1.pan mask1.pan pmask freq.pan mask1.pan mask.pan | |
mask1.pan : Le masque utilisé pour supprimer les pics. | |
mask.pan : Les pics supprimés. |
Une fois, les pics de fréquence sélectionnés, il faut masquer l'image de Fourier (partie réelle et partie imaginaire) avec le masque défini. Il suffit ensuite d'appliquer la transformée inverse pour revenir dans le domaine spatial.
# Masking (inversion and shift) pinverse tmp6.pan tmp6.pan pfftshift tmp6.pan tmp6.pan tmp7.pan tmp8.pan pmask real.pan tmp7.pan tmp9.pan pmask imag.pan tmp8.pan tmp10.pan # Inverse Fourier transform pifft tmp9.pan tmp10.pan tmp11.pan tmp12.pan plineartransform 0 0 255 tmp11.pan tmp13.pan pim2uc tmp13.pan output.pan ppan2png output.pan output.png | |
output.pan : L'image résultat. |