" Le filtre de Kramer et Bruckner est l'un des filtres non-linéaires qu'on appelle des filtres de choc, ils réduisent l'étendue des dégradés. Ils opèrent en étendant les minima et maxima de niveaux de gris dans une image. En répétant l'application d'un tel filtre, on aboutit à une image sans le moindre dégradé, donc formée de zones constantes séparées par des marches abruptes. "
voila donc une implémentation Delphi
et les deux procédures de calcul des niveaux maxima de gris :
Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 procedure TForm1.KrameretBruckner1Click(Sender: TObject); var i,j :integer; intensMax, intensMin :byte; begin intensMin:= greymin(image1); intensMax:= greymax(image1); for j:=0 to image1.width do for i:=0 to image1.Height do if getrvalue(image1.canvas.pixels[j,i])>=(intensMin+intensMax)/2 then image1.canvas.pixels[j,i]:= rgb(intensMax,intensMax,intensMax) else image1.canvas.pixels[j,i]:= rgb(intensMin,intensMin,intensMin); end;
Code Pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 function greymax (i:timage):byte; var ik ,j :integer; v1,v2 :byte ; begin v2:=0; for j:=0 to i.width do for ik:=0 to i.Height do begin v1:= floor((getrvalue(i.Canvas.Pixels [j,ik])+getbvalue(i.Canvas.Pixels [j,ik])+getgvalue(i.Canvas.Pixels [j,ik]))/3); v2:= max(v1,v2); end; result:=v2 ; end;
a noter que cette procédure marche même pour les images en RGB ( mal heureusement j'ai pas encore adapté l'algorithme lui même qui n'utilise que les images en niveaux de gris )
je posterais une version Borland C++ un peu plus tard
Code Pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 function greymin(i:timage):byte ; var ik,j :integer; v1,v2 :byte ; begin v2:=255; for j:=0 to i.width do for ik:=0 to i.Height do begin v1:= floor((getrvalue(i.Canvas.Pixels [j,ik])+getbvalue(i.Canvas.Pixels [j,ik])+getgvalue(i.Canvas.Pixels [j,ik]))/3); v2:= min(v1,v2); end; result:=v2 ; end;
Partager