Selamat datang di sonoku.com

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

Comments

comments

4 thoughts on “Mengatur Brigthness Citra menggunakan Delphi

    • 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;

Leave a Reply