Laman

Kamis, 13 Januari 2011

Program Fuzzy C Mean Clustring di C# (C Sharp)

Fuzzy clustering merupaka salah satu metode yang digunakan untuk mengelompokan data menjadi beberapa kelompok (class), setiap data akan dimasukan kedalam kelas dan setiap kelas mempunyai kemiripan data antara data satu dengan data yang lainnya, sehingga tujuan dari clustering ini adalah mengelompokan data berdasarkan kemiripan data. Banyak sekali metode metode clustering selain fuzzy C-Mean. seperti SOM dan lain-lain.
Disini akan dikembangkan fuzzy clustering yang di implementasikan pada gambar, dimana pada gambar data-datanya yang akan dikelompokan adalah data pixel dari setiap titik di gambar tersebut, sedangkan attribut dari setiap pixel adalah RED,GREEN,BLUE. Sehingga pada kasus implementasi pada gambar, jumlah data yang akan diolah adalah (panjang x lebar), dengan attrribut 3 (jika menggunajan citra RGB) atau dengan attribute 1 (jika menggunajan warna grayscale).
sekarang mari kita buat programnya..... seperti biasa. siapkan project baru, klik file pilih new project pada IDE visual studio. pada kotak project name isi nama project sesuai dengan keinginan, misalnya disini kita isi dengan (Program Fuzzy C-MEan), untuk langkah-langkah selanjutnya silahkan ikuti instruksi dibawah ini, sedangkan untuk lebih memahami tentang fuzzy C-Mean Clustering silahkan download materi satu disini, materi dua disini, materi tiga disini, materi empat disini





 Gambar1. Preview desain aplikasi

langkah 1 : tambahkan dua komponen picturebox, satu openfileDialog, satu backroundWorker, satu loading bar, satu numeric updown, dan dua button, atur dan tata komponen-komponen tersebut seperti pada gambar berikut ini

Gambar2. Hasil running program

Langkah kedua : pada button satu yang telah diberi label open Image tambahkan code berikut ini
 if (DialogResult.OK == openFileDialog1.ShowDialog())
 {
  myGambar = new Bitmap(openFileDialog1.FileName);
  pictureBox1.Height = myGambar.Height;
  pictureBox1.Width = myGambar.Width;
  pictureBox1.Image = myGambar;
  pictureBox2.Height = myGambar.Height;
  pictureBox2.Width = myGambar.Width;
  dataPixel = new int[((myGambar.Height) * (myGambar.Width)), 3];
  pixelBaru = new double[myGambar.Height * myGambar.Width, 3];
  dataCenter=new double[cluster,3];
  miu = new double[(myGambar.Height * myGambar.Width), cluster];
  miuUpdate = new double[(myGambar.Height * myGambar.Width), cluster];
   //random miu;
   random();
   getDataPixel();
  }

langkah ketiga :  pada buttton tiga tambahkan code berikut ini

 progressBar1.Maximum = Convert.ToInt16(numericUpDown1.Value); 
backgroundWorker1.RunWorkerAsync();

Langkah keemapat : Tambahkan beberapa fucntion yang akan digunakan dalam fuzzy C-Means, diantaranya adalah, function drawImage(), function random(), function getDataPixel(), function rekonstruksiImage(), function getDataCenterCluster(),

berikut ini source codenya
untuk function drawImage()
  private void drawImage()
  {
     double max = 0;
     int indekMax = 0;
     int j = 0;
     for (int i = 0; i < myGambar.Height * myGambar.Width; i++)
     {
       for (j = 0; j < cluster; j++)
       {
        if (miu[i, j] > max)
        {
          max = miu[i, j];
          indekMax = j;
         }
     }
     pixelBaru[i, 0] = dataCenter[indekMax, 0];
     pixelBaru[i, 1] = dataCenter[indekMax, 1];
     pixelBaru[i, 2] = dataCenter[indekMax, 2];
     max = 0;
     indekMax = 0;
    }
    rekontruksiImage();           
  }

berikut ini untuk fucntion random
function random()
double[] temp=new double[5];
for (int j = 0; j < (myGambar.Height*myGambar.Width); j++)
{               
  temp=bismilah(cluster);
  miu[j,0] = temp[0];
  miu[j, 1] = temp[1];
  miu[j, 2] = temp[2];
  miu[j, 3] = temp[3];
  miu[j, 4] = temp[4];
}            
function getDataPixel()
  int indek = 0;
  for (int i = 0; i < myGambar.Height; i++)
  {
  for (int j = 0; j < myGambar.Width; j++)
  {
    dataPixel[indek, 0] = myGambar.GetPixel(j,i).R;
    dataPixel[indek, 1] = myGambar.GetPixel(j, i).G;
    dataPixel[indek, 2] = myGambar.GetPixel(j,i).B;
    indek = indek + 1;
  }
}       

Source code untuk getDataCenter
function getDataCenter()
private double[] getDataCenterCluster(int dimensi)
{
   int panjangData=myGambar.Height*myGambar.Width;
   double[] miuInput=new double[panjangData];
   double[] hasil = new double[3];
   double jumMiuKuadrat = 0;
   double jumMiuAttribute1 = 0;
   double jumMiuAttribute2 = 0;
   double jumMiuAttribute3 = 0;
   for (int j = 0; j < cluster; j++)
      {
        if (dimensi == j)
        {
          for (int i = 0; i < panjangData; i++)
          {
            miuInput[i] = miu[i, j];
          }                   
          break;
        }               
      }

function rekonstruksiImage()
private void rekontruksiImage()
{

  gambarHasil = new Bitmap(myGambar.Width,myGambar.Height);
  int indek = 0;
  for (int i = 0; i < myGambar.Height; i++)
  {
  for (int j = 0; j < myGambar.Width; j++)
  {
    gambarHasil.SetPixel(j, i, Color.FromArgb(Convert.ToInt16(pixelBaru[indek, 0]), Convert.ToInt16(pixelBaru[indek, 1]), Convert.ToInt16(pixelBaru[indek, 2])));
   indek = indek + 1;
  }
  }
  pictureBox2.Image = gambarHasil;
}

langkah terkahir : Done...  program selesai dibuat..... jika langkah langkah diatas dilakukan dengan benar, program mampu mengklasifikasikan pixel image dari suatu citra berdasarkan kemiripan data, sehingga data-data pixel yang mempunyai kemiripan nilai pixel akan diberi warna rata-rata dari kelas itu sendiri. perhatikan hasil running dibawah ini

Gambar 3. Preview hasil program yang telah dirunning 
Pada gambar diatas, pada gambar sebelah kiri terlihat bahwa gambar tersebut mempunyai banyak sekali warna, akan tetapi setelah dilakukan clustering dengan fuzzy clustering hasilnya seperti pada gambar sebelah kanan, bisa dilihat pada gambar sebelah kanan berbeda dengan gambar sebelah kiri, pada gambar sebelah kanan hanya mempunyai lima warna, sedangkan gambar pada sebelah kiri mempunyai banyak warna, ini dikarenakan pada fuzzy C-Mean Clustering jumlah kelas yang saya gunakan berjumlah lima sehingga hasil dari fuzzy memaksa gambar hanya mempunyai lima warna, dan nilai pixel dari warna itu diambil dari rata-rata nilai pixel yang mempunyai kemiripan nilai.
download binary filenya  disini, 
downlaod full project disini disini
for more information contact on informasi@csharp-indonesia.com


untuk cara download, klik link download yang disediaan diatas, setelah itu akan muncul halaman adf.ly, tunggu beberapa detik sampai pada pojok kanan atas muncul tulisan skip ad. klik skip ad setelah itu silahkan klik pada button download yang muncul pada halaman ziddu
NB : Dalam tutorial ini program ditulisa menggunakan IDE Visual studio 2010. dengan target framework 2.0 . Sehingga minimal komputer harus terinstal windows xp untuk bisa menjalankan program *.exe nya, Sedangkan untuk membuka projectnya mau tidak mau harus menginstal microsoft visual studio 2010

13 komentar:

  1. Stromsphere Maximus26 Januari 2012 15.28

    maksud dari iterasi itu apa??

    sama apa fungsi dimensi pada menu cek

    BalasHapus
  2. Sebelumnya maaf ya.. reply nya agak terlambat
    Iterasi itu samadengan looping dan sama juga pula dengan perulangan,

    BalasHapus
  3. Melinda Kirana10 Juni 2012 17.02

    ada masalah mengenai hierarchical clustering ga? soalnya tugas akhir saya mengenai itu. saya ada mengirim e-mail ke informasi@csharp-indonesia.com kenapa ga bisa ya?

    BalasHapus
  4. BelajarCsharp15 Juni 2012 10.32

    untuk email informasi@csharp-indonesia memang agak bermasalah. sering terjadi hang up. untuk hierarchieal clustering. saya pernah mempelajarinya. tapi tidak sampai mengimplementasikannya kedalam sebuah program.

    BalasHapus
  5. ada referensi untuk itu tidak? trims..

    BalasHapus
  6. untuk referensi yang saya gunakan dulu adalah jurnal dari IEEE, untuk buku saya kurang begitu tahu yang membahas tentang hierarchiel clustering

    BalasHapus
  7. ada contoh untuk masalah dengan algoritma apriori ga ?? terimakasih

    BalasHapus
  8. Gilar Purwita Subagja10 November 2013 08.39

    fungsi dimensinya pada menu cek apa om?

    BalasHapus