EKSTRAKSI BANGUN POLIGONAL DAN OPTIMASI DESKRIPSINYA Kevin Winata
Prof. Dr. Ir. Iping Supriana Suwardi
Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung Jalan Ganesha 10, Bandung, Indonesia
[email protected]
Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung Jalan Ganesha 10, Bandung, Indonesia
[email protected]
Abstrak— Dalam melakukan vektorisasi pada citra-citra nonsintesis, misalnya foto, ukuran citra vektor bisa jadi sangat besar, terkadang bahkan melebihi ukuran citra rasternya. Hal ini dapat menimbulkan masalah dalam proses rasterisasi maupun penyimpanan citra vektor tersebut. Oleh karena itu, penelitian ini berusaha mengurangi ukuran citra vektor dengan meminimalkan redundansi pada definisinya, yaitu semua sisi yang memisahkan 2 bangun didefinisikan 2 kali. Solusi yang ditawarkan adalah dengan menumpukkan bangun-bangun tersebut sehingga bangun yang berada di bawah tidak perlu mendefinisikan sebagian sisinya. Hal ini dilakukan dengan membangun hierarki antar bangun dan mengembangkan algoritma untuk menyederhanakan bangun yang tertumpuk tanpa mengubah hasil rasterisasi secara visual. Kata kunci—vektorisasi; penumpukkan
optimasi;
bangun;
vektor yang diperlukan untuk merepresentasikan citra fotografi. Hal ini mengakibatkan proses rasterisasi vektor tersebut menjadi lebih lama. Selain itu, ukuran berkas citra vektor tersebut menjadi besar, terkadang mengimbangi atau bahkan melebihi ukuran citra rasternya. Penelitian ini akan meneliti solusi untuk meminimalisir dampak dari besarnya jumlah vektor dari hasil vektorisasi citra fotografi. Hal ini dapat dicapai dengan mengurangi redundansi definisi bangun yang muncul dalam citra yang divektorisasi secara konvensional. Untuk mengilustrasikan redundansi tersebut, ambil bangun R1 dan R2 sebagai contoh.
redundansi;
I. PENDAHULUAN Dewasa ini, citra dalam bentuk vektor sudah banyak dipakai menggantikan bentuk tradisional, yaitu citra raster. Citra vektor menyimpan deskripsi geometris dari citra, yaitu titik, garis, kurva dan poligon. Citra vektor memiliki dua keunggulan utama dibandingkan citra raster, yaitu kemampuannya untuk ditampilkan dalam resolusi berapapun tanpa mengalami fenomena “pecah” dan ukurannya yang relatif lebih kecil. Proses mengubah citra raster menjadi vektor disebut sebagai vektorisasi. Vektorisasi setidaknya terdiri atas dua fungsi utama, yaitu segmentasi warna dan tracing. Tracing adalah proses menelusuri kontur yang diperoleh dari segmentasi dan melakukan minimasi dengan cara mencocokan garis atau kurva. Sebaliknya, proses mengembalikan citra vektor menjadi citra raster disebut sebagai rasterisasi. Bentuk vektor biasanya digunakan untuk citra-citra sintesis, misalnya font, ikon, gambar teknis, dan sebagainya. Hal ini dikarenakan citra-citra tersebut memiliki warna yang terbatas, bentuk-bentuk yang lebih sederhana dan batas yang jelas. Namun di lain pihak, vektor juga terkadang digunakan untuk citra fotografi agar dapat ditampilkan dalam berbagai resolusi. Akan tetapi, menyimpan citra fotografi dalam bentuk vektor tentu memiliki kelemahan. Pertama adalah hilangnya detail, terutama warna. Yang kedua adalah banyaknya jumlah
Gambar 1. Ilustrasi Redundansi Bangun
Perhatikan bahwa sisi yang diberi warna merah terdefinisikan dua kali, baik pada R1 maupun R2. Jika dilihat secara keseluruhan, dapat disimpulkan bahwa semua sisi yang digunakan dalam citra vektor ini terdefinisikan dua kali, kecuali garis pada batas pinggir citra [1]. Redundansi ini dapat dikurangi dengan menumpukkan bangun satu sama lain dengan sedemikian rupa sehingga bangun di bawah tidak perlu mendefinisikan sisi yang sama dengan region di atasnya. Solusi ini akan menghasilkan struktur multilapis dalam citra vektor yang dihasilkan, dimana lapis yang lebih bawah akan tertutup sebagian oleh lapis yang lebih atas berdasarkan urutan rasterisasi masing-masing bangun. Harapannya solusi ini dapat membantu mengurangi ukuran citra vektor dan mempercepat proses rasterisasi. II. TUJUAN Mengembangkan metode vektorisasi yang dapat menghasilkan citra vektor yang minimal dan efisien dalam pendefinisian bangun-bangun di dalamnya. Dengan membangun citra vektor yang minimal, diharapkan proses
rasterisasi citra tersebut menjadi lebih cepat dan mengurangi ukuran berkas citra yang diperlukan. III. DASAR TEORI A. Segmentasi Citra Segmentasi citra merupakan teknik untuk menentukan label pada tiap piksel pada citra sesuai dengan kriteria tertentu, sehingga piksel-piksel dengan label yang sama memiliki kesamaan karakteristik satu dengan yang lain. Segmentasi citra dapat digunakan untuk mengelompokkan piksel menjadi wilayah-wilayah pada citra, baik citra abu-abu maupun citra berwarna. Metode-metode segmentasi yang dipertimbangkan dalam penelitian ini di antaranya adalah : normalized cut [1], JSEG [2], statistical region merging [3], dan random walk [4]. B. Line Tracing Dalam bagian ini akan dijelaskan metode-metode yang dapat dimanfaatkan dalam proses mengubah batas wilayah dalam suatu citra (yang masih berupa kumpulan titik) ke dalam deskripsi garis. [5] memaparkan algoritma untuk mendeteksi titik pojok dari Freeman Chain Code [6]. Algoritma ini menggunakan perubahan arah pada chain code untuk menentukan titik-titik yang kemungkinan merupakan titik pojok. Setelah itu, jumlah kemungkinan itu diperkecil dengan menghitung sum of difference. Aturan penentuan kemungkinan titik pojok adalah sebagai berikut : Jika ai = nomor chain code, hitung d1i = selisih ai+1 & ai; d2i = d1i + (selisih ai+2 & ai-1). Jika d1i > 2, maka titik i dipastikan titik pojok, sedangkan jika d1i = 0 pasti bukan. Jika d1i = 1 atau d1i = 2, tinjau d2i. Jika d2i > 3, maka titik i dipastikan titik pojok, sedangkan jika d2i < 3 pasti bukan. Jika d2i = 3, maka perlu dihitung kurvaturnya Δαi. 𝑦𝑖+𝑛 − 𝑦𝑖 𝑦𝑖 − 𝑦𝑖−𝑛 Δα𝑖 = tan−1 − tan−1 𝑥𝑖+𝑛 − 𝑥𝑖 𝑥𝑖 − 𝑥𝑖−𝑛 Jika Δαi > threshold, berarti titik i merupakan titik pojok. C. Citra Vektor Citra vektor terdiri dari deskripsi geometris dari citra menggunakan primitif seperti titik, garis, kurva, dan poligon [7]. Primitif-primitif geometris ini disimpan dalam bentuk nilai atribut, misalnya garis memerlukan dua titik ujung dan lebar garis, sedangkan lingkaran memerlukan tambahan berupa titik pusat. Dibandingkan dengan citra raster, citra vektor lebih mewakili semantik [8], membutuhkan ukuran penyimpanan yang lebih kecil, dan lebih mudah dimanipulasi serta dimodifikasi [9]. Untuk menampilkan citra vektor, perlu sebuah proses untuk mengubah representasi vektor menjadi citra raster, yaitu rasterisasi. Properti yang paling menarik dari citra vektor adalah kemampuannya untuk dirasterisasi pada resolusi apapun tanpa kehilangan kualitas. Oleh karena itu, representasi vektor sangat cocok untuk citra yang perlu ditampilkan pada berbagai piranti dengan resolusi berbeda-beda.
Citra vektor dapat dibangun dari citra raster yang sudah ada melalui proses yang disebut sebagai vektorisasi yang merupakan kebalikan dari proses rasterisasi. Pada proses vektorisasi, citra raster dianalisis dan direpresentasikan sebagai kumpulan vektor. Citra vektor dapat direpresentasikan dalam berbagai format. Format-format yang paling umum digunakan di antaranya adalah SVG (Scalable Vector Graphics) dan EPS (Encapsulated PostScript).
IV. ANALISIS DAN PERANCANGAN A. Analisis Seperti telah disebutkan dalam bab pertama, optimasi citra vektor dalam penelitian ini dilakukan dengan menumpukkan bangun satu sama lain. Agar optimasi dapat dilakukan, berikut hal-hal yang diperlukan. 1.
Menentukan susunan masing-masing bangunnya.
2.
Algoritma untuk mengubah bentuk bangun yang redundan sedemikian rupa tanpa mengubah hasil akhir.
Selain itu, bagian ini juga akan membahas metode vektorisasi (segmentasi dan tracing) seperti apa yang dapat mempermudah pemenuhan kedua syarat tersebut. 1) Penyusunan Bangun Penentuan susunan bangun dilakukan secara heuristik. Penyusunan ini memiliki sebuah aturan utama, yaitu jika terdapat hubungan antar dua bangun, maka salah satu bangun tersebut akan ditumpuk di atas bangun lainnya. Yang disebut sebagai hubungan antar bangun adalah adanya sisi yang samasama membentuk kedua bangun tersebut. Sisi inilah redundansi yang hendak dihilangkan. Dalam melakukan penyusunan, diperlukan sebuah struktur data untuk menyimpan hierarki tumpuk-menumpuk antar bangun. Struktur data yang cocok dalam hal ini adalah pohon. Pohon dapat merepresentasikan hierarki tersebut secara intuitif; jika bangun a berada di atas bangun b, maka a adalah anak b. Namun dalam penyusunan ini, dapat muncul kasus dimana sebuah bangun memiliki lebih dari satu orangtua. Pohon biasa tidak dapat menangani kasus ini, oleh karena itu dipilihlah struktur polytree, yaitu sebuah pohon yang memperbolehkan banyak orangtua. Polytree diimplementasikan sebagai graf berarah yang tidak memperbolehkan cycle.
Gambar 2. Polytree
Bangun paling bawah, yaitu yang paling pertama dalam urutan rasterisasi (latar belakang), ditentukan dengan mengambil bangun-bangun yang : (a) berada pada tepi citra; dan
(b) tidak saling berhubungan satu dengan yang lain. Kriteria (a) dipilih karena berdasarkan observasi, latar belakang suatu citra umumnya menyentuh tepi citra. Latar belakang umumnya relatif kurang penting dibandingkan objek lain pada citra, oleh karena itu tidak menjadi masalah walaupun bentuknya berubah. Sedangkan, kriteria (b) diperlukan untuk memastikan bangunbangun latar ini tidak saling tumpuk. Dengan kedua kriteria ini, jumlah bangun latar dimaksimalkan agar jumlah tingkat pohon terlalu banyak. Setelah bangun-bangun latar ditetapkan, bangun-bangun yang berhubungan dimasukkan ke dalam pohon sebagai anak dari bangun latar. Prosedur ini diulangi hingga semua bangun tersimpan dalam pohon. Antara dua bangun non-latar yang berhubungan A dan B, penentuan bangun mana yang di atas (anak) atau di bawah (orangtua) dilakukan dengan memeriksa karakteristik sisi redundannya.
Asumsikan bahwa bangun biru adalah anak dari bangun merah. Ini berarti bangun merahlah yang harus disederhanakan. Mulai dari salah satu titik ujung (titik 1), coba tarik garis ke titiktitik setelahnya yang tidak bersebelahan dengan titik tersebut (titik 3, 4, 5, 6, 7). Jika garis tersebut memotong bangun yang hendak disederhanakan, berarti titik ujung garis tersebut ilegal. Cari titik legal yang paling terakhir ditemukan (dalam kasus ini titik 5), simpan titik tersebut pada sebuah larik, lalu ulangi proses menarik garis ke titik-titik setelahnya.
Gambar 5. Pemilihan Titik Kontrol dan Penyederhanaan
Gambar 3. Ilustrasi Relasi antar Bangun
Jika sisi redundan ternyata membentuk keseluruhan bangun A, berarti bangun tersebut berada di dalam bangun B; A dimasukkan sebagai anak. Selain itu, jika sisi cenderung cembung ke bangun A, maka bangun A dijadikan anak bangun B. 2) Algoritma Simplifikasi Algoritma simplifikasi digunakan untuk menghilangkan atau mengurangi redundansi sisi pada dua bangun. Hasil yang diharapkan dari algoritma ini yaitu salah satu bangun mengalami perubahan bentuk sedemikian rupa sehingga tidak ada sisi mengulangi definisi bangun yang lainnya, namun ketika dirasterisasi tidak berubah secara visual. Algoritma ini juga dirancang secara heuristik. Pada tahap pertama, perlu ditinjau apakah salah satu bangun terletak di dalam bangun yang lainnya atau tidak. Jika ya, maka simplifikasinya mudah; cukup hilangkan semua sisi redundan dari bangun yang di luar, kecuali yang menyebabkan sisi bangun luar terputus. Jika tidak, maka perlu diperiksa tiap titik kontrol pada sisi redundan.
Ketika sudah sampai di titik ujung lainnya (titik 7), proses penyederhanaan berhenti. Yang harus dilakukan selanjutnya adalah menggantikan titik-titik kontrol non-ujung pada sisi redundan di bangun yang hendak disederhanakan dengan titiktitik yang disimpan pada larik. Hasilnya, bangun anak dapat ditumpukkan pada bangun yang disederhanakan tanpa mengubah hasil secara visual. Dalam kasus ini, algoritma penyederhanaan telah menghemat 4 titik dari sisi redundan dan menyisakan 1 titik kontrol. Secara intuitif, dapat diterka bahwa jika bangun yang disederhanakan cenderung cembung terhadap bangun anak, maka penghematan titik akan lebih maksimal. B. Perancangan Pada bagian ini akan dibahas mengenai rancangan perangkat lunak yang akan dikembangkan untuk membuktikan efektivitas optimasi bangun pada citra vektor. Agar efektivitas optimasi dapat dievaluasi, perangkat lunak ini harus dapat melakukan vektorisasi citra raster secara konvensional. Artinya, tahap-tahap vektorisasi yang umum seperti segmentasi, edge detection, line tracing, dan penulisan vektor dalam format yang terpilih, harus berfungsi dengan baik pada berbagai jenis citra. Dengan demikian, seberapa jauh penghematan yang terjadi dan dampak relatifnya terhadap kecepatan vektorisasi dapat diketahui. Gambar 9 berikut menjelaskan tahap dan proses yang perlu dikerjakan oleh perangkat lunak untuk melakukan vektorisasi citra dan optimasi bangun. Bagian kiri menunjukkan alur kerja vektorisasi konvensional, dan bagian kanan menunjukkan alur opsional untuk melakukan optimasi. Berikut penjelasan dari masing-masing tahap tersebut. 1. Segmentasi Warna
Gambar 4. Penarikan Garis
Pertama-tama, citra dimuat dan dimasukkan dalam proses segmentasi warna. Metode segmentasi warna yang dipilih adalah teknik sederhana yang serupa dengan color fill. Bedanya, “warna” yang dimasukkan adalah label dan perpindahan piksel dilakukan berdasarkan batas perbedaan warna tertentu. Dalam
menghitung perbedaan warna, kriteria yang digunakan adalah ruang warna Lab. Ruang warna ini memiliki kedekatan yang lebih ke penglihatan alami manusia daripada RGB. Hasil dari proses segmentasi ini adalah matriks label yang seukuran dengan dimensi citra, dan informasi wilayah untuk setiap label unik. 2. Deteksi Kontur Setelah segmentasi warna dilakukan, perlu dicari batas luar atau kontur dari masing-masing wilayah. Oleh karena matriks labelnya sudah tersedia, maka pencarian batas luar menjadi trivial. Untuk tiap titik pada matriks label, jika label di kiri atau label di atas titik yang diamati berbeda dan bukan batas luar, berarti titik tersebut termasuk batas luar wilayah. Hasil dari proses ini adalah matriks kontur yang seukuran dengan dimensi citra.
berkesinambungan dan dideskripsikan melalui titik-titik ujung dari masing-masing garis. Titik-titik ujung ini dapat diperoleh dengan menggunakan teknik corner detection. Teknik yang akan digunakan adalah [6], dengan alasan kesederhanaan dan kecepatannya. 5. Pembangunan Pohon Hierarki Wilayah Pembangunan pohon dapat dilakukan ketika hubungan sisi antar wilayah telah diperoleh. Pohon dibangun sesuai dengan proses yang telah dijelaskan di bagian sebelumnya. Dengan proses ini, hierarki antar wilayah, yaitu mana yang tertumpuk dan mana yang tidak, sudah jelas dan dapat dilanjutkan dengan penyederhanaan bangun. 6. Penyederhanaan Bangun Penyederhanaan bangun dilakukan sesuai dengan langkahlangkah yang telah dijelaskan di bagian sebelumnya, dan diterapkan pada semua bangun yang memiliki anak pada pohon hierarki, dimulai dari akar-akar pohon. 7. Penulisan Vektor Proses ini dilakukan sesuai spesifikasi dari format vektor yang dipilih. Jika optimasi bangun dilakukan, masing-masing bangun harus ditulis pada berkas secara berurutan sesuai dengan pohon hierarki.
V. IMPLEMENTASI Implementasi perangkat lunak dalam penelitian ini dilakukan dalam bahasa C++, atau lebih tepatnya C++11. Selain menggunakan pustaka dasar C++ (std), perangkat lunak ini juga memanfaatkan pustaka OpenCV. OpenCV sendiri sudah menyediakan berbagai fungsi dan prosedur untuk melakukan pemrosesan citra, termasuk segmentasi dan edge detection [11], namun dalam penelitian ini beberapa fungsi dan prosedur tersebut diimplementasi ulang dengan cara yang berbeda agar lebih kompatibel. Perangkat lunak ini dikembangkan dengan IDE Visual Studio 2013. Sistem operasi yang digunakan baik dalam pengembangan maupun menjalankan program adalah Windows 7. A. Tipe Data Penyimpanan cv::Mat merupakan kelas dasar bawaan dari pustaka OpenCV. Kelas ini digunakan untuk menyimpan citra yang perlu ditampilkan ke layar. Gambar 6. Bagan Perancangan
3. Pemisahan Kontur Pada tahap ini, titik-titik kontur harus dipisahkan tiap adanya percabangan atau perubahan wilayah di sekitarnya. Untuk mengelompokan titik-titik kontur tersebut, digunakan Freeman Chain Code 8 arah. Tujuan dari tahap ini adalah mempermudah deteksi hubungan antar wilayah dan sisi yang redundan. 4. Deteksi Titik Pojok Agar dapat dibentuk sebagai citra vektor, chain code perlu diubah menjadi sisi, yaitu kumpulan garis yang saling
std::vector<std::vector
> digunakan untuk menyimpan label dari masing-masing pixel. Vektor 2 dimensi berukuran sesuai dengan baris dan kolom citra. std::vector<std::vector> digunakan untuk menyimpan kontur citra. Nilai 0 pada posisi tertentu menunjukkan bahwa pixel pada posisi tersebut adalah kontur. std::vector<std::vector<std::pair>> digunakan untuk menyimpan kumpulan chain code beserta dengan posisi titiknya. Masing-masing chain code akan menghasilkan sebuah sisi.
B. Kelas Bentukan Region : kelas untuk menyimpan informasi wilayah. Region tidak menyimpan posisi wilayah, karena persebaran pikselpiksel dalam wilayah sendiri sudah didefinisikan dalam labels. Path : kelas untuk merepresentasikan kumpulan sisi dalam bentuk garis yang saling berkesinambungan. VectorTree : kelas yang menyimpan pohon hierarki wilayah. Gambar 10 Ekspansi Hasil Vektorisasi Optimal
C. Hasil 1) Segmentasi Warna
VI. PENGUJIAN Pengujian dilakukan dalam tiga bagian, yaitu pengujian fungsional untuk melihat kualitas hasil vektorisasi dan keakuratan penyederhanaan bangun; pengujian kinerja perangkat lunak untuk melihat dampak optimasi terhadap waktu yang diperlukan untuk melakukan vektorisasi; serta pengujian hasil vektorisasi untuk melihat dampak optimasi terhadap ukuran berkas dan waktu yang diperlukan untuk rasterisasi. A. Pengujian Fungsional TABEL 1 Hasil Vektorisasi
Gambar 7. Hasil Segmentasi Warna
2) Deteksi dan Pemisahan Kontur
Citra Asli
Hasil Vektorisasi Normal
Hasil Vektorisasi Optimal
Gambar 8. Hasil Deteksi dan Pemisahan Kontur
3) Deteksi Titik Pojok
Gambar 9. Hasil Deteksi Titik Pojok
4) Penyederhanaan Bangun Melalui eksperimen sederhana yang dilakukan, penyederhanaan bangun yang dilakukan berhasil mengurangi jumlah titik yang diperlukan untuk mendefinisikan sebuah bangun.
Dapat dilihat bahwa hasil vektorisasi masih cukup kasar dan hilang di beberapa tempat. Namun, hasil optimasi bisa dibilang cukup memuaskan karena hampir tidak mengubah
hasil secara visual sama sekali jika dibandingkan dengan vektorisasi normal. B. Pengujian Kinerja Perangkat Lunak TABEL 2 Kinerja Perangkat Lunak
Nama
Waktu Vektorisasi Normal (s)
Waktu Optimasi (s)
airplane arctichare cat fruits frymire lena monarch peppers serrano tulips
0.531 0.391 0.83 0.556 2.547 0.531 0.78 0.594 0.86 0.859
0.062 0.062 0.155 0.109 0.625 0.079 0.11 0.11 0.094 0.141
Rasio Waktu Optimasi (%) 10.46 13.69 15.74 16.39 19.70 12.95 12.36 15.63 9.85 14.10
Jika dirata-ratakan, optimasi hanya memakan sekitar 14.09% dari waktu total untuk melakukan vektorisasi yang optimal. C. Pengujian Hasil Vektorisasi TABEL 3 Perbandingan Ukuran
Nama
Rasio Ukuran (%)
airplane arctichare cat fruits frymire lena monarch peppers serrano tulips
12.46 12.55 9.55 10.13 6.72 13.73 11.28 8.51 6.68 10.01
Rasio Jumlah Titik (%) 14.33 14.20 11.19 11.87 7.85 15.66 12.92 9.94 7.90 11.47
Setelah dirata-ratakan, didapat hasil bahwa optimasi menghemat ukuran berkas sekitar 10.16%, sementara jumlah titik definisi dihemat sekitar 11.73%. TABEL 4 Perbandingan Waktu Rasterisasi
Nama airplane arctichare cat fruits frymire
Rasterisasi Normal (ms) 33.612 17.296 68.415 46.348 156.063
Rasterisasi Optimal (ms) 30.628 14.214 68.156 32.277 149.326
ena monarch peppers serrano tulips
20.738 36.562 48.559 92.207 60.256
22.052 34.951 48.360 60.291 49.541
Dapat dilihat bahwa perbandingan waktu rasterisasi antar satu dengan yang lainnya tidak terlalu konsisten, namun secara keseluruhan hasil citra vektor yang optimal dapat dirasterisasi sekitar 11.26% lebih cepat. REFERENSI [1] S. Battiato and G. Puglisi, "A Novel Rendering Strategy for SVG Vectorization," Tokyo, 2007. [2] J. Shi and J. Malik, "Normalized cuts and image segmentation," Pattern Analysis and Machine Intelligence, IEEE Transactions on, vol. 22, no. 8, pp. 888-905, 2000. [3] Y. Deng and B. Manjunath, "Unsupervised segmentation of color-texture regions in images and video," Pattern Analysis and Machine Intelligence, IEEE Transactions on, vol. 23, no. 8, pp. 800-810, 2001. [4] R. Nock and F. Nielsen, "Statistical Region Merging," IEEE Transactions On Pattern Analysis And Machine Intelligence, vol. 26, no. 11, pp. 1452-1458, 2004. [5] L. Grady, "Random Walks for Image Segmentation," Pattern Analysis and Machine Intelligence, IEEE Transactions on, vol. 28, no. 11, pp. 1768-1783, 2006. [6] B. Yu, L. Guo, X. Qian and T. Zhao, "A corner detection algorithm based on the difference of FCC," Computer Design and Applications (ICCDA), 2010 International Conference on, vol. 4, pp. 226-229, 2010. [7] H. Freeman, "On the Encoding of Arbitrary Geometric Configurations," Electronic Computers, IRE Transactions on, Vols. EC-10, no. 2, pp. 260-268, 1961. [8] W. Dai, T. Luo and J. Shen, "Automatic Image Vectorization using Superpixels and Random Walkers," International Congress on Image and Signal Processing, vol. CISP 2013, pp. 922-926, 2013. [9] D. Dori and W. Liu, "Sparse Pixel Vectorization- An Algorithm and Its Performance Evaluation," IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 21, no. 3, pp. 202-215, 1999. [10] J. Y. Chiang, S. Tue and Y. Leu, "A New Algorithm for Line Image Vectorization," Pattern Recognition, vol. 31, pp. 1541-1549, 1998. [11] Itseez, "OpenCV 2.4.9.0 documentation," 2014. [Online]. Available: http://docs.opencv.org/. [Accessed 21 November 2014].