Anda di halaman 1dari 6

1

[Jans Hendry / EE UGM, Indonesia]

Memanfaatkan DILATING dan ERODING Dalam Mendeteksi Tulisan (Karakter) Pada Citra Digital

Kemungkinan lain yang muncul saat bekerja dalam projek deteksi tulisan pada citra digital (hasil scanned) adalah bentuk karakter yang tidak solid atau memiliki diskontinuitas untuk masing masing karakter. Bila hal itu terjadi maka ketika kita akan melakukan pemotongan karakter yang akan diolah menjadi keliru. Kekeliruan ini menyebabkan deteksi menjadi tidak valid. Jika deteksi tidak valid maka klasifikasi menjadi tidak benar. Sehingga huruf huruf atau angka angka yang seharusnya menunjukkan angka tertentu akan memberikan hasil yang tidak sesuai dengan keinginan kita. Perhatikan gambar di bawah ini sebagai ilustrasi permasalahan yang saya utarakan.

Sumber : Digital Image Processing 3rd ed Gonzalez and Woods

Hasil pengolahan menggunakan program yang sudah saya berikan pada artikel sebelumnya adalah

[Jans Hendry / EE UGM, Indonesia]

Bila anda perhatikan dengan seksama, tampak bahwa dalam satu karakter bisa terjadi lebih dari 1 centroid yang terdeteksi. Sehingga jumlah karakter yang terdektsi menjadi sangat banyak dari yang seharusnya. Mengapa hal tersebut bisa terjadi? Hal itu terjadi karena satu karakter mengalami diskontinuitas sehingga seolah-olah 1 karakter itu sebenarnya terdapat lebih dari 1 jenis karakter. Untuk itu, kita mencoba untuk menghadirkan sebuah pengolahan awal untuk mendapatkan bentuk karakter yang layak sebagai presentasi bentuk karakter yang sebenarnya. Proses tersebut disebut sebagai erosi (penipisan) dan dilasi (penebalan). Kedua teknik tersebut bisa bekerja bersama-sama atau secara individu, tergantung dari hasil yang kita peroleh apakah sudah cukup memenuhi harapan atau tidak. Hasil yang diharapkan adalah masing-masing karakter yang telah dikenai proses awal ini akan memberikan bentuk valid sebuah karakter. Langkah-langkah yang saya gunakan dalam membuat program ini adalah Membaca citra digital Deteksi format gambar apakah RGB atau sudah dalam format grayscale atau biner. Melakukan proses dilasi (dilation) Melakukan proses erosi (eroding) Proses deteksi

[Jans Hendry / EE UGM, Indonesia]

Agar artikel ini terkesan singkat, maka kita langsung saja membahas program yang sudah saya persiapkan untuk menyelesaikan permasalahan ini. Yang akan saya jelaskan hanya terkait dengan proses dilasi dan erosi. Melakukan proses dilasi (dilating)
se1=strel('line',3,0); se2=strel('line',3,90); bw=imdilate(bw,[se1 se2]); bw1=~bw; figure, imshow(bw1); title('Dilasi Terhadap Objek Citra');

Melakukan proses erosi (eroding)


se1=strel('line',1,0); se2=strel('line',1,90); bw=imerode(bw,[se1 se2]); bw2=~bw; figure, imshow(bw2); title('Erosi Terhadap Objek Citra');

fungsi strel merupakan singkatan dari structuring element merupakan vektor yang digunakan sebagai operator untuk beberapa fungsi pada matlab, salah satunya imdilate dan imerode. Beberapa jenis strel yang dimiliki oleh Matlab adalah

Sumber: MATLAB HELP

Program utuh nya adalah sebagai berikut:


clear all; close all; clc; %% inisialisasi filename='sample.tif'; I=imread(filename); imshow(I); title('Original Image'); %%

[Jans Hendry / EE UGM, Indonesia]

%% uji format gambar [x,y,z]=size(I); if z==3 bw=im2bw(I,.5); else bw=I; end bw=~bw; %% %% penebalan se1=strel('line',3,0); se2=strel('line',3,90); bw=imdilate(bw,[se1 se2]); %% %% penipisan se1=strel('line',1,0); se2=strel('line',1,90); bw=imerode(bw,[se1 se2]); bw2=~bw; figure, imshow(bw2); %% %% proses bw=bwconncomp(bw,4); bw=labelmatrix(bw); stats=regionprops(bw,{'centroid','boundingbox'}); title('How to count characters in an image','fontsize',14); hold on; %% %% labelling for k=1:length(stats); cent=stats(k).Centroid; boks=stats(k).BoundingBox; plot(cent(1),cent(2),'bo','MarkerSize',5,'MarkerFaceColor','g'); bx=[boks(1),boks(1),boks(1)+boks(3),boks(1)+boks(3),boks(1)]; by=[boks(2)+boks(4),boks(2),boks(2),boks(2)+boks(4),boks(2)+boks(4)]; line(bx,by,'color','r'); % pause(.01); end xlabel(sprintf('There is %d characters counted',length(stats))); hold off; %%

Hasil eksekusi dari program di atas adalah

[Jans Hendry / EE UGM, Indonesia]

[Jans Hendry / EE UGM, Indonesia]

Apakah hasil di atas sudah menggambarkan jumlah karakter yang sebenarnya? TIDAK! Mengapa Tidak? Karena diskontinuitas masih terjadi, hal ini disebabkan karena kualitas piksel pembentuk karakter tersebut memang sangat buruk. Solusi terbaik adalah dengan melakukan dilasi dan erosi lanjutan setelah pemotongan terjadi. Gunakan cukup dengan 1 piksel saja, untuk beberapa karakter yang tidak memenuhi syarat yang kita inginkan. Hal ini bisa dilakukan secara otomatis, dengan menetapkan bahwa karakter yang akan dideteksi memang memiliki arti, sehingga ketika program yang anda buat menyatakan bahwa karakter tersebut tidak ada di termasuk ke dalam jenis-jenis karakter yang seharusnya maka anda meminta program untuk melakukan dilasi atau erosi terhadap karakter tertentu tersebut. Saran selanjutnya yang perlu anda perhatikan adalah sebaiknya gunakan huruf KAPITAL, karena dalam beberapa karakter yang tidak KAPITAL seperti huruf i akan menimbulkan kesan diskontiniu. Walaupun tidak demikian, kecuali anda mau bersusah payah untuk membuat kondisional untuk huruf huruf tertentu. Maka permasalahan ini akan selesai. Namun dengan menggunakan huruf kapital, tentu permasalahan ini akan menjadi lebih mudah dihindari. Sangat mudah bukan? Tentu akan kita lanjutkan dengan aplikasi sebenarnya. Dalam hal ini kita akan menambahkan algoritma lain untuk mendeteksi jenis karakter tersebut setelah mendapatkan input dari hasil pemotongan untuk tiap karakter. Semoga artikel yang berisi program ini dapat membantu anda dalam menyelesaikan masalah anda.

~~~ TERIMA KASIH ~~~


% originale Jans Hendry % EE of UGM Indonesia