Doble klik button Exit, lalu ketik program berikut. Compiler progran dengan cara pilih menu Project, Compile ProjectWienerFilter.
begin FormWienerFilter.Close;
end; end.
unit UnitImageProses; interface
uses WINPROCS, Graphics, ExtCtrls, ComCtrls, Variants;
type TFreqHist = array [0..255] of longint;
TMatrixFilter = array [1..16,1..16] of real; function RgbToGray Clr:TColor : byte;
function ImgGetGray var Image:TImage; x,y:integer : byte; procedure ImgConvertToGrayscale var Image1:TImage; var ProgressBar1:
TProgressBar; procedure ImgFilterWiener var Image:TImage; Mtrx:TMatrixFilter;
nCol,nRow:byte; var ProgressBar1: TProgressBar; implementation
const PercentR = 0.299;
PercentG = 0.587; PercentB = 0.114;
function ByteRange r:double : byte; begin
if r0 then ByteRange:=0 else if r255 then ByteRange:=255
else ByteRange:=Roundr; end;
function RgbToGray Clr:TColor : byte; var r,g,b:byte;
begin r := GetRValueClr;
g := GetGValueClr; b := GetBValueClr;
RgbToGray := ByteRange rPercentR + gPercentG + bPercentB; end;
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