PROGRAM WIENER FILTER SELENGKAPNYA ADALAH SEBAGAI BERIKUT:
function ImgGetGray var Image:TImage; x,y:integer : byte; begin
Result := RgbToGray Image.Canvas.Pixels[x,y]; end;
procedure ImgConvertToGrayscale var Image1:TImage; var ProgressBar1: TProgressBar;
var x,y:integer; ClrGray:byte; begin
ProgressBar1.Max := Image1.Width-1; ProgressBar1.Position := 0;
for x:=0 to Image1.Width-1 do begin
for y:=0 to Image1.Height-1 do begin
ClrGray := ImgGetGray Image1,x,y; Image1.Canvas.Pixels[x,y] := RGB ClrGray,ClrGray,ClrGray;
end; Image1.Repaint;
ProgressBar1.Position := x; end;
end; procedure ImgFilterWiener var Image:TImage; Mtrx:TMatrixFilter;
nCol,nRow:byte; var ProgressBar1: TProgressBar; var dx,dy:byte; ImgTemp:TImage;
mean,pSpectrum:Variant; pSpectrumNoise: real; procedure CalculateParameter x,y:integer;
var row,col:integer; clrGray,tot,tot2:real; begin
tot:=0; tot2:=0; for col:=1 to nCol do
for row:=1 to nRow do begin
clrGray := ImgGetGray ImgTemp, x+col-dx-1, y+row-dy-1; tot := tot + Mtrx[col,row] clrGray;
tot2 := tot2 + Mtrx[col,row] SqrclrGray; end;
mean[x,y] := totnColnRow; pSpectrum[x,y] := tot2nColnRow - mean[x,y];
end; procedure CalculatePixel x,y:integer; var clrGray:byte;
var c:real; begin
clrGray := ImgGetGray ImgTemp, x,y; c := mean[x,y] + pSpectrum[x,y]pSpectrum[x,y]+pSpectrumNoise
clrGray-mean[x,y]; clrGray := ByteRange c;
end; var
x,y: integer; clrGray: byte;
begin dx := nCol div 2;
dy := nRow div 2; ImgTemp := TImage.Create Image.Parent;
ImgTemp.Picture.Graphic := Image.Picture.Graphic;; mean := VarArrayCreate[0,Image.Width-1, 0,Image.Height-1], varSingle;
pSpectrum := VarArrayCreate[0,Image.Width-1, 0,Image.Height-1], varSingle; pSpectrumNoise := 0;
{ parameter } ProgressBar1.Max := Image.Width;
ProgressBar1.Position := 0; pSpectrumNoise := 0;
for x:=dx to Image.Width-1-dx do begin
for y:=dy to Image.Height-1-dy do begin
CalculateParameter x,y; pSpectrumNoise := pSpectrumNoise + pSpectrum[x,y];
Image.Canvas.Pixels[x,y] := RGB clrGray,clrGray,clrGray; end; { for y }
ProgressBar1.Position := x; end; { for x }
pSpectrumNoise := pSpectrumNoise Image.Width-dxImage.Height-dy; ProgressBar1.Position := ProgressBar1.Max;
{ filtering process } for x:=dx to Image.Width-1-dx do
begin for y:=dy to Image.Height-1-dy do
begin CalculatePixel x,y, clrGray;
Image.Canvas.Pixels[x,y] := RGB clrGray,clrGray,clrGray; end; { for y }
ProgressBar1.Position := x; end; { for x }
ProgressBar1.Position := ProgressBar1.Max; Image.Repaint;
end; end.