Mengatur Brigthness Citra menggunakan Delphi
Sebuah citra grayscale 256 warna akan tampak gelap bila seluruh komponen warnanya berada mendekati nilai 0, dan juga sebaliknya jika seluruh komponen warnya mendekati nilai 255 maka citra akan tampak lebih terang. Untuk dapat mengatur kecerahan suatu citra kita dapat menambahkan nilai intensitas piksel dengan suatu nilai konstanta. Persamaannya seperti berikut.
Dimana fi adalah nilai intensitas (warna) piksel pada citra asli, dan b adalah nilai konstanta kecerahan (brightness). Jika nilai b negatif maka intensitas piksel akan lebih gelap, sebaliknya jika nilai b positif maka intensitas citra akan semakin cerah.
Berikut ilustrasi operasi brightness pada sebuah citra.
Untuk citra true color, masing-masing komponen warna Red, Green dan Blue perlu ditambahkan dengan suatu konstanta.
Mengatur kecerahan citra dengan Delphi
Rancang tampilan form seperti pada gambar, atur properti komponennya seperti pada tabel.
Program yang kita buat dapat merubah level kecerahan pada citra 24 bit di setiap kanalnya (R, G, B), untuk itu kita memerlukan 3 Trackbar masing-masing untuk kanal (channel) R, G dan B. Nilai posisi trackbar kita atur nilainya mulai -255 hingga 255, tujuannya agar kita bisa mendapatkan penambahan dengan nilai negatif (pengurangan).
Pada saat pertama kali membuka file gambar kita perlu membuat dulu citra/image sementara untuk diolah kecerahannya. Selain itu khusus untuk citra 8 bit (grayscale) kita tidak bisa mengatur kecerahan warna perkanal (RGB) seperti pada citra true color (24bit),untuk itu kita perlu mengatur perubahan kecerahan citra satu kanal saja. Ini dapat diatur dengan menambahkan checkbox (Equal Track) agar TrackBar dapat aktif bersamaan (seolah hanya 1 nilai kanal yang aktif). Potongan programnya akan tampak seperti berikut.
if not OpenPictureDialog1.Execute then Exit else begin Citra := TBitmap.Create; Citra.LoadFromFile(OpenPictureDialog1.FileName); end; Image1.Picture.Bitmap := Citra; Temp_image := TImage.Create(Self); Temp_image.Picture.Bitmap.Assign(Image1.Picture.Bitmap); // cek apakah citra 8 bit if Image1.Picture.Bitmap.PixelFormat = pf8bit then begin CheckBox1.Checked := True; CheckBox1.Enabled := False; REDTrackBar.OnChange(Self); end else CheckBox1.Enabled := True;
Operasi kontrol kecerahan dilakukan dengan menambahkan tiap nilai intensitas citra dengan nilai posisi Trackbar tiap kanalnya. Kemudian dicek apakah hasil penambahan melebihi nilai maksimum intensitasnya(255), jika ya maka nilai intensitas yang baru dibuat sama dengan 255. Sebaliknya jika melebihi nilai intensitas nol (negatif) maka intensitas citra yang baru dibuat sama dengan 0. Berikut potongan programnya.
procedure TForm1.Brightness(Trackbar: TObject); var brs, kol, i, temp :Integer; piksel, temp_piksel : PByteArray; begin if Image1.Picture.Bitmap = nil then Exit else for brs := 0 to Image1.Picture.Bitmap.Height - 1 do begin piksel := Image1.Picture.Bitmap.ScanLine[brs]; temp_piksel := Temp_image.Picture.Bitmap.ScanLine[brs]; for kol := 0 to Image1.Picture.Bitmap.Width - 1 do begin if Trackbar = BLUETrackBar then temp := temp_piksel[3*kol]+ BLUETrackBar.Position; if Trackbar = GREENTrackBar then temp := temp_piksel[3*kol+1]+ GREENTrackBar.Position; if Trackbar = REDTrackBar then temp := temp_piksel[3*kol+2]+ REDTrackBar.Position; <p>if temp >255 then temp := 255; if temp <=0 then temp := 0; <p>if Trackbar = BLUETrackBar then piksel[3*kol] := temp; if Trackbar = GREENTrackBar then piksel[3*kol+1] := temp; if Trackbar = REDTrackBar then piksel[3*kol+2] := temp; end; end; Image1.Invalidate; end
;
Berikut hasil kontrol kecerahan citra dengan berbagai nilai konstanta b yang berbeda-beda.
Download (source code)
1. Image Processing – Brightness.rar (190kb)
References
[1] Wikipedia
[2] imageprocessingindelphi.blogspot.com
[3] Sutoyo,T., Edy Mulyanto, Vincent Suhartono, Oky Dwi Nurhayati, Wijanarto, Teori Pengolahan Citra Digital, UDINUS, Penerbit Andi, 2009
sudah gan………….
bisa…
thx……..
sukses terus Gan………….
Sama-sama mas david, sukses juga 🙂
Gann….
kalo mw ngesave image yg brightness nya sdah d edit gmana…????
Coba tambahkan dulu objek SavePictureDialog dan sebuah tombol pada form, kemudian tambahkan kode berikut pada event button click:
procedure TMainForm.Button1Click(Sender: TObject);
begin
try
begin
if SavePictureDialog1.Execute then
TImageForm(ActiveMDIChild).Image1.Picture.SaveToFile(SavePictureDialog1.FileName);
end
except
ShowMessage('Cannot complete the operation');
end;
end;