Gambar 3.16 Hasil Progress Bar
18. Tambahkan unit baru, dengan cara file, new unit.
Gambar 3.17 New Unit
19. Simpan unitnya dengan cara save as.
Gambar 3.18 Save All
20. Beri nama unitnya dengan nama UnitImageProses.
Gambar 3.19 Save UnitImageProses 21. Hasilnya sebagai berikut.
Gambar 3.20 Hasil Unit Image Proses
22. Ketik program berikut ke dalam UnitImageProses.
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
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 }