Untuk mempelajari Pengolagan Citra Di Delphi XE dengan Langsung Coding Algoritma,pertama kita perlu membuat GUI (antar muka pengguna Grafis) suntuk membuat gambar,Melihat Proses, dan menunjukan Hasilnya.
Berikut ini adalah penjelasan singkat tentang Histogram.
Apa itu HISTOGRAM CITRA..??
HISTOGRAM CITRA adalah grafik yang menggambarkan penyebaran nilai-nilai intensitas Pixel dari suatu citra atau bagian tertentu didalam citra.
Misalkan Citra digital Memiliki L derajat keabuan, yaitu dari 0 sampai L-l. Secara matematis histogram citra dihitung dengan rumus:
dimana :
Itulah menjelasan singkat dari saya tentang histogram, sekarang kita masuk pada sesi pembuatn aplikasi Histogram .
Alat & Bahan
- Aplikasi Delphi Xenon
- 1 Leptop (terserah kalian mau pakai leptop atou Pc juga boleh, asalkan ada aplikasi Delphi Xe nya.
- Buat Project baru pada delphi Xenon .
- Buat unit baru dengan cara klik File kemudian pilih New lalu pilih Unit.
- Kemudian Save All dan beri nama Unit1 sebagai FHistogram, Unit2 sebagai UHistogram dan Project1 sebagai Project_Histogram.
- Tambahkan Beberapa object kedalam Form :
Shape2: TShape;
ImageAsli: TImage;
ImageHistogram: TImage;
Button1: TButton;
Panel1: TPanel;
Label1: TLabel;
OpenPictureDialogCitra:
TOpenPictureDialog
- Pada aplikasi Delphi xe5, atur desainnya seperti pada gambar di bawah ini :
- Klik 2x pada buton "Ambil Citra" dan masukan coding program seperti berikut ini:
var
Histogram : THistogram;
begin
if OpenPictureDialogCitra.Execute then
begin
// Ambil citra
ImageAsli.Picture.LoadfromFile(
OpenPictureDialogCitra.FileName);
// Cek Citra
if not
((ImageAsli.Picture.Bitmap.PixelFormat = pf8bit) or
(ImageAsli.Picture.Bitmap.PixelFormat = pf16bit) or
(ImageAsli.Picture.Bitmap.PixelFormat
= pf24bit)) then
begin
ShowMessage('Pilihlah citra warna 24 bit
atau ' +
'citra berskala keabuan 8
bit');
ImageAsli.Picture := Nil;
Exit;
end;
// Tampilkan histogram citra
Histogram := THistogram.Create;
Histogram.Proses(ImageAsli,
ImageHistogram);
Histogram.Free;
end;
end;
- Buka Unit UHistogram, dan masukkan kode progam seperti berikut ini.
unit
UHistogram;
interface
uses SysUtils, Vcl.Graphics, Vcl.ExtCtrls,
vcl.Dialogs,
VCLTee.TeEngine, VCLTee.Series,
VCLTee.TeeProcs,
VCLTee.Chart;
type
THistogram = class (TObject)
private
FrekuensiMaks : Integer;
HistogramAbu : array[0..255] of Integer;
HistogramMerah : array[0..255] of
Integer;
HistogramHijau : array[0..255] of
Integer;
HistogramBiru : array[0..255] of Integer;
public
constructor Create;
procedure Proses(Citra: TImage; Histog:
TImage;
Opsi: Char = 'A');
end;
implementation
constructor THistogram.Create;
begin
end;
procedure THistogram.Proses(Citra: TImage;
Histog: TImage; Opsi: Char);
var
Baris, Kolom, Indeks: Integer;
PData : PByteArray;
begin
for Indeks := 0 to 255 do
begin
HistogramAbu[Indeks] := 0;
HistogramMerah[Indeks] := 0;
HistogramHijau[Indeks] := 0;
HistogramBiru[Indeks] := 0;
end;
if Citra.Picture.Bitmap.PixelFormat =
pf8bit then
begin
for Baris :=0 to
Citra.Picture.Bitmap.Height-1 do
begin
PData :=
Citra.Picture.Bitmap.ScanLine[Baris];
for Kolom := 0 to
Citra.Picture.Bitmap.Width-1 do
Inc(HistogramAbu[PData[Kolom]]);
end;
FrekuensiMaks:=0;
for Indeks := 0 to 255 do
if HistogramAbu[Indeks] >
FrekuensiMaks then
FrekuensiMaks :=
HistogramAbu[Indeks];
end;
if Citra.Picture.Bitmap.PixelFormat =
pf24bit then
begin
for Baris := 0 to
Citra.Picture.Bitmap.Height-1 do
begin
PData :=
Citra.Picture.Bitmap.ScanLine[Baris];
for Kolom := 0 to
Citra.Picture.Bitmap.Width-1 do
begin
Inc(HistogramBiru[PData[3 * Kolom]]);
Inc(HistogramHijau[PData[3 * Kolom +
1]]);
Inc(HistogramMerah[PData[3 * Kolom +
2]]);
end;
end;
for Indeks := 0 to 255 do
begin
if HistogramMerah[Indeks] >
FrekuensiMaks then
FrekuensiMaks :=
HistogramMerah[Indeks];
if HistogramHijau[Indeks] > FrekuensiMaks
then
FrekuensiMaks :=
HistogramHijau[Indeks];
if HistogramBiru[Indeks] >
FrekuensiMaks then
FrekuensiMaks :=
HistogramBiru[indeks];
end;
end;
// Gambar histogram
// -- Kosongkan citra
Histog.Picture := Nil;
// -- Tentukan panjang dan lebar citra
Histog.Picture.Bitmap.Height := 200;
Histog.Picture.Bitmap.Width := 275;
with Histog.Picture.Bitmap do
begin
// -- Buat garis pembagi
Canvas.Pen.Color := clBlack;
Canvas.MoveTo(10, 165);
Canvas.LineTo(265, 165);
Indeks := 0;
while Indeks < 255 do
begin
Canvas.MoveTo(10 + Indeks, 163);
Canvas.LineTo(10 + Indeks, 167);
Canvas.TextOut(10 + Indeks, 168,
IntToStr(Indeks));
Indeks := Indeks + 40;
end;
if Citra.Picture.Bitmap.PixelFormat =
pf8bit then
begin
// -- Buat histogram komponen abu-abu
Canvas.Pen.Color := clBlack;
Canvas.MoveTo(10, 160);
for Indeks := 0 to 255 do
Canvas.LineTo(10 + Indeks,
160 - Round(150 *
HistogramAbu[Indeks] /
FrekuensiMaks));
end;
// Pastikan Opsi berupa A, R, G, B
if not ((Opsi = 'R') or (Opsi = 'G')
or (Opsi = 'B')) then
Opsi := 'A';
if (Citra.Picture.Bitmap.PixelFormat =
pf24bit) and
((Opsi = 'A') or (Opsi = 'R')) then
begin
// -- Buat histogram komponen merah
Canvas.Pen.Color := clRed;
Canvas.MoveTo(10, 160);
for Indeks := 0 to 255 do
Canvas.LineTo(10 + Indeks,
160 - Round(150 *
HistogramMerah[Indeks] /
FrekuensiMaks));
end;
if (Citra.Picture.Bitmap.PixelFormat =
pf24bit) and
((Opsi = 'A') or (Opsi = 'G')) then
begin
// -- Buat histogram komponen hijau
Canvas.Pen.Color := clGreen;
Canvas.MoveTo(10, 160);
for Indeks := 0 to 255 do
Canvas.LineTo(10 + Indeks,
160 - Round(150 *
HistogramHijau[Indeks] /
FrekuensiMaks));
end;
if (Citra.Picture.Bitmap.PixelFormat =
pf24bit) and
((Opsi = 'A') or (Opsi = 'B')) then
begin
// -- Buat histogram komponen biru
Canvas.Pen.Color := clBlue;
Canvas.MoveTo(10, 160);
for Indeks := 0 to 255 do
Canvas.LineTo(10 + Indeks,
160 - Round(150 *
HistogramBiru[Indeks] /
FrekuensiMaks));
end;
end;
end;
end.- Selanjutnya Run 1. program dengan menekan tombol F9, dan hasilnya akan seperti pada gambar dibawah ini:
- Lakukan uji coba dengan mengambil file berupa gambar dengan jenis Citra Warna, dengan mengklik tombol Ambil Citra lalu pilih gambar.
- Maka tampilannya akan seperti pada fambabawah ini:
- Pilih gambar dengan jenis Citra Grayscale, dengan mengklik tombol Ambil Citra lalu pilih gambar
- Maka tampilanya akan seperti pada gambar di bawah in:
- SELESAI
Sekian tutorial dari saya tentang cara membuat Cara membuat aplikasi Histogram Pada " Delphi Xenon".
tunggu tutorial yang lain dari saya.
SAMPAI JUMPA