Beri nama unitnya dengan nama UnitImageProses. Ketik program berikut ke dalam UnitImageProses.
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.