10.3 PROGRAM DETEKSI TEPI ROBERT SELENGKAPNYA ADALAH SEBAGAI
BERIKUT:
unit UnitRobert; interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtDlgs, StdCtrls, ExtCtrls; type
TFormRobert = classTForm Image1: TImage;
Image2: TImage; btOpen: TButton;
OpenPictureDialog1: TOpenPictureDialog; btRobert: TButton;
btExit: TButton; procedure btOpenClickSender: TObject;
procedure btRobertClickSender: TObject; procedure btExitClickSender: TObject;
private procedure Robert;
public { Public declarations }
end; var
FormRobert: TFormRobert; FileNameImg: string;
implementation {R .dfm}
uses UnitImageProses;
procedure TFormRobert.btOpenClickSender: TObject; begin
if OpenPictureDialog1.Execute then begin
FileNameImg := OpenPictureDialog1.FileName; Caption := Deteksi Tepi Robert : + OpenPictureDialog1.FileName;
Image1.Picture.LoadFromFile OpenPictureDialog1.FileName;
Image2.Visible := False; end;
end; procedure TFormRobert.btRobertClickSender: TObject;
begin Image2.Visible := True;
Image2.Picture.Graphic := Image1.Picture.Graphic; Robert;
end; procedure TFormRobert.Robert;
const robert : array[0..1,0..1,0..1] of smallint= 1,0,0,-1, -1,0,0,1;
var row:array[0..8] of pbytearray;
col:pbytearray; x,y:smallint;
i,j,k,p:smallint; image:tbitmap;
sum,jum:longint; begin
p:=-120; image:=Tbitmap.Create;
image.AssignImage1.Picture.Bitmap; for y:=1 to Image1.Height-2 do
begin for i:=-1 to 1 do
row[i+1]:=image.ScanLine[y+i]; col:=Image1.Picture.Bitmap.ScanLine[y];
x:=3; repeat
sum:=0; for i:=-1 to 1 do
for j:=-1 to 1 do sum:=sum+Robert[0,i+1,j+1]row[i+1,x+j3];
jum:=0; for i:=-1 to 1 do
for j:=-1 to 1 do jum:=jum+Robert[1,i+1,j+1]row[i+1,x+j3];
sum:=sum+jum+p; if sum255 then sum:=255;
if sum0 then sum:=0; for k:=0 to 2 do col[x+k]:=sum;
incx,3; until x=3Image1.Width-4;
end;
Image2.picture.bitmap:=Image1.Picture.Bitmap; image.free;
end; procedure TFormRobert.btExitClickSender: TObject;
begin FormRobert.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; 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;