Le but est donner plus de niveaux de gris pour représenter les objets que pour représenter le fond d'image qui est considéré comme plus homogène.
Dans l'exemple proposé ici, les pixels de l'intervalle [74..255] correspondent au fond d'image (le ciel). Ils sont compressés dans le nouvel intervalle [200..255]. Les pixels de l'intervalle [0..73] correspondent aux objets (église). Ils sont étendus dans le nouvel intervalle [0..199].Les valeurs de seuil peuvent être obtenues automatiquement par une segmentation préalable en fond / objets.
pthresholding 74 255 images/churchgray.pan background.pan plineartransform 0 200 255 background.pan background1.pan pmask background1.pan background.pan background2.pan pthresholding 0 73 images/churchgray.pan objects.pan plineartransform 0 0 199 objects.pan objects1.pan pmask objects1.pan objects.pan objects2.pan por background2.pan objects2.pan result-I-1-1.pan
Image initiale. | Image corrigée. |
L'égalisation d'histogramme permet de renforcer les détails utilisant plus de niveaux de gris pour les pixels de forte probabilité, et d'utiliser moins de niveaux de gris pour les pixels de faible probabilité.
Cette opération s'applique très mal aux images couleur si on agit bande par bande de espace Rouge-Vert-Bleu. Il est nécessaire de l'appliquer uniquement sur la composante luminance de l'espace Teinte-Saturation-Luminance.
phistogramequalization 0 255 images/churchgray.pan result-I-2-1.pan
Image initiale. | Image corrigée. |
Le but est de modifier l'histogramme d'une image en copiant la forme de l'histogramme d'une autre image. L'intérêt est de modifier à la main l'histogramme d'une image exemple avec un logiciel de dessin approprié puis d'appliquer cette même modification à toutes les autres images.
phistogramspecification images/chuchgray.pan modified-tangram.pan output.pan
Image initiale. | Histogramme modifié à la main. |
Autre image initiale. | Image modifiée par copie d'histogramme. |
Le but est d'améliorer le contraste des objets par rapport au fond de l'image. L'amélioration se fait autour des bords des objets.
Les bords des objets sont détectés à partir du laplacien de l'image (dérivée seconde). Ainsi, en additionnant l'image par une certaine fraction de son laplacien, on creuse le bord à l'extérieur de l'objet et on renforce la hauteur du bord à l'intérieur de l'objet.
g(x,y) = f(x,y) + k . ∇(f(x,y)
où k est le degré de renforcement du contraste.
k=3 pim2sf images/forest.pan tmp1.pan pexponentialfiltering 0.6 tmp1.pan tmp2.pan pgetband 0 tmp2.pan | plaplacian 4 - tmp3-0.pan pgetband 1 tmp2.pan | plaplacian 4 - tmp3-1.pan pgetband 2 tmp2.pan | plaplacian 4 - tmp3-2.pan pimgs2imc tmp3-0.pan tmp3-1.pan tmp3-2.pan tmp3.pan pmultcst $k tmp3.pan tmp4.pan padd tmp1.pan tmp3.pan | pim2uc - result-II-1-1.pan
Image initiale. | Image modifiée. |
Approximation du laplacien en utilisant une matrice de convolution.
g(x,y)=f(x,y)-L2f(x,y) { if the center coefficient is <0 } g(x,y)=f(x,y)+L2f(x,y) { if the center coefficient is >0 } Rem L2f(x,y) is the laplacian of the image f(x,y) 0 -1 0 -1 5*k -1 0 -1 0
psharp 8 1.5 images/forest.pan result-II-2-1.pan
Image initiale. | Image corrigée. |
Une simple opération de rehaussement de contraste morpholoqique peut être obtenue à partir du calcul des chapeaux haut-de-forme blanc et noir. Un chapeau haut-de-forme permet de détecter les pics (blancs) ou les trous (noirs) dans la fonction niveaux de gris. Le chapeau haut-de-forme blanc peut être ajoutée à l'image initiale pour améliorer la visibilité des détails blancs, alors que le chapeau haut-de-forme noir peut être soustrait à l'image pour améliorer la visibilité des détails noirs.
Κth = (f + WTH(f)) - BTH(f)
perosion 2 2 esophagusgray.pan i1.pan pdilatation 2 2 i1.pan i2.pan psub esophagusgray.pan i2.pan wth.pan pdilatation 2 2 esophagusgray.pan i3.pan perosion 2 2 i3.pan i4.pan psub i4.pan esophagusgray.pan bth.pan pim2sl esophagusgray.pan i5.pan padd i5.pan wth.pan i6.pan psub i6.pan bth.pan enhanced.pan
La principale différence peut être observée à l'intérieur des cellules.
Image initiale (f) | Chapeau haut-de-forme blanc WTH(f) (inversé) |
Chapeau haut-de-forme noir BTH(f) (inversé) | Image résultat: f+WTH(f)-BTH(f) |
Le unsharp masking opère par soustraction la version lissée de l'image initiale suivie d'un ajustement des niveaux de gris dans l'image de différence. Il permet de préserver les détails de hautes fréquences en même temps que le lissage des surfaces homogènes. Il ameliore les details et augmente les contours qui sont non visibles dans l'image initiale.
Malheureusement, le filtre sharpening a aussi l'effet indésirable d'accroître le bruit dans l'image filtrée.
Sharpen the image content. L'opération consiste à
additionner une certaine fraction d'image initale à une version
filtrée par un passe-bas de cette image.
La version filtrée par un passe-haut est construite en soustrayant
une version lisée de l'image initiale à l'image initiale.
où A spécifie la proportion of de l'image initiale à ajouter (A>=1),
f(x,y) est l'image initiale, fhp(x,y) la version filtrée par passe-haut de f(x,y)
et g(x,y) l'image résultat.
Quand A=1 alors le filtrage high-boost est réduit à un filtrage passe-haut
Plus A est grand, moins le contraste est fort.
paramètre value réelle >= 1
0 -1 0 -1 A+4 -1 0 -1 0 A=1 -> "standard" laplacian sharpening.
Rem: non-linear filters are inadequat for objective enhancement since they are capable of removing image features.
fhp(x,y) = f(x,y) - flp(x,y)
In frequency domain: Hhp(u,v)=1-Hlp(u,v)
Example: unsharpmasking 0.8 0.7 tangram.pan
pim2sf in.pan i1.pan pgaussianfiltering $s i1.pan i2.pan psub i1.pan i2.pan i3.pan pmultcst $k i3.pan i4.pan padd i1.pan i4.pan i5.pan pclipvalues 0 255 i5.pan out.pan
Image initiale | Image corrigée |
Parameters:
Example: unsharpmasking 2 0.7 tangram.pan
pim2sl in.pan i1.pan pmedianfiltering $s i1.pan i2.pan psub i1.pan i2.pan i3.pan pmultcst $k i3.pan i4.pan padd i1.pan i4.pan i5.pan pclipvalues 0 255 i5.pan out.pan
Image initiale | Image corrigée |
Example: unsharpmasking 0 50 2 0.7 tangram.pan
pproperty 0 in.pan ncol1=`pstatus` pproperty 1 in.pan nrow1=`pstatus` pproperty 2 in.pan ndep1=`pstatus` psetcst 0 in.pan i1.pan pfft in.pan i1.pan i2.pan i3.pan pproperty 0 i2.pan ncol2=`pstatus` pproperty 1 i2.pan nrow2=`pstatus` pproperty 2 i2.pan ndep2=`pstatus` pbutterworthfilter $ncol2 $nrow2 $ndep2 1 $cutin $cutoff $order i4.pan # smooth pmultcst $k i4.pan i13.pan pmult i2.pan i13.pan i5.pan pmult i3.pan i13.pan i6.pan pifft i5.pan i6.pan i7.pan i8.pan pextractsubimage 0 0 0 $ncol1 $nrow1 $ndep1 i7.pan i9.pan pim2sf in.pan i10.pan padd i9.pan i10.pan i11.pan pclipvalues 0 255 i11.pan out.pan
Image initiale | Image corrigée |
Example: unsharpmasking 0 50 2 0.7 tangram.pan
pproperty 0 in.pan ncol1=`pstatus` pproperty 1 in.pan nrow1=`pstatus` pproperty 2 in.pan ndep1=`pstatus` psetcst 0 in.pan i1.pan pfft in.pan i1.pan i2.pan i3.pan pproperty 0 i2.pan ncol2=`pstatus` pproperty 1 i2.pan nrow2=`pstatus` pproperty 2 i2.pan ndep2=`pstatus` pbutterworthfilter $ncol2 $nrow2 $ndep2 0 $cutin $cutoff $order i4.pan #smooth pmult i2.pan i4.pan i5.pan pmult i3.pan i4.pan i6.pan pifft i5.pan i6.pan i7.pan i8.pan pextractsubimage 0 0 0 $ncol1 $nrow1 $ndep1 i7.pan i9.pan pim2sf in.pan i10.pan psub i10.pan i9.pan i11.pan pmultcst $k i11.pan i12.pan padd i10.pan i12.pan i13.pan pclipvalues 0 255 i13.pan out.pan
Image initiale | Image corrigée |
Example: unsharpmasking 0 20 0.7 tangram.pan
pproperty 0 in.pan ncol1=`pstatus` pproperty 1 in.pan nrow1=`pstatus` pproperty 2 in.pan ndep1=`pstatus` psetcst 0 in.pan i1.pan pfft in.pan i1.pan i2.pan i3.pan pproperty 0 i2.pan ncol2=`pstatus` pproperty 1 i2.pan nrow2=`pstatus` pproperty 2 i2.pan ndep2=`pstatus` pgaussianfilter $ncol2 $nrow2 $ndep2 1 $cutin $cutoff i4.pan # smooth pmultcst $k i4.pan i13.pan pmult i2.pan i13.pan i5.pan pmult i3.pan i13.pan i6.pan pifft i5.pan i6.pan i7.pan i8.pan pextractsubimage 0 0 0 $ncol1 $nrow1 $ndep1 i7.pan i9.pan pim2sf in.pan i10.pan padd i9.pan i10.pan i11.pan pclipvalues 0 255 i11.pan out.pan
Image initiale | Image corrigée |
Generates a sharpened image by adding a certain
proportion of the input image to a certain proportion of
highpass filtered version of itself. That is:
g(x,y)=a*f(x,y) + b*fhp(x,y)
with a>=0 and b> a.
It generalizes the high-boost filtering, and it is
reduced to high-boost filtering when a=(A-1) and b=1.
Typical values of a are in the range 0.25 to 0.5
and typical values of b are in the range 1.5 to 2.0.
When the image is darker than desired.
(a >=1) fhb(x,y) = Af(x,y)-flp(x,y) fhb(x,y) = (A-1)f(x,y) + fhp(x,y) ->Advantage: can be implemented directly with one filter: Hhb()u,vc)=(A-1) + Hhp(u,v)
Hhfe(u,v)=a+bHhp(u,v) a>=0; b>a. Typical values are: a=0.25 -> 0.5 b=1.5->20.0Rem : si a =A-1 et b=1 -> reduced to high-boost filtering Hhb(u,v)=(A-1)+Hhp(u,v))
Example: highfrequencyfiltering 0.5 2.0
pproperty 0 in.pan ncol1=`pstatus` pproperty 1 in.pan nrow1=`pstatus` pproperty 2 in.pan ndep1=`pstatus` psetcst 0 in.pan i1.pan pfft in.pan i1.pan i2.pan i3.pan pproperty 0 i2.pan ncol2=`pstatus` pproperty 1 i2.pan nrow2=`pstatus` pproperty 2 i2.pan ndep2=`pstatus` pbutterworthfilter $ncol2 $nrow2 $ndep2 1 0 20 2 i4.pan # smooth pmultcst $a i4.pan i12.pan paddcst $b i12.pan i13.pan pmult i2.pan i13.pan i5.pan pmult i3.pan i13.pan i6.pan pifft i5.pan i6.pan i7.pan i8.pan pextractsubimage 0 0 0 $ncol1 $nrow1 $ndep1 i7.pan i9.pan pclipvalues 0 255 i9.pan out.pan
Image initiale | Image corrigée |
Le filtre homomorphique permet d'unifier la luminance sur l'image et d'accroîte le contraste. Il est basé sur modèle de luminance-réflectance. Le but est d'améliorer l'apparence d'une image en comprimant l'intervalle des valeurs de niveaux de gris et rehaussant le contraste simultanément.
L'ajustement de la pente:
ln -> FFT -> H(u,v) -> IFFT -> exp H(u,v) = (gammaH-gammaL)[1-exp(-c (D^2(u,v)/D0^2))]+gammaL c: control sharpness Ex: gammaL=0.5 gammaH=2.0
Example: homomorphicfiltering 1.5 2.0 20 2 churchgray.pan
high=2.0 low=1.5 c=`echo "scale = 1; $high - $low" | bc` pproperty 0 images/churchgray.pan ncol1=`pstatus` pproperty 1 images/churchgray.pan nrow1=`pstatus` pproperty 2 images/churchgray.pan ndep1=`pstatus` paddcst 1 images/churchgray.pan i0.pan plog i0.pan i0.pan psetcst 0 i0.pan i1.pan pfft i0.pan i1.pan i2.pan i3.pan pproperty 0 i2.pan ncol2=`pstatus` pproperty 1 i2.pan nrow2=`pstatus` pproperty 2 i2.pan ndep2=`pstatus` pbutterworthfilter $ncol2 $nrow2 $ndep2 1 0 $cutoff 1 i3.pan i4.pan # smooth pmultcst $c i4.pan i12.pan paddcst $low i12.pan i13.pan pmult i2.pan i13.pan i5.pan pmult i3.pan i13.pan i6.pan pifft i5.pan i6.pan i7.pan i8.pan pextractsubimage 0 0 0 $ncol1 $nrow1 $ndep1 i7.pan i9.pan pexp i9.pan i11.pan paddcst -1 i11.pan i1.pan pclipvalues 0 255 i11.pan out.pan
Image initiale. | Image corrigée. |