BAB 3
ANALISIS DAN PERANCANGAN SISTEM
Bab ini membahas analisis metode K-Means Clustering pada sistem dan membahas tahap-tahap yang dilakukan pada sistem yang akan dibangun.
3.1 Data Yang Digunakan
Data yang digunakan dalam penelitian ini adalah data citra hasil rekaman satelit Quickbird yang didapat dari internet.
3.2 Analisis Sistem
Analisis diperlukan sebagai dasar perancangan sistem. Pada penelitian ini, terdapat lima tahap proses yaitu tahap segmentasi menggunakan metode k-means clustering,
tahap median filtering, tahap pengenalan ciri bangunan, tahap pengenalan koordinat, dan penyusunan polygon bangunan.
Adapun tahapan dari segmentasi menggunakan metode k-means clustering yaitu sebagai berikut:
1. Masukkan file citra quickbird.
2. Inisialisasi jumlah klaster.
3. Mulai pembacaan data dan kembalikan sebagai byte array array dua dimensi.
4. Dengan menggunakan persamaan 3.1, hitung jarak setiap objek ke setiap
centroid √
3.1
5. Setiap piksel disusun ke sentroid terdekat.
Universitas Sumatera Utara
6. Hitung sentroid baru dari klaster yang baru terbentuk, di mana sentroid baru
itu diperoleh dari rata-rata setiap piksel yang terletak pada klaster yang sama 7.
Hasil dari tahapan segmentasi yaitu citra baru dengan dua klaster, yaitu klaster putih untuk bangunan dan klaster hitam untuk objek lainnya.
Adapun median filtering yang digunakan adalah median filtering dengan matriks 4x4, tahapan dari median filtering yaitu sebagai berikut :
1. Untuk setiap piksel X,Y pada citra, buat sebuah matriks berukuran 4x4
seperti gambar 3.1
[ ]
Gambar 3.1 Matriks untuk median filtering 4x4
2. Urutkan setiap nilai pada matriks seperti gambar 3.1 secara ascending
3. Ganti nilai pada piksel X,Y dengan nilai tengah median dari matriks
seperti gambar 3.1. Adapun tahapan dari pengenalan ciri bangunan yaitu sebagai berikut:
1. Inisialisasi jumlah minimum panjang, dan minimum lebar toleransi objek
bangunan. 2.
Deklarasikan array integer dua dimensi dengan panjang sesuai dengan panjang citra, serta lebar sesuai lebar citra.
3. Untuk setiap piksel citra, representasikan piksel warna putih dengan nilai 1
pada array, kemudian piksel warna hitam dengan nilai 0. 4.
Lakukan seleksi untuk setiap piksel yang terhubung, seperti pada gambar 3.2 5.
Hapus setiap piksel yang tidak memenuhi minimum panjang dan lebar terhubung secara bertikal maupun horizontal.
6. Hasil dari tahapan pengenalan ciri bangunan yaitu citra baru dengan pola
bangunan yang lebih rapi.
Universitas Sumatera Utara
Panjang Piksel
yang terhubung horizontal = nilai
minimum lebar bangunan {
}
Gambar 3.2. Proses seleksi piksel yang terhubung
Adapun tahapan dari pengenalan koordinat yaitu sebagai berikut: 1.
Lakukan pengenalan koordinat asli pada citra, dengan cara mengklik pada citra 2.
Simpan nilai koordinat x,y pada sebuah array list. 3.
Hitung jarak koordinat asli hasil inputan dengan koordinat citra pada monitor dengan persamaan 3.2 dan persamaan 3.3
Px =
∑
3.2 Py
=
∑
3.3
4. Hitung nilai Lintang dan Bujur citra dengan persamaan 3.4 dan persamaan
3.5, L
= xi + Px 3.4
B = yi + Py
3.5
5. Hasil dari tahapan pengenalan koordinat yaitu citra baru dengan koordinat
lintang dan bujur. Adapun tahapan dari penyusunan polygon bangunan bertujuan untuk
membentuk urutan koordinat agar dapat di simpan sebagai tipe data vektor berbentuk polygon. Tahapan penyusunan polygon bangunan menggunakan metode Fillgrid, yaitu
sebagai berikut: Panjang Piksel yang terhubung
vertikal = nilai minimum panjang bangunan
Universitas Sumatera Utara
1. Untuk setiap array bernilai 1, temukan array bernilai 1 yang berdekatan
dengannya, seperti pada gambar 3.3.
Gambar 3.3. Metode Fillgrid untuk mencari piksel bernilai 1
2. Cari piksel bernilai 1 dengan prioritas seperti pada gambar 3.4.
Gambar 3.4 . Prioritas pencarian piksel bernilai 1
3. Setelah ditemukan piksel bernilai 1, pindahkan pointer pencarian ke piksel
yang baru tersebut. 4.
Apabila ada lebih dari satu piksel sekitar yang bernilai 1, pindahkan pointer sesuai dengan prioritas pencarian pada gambar 3.3, kemudian set nilai Boolean
cabang true, dan simpan piksel cabang yang lain ke dalam array list bernama data cabang.
5. Apabila tidak ada lagi piksel bernilai 1 disekitar, dan Boolean cabang = true,
kembalikan lagi pointer ke percabangan yang disimpan pada array list data cabang.
6. Ulangi mulai dari langkah 1, hingga tidak ada lagi piksel bernilai 1 pada
sekitar atau piksel bernilai 1 berikutnya adalah piksel titik mulai. 7.
Hasil dari tahapan penyusunan polygon bangunan adalah polygon bangunan yang siap untuk disimpan sebagai data vektor geografis.
�
�
�
�
� �
�
�
�
� �
�
� �
�
�
�
�
�
� �
�
1
2 3
4 5
6 7
8
Universitas Sumatera Utara
Start not_terminated=true,c
lasses,lowerbounds,up perbounds,bins,mean,
histogram,changedPixel
Index = 0 mean = 255 bins-1index
NO
Index++ Index bins
YES
i=0 NO
Lowerbounds[i]=Math.maxmean + classes.geti.getMean2,
currentBound; Upperbounds[i]=
Math.minmean + classes.geti.getMean2,
currentBound currentBound=0
currentBound=255 i classes.size
i=0 h=0
w=0 greyValue =
image .getRGBw,
h.getRed; histogram[greyvalue] +=1
w++ wimage.getWidth
YES
h++ NO
wimage.getHeight YES
i++ YES
NO i classes.size
i++ YES
i=0 NO
C=lowerbound Counter+=
histogram[i] tempMean+=
histogram[i]+c C++
C=upperbound Mean =
tempMean counter
NO
YES classes.geti.
mean = mean
changedPixel=0
Not_terminated = false;
YES NO
Not_terminated = true
YES i=0
C = Math.maxcMean +
classes.geti.getMea n2, 0
C lowerbounds[i]
J=c YES
Changed+= histogram[j[
j++ Jlowerbounds[i]
YES NO
C lowerbounds[
i] j =
lowerbounds[i] YES
changed+= histogram[j]
J++ Jc
YES
changedPixels = changed;
NO
Stop NO
NO
NO
Gambar 3.5 Flowchart tahapan segmentasi menggunakan metode k-means clustering
Universitas Sumatera Utara
Start
Matriks,image
a=0 b=0
count = 0 c = 0
d = 0 matriks[count] =
image.getRGBa+c,b+d
count++
d=3 YES
d++
c++ NO
c=3 YES
a=0 NO
b = a+1 matriks[a]matriks[b]
temp = matriks[a] array[a] = array[b]
array[b] = temp YES
b++ bmatriks.length
YES a++
NO
amatriks.length YES
image.setRGBa+1, b+1, matriks[8]
NO
Stop NO
Gambar 3.6 Flowchart tahapan median filtering
Universitas Sumatera Utara
Start minWidth, minHeight,
cekKiri, cekKanan,arr[][],
status,w,h,a,b w=0
h=0
red = new
Colorimage.getRGB w, h.getRed
red =0 threshold =68;
alpha = new
Colorimage.getRGBw, h.getAlpha
red threshold
arr[h][w] = 1 YES
arr[h][w] = 0 NO
himage.getHeight h++
w++ NO
YES
wimage.getWidth
b=0 NO
YES
A
Gambar 3.7. Flowchart tahapan pengenalan ciri bangunan
Universitas Sumatera Utara
A
w++
wimage.getWidth
b=0 NO
a=0 cekKanan=0;
cekKiri=0;
arr[b][a]=1
arr[b][max0,a-1]=1 YES
kiri = max0,a-minWidth YES
arr[b][a]=arr[b][kiri] arr[b][kiri+1]=1
cekKiri++ YES
B NO
NO YES
Gambar 3.7. Flowchart tahapan pengenalan ciri bangunan lanjutan
Universitas Sumatera Utara
B
a=0 cekKanan=0;
cekKiri=0; arr[b][a]=1
arr[b][max0,a-1]=1 YES
kiri = max0,a-minWidth YES
arr[b][a]=arr[b][kiri] arr[b][kiri+1]=1
cekKiri++ YES
kiri++ kirimax0,a
YES NO
arr[b][minarr[b].length- 1,a+1]==1
kanan = minarr[b].length- 1,a+minWidth
YES
arr[b][a]==arr[b][kanan] arr[b][kanan-1]==1
cekKanan++; YES
kanan-- kanana
YES
cekAtas=0,cekBawah=0 NO
status = Aman
YES YES
NO
NO
NO
NO
D E
C
Gambar 3.7. Flowchart tahapan pengenalan ciri bangunan lanjutan
Universitas Sumatera Utara
cekKanan+cekKiri+1 minWidth
status = Mencurigakan
YES
y=max0,b-minHeight status.equalsMencurigakan
arr[y][a]==1 YES
x=max0,a-minWidth YES
arr[y][x]==1 cekAtas++;
YES
xa x++
YES
x=minarr[b].length- 1,a+minWidth
NO
arr[y][x]==1 cekAtas++
YES x--
xa YES
NO status = Dihapus
arr[b][a]=0
NO NO
NO
F NO
C
Gambar 3.7. Flowchart tahapan pengenalan ciri bangunan lanjutan
Universitas Sumatera Utara
y=minarr.length-1,b+minHeight cekBawah = 0
status.equalsMencurigakan
arr[y][a]==1 YES
x=max0,a-minWidth YES
arr[y][x]==1 cekBawah++
YES x++
xa YES
x=minarr[b].length- 1,a+minWidth
NO
arr[y][x]==1 cekBawah++
YES x--
xa YES
NO NO
YES
I
NO
NO
NO D
G H
Gambar 3.7. Flowchart tahapan pengenalan ciri bangunan lanjutan
Universitas Sumatera Utara
status = dihapus cekAtas + cekBawah
minWidth YES
arr[b][a]=0;
status = dihapus arr[b][a]=0
y--
yb a++
NO
aarr[b].length
b++ NO
barr.length
J
NO G
E F
I
YES H
cekAtas minHeight
NO
Gambar 3.7. Flowchart tahapan pengenalan ciri bangunan lanjutan
Universitas Sumatera Utara
J
status =aman NO
a=0 cekAtas = 0
cekBawah = 0 arr[a][b]==1
arr[max0,a-1][b]==1 YES
atas=max0,a- minHeight
YES
arr[a][b]==arr[atas][b] cekAtas++
YES atas++
atasa YES
arr[minarr.length- 1,a+1][b]==1
NO
bawah = minarr.length-
1,a+minHeight YES
arr[a][b]==a rr[bawah][b]
cekBawah++ YES
bawah-- bawaha
YES status =
mencurigakan NO
cekAtas + cekBawah +1minHeight
YES cekKiri=0
cekKanan=0
kiri = max0,b- minWidth2
b=0
J K
L M
NO
NO
NO
Gambar 3.7. Flowchart tahapan pengenalan ciri bangunan lanjutan
Universitas Sumatera Utara
J
arr[max0,a- 1][kiri]==1
atas = max0,a- minHeight
YES
arr[a][kiri]==ar r[atas][kiri]
cekKiri++ atas++
atasa YES
NO
bawah = minarr.length-
1,a+minHeight arr[minarr.length-
1,a+1][kiri]==1 YES
arr[a][b]==a rr[bawah][b]
cekKiri++ YES
bawah-- bawaha
YES
cekKiri minHeight
NO
arr[a][b]=0 YES
status =dihapus kanan =
minarr[0].length- 1,b+3
NO cekKanan
minHeight
arr[a][b]=0 status = dihapus
YES
kanan-- kananb
YES NO
NO NO
NO K
Gambar 3.7. Flowchart tahapan pengenalan ciri bangunan lanjutan
Universitas Sumatera Utara
status = hapus
a++
aarr.length
b++ NO
barr[0].length
y=0 YES
x=0 arr[y][x]=1
hasil.setRGBx,y, 0 YES
x++ xarr[y].length
YES
y++ NO
yarr.length YES
Stop NO
K L
M
NO
NO
Gambar 3.7. Flowchart tahapan pengenalan ciri bangunan lanjutan
Universitas Sumatera Utara
Start
x,y,data, dataDigit,
lon,lat Datadigit.add
x, y,lon,lat x=0
projectionX += dataDigit.getx
.getLongit ude-data.getX
projectionY += dataDigit.getx.
getLatitude +convertYdata.getY
x++ xdataDigit.size
YES
projectionX = projectionX
dataDigit.size NO
projectionY = projectionY
dataDigit.size x=0
lon = dataDigit.getx.
getX+p rojectionX
lat = dataDigit.getx.getY+pro
jectionX
Stop
Gambar 3.8 Flowchart tahapan pengenalan koordinat
Universitas Sumatera Utara
Start startX,startY,tempX,tempY,ketemu
,count=0,posisi = 10000,arr[startY][startX]=
0,data,w,h,red,alpha,cabang w=0
h=0
red = new
Colorimage.getRGB w, h.getRed
red =0 threshold =68;
alpha = new
Colorimage.getRGBw, h.getAlpha
red threshold
arr[h][w] = 1 YES
arr[h][w] = 0 NO
himage.getHeight h++
w++ NO
YES
wimage.getWidth YES
cabang = arr[maxtempY- 1,0][tempX]+arr[tempY][mintem
pX+1,arr[tempY]. length
-1] NO
cabang +=arr[minarr. length
- 1,tempY+1][tempX]+arr[tempY][
max0,tempX-1] cabang += arr[maxtempY-
1,0][minarr[0]. length
- 1,tempX+1]+arr[mintempY+1,a
rr. length
- 1][minarr[0].
length -
1,tempX+1] cabang +=
arr[mintempY+1,arr. length
- 1][max0,tempX-
1]+arr[maxtempY- 1,0][max0,tempX-1]
cabang 1
arr[maxtempY- 1,0][tempX]==1
YES
data.addnew
dataArraytempX,m axtempY-1,0
YES NO
NO
A
Gambar 3.9 Flowchart tahapan penyusunan polygon bangunan
Universitas Sumatera Utara
arr[tempY][mintem pX+1,arr[tempY].l
ength-1]==1
data.addnew
dataArraymintempX +1,arr[tempY].leng
th-1,tempY YES
arr[minarr. length
- 1,tempY+1][tempX]==1
NO
data.addnew
dataArraytempX ,minarr.length
-1,tempY+1 YES
arr[tempY][max 0,tempX-1]==1
NO
data.addnew
dataArraymax0 ,tempX-
1,tempY YES
arr[maxtempY- 1,0][minarr[0].
length -
1,tempX+1]==1 NO
data.addnew
dataArrayminarr[ 0].length-
1,tempX+1,maxtem pY-1,0
YES
arr[mintempY+1,arr. length
-1][minarr[0]. length
- 1,tempX+1]==1
NO
data.addnew
dataArrayminarr[0].l ength-
1,tempX+1,mintempY+1 ,arr.length-1
YES
arr[mintempY+1,arr. lengt
h -1][max0,tempX-1]==1
NO
data.addnew
dataArraymax0,tempX- 1,mintempY+1,arr.leng
th-1 YES
arr[maxtempY- 1,0][max0,tempX-
1]==1 NO
data.addnew
dataArraymax0,tempX -1,maxtempY-1,0
YES
STOP NO
A
Gambar 3.9 Flowchart tahapan penyusunan polygon bangunan lanjutan
Universitas Sumatera Utara
3.3 General Architecture