Implementasi Algoritma DFS pada Pewarnaan Gambar Sederhana Menggunakan Bucket tool

dokumen-dokumen yang mirip
Penerapan DFS dan BFS dalam Pencarian Solusi Game Japanese River IQ Test

Penerapan Algoritma DFS dan BFS untuk Permainan Wordsearch Puzzle

Penerapan Algoritma BFS dan DFS dalam Mencari Solusi Permainan Rolling Block

Penerapan Algoritma DFS pada Permainan Sudoku dengan Backtracking

Implementasi Intuitif Penyelesaian Labirin dengan Algoritma Depth-First Search

Perbandingan Algoritma Depth-First Search dan Algoritma Hunt-and-Kill dalam Pembuatan Labirin

Aplikasi Algoritma Traversal Dalam Binary Space Partitioning

Implementasi Algoritma DFS pada permainan Monument Valley

Pemanfaatan Algoritma Runut-Balik dalam Menyelesaikan Puzzle NeurOn dalam Permainan Logical Cell

Penerapan Algoritma BFS dan DFS dalam Permainan Ular Tangga

Pencarian Solusi Permainan Flow Free Menggunakan Brute Force dan Pruning

BFS dan DFS. Bahan Kuliah IF2151 Strategi Algoritmik. Oleh: Rinaldi Munir

PENERAPAN ALGORITMA RUNUT-BALIK DALAM PENCARIAN SOLUSI TEKA-TEKI BATTLESHIP

Penerapan strategi BFS untuk menyelesaikan permainan Unblock Me beserta perbandingannya dengan DFS dan Branch and Bound

ALGORITMA PENCARIAN SIMPUL SOLUSI DALAM GRAF

Algoritma Traversal di dalam Graf

Aplikasi Graf Breadth-First Search Pada Solver Rubik s Cube

Penerapan Algoritma Backtracking untuk Menyelesaikan Permainan Hashiwokakero

Perbandingan BFS, DFS dan Greedy pada Permainan Logika Crossing Bridge

PENERAPAN ALGORITMA BACKTRACKING PADA PERMAINAN WORD SEARCH PUZZLE

Implementasi Algoritma BFS dan DFS dalam Penyelesaian Token Flip Puzzle

Perbandingan Algoritma Brute Force dan Breadth First Search dalam Permainan Onet

Penyelesaian Permasalahan Nonogram dengan Algoritma Runut Balik

Implementasi Algoritma Backtracking untuk Memecahkan Puzzle The Tile Trial pada Permainan Final Fantasy XIII-2

Penerapan Algoritma Greedy dan Algoritma BFS untuk AI pada Permainan Greedy Spiders

Aplikasi Branch and Bound Pada Pencarian Jalan Pada Software Navigasi

Pencarian Pohon Solusi Permainan Alchemy Menggunakan Algoritma BFS dan DFS

MAKALAH STRATEGI ALGORITMIK (IF 2251) ALGORITMA RUNUT BALIK DALAM GAME LABIRIN

Analisis Pengimplementasian Algoritma Greedy untuk Memilih Rute Angkutan Umum

Pelacakan dan Penentuan Jarak Terpendek terhadap Objek dengan BFS (Breadth First Search) dan Branch and Bound

Penerapan Algoritma DFS dalam Menyelesaikan Permainan Buttons & Scissors

Penerapan Algoritma Flood Fill untuk Mengurangi Ruang Pencarian pada Pencarian Solusi Puzzle Pentomino

Penggunaan Algoritma DFS dalam Pencarian Strategi Permainan Catur

PENERAPAN ALGORITMA BFS PADA CHINESE SLIDE BLOCK PUZZLE (KLOTSKI)

Penggunaan BFS dan DFS untuk Pixel Traversing

Algoritma Puzzle Pencarian Kata

Penggunaan Algoritma Pathfinding pada Game

PENGUNAAN DUA VERSI ALGORITMA BACKTRACK DALAM MENCARI SOLUSI PERMAINAN SUDOKU

PERBANDINGAN ALGORITMA BFS DAN DFS DALAM PEMBUATAN RUTE PERJALANAN OBJEK PERMAINAN 2 DIMENSI

Penerapan Algoritma Branch and Bound untuk Penentuan Jalur Wisata

Kode MK/ Pemrograman Terstruktur 2

Memecahkan Puzzle Hidato dengan Algoritma Branch and Bound

Penerapan Algoritma Runut-balik pada Permainan Math Maze

Penerapan Algoritma Runut-Balik untuk Menyelesaikan Permainan Pencarian Kata

Penggunaan Algoritma DFS dan BFS pada Permainan Three Piles of Stones

Analisis Penerapan Algoritma Backtracking Pada Pencarian Jalan Keluar di Dalam Labirin

Penerapan Algoritma BFS, DFS, DLS dan IDS dalam Pencarian Solusi Water Jug Problem

Menyelesaikan Permainan Wordament Menggunakan Algoritma Backtracking

Penerapan Algoritma Runut-Balik (Backtracking) pada Permainan Nurikabe

SOLUSI ALGORITMA BACKTRACKING DALAM PERMAINAN KSATRIA MENYEBRANG KASTIL

Algoritma Backtracking Pada Permainan Peg Solitaire

ANTIMAGIC PUZZLE. Alwi Afiansyah Ramdan

Pencarian Solusi Permainan Pipe Puzzle Menggunakan Algoritma Backtrack

Perbandingan Algoritma Brute Force dan Backtracking dalam Permainan Word Search Puzzle

Penerapan Pohon dengan Algoritma Branch and Bound dalam Menyelesaikan N-Queen Problem

Penggunaan Algoritma Greedy untuk Mencari Solusi Optimal dalam Permainan Brick Breaker

Implementasi Algoritma Runut Balik dalam Pengenalan Citra Wajah pada Basis Data

PENCARIAN SOLUSI TTS ANGKA DENGAN ALGORITMA RUNUT BALIK BESERTA PENGEMBANGANNYA

Penggunaan Strategi Algoritma Backtracking pada Pencarian Solusi Puzzle Pentomino

Pembentukan pohon pencarian solusi dan perbandingan masingmasing algoritma pembentuknya dalam simulasi N-Puzzle

Implementasi Logika Penurunan Persamaan Aritmatika pada Program Komputer

Aplikasi Algoritma Runut Balik dalam Pembangkitan Elemen Awal Permainan Sudoku

Penerapan Algoritma Runut-Balik pada Magic Square

Penerapan Algoritma Greedy Pada Game Tower Defense: Tower of Greece

I. PENDAHULUAN. 1.1 Permainan Rush Hour

Penerapan Algoritma Runut-Balik untuk Menyelesaikan Zebra Puzzle

Penerapan strategi runut-balik dalam penyelesaian permainan puzzle geser

Penerapan Algoritma Backtracking pada Knight s Tour Problem

Penggunaan Algoritma DFS dan BFS Dalam Pencarian Jarak Tedekat di Game Civilization V

Aplikasi Algoritma Runut-balik pada Penyelesaian Teka Teki Mengisi Angka

PEMBANGKIT TEKA-TEKI SILANG DENGAN ALGORITMA BACKTRACKING SERTA APLIKASI PERMAINANNYA YANG BERBASIS WEB

Penerapan Algoritma Backtracking pada Game The Lonely Knight

Perbandingan BFS dan DFS pada Pembuatan Solusi Penyelesaian Permainan Logika

Penerapan Algoritma Greedy untuk Permainan Flood It

Penerapan Algoritma Brute Force dan Backtracking pada Permainan Skycraper

PENERAPANAN ALGORITMA BFS, DFS, DAN UCS UNTUK MENCARI SOLUSI PADA MASALAH ROMANIA

Penyelesaian Permainan 3 missionaries and 3 cannibals Dengan Algoritma Runut-Balik

Penerapan Algoritma Backtrack pada Knight s Tour

Pemanfaatan Algoritma Runut-balik dalam Penentuan Golongan Suara pada Dunia Paduan Suara

Mendeteksi Blob dengan Menggunakan Algoritma BFS

PERMAINAN KNIGHT S TOUR DENGAN ALGORITMA BACKTRACKING DAN ATURAN WARNSDORFF

Algoritma Divide and Conquer untuk Optimasi Pemberian Efek Aura pada Permainan DotA (Defense of the Ancient)

Pendeteksian Deadlock dengan Algoritma Runut-balik

Penerapan Algoritma BFS & DFS untuk Routing PCB

Penentuan Keputusan dalam Permainan Gomoku dengan Program Dinamis dan Algoritma Greedy

Analisis Beberapa Algoritma dalam Menyelesaikan Pencarian Jalan Terpendek

Penyelesaian Permainan Sliding Puzzle 3x3 Menggunakan Algoritma Greedy Dengan Dua Fungsi Heuristik

Penerapan Algoritma Backtracking pada Pewarnaan Graf

APLIKASI PEWARNAAN GRAPH PADA PEMBUATAN JADWAL

PENERAPAN ALGORITMA RUNUT-BALIK (BACKTRACKING) DALAM PENYELESAIAN PERMAINAN SUDOKU

Kombinasi Algoritma Pattern Matching dan BFS-DFS pada aplikasi Music Discovery

Penggunaan Algoritma Greedy untuk menyelesaikan Permainan Othello

Algoritma A* Memanfaatkan Navigation Meshes dalam 3 Dimensional Pathfinding

Penggunaan Metode Depth First Search (DFS) dan Breadth First Search (BFS) pada Strategi Game Kamen Rider Decade Versi 0.3

PENERAPAN ALGORITMA RUNUT BALIK DALAM PERMAINAN TEKA-TEKI SILANG

Penyelesaian Permainan Minesweeper dengan Algoritma BFS dengan Optimasi Algoritma Greedy

Aplikasi Algoritma Runut-balik untuk Penyelesaian Jenis Permainan Smart Mike pada Permainan Mike 2 in 1

PENERAPAN ALGORITMA BRANCH AND BOUND DALAM MENENTUKAN RUTE TERPENDEK UNTUK PERJALANAN ANTARKOTA DI JAWA BARAT

Penerapan Algoritma Brute-Force serta Backtracking dalam Penyelesaian Cryptarithmetic

Penerapan BFS dan DFS dalam Garbage Collection

Transkripsi:

Implementasi Algoritma DFS pada Pewarnaan Gambar Sederhana Menggunakan Bucket tool Sharon Loh (13510086) 1 Program Studi Teknik Informatika Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung, Jl. Ganesha 10 Bandung 40132, Indonesia 1 13510086@std.stei.itb.ac.id Abstraksi Flood fill merupakan sebuah algoritma pewarnaan yang terkenal dan banyak digunakan pada berbagai aplikasi dalam mengimplementasi pewarnaan gambar, misalnya pada bucket tool. Salah satu implementasi algoritma flood fill yang dapat dilakukan adalah dengan menerapkan algoritma DFS. Makalah ini akan membahas bagaimana algoritma DFS diterapkan pada pewarnaan gambar, khususnya dengan menggunakan bucket tool pada aplikasi Paint. Kata kunci flood fill, DFS, bucket tool. I. PENDAHULUAN Saat ini, drawing application banyak sekali digunakan oleh desainer maupun orang awam. Mulai dari drawing tool yang mempunyai fitur yang lengkap seperti Photoshop maupun drawing tool sederhana seperti Paint yang sudah tersedia pada sistem operasi Windows. Banyak orang yang membutuhkan aplikasi ini untuk mendesain sebuah gambar atau hanya sekedar untuk mengubah atau menambahkan sesuatu pada gambar yang telah ada. Salah satu fitur dasar yang paling berguna pada sebuah drawing application adalah bucket tool. Bucket tool merupakan sebuah tool yang terdapat pada hampir semua drawing application saat ini yang digunakan untuk melakukan pewarnaan pada suatu area dimana pewarrnaan hanya dilakukan pada area itu saja tanpa menyentuh area di luar batas area tersebut. Figure 1 merupakan contoh bucket tool yang ada pada aplikasi Paint. Bucket tool mengadopsi prinsip menuangkan cat, yaitu pewarnaan dilakukan pada area dimana pengguna mengklik kursornya dan menyebar ke area lain di sekitar area itu selama belum ada pembatas. Pada contoh figure 2, Jika pengguna menekan bucket tool pada area di dalam persegi panjang sebelah kiri, maka area pada persegi panjang tersebut akan diwarnai sesuai warna yang dipilih tanpa menyentuh garis hitam yang merupakan pembatas area persegi panjang dan area di luar persegi panjang. Figure 2 - Contoh Pewarnaan Persegi Sedangkan jika pengguna mengklik garis hitam pada persegi pertama, maka garis hitam tersebut akan diwarnai dengan warna lain sesuai dengan warna yang dipilih oleh pengguna. Pewarnaan dilakukan pada area tersebut tanpa menyentuh area berwarna biru dan area berwarna putih. Figure 1- Bucket tool Figure 3 - Contoh Pewarnaan Garis Hitam

II. DASAR TEORI Algoritma DFS (Depth First Search) merupakan suatu algoritma pencarian traversal pada sebuah graf atau pohon yang yang dilakukan dengan mengunjungi sebuah simpul awal dan kemudian melakukan eksplorasi dengan mengunjungi simpul-simpul tetangga dari simpul saat ini pada suatu graf sebelum akhirnya melakukan runut balik / backtracking. Algoritma ini disebut dengan algoritma pencarian mendalam (depth first search) karena pencarian terhadap suatu simpul dilakukan secara rekursif terhadap simpul-simpul tetanggannya. Secara umum, cara kerja algoritma DFS dijelaskan pada Figure 4. Graf yang didefinisikan pada pseudocode pada Figure 5 merupakan graf dimana suatu simpul dapat berhubungan dengan n buah simpul lainnya. Karena itu, algoritma DFS akan mengunjungi n buah simpul tetangga tersebut. Contoh urutan pengecekan simpul graf yang dilakukan berdasarkan algoritma DFS dijelaskan pada figure 6. Misalkan terdapat sebuah graf dimana pencarian akan dilakukan. Langkah langkah yang dilakukan dalam melakukan pencarian dengan algoritma DFS adalah : 1. Kunjungi simpul v 2. Kunjungi simpul w yang bertetangga dengan simpul v 3. Ulangi DFS mulai dari simpul w 4. Ketika mencapai simpul u sedemikian sehingga semua simpul yang bertetangga dengannya telah dikunjungi, pencarian dirunutbalik ke simpul terakhir yang dikunjungi sebelumnya dan mempunyai simpul w yang belum dikunjungi. 5. Pencarian berakhir bila tidak ada lagi simpul yang belum dikunjungi yang dapat dicapai dari simpul yang telah dikunjungi Figure 4 - Algoritma DFS Proses rekursif yang diterapkan pada algoritma DFS dilakukan pada langkah ke-3, yaitu dengan memanggil algoritma DFS itu sendiri terhadap simpul w yang dikunjungi. Pseudocode algoritma DFS digambarkan pada Figure 5. procedure DFS (input v:integer) Deklarasi w : integer Algoritma: Proses(v) visited[v] true for w l to n do if (v dan w bertetangga) if (not visited[w]) then DFS(w) endif endif endfor Figure 5 - Pseudocode Algoritma DFS Figure 6 - Pohon Pengecekan Status DFS Pada figure 6, dapat dilihat bahwa algoritma DFS melakukan pengecekan secara mendalam mulai dari simpul awal ke simpul tetangganya. Dan dari simpul tetangga tersebut, dilakukan pengecekan ke simpul tetangganya lagi dan begitu seterusnya. Setelah pengecekan dilakukan hingga tidak ada simpul tetangga yang dapat dikunjungi lagi, program akan melakukan backtracking atau runut balik untuk melakukan pengecekan terhadap simpul tetangga yang belum pernah dikunjungi. Selain dengan menggunakan struktur data berupa graf atau pohon, algoritma DFS juga dapat dapat digunakan pada struktur data berupa matriks yang menggambarkan sebuah peta sebagai kumpulan dari grid. Pada struktur data ini, sebuah grid berhubungan dengan grid lainnya dalam 4 arah mata angin yaitu : Atas Kanan Bawah Kiri Kiri Atas Current Bawah Kanan Figure 7 Gambaran Struktur Data Matriks

Jika struktur data yang digunakan adalah struktur data matriks, maka pengecekan grid tetangga dilakukan terhadap 4 buah grid tetangga sesuai dengan arah mata angin seperti pada figure 7, yaitu grid atas, grid kanan, grid bawah, dan grid kiri. Urutan pengecekan terhadap masing-masing grid tergantung pada algoritma yang dirancang. Selain itu, diperlukan juga suatu variabel sementara yaitu visited[][] yang digunakan untuk menyimpan suatu nilai penanda (true / false) untuk mengecek apakah suatu grid atau simpul sudah pernah dikunjungi sebelumnya. Algoritma DFS hanya boleh mengunjungi simpul / grid yang belum pernah dikunjungi sebelumnya. Algoritma DFS terkenal untuk memecahkan berbagai masalah graf, seperti penyelesaian permainan 8 puzzle, melakukan penjelajahan web pada search engine, pencarian rute untuk keluar dari suatu labirin, dll. III. IMPLENTASI ALGORITMA DFS Salah satu implementasi algoritma DFS yang dapat diterapkan pada aplikasi nyata yaitu impelmentasi DFS pada proses pewarnaan menggunakan bucket tool. Algoritma ini dikenal dengan istilah flood fill. Algoritma Flood Fill merupakan sebuah algoritma pewarnaan yang dilakukan seperti menumpahkan seember cat pada daerah tertentu. Cat tersebut akan menyebar ke daerah sekitar tempat dimana cat pertama kali ditumpahkan. Algoritma flood fill menggunakan 3 parameter utama yaitu node awal, warna awal, dan warna pengganti. Warna awal dapat diperoleh dari node awal. Pada kasus pewarnaan ini, pengguna menentukan titik awal dimana proses pewarnaan akan dimulai. Selain itu, pengguna juga menentukan warna yang akan digunakan dalam proses pewarnaan. Struktur data yang digunakan dalam merepresentasikan sebuah gambar merupakan struktur data matriks dimana tiap grid dari matriks tersebut merepresentasikan sebuah pixel pada gambar. Inisialisasi(startX) Inisialisasi(startY) Inisialisasi(originalColor) Inisialisasi(newColor) procedure FloodFill (x, y, newcolor) Algoritma if ((grid[x][y] = newcolor) and (grid[x][y]!= originalcolor)) or (visited[x][y]) return; else visited[x][y] true if (grid[x][y+1] valid) FloodFill(x, y+1, newcolor) if (grid[x-1][y] valid) FloodFill(x-1, y, newcolor) if (grid[x][y-1] valid) FloodFill(x, y-1, newcolor) Figure 8 - Algoritma Flood Fill dengan DFS pada Fungsi Pewarnaan Gambar Pada algoritma flood fill dengan DFS yang dijelaskan pada Figure 8, pengecekan dilakukan terhadap 4 buah grid tetangga (grid atas, grid kanan, grid kiri, grid bawah) dari suatu current grid. Suatu grid tetangga dikategorikan sebagai grid yang valid jika grid tetangga tersebut memenuhi kriteria berikut : tetangga memiliki warna yang sama dengan warna dari titik awal dimana pewarnaan dimulai. grid[x][y]=originalcolor tetangga belum pernah dikunjungi sebelumnya. visited[x][y]= false tetangga tidak berwarna yang sama dengan warna pengganti. grid[x][y]!= newcolor tetangga berada dalam area berukuran width x height dari gambar yang bersangkutan. Hal ini dilakukan untuk menghindari logical error pada program yang dibuat. x+1 <= height y+1 <= width x-1 > 0 y-1 > 0 Pada program sederhana yang telah dibuat untuk mensimulasikan proses pewarnaan ini melakukan pengecekan grid tetangga dengan urutan grid bawah, grid kanan, grid atas, lalu grid kiri. Proses pewarnaan dari algoritma yang dirancang disimulasikan pada figure 9 sampai figure 17. awal pewarnaan dimulai dari grid yang bertanda x. x grid[x][y] newcolor if (grid[x+1][y] valid) FloodFill(x+1, y, newcolor) Figure 9 - Langkah 1

Figure 10 - Langkah 2 Figure 17 - Langkah 9 Figure 11 - Langkah 3 IV. HASIL SIMULASI Dengan algoritma flood fill menggunakan DFS yang telah diimplementasikan untuk mensimulasikan proses pewarnaan gambar dengan prinsip bucket tool, hasil pewarnaan dapat dilakukan dengan hasil yang sesuai dengan apa yang diharapkan, yaitu seluruh area gambar yang seharusnya diwarnai berhasil diubah warnanya dan area gambar yang seharusnya tidak diwarnai tidak berubah warnanya. Kita misalkan sebuah gambar terdiri dari grid yang berisi character untuk merepresentasikan sebuah warna. Figure 12 - Langkah 4 Figure 13 - Langkah 5 Figure 18 - Gambar Awal Figure 14 - Langkah 6 Pada Figure 18, dapat dilihat bahwa warna latar dari gambar tersebut direpresentasikan sebagai karakter 0, sedangkan warna 1 digunakan untuk menggambar batas persegi panjang. Jika proses pewarnaan dilakukan dengan mengklik grid[1][1] yaitu grid yang berkarakter 0 dengan warna baru yaitu warna 2, maka semua latar yang berwarna 0 akan diubah menjadi warna 2. Proses pewarnaan tidak dilakukan terhadap warna 0 yang terletak di dalam persegi panjang. Hasil dari pewarnaan ini ditunjukkan pada Figure 19. Figure 15 - Langkah 7 Figure 16 - Langkah 8

PERNYATAAN Dengan ini saya menyatakan bahwa makalah yang saya tulis ini adalah tulisan saya sendiri, bukan saduran, atau terjemahan dari makalah orang lain, dan bukan plagiasi. Bandung, 15 Desember 2012 Figure 19 - Hasil Pewarnaan Latar Jika proses pewarnaan dilakukan terhadap garis pembatas persegi panjang, yaitu gambar yang berwarna 1, maka garis pembatas yang berwarna 1 akan berubah warna menjadi warna baru yang ditentukan, yaitu pada kasus ini berupa warna 2. Hasil proses pewarnaan garis berwarna 1 dari gambar awal pada Figure 18 ditunjukkan pada Figure 20. Sharon Loh - 13510086 Figure 20 - Hasil Pewarnaan Garis V. KESIMPULAN Algoritma DFS (Depth First Search) merupakan algoritma yang dapat digunakan untuk mengimplementasikan bucket tool dalam pewarnaan sebuah gambar. Namun algoritma ini tidak optimal untuk digunakan sebagai algoritma pewarnaan. Algoritma pewarnaan yang lebih optimal adalah algoritma BFS (Breadth First Search) yang melakukan pewarnaan secara menyebar langsung ke seluruh arah pada simpul tetangga. REFERENSI [1] Munir, Rinaldi, Diktat Kuliah IF3051 Strategi Algoritma, Program Studi Teknik Informatika, 2009 [2] http://ww3.algorithmdesign.net/handouts/dfs.pdf Akses : 15 Desember 2012, 08.15 WIB [3] http://www.programmerinterview.com/index.php/data-structures/dfsvs-bfs/ Akses : 15 Desember 2012, 08.23 WIB