Tambahkan button ke form, dengan cara pilih menu standart, button, lalu Doble klik button open kemudian ketik program yang di hurup tebal

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 }