membuat HISTOGRAM EQUALIZATION menggunakan delphi7


PERATAAN HISTOGRAM (HISTOGRAM EQUALIZATION)
Histogram citra memberikan informasi tentang penyebaran intensitas pixel-pixel di dalam citra. Misalnya,  citra yang terlalu terang atau terlalu gelap memiliki histogram yang sempit. Agar diperoleh citra yang baik, maka penyebaran nilai intensitas harus diubah. Teknik yang lazim dipakai adalah histogram equalization. Tujuan dari perataan histogram adalah untuk memperoleh penyebaran histogram yang merata, sehingga setiap derajat keabuan memiliki jumlah pixel yang relatif sama.

CARA MEMBUAT PROGRAM  EQUALIZATION :
1.      Buka program delphi, dengan cara pilih menu start, program borland Delphi 7.


2.       Kemudian pilih menu file, new, application.

3.      Pada object inspector, ubah properti captionnya dengan nama Equalization, dan namenya dengan nama FormEqualization.

4.      Simpan unit dan projectnya dengan cara save all.

5.       Beri nama unitnya dengan nama UnitEqualization.

6.       Beri nama projectnya dengan nama ProjectEqualization.

7.       Tambahkan image ke form dengan cara pilih menu Additional, image, lalu klik ke form.

8.       Rubah stretchnya ke true dan autosizenya true.

9.       Dengan cara yang sama tambahkan image2 di sebelah kanan image1 kemudian ubah stretchnya ke true dan autosizenya true.

10.   Tambahkan button ke form, dengan cara pilih menu standart, button, lalu klik ke form.


11.   Pada oject inspector rubah properti captionnya dengan nama Open, kemudian namenya dengan nama btOpen.


12.   Tambahkan OpenPictureDialog ke form, dengan cara pilih menu dialog, OpenPictureDialog, lalu klik ke form.

13.   Hasilnya sebagai berikut.

14.   Doble klik button open kemudian ketik program yang di hurup tebal berikut.

var
FormEqualization: TFormEqualization;
FileNameImg: string;
implementation
{$R *.dfm}
procedure TFormEqualization.btOpenClick(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
begin
Caption := 'Histogram Equalization : '+
OpenPictureDialog1.FileName;
Image1.Picture.LoadFromFile (OpenPictureDialog1.FileName);
Image2.Visible := False;
end;
end;
end.

15.   Tambahkan button pada form, pada object inspector rubah properties captionnya dengan nama Equalization dan Namenya dengan nama btEqualization.

16.   Tambahkan ProgressBar ke form dengan cara, pilih menu Win32, ProgressBar. Lalu klik ke form, lalu geser kekanan.

17.   Hasilnya sebagai berikut.

18.   Tambahkan unit baru, dengan cara file, new unit.

19.   Simpan unitnya dengan cara save as.

20.   Berinama unitnya dengan nama UnitImageProses.

21.   Hasilnya sebagai berikut.

22.   Ketik program berikut ke dalam UnitImageProses.

unit UnitImageProses;
interface
uses
WINPROCS, Graphics, ExtCtrls, ComCtrls;
type
TFreqHist = array [0..255] of longint;
function ImgGetGray (var Image:TImage; x,y:integer) : byte;
procedure ImgHistogramEqu (var Image:TImage; var ProgressBar1:
TProgressBar);
implementation
const
PercentR = 0.299;
PercentG = 0.587;
PercentB = 0.114;
function ByteRange (r:double) : byte;
begin
if r<0 then ByteRange:=0
else if r>255 then ByteRange:=255
else ByteRange:=Round(r);
end;
function RgbToGray (Clr:TColor) : byte;
var r,g,b:byte;
begin
r := GetRValue(Clr);
g := GetGValue(Clr);
b := GetBValue(Clr);
RgbToGray := ByteRange (r*PercentR + g*PercentG + b*PercentB);
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 ImgHistogramEqu (var Image:TImage; var ProgressBar1:
TProgressBar);
var
x,y,i:integer; Clr:TColor; ClrGray:byte;
Freq, NewColor: TFreqHist;
TotFreq, ImgSize: longint;
begin
ProgressBar1.Max := Image.Width-1;
ProgressBar1.Position := 0;
{ set Frek[i]=0 }
for i:=0 to 255 do Freq[i]:=0;
{ hitung frekuensi tiap warna }
for x:=0 to Image.Width-1 do
for y:=0 to Image.Height-1 do
begin
ClrGray := ImgGetGray (Image,x,y);
Inc (Freq[ClrGray]);
end;
{ hitung pixel baru }
TotFreq := 0;
ImgSize := Image.Width * Image.Height;
for i:=0 to 255 do
begin
Inc (TotFreq, Freq[i]);
NewColor[i] := Round((TotFreq/ImgSize)*255);
end;
{ tuliskan pixel baru }
for x:=0 to Image.Width-1 do
begin
for y:=0 to Image.Height-1 do
begin
ClrGray := ImgGetGray (Image,x,y);
ClrGray := ByteRange (NewColor[ClrGray]);
Image.Canvas.Pixels[x,y] := RGB (ClrGray,ClrGray,ClrGray);
end;
ProgressBar1.Position := x;
Image.Repaint;
end;
end;
end.
 
23.  Kembali ke FormEqualization.


24.    Doble klik button Equalization.

25.   Lalu ketik program dengan hurup tebal berikut.

procedure TFormEqualization.btEqualizationClick(Sender: TObject);
begin
Image2.Visible := True;
Image2.Picture.Graphic := Image1.Picture.Graphic;
ImgHistogramEqu(Image2,ProgressBar1);
end;

26.   Dibawah implementasi ketik program yang tertulis huruf tebal berikut.
implementation
{$R *.dfm}
uses
UnitImageProses;
27.   Tambahkan button ke form, lalu pada object inspector rubah properties captionnya dengan nama Exit dan namenya dengan nama btExit.

28.   Doble klik button Exit, lalu ketik program berikut.

procedure TFormEqualization.btExitClick(Sender: TObject);
begin
FormEqualization.Close;
end;
29.  Simpan program dengan cara file save all.
30.   Compiler progran dengan cara pilih menu Project, Compile ProjectEqualization.

31.   Lalu jalankan progran dengan cara pilih menu Run, Run.

32.   Hasil sebagai berikut.

33.   Keluar dari program klik button Exit.

Comments