Monday, April 14, 2014

Digital Image Processing Using Matlab - Menghitung jumlah gigi gir

Assalamualaikum warahmatullah.
Tahukah anda gambar dibawah ini?

Ya. Benar sekali! Ini adalah gambar sebuah gear, gir. Apakah anda terpikir untuk menghitung berapa jumlah gigi yang dimiliki gir tersebut dengan menggunakan software?
Sebelum membuat aplikasinya, mari sedikit memahami konsep matematika yang ada di dalam metode ini.
Metode ini dikenal dengan nama Mathmatical Morphology. Morphologi adalah teknik pengolahan citra digital dengan menggunakan bentuk (shape) sebagai pedoman dalam pengolahan(minkowski set operation). Nilai dari setiap pixel dalam citra digital hasil diperoleh melalui proses perbandingan antara pixel yang bersesuaian pada citra digital masukan dengan pixel tetangganya. Operasi morphologi bergantung pada urutan kemunculan dari pixel, tidak memperhatikan nilai numeric dari pixel sehingga teknik morphologi sesuai apabila digunakan untuk melakukan pengolahan binary image dan grayscale image.
      Dengan mengatur atau memilih ukuran dan bentuk dari matrik kernel (structuring element) yang digunakan maka kita dapat mengatur sensitivitas operasi morphologi terhadap bentuk tertentu (spesifik) pada citra digital masukan. Operasi morphologi standar yang dilakukan adalah proses erosi dan dilatasi. Dilatasi adalah proses penambahan pixel pada batas dari suatu objek pada citra digital masukan, sedangkan erosi adalah proses pemindahan/pengurangan pixel pada batas dari suatu objek. Jumlah pixel yang ditambahkan atau yang dihilangkan dari batas objek pada citra digital masukan tergantung pada ukuran dan bentuk dari structuring element yang digunakan.
Beberapa operasi pada Morfologi:
Original Image
Structuring Element:
1. Dilasi
     Dilasi adalah operasi morphologi yang akan menambahkan pixel pada batas antar objek dalam suatu citra digital. Atau secara rinci Dilasi merupakan suatu proses menambahkan piksel pada batasan dari objek dalam suatu image sehingga nantinya apabila dilakukan operasi ini maka image hasilnya lebih besar ukurannya dibandingkan dengan image aslinya.
Contoh:
     Di bawah ini merupakan hasil image setelah dilakukan proses Dilasi dari Original Image dengan Stucturing Element yang telah ditentukan di atas. Warna hijau merupakan pixel tambahan setelah dilakukan Dilasi
2. Erosi
     Erosi merupakan kebalikkan dari Dilasi. Proses ini akan membuat ukuran sebuah citra menjadi lebih kecil. Berbeda dengan dilatasi, apabila erosi dilakukan maka yang dikerjakan adalah memindahkan piksel pada batasan-batasan objek yang akan di erosi. Jumlah dari pikselyang ditambah atau dihilangkan bergantung pada ukuran dan bentuk dari structuring element yang digunakan untuk memproses image tersebut.
Contoh :
     Di bawah ini merupakan hasil image setelah dilakukan proses Erosi dari Original Image dengan Stucturing Element yang telah ditentukan di atas. Warna hijau merupakan pixel dihilangkan setelah dilakukan proses Erosi, sehingga pixel hasilnya hanya yang berwarna hitam.
3. Opening
   Opening merupakan kombinasi proses dimana suatu citra digital dikenai operasi erosi dilanjutkan dengan dilasi. Operasi opening pada citra mempunyai efek memperhalus batas-batas objek, memisahkan objek-objek yang sebelumnya bergandengan, dan menghilangkan objek-objek yang lebih kecil daripada ukuran structuring.
Contoh:
     Di bawah ini merupakan hasil image setelah dilakukan proses Opening dari Original Image dengan Stucturing Element yang telah ditentukan di atas.  Proses yang dilakukan untuk mendapatkan opening adalah dengan cara melakukan operasi erosi, lalu hasil erosi tersebut di dilasi lagi.

4. Closing
    Closing merupakan kombinasi dimana suatu citra dikenai operasi dilasi dilanjutkan dengan erosi. Operasi closing juga cenderung akan memperhalus objek pada citra, namun dengan cara menyambung pecahan-pecahan (fuses narrow breaks and thin gulf) dan menghilangkan lubang-lubang kecil pada objek.
Contoh :
   Di bawah ini merupakan hasil image setelah dilakukan proses Closing dari Original Image dengan Stucturing Element yang telah ditentukan di atas.  Proses yang dilakukan untuk mendapatkan Closing adalah dengan cara melakukan operasi dilasi, lalu hasil dilasi tersebut dilakukan proses erosi lagi.
Mari membuat aplikasi penghitung gigi gir dengan menggunakan Matlab!

Tulislah kode berikut di Matlab anda:

clc;
clear;

%properties of Morphology se
seHorizontal = [0 0 0; 1 1 1; 0 0 0];
seVertical = [0 1 0; 0 1 0; 0 1 0];
seFull = [1 1 1; 1 1 1; 1 1 1];
seCros = [1 0 1; 0 1 0; 1 0 1];
seSlash = [0 0 1; 0 1 0; 1 0 0];
seBakslash = [1 0 0; 0 1 0; 0 0 1];
sePlush = [0 1 0; 1 1 1; 0 1 0];

gearImage = imread('roue.bmp'); %open the image
gearGray = rgb2gray(gearImage); %convert image to grayscale
gearBW = gearGray > 70;
gearBW = imerode(gearBW,seFull); %Erode the image with  seFull kernel
for a = 1 : 2
    gearBW = imdilate(gearBW,seFull); %Opening--> dilate the image using seFull kernal
end
gearBW = imdilate(gearBW,seFull); %Opening --> dilate the image using seFull kernel.
[r,c] = size(gearBW); %fill the array with object that are detected
rp = regionprops(double(gearBW), 'all');
xy = rp.ConvexHull;
mask = poly2mask(xy(:,1),xy(:,2),r,c);
maskEroded = imerode(mask,ones(16));
teeth = gearBW;
teeth(maskEroded) = 0;
imshow(teeth)  %The value is showing a teeth of the gear
[l,numObj] = bwlabel(teeth,8); %labeling every object that are detected
numObj %showing the number of teeth

Hasil dari program di atas adalah:



numbObj adalah variabel yang menyimpan jumlah gigi gir yang sudah dihitung. Jika anda kurang yakin, hitunglah secara manual kemudian bandingkan dengan hasil di atas!
Selamat Bereksperimen!

3 comments:

  1. huohoho.. kebetulan lagi ada tugas ini.. nuhun teh.. :v

    ReplyDelete
    Replies
    1. Wkwkwkwkwkwk. Alhamdulillah kalo ngebantu sin :3

      Delete
  2. maaf mau nanya , kok waktu saya coba tidak muncul jumlah gigi gir nya pada common windownya ?
    saya menggunakan matlab 2009 .trimakasih

    ReplyDelete