Finding Outer Points of an Object for Automatic Cropping in Digital Image

September 10, 2011

[[JANS HENDRY / EE UGM, SIGNAL, CONTROL AND INSTRUMENTATION ENGINEER]]

Finding Outer Points of an Object for Automatic Cropping in Digital Image

Dalam artikel ini, saya akan membahas bagaimana cara mendapatkan titik-titik terluar dari sebuah objek dalam citra digital. Tujuannya tentu banyak sekali, misalnya ketika anda ingin membuat program pengenalan karakter dalam sebuah citra digital. Anggap saja yang ingin dikenali adalah huruf tunggal, sehingga anda perlu melakukan pemotongan citra (cropping). Namun hal tersebut tidak bisa dan tidak boleh dilakukan secara manual. Tidak akan efektif. Jika anda masih melakukannya secara manual, maka buang saja program anda ke tong sampah! Hehehehe.. ☺ Untuk itu saya mencoba menghadirkan sebuah pendekatan untuk permasalahan di atas. Tidak tertutup kemungkinan bahwa teknik ini bisa diimplementasikan untuk permasalahan yang lain. Semoga bisa berguna lebih lanjut. Baik, yang perlu anda ingat adalah syntax yang kita gunakan terbilang sederhana. Namun anda diwajibkan memiliki pengetahuan tentang pemrograman dengan menggunakan MATLAB. Misalkan saya mempunya citra digital seperti ini:

Tujuan kita adalah memoting objek tersebut dengan bijaksana (gaya banget gw...)... Langkah-langkahnya: Mendapatkan titik-titik terluar dari empat sisi, utara-selatan-barat-timur (atau anda bisa menggunakan istilah keren lainnya). Dengan menggunakan titik tersebut, anda tentukan konfigurasi rectangular sebagai masukan untuk fungsi imcrop yang isi nya Xmin Ymin Lebar dan Tinggi.

Sangat sederhana bukan?

1

September 10, 2011

[[JANS HENDRY / EE UGM, SIGNAL, CONTROL AND INSTRUMENTATION ENGINEER]]

Tentu, karena programnya juga sederhana koq. Saya akan menjelaskan programnya langkah demi langkah: Membaca informasi citra
%% inisialisasi filename='1'; I=imread(filename,'png'); imshow(I); title('Original Image','FontSize',14); hold on; %%

-

Memisahkan komponen warna menjadi R,G,B
%% try to detect upper edge and lower edge r=I(:,:,1); g=I(:,:,2); b=I(:,:,3);

-

Lalu mengambil komponen R saja untuk diproses. Dalam hal ini kita mencari koordinat maksimum dan minimum untuk baris dan kolom dari objek.
[bar,kol]=find(r~=255); [x1a,y1a]=min(bar); [x1b,y1b]=max(bar); [x2a,y2a]=max(kol); [x2b,y2b]=min(kol);

-

Yang perlu anda pahami adalah penggunaan find dan min serta max dalam matlab. Sehingga anda paham nilai apa yang akan di kembalikan (return) ketika anda memanggil fungsi tersebut. Mendeteksi titik-titik terluar dari objek dalam citra
% titik atas terluar plot(kol(y1a),x1a,'ro','MarkerFaceColor','r','MarkerSize',5,'MarkerEdgeColor','r'); text(x1b+20,x1a,sprintf('(%d,%d)',x1b,x1a)); % titik bawah terluar plot(kol(y1b),x1b,'ro','MarkerFaceColor','b','MarkerSize',5,'MarkerEdgeColor','b'); text(kol(y1b)+20,x1b,sprintf('(%d,%d)',kol(y1b),x1b)); % titik kanan terluar plot(x2a,bar(y2a),'ro','MarkerFaceColor','g','MarkerSize',5,'MarkerEdgeColor','g'); text(x2a+20,bar(y2a),sprintf('(%d,%d)',x2a,bar(y2a)));

2

September 10, 2011

[[JANS HENDRY / EE UGM, SIGNAL, CONTROL AND INSTRUMENTATION ENGINEER]]

% titik kiri terluar plot(x2b,bar(y2b),'ro','MarkerFaceColor','m','MarkerSize',5,'MarkerEdgeColor','m'); text(x2b+20,bar(y2b),sprintf('(%d,%d)',x2b,bar(y2b))); %%

-

Sebagai tambahan, saya menambahkan garis pembatas untuk semua titik terluar. Anda bisa saja tidak menggunakan ini.

%% Making Line to Each edge [bb,cc]=size(r); line(1:cc,x1a,'Color','k'); line(1:cc,x1b,'Color','k'); line(x2a,1:bb,'Color','k'); line(x2b,1:bb,'Color','k'); hold off; %%

Hasil eksekusi dari program di atas adalah

-

Lalu kita memasuki tahap akhir, yakni pemotongan citra agar yang tinggal hanya objeknya saja. Perhatikan code di bawah ini.
I=cat(3,r,g,b); lbr=abs(x2b-x2a); tggi=abs(x1a-x1b); rect=[x2b x1a lbr tggi]; Icr=imcrop(I,rect); figure, imshow(Icr); title('Cropped Image','FontSize',14);

3

September 10, 2011

[[JANS HENDRY / EE UGM, SIGNAL, CONTROL AND INSTRUMENTATION ENGINEER]]

Hasil eksekusi bagian terakhir adalah

Tidak begitu kelihatan ya??? Ya jelaslah, kan nda ada bordernya klo menyimpan citra dari matlab... huehuehue.. Sebaiknya anda coba langsung saja pada matlab anda agar mengerti apa maksud dari program di atas (jika tertarik)... ☺ Mengapa ini menjadi penting??? Akan saya tunjukkan nanti pada permasalahan mendeteksi karakter (huruf atau angka) dalam sebuah citra digital (scanned). Objeknya adalah tulisan tangan.

~~~ TERIMA KASIH ~~~

% Originale by Jans Hendry % UGM, Indonesia

4

Sign up to vote on this title
UsefulNot useful