Deteksi Tepi dengan Matlab

[peng.citra|t.kom|lab.hardware|pert.5]

Di antara deteksi lainnya, seperti titik dan garis, deteksi tepi sangat bermanfaat untuk mengetahui suatu objek secara pasti dan terpisah dari objek lainnya, misalnya background. Pertemuan kali ini sedikit membahas metode-metode deteksi tepi yang terkenal antara lain: sobel, prewitt, dan robert. Untuk itu lanjutkan proyek sederhana pertemuan yang lalu dengan menambahkan satu panel berisi tiga pushbutton: sobel, prewitt, dan robert.

Konversi ke Gray

Deteksi tepi bermain dengan intensitas brightness. Ketika langsung mengakses gambar berwarna RGB ada pesan kesalahan. Perlu merubah terlebih dahulu citra yang diambil dari pushbutton “Ambil Citra” menjadi gray. Copas saja kode pada tombol “Konversi ke Gray” dan masukan ke “Sobel”.

  • z=rgb2gray(handles.y);
  • [g,t]=edge(z,’sobel’)
  • axes(handles.axes2)
  • imshow(g)

Silahkan lihat tatacara penggunaan fungsi edge dengan mengetik “help edge” pada command window. Untuk metode Prewitt dan Robert, caranya sama hanya saja menggunakan parameter berturut-turut ‘prewitt’ dan ‘robert’.

Perhatikan ada noise yang tertangkap. Biasanya sebelum deteksi tepi beberapa manipulasi terhadap citra original-nya diperlukan, misalnya filter dengan fungsi imfilter. Selamat mencoba, semoga bermanfaat.

Iklan

Menampilkan Matriks Pada GUI Matlab

Biasanya output ditampilkan pada GUI dengan memanfaatkan Edit Text. Namun jika data yang dihasilkan lebih dari satu maka pada Edit Text tersebut tidak muncul angka/hasil perhitungannya. Salah satu hasil perhitungan yang lebih dari satu angka adalah Matriks. Postingan ini sekedar menginformasikan bagaimana menampilkan matriks pada GUI yang kita buat.

Komponen Uitable

Misal kita memiliki satu matriks berukuran 2×2 yang akan ditampilkan dalam suatu GUI. Setelah sebuah matriks dimasukan, maka gunakan fungsi set untuk mengirimkan ke komponen uitable. Ketik kode berikut:

  • >> a=[1 2 ;3 4];
  • >> figure
  • >> t=uitable;
  • >> set(t,’Data’,a)

Akan dihasilkan sebuah matriks dalam GUI berikut ini:

    

Selanjutnya data yang ditampilkan pada Matriks di GUI bisa berupa hasil perhitungan Matlab. Sebagai contoh GUI di bawah ini menampilan matriks confusion saat testing. Semoga postingan singkat ini bermanfaat.

 

Melakukan Cropping Pada Citra

[peng.citra|t.komputer|lab.hardware|pert.4]

Terkadang untuk menangkap secara detil suatu permukaan diperlukan proses pemotongan/cropping. Sebagai contoh, lanjutan dari pertemuan 3 yang lalu, tambahkan satu tombol Crop Gambar.

Jika tombol “Crop Gambar” ditekan maka gambar hasil cropping akan ditampilkan pada axes2 di sebelah kanan. Dan jika tombol “Ekstrak Citra R-G-B” ditekan akan menghasilkan harga-harga R,G, dan B yang sudah ternormalisasi di tiga edit text di atasnya.

Cropping Image Pada Matlab

Pada Matlab, fungsi cropping dengan menggunakan fasilitas fungsi imcrop. Silahkan tekan “help imcrop” di command window untuk mengetahui format penulisan fungsi tersebut di kode yang akan dibuat.

  • x=uigetfile(‘*.jpg’);
  • data=imread(x);
  • size(data)
  • ans =
  • 423 644 3

Perhatikan ukuran data citra yang dibaca (lewat imread). Jika kita bayangkan dengan koordinat kartesians, maka panjangnya adalah 644 dan lebarnya adalah 423. Untuk panjang tidak masalah karena arahnya dari kiri ke kanan, hanya saja untuk lebar sedikit berbeda dengan koordinat kartesian. Di sini positif ke arah bawah. Jadi titik tengah gambar tersebut adalah panjang 322 dan lebar 211. Jika ingin mengambil lebar 50 dan panjang juga 50 maka region tersebut dari titik (297, 186) dan offset sebesar masing-masing 50 piksel. Masukan fungsi imcrop untuk memotong gambar.

  • >> data2=imcrop(data,[297 186 50 50]);
  • >> imshow(data2)

Perhatikan format penulisan cropping dimana dua angka terakhir merupakan offset dari titik dimana posisi awal crop dimulai. Untuk mengekstrak citra RGB silahkan gunakan kode di pertemuan 3 yang lalu. Selamat mencoba, semoga bermanfaat.

Menghitung Nilai RGB Sebuah Citra

[peng.citra.digital|tek.komputer|lab.software|pert.4]

Nilai RGB merupakan format pewarnaan yang paling banyak digunakan. Format ini menangkap warna merah (red), hijau (green) dan biru (blue) suatu citra. Dengan komposisi tiga warna tersebut dapat dibuat beragam spektrum warna lainnya. Postingan kali ini akan dibahas bagaimana mengekstrak nilai R, G, dan B suatu citra.

Format RGB

Letakan current directory pada folder di mana citra berada. Kemudian lanjutkan dengan menarik suatu gambar bertipe jpg, png, bmp dan lain-lain. Format RGB suatu citra dapat diketahui dengan fungsi size dan menghasilkan format:

(baris) (kolom) (rgb)

Untuk contoh penerapan dapat menggunakan instruksi berikut ini:

  • [1] x=uigetfile(‘*.jpg*’);
  • [2] data=imread(x);

Misalnya dengan mengetik instruksi size(data) diperoleh hasil:

1150         1427          3

Kolom ke-3 mengindikasikan tiga komposisi warna (merah, hijau, dan biru).

Mengekstrak R, G, dan B

Untuk mengetahui komposisi warna (RGB) dapat dengan cara mengakses data yang dibaca lewat fungsi imread mengikuti indeks kolom 3 apakah 1 (untuk red), 2 (untuk green) dan 3 (untuk blue).

  • [3] fR=data(:,:,1);
  • [4] fG=data(:,:,2);
  • [5] fB=data(:,:,3);

 

Tingkat R, G, dan B

Untuk mengetahui tingkat merah, hijau, dan biru secara total dapat mencari nilai rata-rata lewat fungsi mean. Line [6] – [8] bermaksud menghitung rata-rata masing-masing kelas warna. Dua buah fungsi mean dibutuhkan untuk menghitung total baris dan kolom. Line [9] – [11] bermaksud menormalkan tingkat warna dengan jangkauan 0 hingga 1.

  • [6] fr=mean(mean(fR));
  • [7] fb=mean(mean(fG));
  • [8] fc=mean(mean(fB));
  • [9] frr=fr/255;
  • [10]fbb=fb/255;
  • [11]fcc=fc/255;

Contoh GUI Menghitung Tingkat RGB

Untuk memudahkan, terkadang perlu dibuat GUI agar lebih mudah mencari nilai RGB suatu citra. Contohnya adalah rancangan berikut. Gunakan fungsi tambahan set untuk mengirim hasil perhitungan rgb (nilai RGB yang sudah dinormalkan).


  • [12] set(handles.edit1,‘String’,frr)
  • [13] set(handles.edit2,‘String’,fbb)
  • [14] set(handles.edit3,‘String’,fcc)

Jalankan dan lihat hasilnya seperti di bawah (nilai dari atas ke bawah menunjukkan masing-masing R, G, dan B). Padukan dengan fungsi lain seperti imcrop untuk memotong citra agar tidak masuk di dalamnya background, dibahas pada pertemuan yang lain. Semoga bermanfaat.

 

Kompilasi Matlab Menjadi Executable

[peng.citra.digital|tek.komputer|lab.hardware|pert.3]

Matlab biasanya berfungsi sebagai interpreter, yaitu mengeksekusi program mengikuti listing yang ada pada M-file satu persatu. Agar kode pada M-file dapat dijalankan tanpa membuka Matlab maka perlu kompilasi menjadi executable program. Misalnya program berikut ini:

GUI di atas dapat dijalankan hanya jika Matlab dibuka. Untuk menjalankan program di atas tanpa menggunakan Matlab, lakukan langkah kompilasi berikut ini:

Membuat Deployment Project

Masuk ke menu – File New Deployment Project. Pilih Windows Standalone Program karena kita akan membuat program berbasis Windows (bukan console). Walaupun bisa juga dipilih Standalone Application.

Setelah itu kita diminta memasukan file-file kode sumber. Pilih *.m file yang diperlukan untuk mengeksekusi program pada Main File. Karena berbasis GUI maka diperlukan file lain yaitu file GUI (*.fig).

Build The Project

Langkah berikutnya setelah memasukan kode sumber dan file tambahan lain adalah melakukan build. Tekan simbol di bagian atas. Setelah itu masuk ke command window untuk memasukan beberapa parameter yang dibutuhkan Matlab untuk membangun/build program. Tekan mbuild_setup di bawah command window.

Ketika muncul ‘Would you like mbuild to locate installed compilers [y]/n? >>’ tekan enter atau y. Dilanjutkan dengan memilih Compiler. Pilih no.1 karena tampak lokasinya di folder MATLAB:

  • Select a compiler:
  • [1] Lcc-win32 C 2.4.1 in C:\PROGRA~2\MATLAB\R2008b\sys\lcc
  • [0] None
  • Compiler: >>

Pastikan letak ada di program matlab, bukan di program lainnya. Tekan “y” jika sudah benar. Jika sudah maka Matlab sudah disetel Compiler-nya, hingga muncul “Done . . .”.

Tekan simbol dan pastikan muncul instruksi di bawah:

Tekan link berwarna hijau tersebut untuk melanjutkan proses kompilasi. Tunggu hingga selesai (pastikan muncul Compilation Completed di bagian bawah):

Membuat Paket Program

Untuk menguji program executable hasil kompilasi, buka di folder project-nya lanjutkan ke folder src. Jalankan folder *.exe yang merupakan program hasil kompilasi. File ini dapat dijalankan tanpa menggunakan Matlab.

Hanya saja tidak berjalan jika komputer target tidak terinstal Matlab. Maka perlu dibuat Paket yang berisi DLL yang secara gratis disediakan Matlab. Gunakan fasilitas Package dari Deployment project di Matlab. Tekan simbol “kardus”:

Tunggu proses Packaging hingga selesai (packaging completed). Hasilnya adalah file exe ditambah dengan satu fole installer (ratusan megabyte). Untuk dijalankan di komputer yang tidak terinstall Matlab, harus diinstall/menjalankan program exe paket tersebut.

Untuk uji coba, tutup program Matlab dan hanya jalankan program exe hasil kompilasi di atas. Berikut tampilan running program-nya, selamat mencoba.

Matrix Confusion pada Matlab

Matriks Confusion digunakan untuk mengukur akurasi dan memvalidasi model yang dibuat. Untuk menghitungnya dapat dilihat pada rumus yang disertakan pada pos terdahulu. Untuk mempermudah perhitungan, Matlab menyediakan fasilitas untuk menghitung matriks confusion ini.

Data Aktual Versus Data Prediksi

Untuk membuat matriks confusion diperlukan dua data yaitu data real/aktual dan data prediksi yang dihitung dari model. Berikut ini contoh data yang akan dibuat matriks confusion-nya. Buka command window dan masukan kode berikut (

  • yaktual=transpose([0 1 1 0 1 1 1 0]);
  • yprediksi=transpose([1 1 1 0 1 0 1 0]);

Untuk membuat matriks confusion, dibutuhkan fungsi confusionmat yang memerlukan dua data masukan tersebut di atas. Jalankan kode berikut:

  • [matriks,label]=confusionmat(yaktual,yprediksi)
  • matriks =
  • 2 1
  • 1 4
  • label =
  • 0
  • 1

Perhatikan matriks berwarna merah di atas, tampak matriks confusion sebagai berikut:

Jadi dapat diketahui a, b, c, dan d berturut-turut 2, 1, 1, dan 4. Jadi dapat dihitung recall, precision, false positive, false negative.

Recall atau dengan nama lain True Positif:

TP=4/(1+4)=4/5=0.8. Nilai lain dengan mudah dapat dihitung.

Kasus Lebih dari Dua Label

Matriks Confusion bisa juga untuk kasus lebih dari dua label. Misal ada dua data dengan tiga label, matriks confusion-nya adalah:

  • yaktual=transpose([0 1 1 2 1 2 1 0]);
  • yprediksi=transpose([0 1 2 2 1 2 1 0]);
  • [matriks,label]=confusionmat(yaktual,yprediksi)
  • matriks =
  • 2 0 0
  • 0 3 1
  • 0 0 2
  • label =
  • 0
  • 1
  • 2

Tampak pada matriks confusion label 2 ada satu error. Precision-nya = 2/(1+2) = 2/3 (lihat rumus di pos yang lalu). Semoga bermanfaat.

Merekam dan Memainkan Suara dengan Matlab (Versi Lama dan Baru)

Banyak aplikasi cerdas dengan Matlab yang membutuhkan pengolahan sinyal suara. Sebelum mengolah, salah satu fungsi penting adalah menangkap suara yang akan diolah. Postingan berikut ini membahas fungsi-fungsi yang diperlukan untuk menangkap suara, termasuk juga membunyikan hasil tangkapan suara tersebut (untuk menguji apakah fungsi perekaman berhasil).

Versi Lama

Matlab versi 2008 (versi 7.7) sedikit berbeda dengan versi terbaru. Versi lama ini menggunakan fungsi wavrecord, wavplay, dan wavwrite yang berfungsi berturut-turut untuk merekam, memainkan dan menulis. Kode singkat berikut ini bermaksud merekam, menyimpan dan memainkan suara. Tentu saja diperlukan fasilitas mic dan speaker (biasanya sudah ada pada setiap laptop).

  • clear all;
  • fs=8000;
  • y= wavrecord(5.0*fs, fs, ‘double’); %merekam suara
  • wavwrite(y,fs,‘aiueo.wav’);        %simpan rekaman ke hardisk
  • wavplay(y,fs);                %mainkan hasil rekaman
  • figure,plot(y);                %sinyal hasil rekaman di plot

Versi 2013 ke atas (Baru)

Sebenarnya kode sebelumnya bisa digunakan, hanya saja ada pesan (warning) dari Matlab bahwa wavrecord dan wavplay sebaiknya diganti dengan audiorecorder dan audioplayer untuk merekam dan memainkan.

Ganti kode sebelumnya dengan fungsi yang terbaru berikut ini, lihat referensinya di link resminya. Disini frekuensi sampling dan parameter lainnya standar 8000 Hz dan 8 bit.

  • % Record your voice for 5 seconds.
  • recObj = audiorecorder;
  • disp(‘Start speaking.’)
  • recordblocking(recObj, 5);
  • disp(‘End of Recording.’);
  • % Play back the recording.
  • play(recObj);
  • % Store data in double-precision array.
  • myRecording = getaudiodata(recObj);
  • % Plot the waveform.
  • plot(myRecording);

Jika fungsi menangkap bisa dijalankan, maka untuk mengolah lanjut dapat dilakukan dengan mudah. Banyak terapan-terapan yang menggunakan sinyal suara, antara lain:

  • Pengenalan suara
  • Deteksi kelainan detak jantung
  • Deteksi kerusakan mesin, dll

Suara yang terekam dapat dilihat grafiknya seperti di bawah ini. Sekian, semoga postingan singkat ini bermanfaat.