Kamis, 27 September 2012

JST untuk Pengenalan Karakter (I)

Teman-teman, pada kesempatan ini saya akan mencoba menulis penggunaan Jaringan Saraf Tiruan (JST) untuk dapat digunakan sebagai pengenalan karakter, baik berupa huruf atau angka. Yang saya tulis hanya salah satu saja dari berbagai metode yang telah banyak digunakan oleh penulis lainnya. Namun paling tidak apa yang akan saya uraikan menjadi salah satu ide dasar penggunaan JST untuk pengenalan karakter. Selanjutnya, teman-teman dapat mengembangkan kreatifitas teman-teman sendiri.

Seperti biasa, saya akan menggunakan MATLAB. Ada tiga toolbox yang digunakan, yaitu sebagai berikut:
  • Image Processing Toolbox
  • Image Acquisition Toolbox
  • Neural Network Toolbox
Image Processing Toolbox akan digunakan untuk melakukan pengolahan citra digital, Image Acquisition Toolbox untuk dapat mengaktifkan webcam dan Neural Network Toolbox untuk melakukan desain JST.
Idenya seperti berikut. Saya akan menggunakan webcam untuk merekam gambar yang akan dikenali. Untuk saat ini, saya hanya akan membedakan angka 1, 2 dan 3. Selama proses perekaman, webcam akan menangkap 1 frame yang selanjutnya akan menjadi sebuah citra digital. Selanjutnya, akan dilakukan pengolahan citra digital dan hasil akhir pengolahan ini akan menjadi input untuk JST. Untuk dasar pengolahan citra dan mengaktifkan webcam pada MATLAB, teman-teman bisa merujuk di sini, sedangkan dasar-dasar JST bisa teman-teman pelajari di sini.

Mari kita bahas satu persatu.
1) Koneksikan webcam, buka MATLAB dan tuliskan perintah berikut:
vid = videoinput('winvideo');

2) Preview hasil rekaman webcam:
preview(vid);

Contoh rekaman webcam sebagai berikut. Saya sengaja menampilkan angka 2 yg 'tertidur', untuk menghandle webcam saya yang tampilannya landscape.

 
3) Kita snapshot untuk mendapatkan 1 frame dari video:
I = getsnapshot(vid);
imshow(I);...........


4) Lakukan rotasi:
y = imrotate (I, -90);
figure, imshow(y);....


5) Ubah gambar menjadi hitam-putih:
bw = im2bw(y, 0.45);
figure, imshow (bw);


Pada tahap ini, perintah im2bw mengubah gambar menjadi format hitam-putih dengan treshold 0,45. Teman-teman dapat mengatur threshold ini, sesuai dengan karakter webcam dan kesesuaian dengan pengolahan citra yang akan kita bahas pada sesi ini.

6) Lakukan block-processing
fun = @(x) std2(x)*ones(size(x));
a = blockproc(bw,[10 10],fun);...
figure, imshow(a)................



Perintah blockproc akan melakukan pengolahan terhadap beberapa blok pixel (dalam hal ini 10 x 10 pixel), sesuai dengan fungsi yang diberikan oleh fun.
Pada jendela preview video terlihat bahwa resolusi webcam adalah sebesar 320x240. Karena kita telah merotasinya, maka ukurannya menjadi 240x320. Dengan perintah blockproc, sebanyak 10x10 pixel akan mempunyai nilai yang sama. Ini berguna untuk mereduksi jumlah input data untuk JST kita.

* untuk edisi MATLAB yang lebih lama, perintah blockproc dikenal sebagai blkproc

7) Lakukan block-processing kedua
a2 = blockproc(a,[40 40],fun);
figure, imshow(a2)............



Selanjutnya, dilakukan pengolahan lagi menggunakan ukuran 40x40. Pixel-pixel yang seragam akan memiliki ukuran yang lebih besar. Sehingga input JST kita sekarang seolah olah menjadi matriks 6x8 (ukuran awal 240x320 masing-masing dibagi 40).

8) Selanjutnya kita ubah lagi menjadi hitam-putih
b = im2bw(a2,0.05);
figure, imshow(b)..


9) Selanjutnya kita dapat menentukan bahwa hitam = 0 dan putih = 1

 

Nah, kita sudah siap menjadikan gambar kita sebagai input untuk JST. Setiap 40x40 pixel dijadikan 1 nilai saja (0 atau 1). Selanjutnya matriks berukuran 6x8 ini akan diubah menjadi matriks 48x1. Inilah yang akan menjadi input untuk JST.

-Bersambung-

1 komentar:

Unknown mengatakan...

mau tanya nih mas kalo pesan kaya gini knp ya ? padahal udah sama persis.

Function BLOCKPROC encountered an error while evaluating
the user supplied function handle, FUN.

The cause of the error was:

Error using imresize>scaleOrSize (line 382)
Invalid scale or size input argument.

Error in imresize>parsePreMethodArgs (line 354)
[scale, output_size] = scaleOrSize(next, next_arg);

Error in imresize>parseInputs (line 248)
[params.A, params.map, params.scale, params.output_size]
= ...

Error in imresize (line 141)
params = parseInputs(varargin{:});

Error in @(block_struct)imresize(block_struct.data,h)


Error in blockprocFunDispatcher (line 14)
output_block = fun(block_struct);

Error in blockprocInMemory (line 81)
[ul_output fun_nargout] =
blockprocFunDispatcher(fun,block_struct,...

Error in blockproc (line 234)
result_image =
blockprocInMemory(source,fun,options);

kirim ke andhikarahmat94@gmail.com ya kka