Tampilkan postingan dengan label Image Processing. Tampilkan semua postingan
Tampilkan postingan dengan label Image Processing. Tampilkan semua postingan

Senin, 07 Juli 2014

Mendeteksi Objek Berdasarkan Warna Menggunakan MATLAB

Halloo semua... pada kesempatan kali ini kita akan membahas bagaimana caranya mendeteksi objek berdasarkan warnanya menggunakan MATLAB. Untuk menjalankannya, kita harus memiliki Image Processing Toolbox pada MATLAB. Namun, jika kita ingin mengambil gambar langsung dari webcam, kita harus memiliki Image Acquisition Toolbox. Pembahasan mengenai penggunaan webcam telah kita bahas sebelumnya disini.Untuk pembahasan kali ini, kita akan menggunakan file citra yang sudah kita buat sebelumnya, bukan hasil tangkapan kamera.

Walaupun sederhana, konsep deteksi warna yang akan kita bahas kali ini dapat menjadi dasar dari robot vision, yaitu robot yang menggunakan sensor visi (kamera) dalam operasinya. Nah, bagimana langkah-langkahnya? Mari kita simak uraiannya, sebagai berikut:

Pertama, buatlah sendiri gambar kita, misalnya di program Paint (pada OS Windows). Misalnya gambar kita adalah kumpulan beberapa objek dengan warna dan bentuk yang berbeda, seperti berikut:




Pada Gambar di atas, kita akan mencoba mendeteksi warna merah (murni merah), yaitu objek yang berbentuk bintang. Pastikan bahwa ini murni warna merah. Caranya, jika kita menggunakan  Paint (atau software lainnya), Pastikan nilai RGB-nya. Dalam hal ini, kita nol-kan komponen G dan B, dan buatlah R memiliki nilai penuh (misal 255, jika menggunakan 8-bit). Amati gambar di bawah ini:



Selanjutnya,kita simpan gambar kita, misalnya dengan nama warnawarni.bmp. Kita simpan di folder default MATLAB, yaitu di Documents\MATLAB.

Jalankan program MATLAB. Buatlah script baru, misalnya kita beri nama deteksiMerah.m, sebagai berikut:

 function [merah]=deteksiMerah(gambar)  
  [m,n,~]=size(gambar);  
  merah=zeros(m,n);  
  for i=1:m  
   for j=1:n  
     if(gambar(i,j,1)==255 && gambar(i,j,2)==0 && gambar(i,j,3)==0)       
       merah(i,j)=1;        
     end  
   end  
 end  

Selanjutnya, panggil gambar warnawarni.bmp pada Command Window dengan perintah imread, dan tampilkan hasilnya menggunakan perintah imshow, sebagai berikut:

 >> I = imread('warnawarni.bmp');  
 >> imshow(I)  


Kemudian, jalankan fungsi kita yaitu deteksiMerah.m dan amati hasilnya.


 >> ObjekMerah = deteksiMerah(I);  
 >> imshow(ObjekMerah);  


Yuppp... menarik, bukan? selanjutnya kita bisa mencoba mendeteksi warna lainnya, dengan cara mengatur nilai pada sintaks:

 if(gambar(i,j,1)==255 && gambar(i,j,2)==0 && gambar(i,j,3)==0)  


Misalnya, untuk mendeteksi objek berwarna hijau saja, kita bisa gunakan sintaks, sebagai berikut:

 if(gambar(i,j,1)==0 && gambar(i,j,2)==255 && gambar(i,j,3)==0)  




Kita juga bisa kombinasikan warna apapun yang kita suka untuk mendetaksi suatu benda. Yuppp.. demikian pembahasan kita kali ini... semoga bermanfaat.

Jumat, 04 Juli 2014

Menggunakan Webcam pada MATLAB

Seperti yang kita ketahui bersama, webcam adalah alat standar yang biasa digunakan pada komputer ketika kita ingin melibatkan video dalam aktivitas kita. Kegiatan ini misalnya chating menggunakan Skype, Yahoo Messager, dan sebagainya. Untuk keperluan dibidang robotika, webcam dapat dijadikan sebagai sensor visual pada robot vision. Salah satu perangkat lunak yang tangguh untuk proses pengolahan citra yang melibatkan video adalah MATLAB. Nah, pada kesempatan ini, kita akan membahas bagaimana cara mengaktifkan webcam menggunkan MATLAB.

Pada kesempatan ini, kita akan menggunakan MATLAB 2014a untuk mengaktifkan webcam. Syarat utama yang harus kita lakukan adalah memastikan MATLAB kita telah mengikutkan Image Acquisition Toolbox. Syarat kedua adalah memastikan bahwa adaptor webcam telah terinstal pada MATLAB. Pada MATLAB versi 2014a, adaptor ini belum terinstal secara otomatis. Oleh karena itu, kita harus menginstalnya terlebih dahulu. Proses instalasi telah kita bahas pada ulasan sebelumnya. Yup.... langsung saja kita ikuti langkah-langkah berikut:

Pastikan adaptor kita telah terinstal pada MATLAB dengan mengetikan sintaks imaqhwinfo pada Command Window dan amati respon dari MATLAB

>> imaqhwinfo
ans =
    InstalledAdaptors: {'winvideo'}
        MATLABVersion: '8.3 (R2014a)'
          ToolboxName: 'Image Acquisition Toolbox'
       ToolboxVersion: '4.7 (R2014a)'

Amati bahwa nama adaptor yang terinstal adalah winvideo. Ini adalah adaptor standar yang ketika kita menggunakan webcam berbasis sistem operasi Windows. Selanjutnya, mari kita buat perintah yang spesifik daripada perintah sebelumnya.

>> dev = imaqhwinfo('winvideo')
dev = 

AdaptorDllName: 'C:\MATLAB\SupportPackages\R2014a\genericvideo\adapt...'
    AdaptorDllVersion: '4.7 (R2014a)'
          AdaptorName: 'winvideo'
            DeviceIDs: {1x0 cell}
           DeviceInfo: [1x0 struct]

Setiap keterangan yang diberikan oleh MATLAB dapat ditelusuri lebih jauh dengan menuliskan tanda titik (.) setelah nama objek ingin dicari dan diikuti dengan keterangan tambahan pada jawaban yang diberikan oleh MATLAB sebelumnya. Contoh, pada respon di atas, penelusuran terhadap objek dev dapat dilakukan misalnya dengan mengetikkan dev.AdaptorDllName, dev.AdaptorDllVersion, dev.AdaptorName dan sebagainya. Nah, untuk saat ini, mari kita gunakan dev.DeviceInfo:

>> dev.DeviceInfo
ans =
             DefaultFormat: 'YUY2_160x120'
       DeviceFileSupported: 0
                DeviceName: 'USB2.0 Camera'
                  DeviceID: 1
     VideoInputConstructor: 'videoinput('winvideo', 1)'
    VideoDeviceConstructor: 'imaq.VideoDevice('winvideo', 1)'
          SupportedFormats: {1x5 cell}


Amati bahwa format default dari webcam adalah 'YUY2_160x120'. Informasi ini berarti bahwa webcam anda menggunakan format YUY2 untuk ekoding format warna pada gambar yang diambil untuk meghasilkan video. Contoh format lain misalnya RGB24 dan YUYV. Keterangan 160x120 menunjukkan ukuran piksel video Anda. Mari kita coba membuat objek video berdasarkan keterangan sebelumnya dengan menggunakan sintaks videoinput dan lihat hasilnya dengan sintaks preview.

>> vid = videoinput('winvideo');
>> preview(vid)


 

Sudah kita duga bersama bahwa video yang dihasilkan cukup kecil, yaitu 160x120. Nah, sekarang mari kita perbesar. Kembali ke object dev yang di atas. Mari kta cari apa saja format yang disuport oleh webcam kita selain ukuran 160x120:

>> dev.DeviceInfo.SupportedFormats
ans =
  Columns 1 through 4
    'YUY2_160x120'    'YUY2_176x144'    'YUY2_320x240'    'YUY2_352x288'
  Column 5
    'YUY2_640x480' 

Ternyata formatnya cukup banyak juga. Mari kita mencoba frame yang lebih besar, misalnya 320x240. Namun sebelum itu, coba amati berapa ID dari device kita. Berdasarkan keterangan sintaks kedua yang telah kita ketikkan, yaitu dev = imaqhwinfo('winvideo'), kita ketahui bahwa ID dari webcam kita adalah 1. Mari kita mengubah ukuran frame kita. Oya, jangan lupa ditutup dulu video kita dengan perintah: closepreview(vid).

>> closepreview(vid)
>> vid = videoinput('winvideo',1,'YUY2_320x240');
>> preview(vid)






Yup, gambarnya sudah cukup besar. Jika kita masih bingung menggunakan sintaks videoinput, kami sarankan untuk membeca keterangan lebih lanjut pada MATLAB Help. Nah, kira-kira apa yang bisa kita lakukan selanjutnya? Mari kita capture satu gambar dari video kita. Kita gunakan webcam sebagai kamera untuk mengambil gambar. Gunakan perintah getsnapshot untuk mengambil gambar, dan perlihatkan hasilnya menggunakan sintaks imshow, seperti berikut: 

>> gambar = getsnapshot(vid);
>> imshow(gambar)





Mmmm... amati bahwa hasil yang ditampilkan tidak sesuai dengan harapan kita. Ini adalah pengaruh format YUY2 yang telah kita bahas sebelumnya. Jika kita menggunakan format lain, seperti RGB24, mungkin hasilnya sudah sesuai dengan harapan kita, jadi tidak perlu kita ubah lagi. Untuk saat ini, mari kita ubah format warna agar sesuai yang kita inginkan. Gunakan sintaks ycbcr2rgb untuk mengubahnya, dan jalan lupa kita tutup dulu gambar sebelumnya dengan perintah close.

>> close
>> gambarRGB = ycbcr2rgb(gambar);
>> imshow(gambarRGB)







Oke... gambar sudah sesuai dengan apa yang kita inginkan. Sekarang, mari kita simpan gambar kita. Misalnya, saya mau menyimpannya menggunakan format .PNG. Pada MATLAB, sintaks yang digunakan untuk menyimpan data menjadi citra/gambar adalah imwrite. Kita simpan data sebelumnya, yaitu gambarRGB dengan nama gambarku.png.

>> imwrite(gambarRGB,'gambarku.png');

Secara default, gambar akan tersimpan pada folder  \Documents\MATLAB. Jika ingin menyimpan di lokasi lain, misalnya di direktori D:\ , bisa kita ubah menggunakan sintaks berikut:

>> imwrite(gambarRGB,'D:\gambarku.png');

RANGKUMAN
Mari kita rangkum pembahasan kita. Jika kita telah mengetahui format webcam kita, maka kita dapat rangkum sintaks yang telah kita bahas sebelumnya:

>> vid = videoinput('winvideo',1,'YUY2_320x240');
>> preview(vid)
>> gambar = getsnapshot(vid);
>> gambarRGB = ycbcr2rgb(gambar);
>> imwrite(gambarRGB,'gambarku.png');


Okay.... selesai sudah pembahasan kita pada kesempatan kali ini... semoga bermanfaat wink



Instalasi Paket Adaptor untuk Image Acquisition Toolbox MATLAB



Jika Anda ingin menggunakan webcam pada MATLAB, maka Anda harus menginstal Image Acquisition Toolbox. Toolbox ini khusus diperuntukkan jika ingin memanfaatkan fasilitas untuk menampilkan dan mengolah citra yang melibatkan video. Toolbox ini juga sangat erat kaitannya dengan Image Processing Toolbox, serta Toolbox lainnya. Mari kita fokuskan pembahasan kita kali ini pada cara mengintal adaptor untuk keperluan webcam.

Agar webcam Anda dapat terbaca oleh MATLAB, maka Anda harus menginstal adaptor untuk webcam Anda. Sayangnya, versi MATLAB mulai 2014a hadir dengan TIDAK menyertakan adaptor secara otomatis. Oleh karena itu, Anda harus menginstalnya sendiri. Biasanya, untuk sistem operasi Windows, adaptor ini dikenal dengan nama winvideo. Untuk sistem operasi Mac dan Linux, adaptor ini masing-masing dikenal dengan nama macvideo dan linuxvideo. Berikut akan saya bahas bagaimana menginstal adaptor untuk webcam.

  • Pastikan MATLAB Anda sudah menyertakan Image Acquisition Toolbox. Jika belum Anda harus menginstalnya menggunakan CD MATLAB yang Anda punya, atau mencoba versi trial dari situs resmi: www.mathworks.com
  • Pastikan saat ini komputer Anda terkoneksi dengan internet.
  • Jalankan program MATLAB, kemudian ketikkan sintaks berikut pada jendela Command Window:
 supportPackageInstaller

  • Selanjutnya, akan tampil jendela Support Pakage Installer. pilih Install from Internet, dan selanjutnya klik Next



  • Pada jendela berikutnya, pilihlah OS Generic Video Interface dan lanjutkan dengan Next
  •  Jangan lupa untuk menyetujui lisensi pada jendela berikutnya


  • Saatnya untuk instalasi. Klik Install dan ikuti saja tahapan selanjutnya.

  • Setelah selesai proses instalasi, ujilah apakah paket yang kita inginkan sudah terinstal dengan mengetik sintaks:
imaqhwinfo
  • Amati respon yang diberikan oleh MATLAB, sebagai berikut: 
  InstalledAdaptors: {'winvideo'}
        MATLABVersion: '8.3 (R2014a)'
                       ToolboxName: 'Image Acquisition Toolbox'
       ToolboxVersion: '4.7 (R2014a)'
  • Yuppp... selesai... amati bahwa keterangan yang telah diberikan oleh MATLAB pada baris paling atas:InstalledAdaptors: {'winvideo'}. Ini menunjukkan bahwa adaptor untuk webcam Anda sudah terinstal.

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-

Rabu, 26 September 2012

Pengenalan Image Processing dan Image Acquisition Toolbox pada MATLAB (I)

Hai teman-teman.... Kali ini saya akan berbagi sedikit tentang Image Processing Toolbox dan Image Acquisition Toolbox pada MATLAB. Kedua toolbox ini saling terkait. Image processing digunakan untuk melakukan pengolahan citra digital, sedangkan Image Acquisition digunakan jika teman-teman menggunakan media (sebagai contoh webcam) untuk merekam dan meng-capture gambar. Nah, pada kesempatan ini saya hanya akan menjelaskan dasar-dasar command yang sering digunakan pada kedua toolbox tersebut. Selanjutnya teman-teman dapat mempelajari lebih lanjut pada MATLAB help.

Pastikan teman-teman menginstal MATLAB lengkap dengan kedua toolbox ini, dan tentunya teman-teman harus memiliki webcam jika ingin menggunakan Image Acquisition toolbox.

Image Processing Toolbox
Berikut beberapa contoh dasar command pada Image Processing Toolbox:



























Image Acquisition Toolbox
Untuk menggunakan toolbox ini, pastikan teman-teman menghubungkan webcam dengan komputer dan selanjutnya menjalankan MATLAB ya :)

Teman-teman dapat mengikuti langkah-langkah berikut:


 
Contoh hasil preview pada MATLAB (saya sengaja merekam angka 2 pada posisi 'tertidur')


 



Demikian teman-teman dari saya. Semoga bermanfaat :)


Referensi
[1] Wardana, K., Penerapan Jaringan Saraf Tiruan untuk Pengenalan Karakter, Slide Kuliah Kecerdasan Buatan Jurusan Teknik Fisika UGM, 2010
[2] MATLAB Help