Anda di halaman 1dari 12

APLIKASI PENGOLAHAN CITRA DIGITAL UNTUK MENGHITUNG LUAS

DAERAH PADA BANGUN DATAR

Untuk memenuhi Tugas Matakuliah Pengolahan Citra Digital

Yang dibina oleh Bapak Mohamad Yasin, S.Kom, M.Kom

Oleh :

NUR INAYAH
150312607843

UNIVERSITAS NEGERI MALANG

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

JURUSAN MATEMATIKA

Maret 2018
BAB 1
PENDAHULUAN

A. Latar Belakang
Menghitung luas sebuah bangun datar adalah hal yang mudah apabila sudah
diketahui rumus yang digunakan untuk menghitung luas bangun datar tersebut.
Misalnya untuk menghitung luas sebuah persegi panjang adalah dengan
mengalikan ukuran panjang dan lebar persegi panjang tersebut. Untuk
mendapatkan luas persegi adalah dengan mengkuadratkan panjang dari sisi-sisi
persegi, sedangkan untuk menghitung luas lingkaran, rumusnya adalah
mengkalikan nilai phi dengan kuadrat ukuran jari-jari lingkaran. Dan masih
banyak lagi rumus-rumus yang sudah diketahui untuk menghitung luas bangun-
bangun datar yang lainnya.
Akan tetapi apabila sebuah bangun datar bentuknya tidak beraturan, maka
akan sulit untuk mencari rumus menghitungnya. Apabila bentuk bangun datar
tidak terlalu rumit, memang masih bisa dihitung dengan menggunakan rumus
integral. Namun apabila bentuknya sudah sangat kompleks, maka akan sulit untuk
menghitung luasnya menggunakan rumus integral. Terlebih lagi untuk
menghitung bentuk bangun datar seperti pulau-pulau di Indonesia pasti akan
memakan waktu yang sangatlah lama untuk menemukan fungsi integralnya. Hal
ini sangatlah tidak efisien.
Dengan memanfaatkan teknik-teknik pengolahan citra digital bisa dilakukan
perhitungan luas suatu daerah pada sebuah citra digital, dengan cara menghitung
banyak pixel dari daerah yang ingin dihitung luasnya yang kemudian akan
dikonversikan dalam satuan luas pada umumnya.

B. Tujuan
Membangun aplikasi yang akan digunakan untuk menghitung luas suatu
daerah pada suatu citra digital
BAB II
DASAR TEORI

Dalam pembangunan aplikasi penghitungan luas daerah pada suatu citra


digital dibutuhkan pengetahuan dasar mengenai teknik-teknik pengolahan citra
digital yang bisa dimanfaatkan untuk membangun aplikasi ini serta perangkat
lunak yang digunakan untuk membangun aplikasi ini. Operasi yang digunakan
dalam pembangunan aplikasi ini adalah operasi titik dan perangkat lunak ang
diguanakan adalah Delphi 7 dan Paint.

A. Pengertian operasi titik


Operasi titik adalah operasi terhadap citra di mana setiap titik diolah secara
tak gayut debgan titik yang lain (Achmad & Firdasy, 2005). Setiap titik pada citra
mempunyai dua bua ksrakteristik, yaitu koordinat yang menunjukkan lokasi dari
titik tersebut di dalam citra serta nilai dari titik itu sendiri(tingkat keabuan atau
warna). Operasi titik tidak gayut terhadap koordidnat titik itu sendiri maupun nilai
titik-titik yang lain. Hanya nilai dari titik itu sendiri yang dimodifikasi. Oleh arena
itu, untuk titik-titik yang memiliki nilai keabuan atau warna yang sama akan
diubah menjadi keabuan atau warna yang sama pula.

Salah satu operasi titik yang diguanakan pada aplikasi penghitungan luas
daerah pada suatu citra digital adalah operasi pengambangan(thresholding).

B. Konversi citra true color ke keabuan


Citra true color dapat dikonversi menjadi citra keabuan dengan operas titik.
Intensitas didefinisiskan sebagai nilai rerata dari ketiga nilai elemen warna,
sehingga nilai keabuan yang merepresentasikan intensistas dapat dihitung denga
rumus:
𝑅𝑖 + 𝐺𝑖 + 𝐵𝑖
𝐾0 =
3

C. Pengambangan
Operasi pengambangan (thresholding) digunakan untuk mengubah citra dengan
format skala keabuan, yang mempunyai kemungkinan nilai lebih dari 2, ke citra
biner, yang hanya memiliki 2 buah nilai (0 atau 1) (Achmad & Firdasy, 2005).
Dalam hal ini titik dengan nilai rentang nilai keabuan tertentu diubah menjadi
berwarna hitam dan sisanya menjadi putih atau sebaliknya.

Pada aplikasi yang akan dibangun akan diguanakan operasi pengambangan


tunggal. Operasi ini mempunyai sebuah nilai batas ambang. Fungsi GST yang
digunakan dapat berupa

0, 𝑗𝑖𝑘𝑎 𝐾𝑖 < 𝑎𝑚𝑏𝑎𝑛𝑔


𝐾0 = {
1, 𝑗𝑖𝑘𝑎 𝐾𝑖 ≥ 𝑎𝑚𝑏𝑎𝑛𝑔

Atau

0, 𝑗𝑖𝑘𝑎 𝐾𝑖 ≥ 𝑎𝑚𝑏𝑎𝑛𝑔
𝐾0 = {
1, 𝑗𝑖𝑘𝑎 𝐾𝑖 < 𝑎𝑚𝑏𝑎𝑛𝑔

Penentuan batas ambang ini dapat dilakukan dengan memanfaatkan histogram


citra, yaitu untuk citra yang mempunyai histogram bimodal, dipilih batas ambang
pada daerah di sekitar lembah.
BAB III
DESAIN APLIKASI

A. Desain tampilan

Komponen Property Nilai


TForm Name FormUtama
Caption Menghitung Luas Bangun
Datar
FormStyle fsMDIForm
Position poDefaultPosOnly
Tpanel Name PanelAtas
Align alTop
TStatusBar Name StatusBar
Align alBottom
SimplePanel True
TButton Name ButtonAmbilCitra
Option &Ambil citra
TOpenPictureDialog Name OpenPictureDialog
Filter Bitmaps(*.bmp)|*.bmp
InitialDir .
TButton Name ButtonKeabuan
Option &Keabuan
TButton Name btLuas
Option Hitung Luas
TScrollBar Name ScrollBarAmbang
Min 0
Max 255
Position 128
SmallChange 1
LargeChange 10
Width 128
TEdit Name EditAmbang
Text 128
ReadOnly True
TEdit Name EditPx
Text
TEdit Name EditL
Text

Komponen Property Nilai


TForm Name FormCitra
Caption Citra
FormStyle fsMDIChild
TImage Name Image
AutoSize True
Center True

B. Desain Cara Kerja Aplikasi


i. Klik tombol Ambil Citra untuk menambahkan citra yang ber-ekstensi
.bmp
ii. Klik tombol Keabuan untuk mengkonversi citra menjadi citra keabuan
iii. Geser Scroll Bar untuk melakukan proses pengambangan untuk
mengubah citra keabuan menjadi citra biner, agar bisa dihitung jumlah
pixel dari daerah yang ingin diukur luasnya
iv. Klik tombol Hitung Luas untuk menghitung luas bangun datar yang ada
pada citra dengan mengalikan jumlah pixel dengan konstanta pixel
persegi, sehingga didapatkan aproksimasi luas bangun datar.
BAB IV
KODE APLIKASI

unit UnitUtama;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, ExtDlgs, ComCtrls, StdCtrls, ExtCtrls;

type
TFormUtama = class(TForm)
PanelAtas: TPanel;
ButtonAmbilCitra: TButton;
StatusBar: TStatusBar;
OpenpictureDialog: TOpenPictureDialog;
ButtonKeabuan: TButton;
ScrollBarAmbang: TScrollBar;
EditAmbang: TEdit;
Label1: TLabel;
btLuas: TButton;
Label2: TLabel;
EditPx: TEdit;
Label3: TLabel;
EditL: TEdit;
Label4: TLabel;
procedure ButtonAmbilCitraClick(Sender: TObject);
procedure Olah;
Procedure Ambangkan;
procedure ButtonKeabuanClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ScrollBarAmbangChange(Sender: TObject);
procedure btLuasClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FormUtama: TFormUtama;

implementation

uses UnitCitra;

type
LogPal = record
lpal: TLogPalette;
entry: array[0..255]of TPaletteEntry;
end;

var
FormHasil: TFormCitra;
FormAmbang: TFormCitra;
PaletKeabuan: LogPal;
{$R *.dfm}

procedure TFormUtama.ButtonAmbilCitraClick(Sender: TObject);


Var fc: string;
begin
if (openPictureDialog.Execute) then
begin
if (FormCitra = nil) then
Application.CreateForm(TFormCitra, FormCitra);

FormCitra.Image.Picture.LoadFromFile(OpenPictureDialog.FileName);
FormCitra.ClientHeight := FormCitra.Image.Picture.Height;
FormCitra.ClientWidth := FormCitra.Image.Picture.Width;
FormCitra.ClientHeight := FormCitra.Image.Picture.Height;
case (FormCitra.Image.Picture.Bitmap.PixelFormat) of
pf1bit : fc :='biner';
pf8bit : fc :='keabuan';
pf24bit : fc :='true color';
end;
StatusBar.SimpleText := OpenPictureDialog.FileName + '('
+IntToStr(FormCitra.Image.Picture.Width)
+ 'x' + IntToStr(FormCitra.Image.Picture.Height)+', '+fc+')';
formCitra.SetFocus;
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.Top := FormCitra.Top;
FormHasil.Left := FormCitra.Left + FormCitra.Width;
end;
end;
procedure TFormUtama.Olah;
var
i,j: integer;
PC,PH: PByteArray;
begin
FormHasil.Image.Picture.Bitmap.PixelFormat := pf8bit;
FormHasil.Image.Picture.Bitmap.Palette :=
createPalette(PaletKeabuan.lpal);
for i:= 0 to FormCitra.Image.Picture.Height - 1 do
begin
PC := FormCitra.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[3*j]+PC[3*j+1]+PC[3*j+2])/3);
end;
end;

procedure TFormUtama.ButtonKeabuanClick(Sender: TObject);


begin
if (FormCitra = nil) then
begin
ShowMessage('Belum ada citra yang diambil');
Exit;
end;
if (FormCitra.Image.Picture.Bitmap.PixelFormat <> pf24bit) then
begin
ShowMessage('Hanya untuk citra true color');
Exit;
end;
Olah;
FormHasil.Repaint;
if (FormAmbang = nil) then
application.CreateForm(TFormCitra, FormAmbang);
FormAmbang.Caption := 'Citra Hasil Ambang';
FormAmbang.Image.Picture := FormHasil.Image.Picture;
FormAmbang.ClientHeight := FormCitra.Image.Picture.Height;
FormAmbang.ClientWidth := FormCitra.Image.Picture.Width;
FormAmbang.Top := FormCitra.Top;
FormAmbang.Left := FormCitra.Left + FormCitra.Width;
FormHasil.Close;
end;

procedure TFormUtama.FormCreate(Sender: TObject);


var
i: integer;
begin
PaletKeabuan.lpal.palVersion := $300;
PaletKeabuan.lpal.palNumEntries := 256;
for i:= 0 to 255 do
begin
PaletKeabuan.entry[i].peRed := i;
PaletKeabuan.entry[i].peGreen := i;
PaletKeabuan.entry[i].peBlue := i;
end;
end;

procedure TFormUtama.Ambangkan;
var
i,j,Ambang: integer;
PC,PH: PByteArray;
begin
Ambang := ScrollBarAmbang.Position;
if(FormHasil.Image.Picture.Bitmap.PixelFormat = pf8bit)then
for i:= 0 to FormHasil.Image.Picture.Height - 1 do
begin
PC := FormHasil.Image.Picture.Bitmap.ScanLine[i];
PH := FormAmbang.Image.Picture.Bitmap.ScanLine[i];
for j:= 0 to FormHasil.Image.Picture.Width - 1 do
begin
if (PC[j] < Ambang) then
PH[j] := 0
else
PH[j] := 255;
end;
end;
end;

procedure TFormUtama.ScrollBarAmbangChange(Sender: TObject);


begin
EditAmbang.Text := IntToStr(ScrollBarAmbang.Position);
if (FormCitra = nil)then
begin
ShowMessage('Belum ada citra yang aan diolah');
exit;
end;
Ambangkan;
FormAmbang.Repaint;
end;

procedure TFormUtama.btLuasClick(Sender: TObject);


var
i,j,px: integer;
PH: PByteArray;
L: real;
begin
px := 0;
if(FormAmbang <> nil)then
for i:= 0 to FormAmbang.Image.Picture.Height - 1 do
begin
PH := FormAmbang.Image.Picture.Bitmap.ScanLine[i];
for j:= 0 to FormAmbang.Image.Picture.Width - 1 do
begin
if PH[j] = 0 then
begin
px := px + 1
end
else
px := px + 0;
end;
end;
editPx.Text := inttostr(px);
if (formcitra = nil) then
begin
showmessage('belum ada gambar yang diambil');
exit;
end;
L:= px * 0.026458333331386 * 0.026458333331386;
editL.Text := floattostr(L);
end;

end.
DAFTAR RUJUKAN

Achmad, B., & Firdasy, K. (2005). TEKNIK PENGOLAHAN CITRA DIGITAL

MENGGUNAKAN DELPHI. Yogyakarta: Ardi Publishing Kelompok Ardi

Group.

Anda mungkin juga menyukai