METODE PENELITIAN
III.4 Pengolahan Citra Menggunakan Algoritma Color Filtering HSV dan Contour Filtering
III.4.2 Pre-processing
Pre-processing merupakan tahap untuk mempersiapkan citra sebelum diproses lebih lanjut. Adapun perlakuan yang diberikan pada citra asli.
III.4.2.1 Mengembalikan Citra Yang Terdistorsi
Penggunaan fish eye menyebabkan citra yang ditangkap menjadi terdistorsi yang mana hal ini akan mempengaruhi kemampuan sistem dalam mengenal objek gawang. Maka untuk mengatasi hal ini, citra harus dikembalikan pada keadaan sebelum terdistorsi. Maka dengan mengatur parameter k1 bernilai negatif sampai di dapat nilai koefisien yang tepat, akan menghilangkan distorsi seperti yang dijelaskan pada sub bab II.8.
Untuk setiap koordinat pixel dari matriks kamera yang belum terkoreksi, dihitung dan diaplikasikan nilai k1 yang diproses ke dalam persamaan 2.6 sampai dengan 2.9 sehingga hasil dari persamaan 2.9 didapat nilai u dan v yang menjadi koordinat proyeksi dari titik-titik pixels yang mana merupakan citra yang telah diperbaiki distorsinya seperti pada gambar 3.2(b) berikut.
Gambar 3.2 (a) Barrel Distortion akibat penggunaan fish eye (b)Citra yang telah diperbaiki
Setelah citra di kembalikan dari keadaan distorsi maka tahap selanjutnya adalah konversi citra RGB ke HSV.
III.4.2.2 Konversi citra RGB ke citra HSV
Tahapan ini mengubah hasil tangkapan citra kamera yang mulanya bermodel warna RGB menjadi HSV. Sebelum mengonversi ke model warna HSV, maka harus diketahui terlebih dahulu nilai RGB citra. Untuk setiap nilai warna BGR (sistem urutan pembacaan warna library OpenCV) pada setiap pixel citra yang ditangkap, setiap nilai BGR pixel akan diaplikasikan ke persamaan 2.2 dan 2.3 sehingga dengan demikian akan menghasilkan
nilai HSV dari suatu pixel BGR. Proses pengkonversian terus berlanjut hingga pixel terakhir dari citra yang di tangkap. Hasil konversi citra RGB ke HSV dapat dilihat pada gambar 3.3 berikut.
Gambar 3.3 Citra HSV
Setelah berhasil di konversi citra RGB ke HSV, maka tahap selanjutnya adalah binerisasi.
III.4.2.3 Binerisasi
Binerisasi membagi citra menjadi dua bagian yaitu object (pixel-1) dan Background (pixel-0). Proses ini memindai setiap pixel citra HSV yang kemudian nilainya akan dibandingkan dengan rentang warna HSV yang diinginkan. Jika nilai HSV yang di pixel yang sedang dipindai berada pada rentang warna HSV yang inginkan maka pada pixel tersebut akan ditandai dengan pixel-1, Jika tidak maka akan diberi tanda pixel-0. Proses ini terus berlanjut sampai pixel citra HSV terakhir.
Untuk mempermudah dalam menentukan nilai ambang batas atas dan bawah model warna HSV maka dapat digunakan program kalibrasi nilai ambang batas HSV yang disertai dengan GUI(Graphical User Interface).
Hasil binerisasi citra HSV dengan warna objek putih pada gawang dapat dilihat pada gambar 3.4 berikut.
Gambar 3.4 Citra Biner
Tahap selanjutnya adalah mengaplikasikan filter morfologi pada citra biner.
III.4.2.4 Aplikasi filter morfologi
Agar citra yang diseleksi tampak lebih jelas, maka diaplikasikan filter morfologi. Filter morfologi yang digunakan adalah closing morphology filter dimana filter ini akan membuat citra biner tampak lebih jelas dan kontras. Dalam pengaplikasian filter morfologi terdapat sebuah citra biner dan sebuah elemen terstruktur yang biasanya di sebut kernel.
closing morphology filter didapat dengan mengaplikasikan filter morfologi dilatasi yang kemudian dilanjutkan dengan erosi. Dalam morfologi biner, dilatasi adalah operator shift-invariant (translation invariant), setara dengan penjumlahan Minkowski. Sebuah citra biner dilihat dalam morfologi matematika sebagai subset dari ruang Euclidean âd atau grid bilangan bulat âĪd, untuk beberapa dimensi d. Misalkan E adalah ruang Euclidean atau grid bilangan bulat, A adalah citra biner dalam E, dan B adalah elemen penataan yang dianggap sebagai sub set dari âd.
Dilatasi A oleh B didefinisikan oleh:
ðī âĻ B = âðâðĩ ðīð (3.3)
dimana ðīð adalah translasi A oleh B. Proses dari dilatasi adalah sebagai berikut[23]:
1. Misalkan A adalah matriks 11 x 11 berisi pixel-1 dan pixel-0 dan B
adalah matriks 3 x 3 berisi pixel-1 secara keseluruhan.
2. Untuk setiap pixel di A yang memiliki nilai 1, letakkan B, dengan pusat B sejajar dengan pixel yang sesuai di A.
3. Setiap pixel dari setiap B yang ditumpangkan termasuk dalam dilatasi A oleh B.
Pengikisan citra biner A oleh elemen penataan B didefinisikan oleh:
ðī â B = {z â E |ðĩð§ â A} (3.4)
dimana â merupakan erosi, ðĩð§ merupakan translasi B oleh vektor z.
Proses erosi dapat dilihat sebagai berikut:
1. Misalkan A adalah matriks 13 x 13 berisi pixel-1 dan pixel-0dan B adalah matriks 3 x 3 berisi pixel-1 secara keseluruhan.
2. Dengan asumsi bahwa asal B berada di tengahnya, untuk setiap pixel di A melapiskan asal B, jika B sepenuhnya ditampung oleh A, pixel dipertahankan, jika tidak maka dihapus.
3. Nilai pixel dipertahankan hanya ketika B sepenuhnya terkandung di dalam A, jika tidak maka akan dihapus atau terkikis.
Hasil pengaplikasian filter morfologi closing dapat dilihat pada gambar 3.5 berikut.
Gambar 3.5 Citra biner setelah menerapkan filter morfologi
III.4.3 Segmentasi
Segmentasi merupakan kunci proses dari kebanyakan pengaplikasian
computer vision. Umumnya segmentasi digunakan untuk membagi citra ke region yang berbeda yang secara ideal memiliki kemiripan dengan objek dunia nyata yang telah diekstrak dari backgroundnya. Terdapat beberapa proses segmentasi yang dilakukan pada penelitian ini diantaranya sebagai berikut.
III.4.3.1 Menemukan kontur dari citra biner
Setelah citra biner diaplikasikan filter morfologi, maka citra siap untuk diproses. Untuk mendapatkan informasi yang dapat diolah dari citra biner, maka citra biner disegmentasi menggunakan metode deteksi kontur.
Merujuk pada jurnal Suzuki dan Abe[23], yang mana algoritmanya digunakan dalam fungsi pendeteksian kontur library OpenCV. Pada algoritma yang di jelaskan pada jurnal Suzuki, proses pendeteksian kontur dari citra biner dimulai dengan proses pemindaian dengan teknik Raster.
Pada pendeteksian kontur dari citra biner memiliki dua macam pendeteksian batasan yaitu outer-bordering dan hole-bordering. Pada penelitian ini hanya menggunakan outer-bordering yang mana dari citra biner akan dideteksi bagian yang paling luar saja. Terdapat algoritma dalam mendeteksi kontur outer-bordering citra biner yang digunakan yaitu sebagai berikut:
1. Jika ðð,ð= 1 dan ðð,ðâ1 = 0, maka tetapkan sebagai titik awal penelusuran outer -border, tingkatkan nilai NBD, dan (ð2, ð2) = (ð, ð â 1). Jika ðð,ðâĨ 1 dan ðð,ð+1= 0, maka tetapkan sebagai titik awal penelusuran hole-border, tingkatkan nilai NBD, dan (ð2, ð2) = (ð, ð â 1), (diabaikan). Selain dari itu lanjut ke tahap (3).
2. Dari titik awal (i, j), telusuri border yang terdeteksi, tahap ini dilakukan melalui tahapan-tahapan kecil berikut:
2.1 Mulai dari (ð2, ð2), mencari sekitar ke sekeliling pixel (i, j) secara berlawanan arah jarum jam. Biarkan (ð1, ð1) menjadi pixel non-zero pertama yang ditemukan. Jika tidak ada pixel non-zero yang ditemukan, maka tetapkan -NBD ke ðð,ð dan pergi ke tahap (3).
2.2 (ð2, ð2) = (ð1, ð1) dan (ð3, ð3) = (i, j)
2.3 Mulai dari elemen berikutnya dari pixel (ð2, ð2) dalam urutan
berlawanan arah jarum jam, periksa berlawanan arah jarum jam piksel di sekitar piksel saat ini pixel (ð3, ð3) untuk menemukan pixel non-zero dan Biarkan (ð4, ð4) menjadi pixel non-zero pertama yang ditemukan.
2.4 Ubah nilai ðð3,ð3 dari pixel (ð3, ð3) menjadi sebagai berikut:
a) Jika pixel (ð3, ð3+1) adalah pixel-0 yang dicek pada tahap (2.3) maka ðð3,ð3 = -NBD
b) Jika pixel (ð3, ð3+1) bukan pixel-0 yang dicek pada tahap (2.3) dan ðð3,ð3 = 1, maka ðð3,ð3 = NBD
c) Selain itu jangan ubah nilai ðð3,ð3
2.5 Jika (ð4, ð4) = (i, j) dan (ð3, ð3) = (ð1, ð1)(Kembali pada titik awal mulai penelusuran), pergi ke tahap (3). Selain itu, (ð2, ð2) = (ð1, ð1), (ð3, ð3)
= (ð4, ð4) dan kembali ke tahap (2.3).
3. Jika ðð,ðâ 1, maka LNBD = |ðð,ð| dan lanjutkan penelusuran Raster dari pixel (i, j+1), Algoritma berakhir ketika penelusuran mencapai sudut kiri bawah citra.
NBD adalah representasi dari border yang di tandai pada citra biner yang ditelusuri. Biasanya berupa 2 dan -2 karena â1â merupakan representasi citra biner. Sedangkan LNDB merupakan urutan induk dari border yang mana hanya berlau saat melakukan penelusuran yang bukan hanya bagian terluar citra biner saja. Hasil pendeteksian kontur dapat dilihat pada gambar 3.6 berikut.
Gambar 3.6 Mendeteksi kontur citra biner
III.4.3.2 Menandai Keseluruhan Kontur Dengan Penanda Persegi Panjang
Pada tahapan ini kontur yang terdeteksi akan ditandai persegi panjang. Proses ini dapat di lakukan dengan memanggil fungsi library OpenCV yaitu cv2.boundingRect() yang akan mengembalikan nilai berupa koordinat titik X dan Y dari sudut kiri atas persegi panjang, panjang dan lebar dari perkiraan persegi panjang kontur yang terdeteksi. Nilai kembalian tersebut didapat dari menguji setiap titik (x,y) pada kontur yang terdeteksi untuk menemukan titik minimum dan maksimum setiap titik x dan y (minX, maxX, minY, maxY). Dengan menguji setiap titik (x,y) dari kontur dan membandingkan dengan yang koordinat sebelumnya, jika koordinat yang sedang dibandingkan lebih tinggi atau lebih rendah maka nilai minimum atau maksimum sebelumnya akan digantikan dengan nilai yang sekarang, Nilai penanda persegi panjang kemudian adalah: X = minX, Y= minY, W=(maxX-minX), H=(maxY-minY).
Persegi panjang yang terdeteksi belum tentu memenuhi kriteria dari objek gawang yang akan diuji seperti, ukuran minimum gawang dan aspek rasio gawang maka, hasil kembalian dari fungsi tersebut diberi pemilihan kondisi yang bisa mencerminkan ciri gawang yang akan diuji.
Hasil kembalian dari fungsi ini juga dapat mengetahui koordinat titik tengah dari gawang. Hasil penandaan kontur dengan persegi panjang dapat dilihat pada gambar 3.7 berikut.
Gambar 3.7 Melingkupi kontur dengan persegi panjang
Setelah persegi panjang terdeteksi, maka selanjutnya adalah tahap memperkirakan posisi robot terhadap gawang. Proses ini membutuhkan pendeteksian tepi citra dalam melakukannya.
III.4.3.3 Mendeteksi tepi citra
Tahapan selanjutnya adalah mendeteksi tepi citra. Dalam mendeteksi tepi citra, digunakan metode dari Jhon F. Canny dengan metode Canny Edge Detector []. Proses dari metode ini dibagi menjadi beberapa tahapan yaitu:
1. Mengaktifkan Filter Gaussian untuk menghaluskan gambar dengan tujuan meredam noise. Berikut adalah contoh kernel Gaussian ukuran = 5 : mengikuti prosedur yang serupa dengan sobel
a) Aplikasikan sepasang Convolutional Masks (dalam arah x dan y):
b) Temukan kekuatan dan arah gradien dengan:
ðšðĨ= âðšðĨ2+ ðšðĶ2 (3.6) ð = ððððĄðð (ðšðĶ
ðšðĨ) (3.7)
Arahnya dibulatkan ke salah satu dari empat kemungkinan sudut (yaitu 0, 45, 90 atau 135).
3. Non-Maximum Suppresion diaplikasikan yang mana akan menghilangkan pixel yang dipertimbangkan bukan bagian dari
sebuah tepi. Karenanya, hanya garis-garis tipis (kandidat tepi-tepi) yang akan tersisa.
4. Hysteresis: Tahap akhir. Metode Canny menggunakan dua ambang batas (atas dan lower):
a) Jika gradien pixel lebih tinggi dari ambang batas atas, pixel diterima sebagai tepi.
b) Jika nilai gradien pixel di bawah ambang batas bawah, maka ditolak.
c) Jika gradien pixel berada di antara dua ambang batas, maka akan diterima hanya jika terhubung dengan pixel yang berada di atas ambang batas atas.
Keluaran dari detektor Canny adalah kontur tepi pada latar belakang hitam yang dapat dilihat pada gambar 3.8 berikut.
Gambar 3.8 Mendeteksi tepi citra biner
Setelah mendeteksi tepi citra kontur yang dideteksi, citra akan diambil ROI (Region Of Interest) di mana ROI merupakan teknik yang digunakan menandai area tertentu dari citra keseluruhan. Pada penelitian ini.
ROI mengambil kembalian dari proses melingkupi kontur dengan persegi panjang yang informasinya adalah koordinat titik awal persegi, tinggi, dan lebar. ROI tidak menggunakan library OpenCV melainkan merupakan operasi dasar dari pemrograman Python 3 yaitu fungsi slicing yang merupakan manipulasi array citra yang bertujuan memotong bagian array tertentu. Adapun tahap-tahap dalam fungsi slicing array atau ROI dalam
citra sebagai berikut:
1. Membaca fitur citra (direpresentasikan dalam array 2D)
2. Menentukan indeks awal array dan indeks akhir array dari citra.
3. Ambil setiap nilai array yang berada pada rentang indeks awal dan akhir. Jika array berada pada luar rentang, maka akan ditiadakan.
Hasil pengaplikasian ROI dapat dilihat pada gambar 3.9 berikut.
Gambar 3.9 Mengambil ROI pada hasil pendeteksian tepi citra biner
Setelah didapat ROI maka citra yang akan tampak berupa bagian tiang atas gawang dalam bentuk citra yang sudah dideteksi tepinya. Dengan demikian citra dapat diproses untuk dideteksi garis lurus pada tiang atas gawang atau dari citra ROI.
III.3.3.4 Mendeteksi garis lurus pada tiang bagian atas gawang
Pada tahapan ini citra ROI dari hasil deteksi tepi citra akan dideteksi garis lurusnya menggunakan metode HoughLines Transform.
Metode ini merepresentasikan sebuah garis sebagai [24] : ðĶ = ððĨ + ð
Atau
ð = ðĨ cos ð + ðĶ sin ð (3.8)
di mana ð adalah jarak tegak lurus dari titik mula ke garis, dan ð adalah sudut yang terbentuk dari garis tegak lurus dan sumbu horizontal yang diukur berlawanan arah. Banyak garis dapat direpresentasikan dalam dua kondisi yaitu (ð, ð). Pertama, metode ini membentuk sebuah array 2 dimensi atau akumulator (untuk menahan nilai dari kedua parameter) dan mulanya di atur ke 0. Baris array menunjukkan ð dan kolom menunjukan ð.
Besarnya array menentukan seberapa akurasi yang dibutuhkan. Jika
menginginkan akurasi sebesar 1 derajat, maka dibutuhkan 180 kolom. Jarak maksimum ð yang dapat di jangkau dalam sebuah citra adalah sebesar jarak diagonal citra.
Misalkan sebuah citra 100 Ã 100 dengan sebuah garis horizontal di tengahnya. Maka metode ini mulai mengambil titik pertama dari garis dengan koordinat (x,y) kemudian di dalam persamaan garis, diletakkan nilai ð = 0,1,2, . . . . , 180 dan mengecek ð yang di dapat. Untuk setiap pasangan (ð, ð), metode menambah nilai satu per satu di akumulator di sel (ð, ð) yang sesuai. Jadi sekarang di akumulator, sel (50, 90) = 1 bersama dengan beberapa sel lainnya. Kemudian diambil titik kedua dari garis. Hal yang sama juga dilakukan dan kali ini (50, 90) = 2. Yang sebenarnya dilakukan adalah memberi suara (voting) nilai (ð, ð). Proses ini terus berlanjut untuk setiap titik pada garis. Setiap titik, sel yang bernilai (50, 90) akan diberi suara. Jadi saat (50, 90) mendapat voting yang paling banyak di akumulator, maka hal tersebut dapat menandakan adanya garis pada jarak 50 pixels dari sumbu awal pada sudut kemiringan 90 derajat.
Dengan demikian garis yang terdeteksi akan didapat koordinat (x,y) pada ujung-ujung garis tersebut. Dengan informasi koordinat y pada ujung-ujung garis tersebut, dapat diketahui sudut robot terhadap tengah gawang dengan melihat selisih nilai koordinat y ujung-ujung garis tersebut.
Hasil pengaplikasian filter morfologi dapat dilihat pada gambar 3.2 berikut.
III.4.4 Identifikasi
Hasil segmentasi kemudian perlu ditampilkan kepada pengguna untuk mengetahui kebenaran dari hasil pengolahan citra yang dilakukan serta membantu dalam melakukan troubleshooting. Identifikasi yang dilakukan yaitu sebagai berikut.
III.4.4.1 Menampilkan kontur persegi panjang
Dari sub bab III.4.3.2 yang mana telah diperkirakan lingkup persegi panjang dari kontur, maka untuk menampilkan hasil pendeteksian tersebut kepada pengguna, dapat memanfaatkan koordinat awal dan
koordinat akhir persegi panjang tersebut. Kemudian, fungsi untuk menampilkan persegi panjang dari library OpenCV akan menandai tiap pixel dari koordinat titik awal sampai dengan koordinat titik akhir sehingga akan membentuk persegi panjang 2(dua) dimensi yang kosong pada bagian tengahnya. Persegi atau persegi panjang yang terbentuk akan memiliki warna dan tebal yang dapat diatur oleh pengguna di dalam program.
III.4.4.2 Menandai garis lurus yang terdeteksi
Untuk menandai garis lurus yang terdeteksi sebelumnya pada sub sub bab III.4.3.4, perbedaan antara titik dapat digunakan untuk mengevaluasi garis f(x,y) di titik tengah. Metode ini memungkinkan untuk aritmetika bilangan bulat saja, yang umumnya lebih cepat dari pada menggunakan aritmetika titik mengambang. Untuk menentukan titik dari garis pada citra, maka digunakan algoritma dari Bresenham [27] berikut:
1. Diketahui koordinat awal dan koordinat akhir garis yang terdeteksi.
2. Menggunakan persamaan 3.9 untuk mendapatkan keputusan.
âð· = (ðĨ1 â ðĨ0) + 2(ðĶ1 â ðĶ0) (3.9) 3. Jika âð· adalah bilangan positif, maka âð· = 2(ðĶ1 â ðĶ0) â (ðĨ1 â
ðĨ0) dan koordinat Y yang akan di plot maju satu langkah, jika negatif maka âð· = (ðĨ1 â ðĨ0) + 4(ðĶ1 â ðĶ0).
4. Kemudian dengan persamaan 3.10 lakukan perulangan dari titik ðĨ0
hingga ðĨ1. Sehingga akan dihasilkan koordinat X dan Y pada pixel ð(ðĨ, ðĶ) = ðīðĨ + ðĩðĶ + ðķ (3.10) dimana A = âðĶ; B = -âðĨ; C = (âðĨ)b; b = intersepsi koordinat y
III.4.4.3 Mengidentifikasi Posisi Sudut Robot Ke Tengah Gawang Dari hasil proses mendeteksi garis lurus pada gawang yang di jelaskan pada sub bab III.4.3.4, maka dengan menghitung selisih nilai koordinat y dari ujung-ujung garis, dapat diketahui posisi robot dari gawang dengan menunjukkan status robot sedang berada di kiri atau kanan atau
tengah dari pandangan kamera ke gawang, serta setelah selisih nilai koordinat y di lakukan pemetaan akan didapat perkiraan besar sudut robot terhadap tengah gawang yang sebenarnya dalam satuan derajat. Jika selisih bertanda minus menandakan robot berada pada kiri dari pandangan kamera
III.4.4.4 Mengidentifikasi Jarak Robot Ke Tengah Gawang
Untuk mengidentifikasi jarak dari robot ke gawang, dapat dimanfaatkan informasi lebar(W) dan tinggi(H) dari yang telah di bahas pada sub bab III.4.3.2. Dari informasi tersebut kemudian diproses dengan persamaan matematis pada persamaan 3.9 berikut. [28]
ððð ðĄðððð(ðððâðð ) (2 Ã3.14 Ã180)
(ðĪ+â Ã360)Ã1000+3
(3.9)
Maka akan didapat jarak dalam satuan inci. Dari persamaan tersebut masih harus dilakukan pemetaan dari hasil ððð ðĄðððð(ðððâðð ) pada persamaan 3.2 terhadap jarak sebenarnya karena hasil yang didapatkan ternyata belum sesuai dengan jarak yang sebenarnya. Hasil pemetaan akan ditampilkan ke pengguna dalam bentuk teks ke dalam suatu cita. Hasil semua informasi yang ingin ditampilkan dalam bentuk teks ke dalam suatu citra dapat dilihat seperti pada gambar 3.10 berikut.
Gambar 3.10 Semua informasi yang ditampilkan pada suatu citra