PENGGABUNGAN CITRA
(IMAGE BLENDING)
Penggabungan citra dilakukan dengan
cara menimpakan (superimpose) sebuah
citra pada citra yang lain. Operasi yang sesungguhnya adalah dengan melakukan
operasi penjumlahan terhadap citra yang ada dengan bobot masing-masing.bobot
untuk menggabungkan citra ini sering di sebut sebagai koefisien atau nilai
alpha. Rumus untuk penggabungan dua cita adalah :
C(x,y) = WA*A(x,y)+WB*B(x,y)
Dengan WA dan WB adalah bobot untuk citra A dan B, biasanya
nilai total dari bobot untuk sebuah lokasi piksel adalah 1. Sehingga:
WB
= 1- WA
Berikut ini saya berikan contoh
program operasi penggabungan dua buah citra menggunakan DELPHI 7. Pada operasi
ini, hanya terdapat tiga buah citra yaitu dua citra yang di operasikan dan
sebuah citra sebagai hasil sehingga terdapat tiga buah FORM di sini
KOMPONEN
|
PROPERTI
|
NILAI
|
TForm
|
Name
|
Form
utama
|
Caption
|
Operasi
blending
|
|
Form
style
|
fsMDIForm
|
|
position
|
poDesigned
|
|
Tbutton
|
caption
|
Ambil
citra
|
name
|
ButtonAmbilCitra
|
|
Tbutton
|
caption
|
Ambil
citra 2
|
name
|
ButtonAmbilCitra
2
|
|
Tlabel
|
caption
|
W1
|
TEdit
|
name
|
Editw1
|
text
|
0,5
|
|
Tlabel
|
caption
|
W1
|
TEdit
|
name
|
Editw2
|
text
|
0,5
|
|
Tbutton
|
caption
|
blending
|
name
|
ButtonBlending
|
|
TOpenPictureDialog
|
name
|
OpenPictureDialog
|
filter
|
All
(*.bmp;*.jpg;*.jpeg)|*.bmp;*.jpg;*.jpeg|Bitmaps (*.bmp)|*.bmp|JPEG Image File
(*.jpg;*.jpeg)|*.jpg;*.jpeg
|
|
Tbutton
|
caption
|
keluar
|
Maka akan nampak seperti gambar di
bawah ini
Lalu kita buat lagi form untuk
penampilan citra dengan cara:
komponen
|
property
|
nilai
|
Tform
|
Name
|
formcitra
|
Caption
|
citra
|
|
Formstyle
|
fsMDIChild
|
|
autoscroll
|
true
|
|
Timage
|
Name
|
Image
|
Autosize
|
True
|
|
center
|
true
|
Maka akan tampak seperti gambar di samping:
(Lalu buatlah sebuah form lagi untuk menampilkan citra kedua,
dan langkahnya juga seperti contoh form pengambilan citra yang kedua)
Citra pertama di ambil dengan menekan
tombol Buttonambilcitra dengan event handler onclick yang telah di buat pada
program penampilan citra. Sementara itu, untuk mengambil citra kedua dari file
buatlah event handler onclick ada buttonAmbilCitra2 dan ketikkan perintah
berikut. Citra kedua baru dapat di ambil setelah citra pertama di-load.
Prosedure TformUtama.buttonambilcitra2click(sender:Tobject);
Begin
if
(FormCitra = nil) then
begin
ShowMessage('Ambil citra pertama dulu');
exit;
end;
if (OpenPictureDialog.Execute) then
begin
if (FormCitra2 = nil) then
Application.CreateForm(TFormCitra,
FormCitra2);
FormCitra2.Image.Picture.LoadFromFile(
OpenPictureDialog.FileName)
FormCitra2.ClientHeight :=
FormCitra2.Image.Picture.Height;
FormCitra2.ClientWidth :=
FormCitra2.Image.Picture.Width;
FormCitra2.ClientHeight :=
FormCitra2.Image.Picture.Height;
FormCitra2.Caption := 'Citra 2';
FormCitra2.Top := FormCitra.Top;
FormCitra2.Left :=
FormCitra.Left+FormCitra.Width;
end;
end;
kemudian definisikan prosedur olah
untuk menampung bagian pengolahan citranya. Ketikkan prosedure olah pada bagian
deklarasi kelas TformUtama.
type
TFormUtama = class(TForm)
PanelAtas: TPanel;
....................
procedure
ButtonAmbilCitraClick(
private
tuliskan
implementasi prosedur olah tersebut di bawah direktif {$R *.dfm}. mula-mula definisikan variabel yang di pergunakan , w1
dan w2 di gunakan untuk menyimpan bobot/nilai alpha untuk citra pertama dan
citra kedua. Nilai w1 di ambil dari komponen Editw1, sedangkan w2 di hitung
berdasarkan persamaan 6-8 kemudian hasilnya di tampilkan di komponen Editw2
{$R
*.dfm}
procedure
TFormUtama.Olah;
var
i,
j: integer;
w1, w2: real;
PC, PC2, PH: PByteArray;
begin
w1 := StrToFloat(Editw1.Text);
w2 := 1-w1;
Editw2.Text := FloatToStr(w2);
Kemudian
untuk citra keabuan, ambil nilai keabuan citra pertama dan kedua, lalu hitung
keabuan citra hasil menggunakan persamaan 6-7 lakukan untuk semua titik pada
citra (semua baris dan semua kolom).
if
(FormCitra.Image.Picture.Bitmap.PixelFormat = pf8bit)
then
begin
for i:= 0 to
FormCitra.Image.Picture.Height-1 do
begin
PC :=
FormCitra.Image.Picture.Bitmap.ScanLine[i];
PC2
:=FormCitra2.Image.Picture.Bitmap.ScanLine[i];
PH :=
FormHasil.Image.Picture.Bitmap.ScanLine[i];
for j:= 0 to
FormCitra.Image.Picture.Width-1 do
PH[j] := Round(PC[j]*w1+PC2[j]*w2);
end;
end;
lakukan
hal yang sama untuk citra true color. Listing lengkap prosedur olah sebagai
berikut;
procedure
TFormUtama.Olah;
var
i, j: integer;
w1, w2: real;
PC, PC2, PH: PByteArray;
begin
w1 := StrToFloat(Editw1.Text);
w2 := 1-w1;
Editw2.Text := FloatToStr(w2);
if
(FormCitra.Image.Picture.Bitmap.PixelFormat = pf8bit)
then
begin
for i:= 0 to
FormCitra.Image.Picture.Height-1 do
begin
PC :=
FormCitra.Image.Picture.Bitmap.ScanLine[i];
PC2
:=FormCitra2.Image.Picture.Bitmap.ScanLine[i];
PH :=
FormHasil.Image.Picture.Bitmap.ScanLine[i];
for j:= 0 to
FormCitra.Image.Picture.Width-1 do
PH[j] := Round(PC[j]*w1+PC2[j]*w2);
end;
end;
if (FormCitra.Image.Picture.Bitmap.PixelFormat
= pf24bit)
then
begin
for i:= 0 to
FormCitra.Image.Picture.Height-1 do
begin
PC :=
FormCitra.Image.Picture.Bitmap.ScanLine[i];
PC2
:=FormCitra2.Image.Picture.Bitmap.ScanLine[i];
PH :=
FormHasil.Image.Picture.Bitmap.ScanLine[i];
for j:= 0 to
FormCitra.Image.Picture.Width-1 do
begin
PH[3*j] :=
Round(PC[3*j]*w1+PC2[3*j]*w2);
PH[3*j+1]
:=Round(PC[3*j+1]*w1+PC2[3*j+1]*w2);
PH[3*j+2]
:=Round(PC[3*j+2]*w1+PC2[3*j+2]*w2);
end
end;
end;
end;
prosedur
olah di panggil dengan menekan tombol ButtonBlending. Oleh karena itu, buatlah
event handlerOnClick untuk komponen tersebut. Karena operasi hanya dilakukan
jika kedua citra sudah di ambil maka apabila belum di tampilkan pesan. Kemudian
jika FormHasil belum ada maka di buat terlebih dahulu form tersebut dan
sesuaikan posisi serta ukuran citra hasil terhadap citra sumbernya. Selanjutnya
jalankan prosedur olah dan tampilkan hasilnya pada FormHasil.
procedure
TFormUtama.ButtonBlendingClick(Sender: TObject);
begin
if (FormCitra2 = nil) then
begin
ShowMessage('Ambil citra pertama dulu');
exit;
end;
if (FormHasil = nil) then
Application.CreateForm(TFormCitra,
FormHasil);
FormHasil.Caption := 'Citra Hasil';
FormHasil.Image.Picture :=
FormCitra.Image.Picture;
FormHasil.ClientHeight :=
FormHasil.Image.Picture.Height;
FormHasil.ClientWidth :=
FormHasil.Image.Picture.Width;
FormHasil.ClientHeight :=
FormHasil.Image.Picture.Height;
FormHasil.Top := FormCitra2.Top;
FormHasil.Left :=
FormCitra2.Left+FormCitra.Width;
Olah;
FormHasil.Repaint;
end;
JALANKAN
PROGRAMNYA
semoga bisa bermanfaat