Pengolahan Citra Digital – Konsep Dasar

Introduction

Apa itu pengolahan citra digital(PCD)? Mungkin itu pertanyaan awal saat mendengar kata PCD, dari yang saya tahu kebanyakan berpikir PCD adalah pengolahan citra menggunakan photoshop atau software semacamnya. Menurut anda bagaimana? Apakah benar pemikiran tersebut? Daripada menerka-nerka tanpa dasar lebih baik kita pahami bagian per bagian mulai dari pengertian citra, citra digital, sampai pengolahan citra digital. Continue reading “Pengolahan Citra Digital – Konsep Dasar”

Algoritma Kurva Bezier

Bezier, bezier, makanan apa lagi nih. Saya juga ga ngerti artinya tapi yang terpenting sebutannya ya “BEZIER” hehehe.. 🙂 . Kalau kata orang-orang pinter sih, bezier curve digunakan untuk penghalusan kurva. Misal terdapat 4 titik seperti gambar dibawah ini
Maka dibuatlah kurva yang lebih smooth dari kurva yang terbentuk dari kurva yang tidak halus.

kemudian setelah pemrosesan akan menghasilkan titik-titik baru seperti berikut.

Prinsip Dasar
Asumsikan kita memiliki titik P0, P1, …, Pn. P terdiri dari (x,y).
Kurva bezier n grade diperoleh dari operasi titik poloigon  n+1dengan persamaan :

Tetapi agar lebih simple dan mudah dimengerti persamaan diatas diringkas menjadi berikut dan tentunya tidak merubah artinya:

Kemudian terdapat kasus khusus dalam perhitungan bezier ini
Linear bezier

Quadratic Bezier

Cubic Bezier

Algoritma
Step 1: Menentukan nilai  t [0,1].
Step 2: Set Pi[0] (t) = Pi, for i = 0,…,n.
Step 3: For j= 0,…,n, set simple.jpg for i = j,…,n.
Step 4: g (t) = Pn[n] (t)

Untuk contoh kode dalam java dan C# bisa diunduh di link berikut
Bezier Java
Referensi:
http://www.codeproject.com/KB/recipes/BezirCurves.aspx
http://www.netgraphics.sk/beziers-curves

Auto property set get di C++ class

Welcome to the C++ world Open-mouthed smile

Kali ini saya akan berbagi tips untuk membuat property otomatis di C++ seperti halnya pada sintax di code C#. Seperti apa tipsnya? Tapi setelah yg satu ini.  hehe…Maksudnya setelah kita contoh source code simple header  dari kelas berikut:

#ifndef SAMPLECLASS_H
#define SAMPLECLASS_H

//sample header class dengan property set get
class SampleClass
{
public:
	void setNo(const int &no);
	int no() const;
private:
	int no;
}

#endif

Contoh diatas cuma ada 1 private member, tapi jika kita akan membuat kelas dengan banyak private member pasti bener capek buat set get method, belum lagi logic method yang akan digunakan nantinya. Di dalam C# dikenalkan auto property dengan set get method yg inline seperti berikut:

public int No{ set; get; }

Lalu bagaimana caranya supaya bisa buat auto property di C++ seperti code di C#?

Continue reading “Auto property set get di C++ class”

Instalasi PHP di IIS server dengan OS Windows 7

Pada IIS server secara default tidak dapat menangani request file php, karena itu agar IIS server mampu menangani request php script harus ditambahkan sendiri secara manual.

  1. Langkah pertama yang perlu dilakukan yaitu download php terlebih dahulu(unduh non-thread-safe ZIP archive for Windows). Versi PHP yang digunakan penulis yaitu versi 5.3.6.Ekstrak file yang telah didownload tadi kedalam hardisk (misal ekstrak di C:\php5) kemudian salin berkas php.ini-recommended menjadi php.ini. Setelah itu tambahkan konfigurasi berikut:

    cgi.force_redirect = 0
    cgi.fix_pathinfo = 1
    fastcgi.impersonate = 1
  2. Setelah konfigurasi php selesai, Selanjutnya yaitu install IIS server, caranya dengan pilih START –> Control Panel –> Programs –> Turn Windows Features on or off. Kemudian Aktifkan World Wide Web Service/Application Development Features/CGI dan juga aktifkan Web Management Tools/IIS Management Console. Untuk lebih jelasnya lihat dibawah ini. Continue reading “Instalasi PHP di IIS server dengan OS Windows 7”

Jaringan Syaraf Tiruan – Apa-Apa-Apa

Apa itu Jaringan Syaraf Tiruan(JST)?

      Jaringan saraf tiruan (JST) atau  neural network adalah suatu metode komputasi yang meniru sistem jaringan saraf biologis. Metode ini menggunakan elemen perhitungan non-linier dasar yang disebut neuron yang diorganisasikan sebagai jaringan yang saling berhubungan, sehingga mirip dengan jaringan saraf manusia. Jaringan saraf tiruan dibentuk untuk memecahkan suatu masalah tertentu seperti pengenalan pola atau klasifikasi karena proses pembelajaran.

     Layaknya neuron biologi, JST juga merupakan sistem yang bersifat  fault tolerant dalam 2 hal. Pertama, dapat mengenali sinyal input yang agak berbeda dari yang pernah diterima sebelumnya.  Sebagai contoh, manusia sering dapat mengenali seseorang yang wajahnya pernah dilihat dari foto atau dapat mengenali sesorang yang wajahnya agak berbeda karena sudah lama tidak menjumpainya. Kedua, tetap mampu bekerja meskipun beberapa neuron-nya tidak mampu bekerja dengan baik. Jika sebuah neuron rusak, neuron lain dapat dilatih untuk menggantikan fungsi neuron yang rusak tersebut. Continue reading “Jaringan Syaraf Tiruan – Apa-Apa-Apa”

Optimasi fungsi Math.Exp dan Math.Pow di C#

Karena tidak ada kerjaan semalam jadi iseng2 ja nyari artikel tentang optimasi di C#, maklumlah ane kan programmer C#. :D. Setelah mencari-cari ternyata nemu cara optimasi yang aneh tapi bener sip. Pertama kali yang saya bahas disini yaitu fungsi exponensial. Dalam C# sudah ada fungsi yang menangani perpangkatan exponensial, tp itu belum cukup optimal karena ada cara lain yang lebih cepat dalam menghitung e^val.

		public static double Exp(double val) {
    		long tmp = (long) (1512775 * val + (1072693248 - 60801));
    		return BitConverter.Int64BitsToDouble(tmp << 32);
		}

Continue reading “Optimasi fungsi Math.Exp dan Math.Pow di C#”

Penyelesaian Kasus Diagonal V dengan Array 2 Dimensi (C#)

Terinspirasi dari artikelnya jefrey hermanto tentang solusi kasus diagonal V, iseng2 ja bikin programnya cz cukup simple. Mungkin ada yang belum tau apa itu diagonal V,  tp apa gmna ya njelasinnya. Bingung ndiri, hehehe…Tapi kira-kira bentuknya seperti ini.

Input: 3
3 2 1 2 3
2 3 2 3 2
1 2 3 2 1
2 3 2 3 2
3 2 1 2 3

Nah kira-kira seperti itulah bentuknya, dan solusinya cukup mudah logikanya. Langsung aja saya ambil dari artikelnya jefrey hermanto…hehehe….

KANAN  5 4 3 2 1 2 3 4
BAWAH  4 3 2 1 2 3 4 5
KIRI   4 3 2 1 2 3 4 5
ATAS   5 4 3 2 1 2 3 4 

      ----------->
  5 4 3 2 1 2 3 4 5
  4               4
  3               3
  2               2
  1               1
  2               2
  3               3
  4               4
  5 4 3 2 1 2 3 4 5
     <------------

Continue reading “Penyelesaian Kasus Diagonal V dengan Array 2 Dimensi (C#)”

Tutorial jQuery: Dasar-dasar selectors

Bismillah, sudah lama vakum akhirnya bisa nulis jg. Tulisan pertama bulan ini yaitu tutorial jquery tentang selectors. Ga usah basa-basi lagi langsung aja disiapkan peralatan perangnya yaitu NotePad++, jQuery JavaScript Library v1.4, browser tentunya(disarankan menggunakan mozilla firefox + plugin firebug biar gampang debugging-nya) dan jangan lupa berdo’a biar diberi kemudahan oleh Allah dalam memahami tutorial ini.^_^

Anatomi JQuery Script

Pada dasarnya skrip JQuery terbagi atas tiga bagian utama yaitu Selector, action, dan parameter. Contoh penulisannya sebagai berikut :

jQuery("elemen").action("parameter");
//atau bisa juga ditulis sebagai berikut
$("elemen").action("parameter");

Simple kan? Continue reading “Tutorial jQuery: Dasar-dasar selectors”

Sorting kata menggunakan Quick Sort

Setelah lama vakum ngeblog karena diterpa badai skripsi, akhirnya bisa kembali berbagi sedikit code yang mungkin berguna 🙂 .

Langsung saja, bagi yang sering ngoding atau ngutek-ngutek algoritma sorting pasti sudah paham yang namanya quicksort yang sangat cepat dalam proses sorting. Namun sebagian besar dari kita hanya mengetahui penggunaannya untuk sorting angka, bagaimana jika untuk sorting kata? Berikut langkah-langkahnya:

  1. Jika terdapat kata-kata misalnya “akar” dan “akan” mak untuk melakukan sorting kita perlu membandingkan satu persatu hurufnya mulai dari paling kiri. Tetapi terdapat 3 huruf yang sama dan hanya huruf yang terkhir yang bisa untuk membandingkan. Hasilnya jika disorting secara ascending maka diperoleh “akan” kemudian “akar.
  2. Jika terdapat code quicksort seperti dibawah ini:
static int partition(ref intp[] arr, int left, int right)
{
      int i = left, j = right;
      int tmp;
      int pivot = arr[(left + right) / 2];
      while (i <= j) {
            while (arr[i] < pivot)
                  i++;
            while (arr[j] > pivot)
                  j--;
            if (i <= j) {
                  tmp = arr[i];
                  arr[i] = arr[j];
                  arr[j] = tmp;
                  i++;
                  j--;
            }
      };
      return i;
} 

static void quickSort(ref int arr[], int left, int right) {
      int index = partition(ref arr, left, right);
      if (left < index - 1)
            quickSort(ref arr, left, index - 1);
      if (index < right)
            quickSort(ref arr, index, right);
} Continue reading "Sorting kata menggunakan Quick Sort" 

Instalasi JOGL di Windows

Instalasi JOGL pada Windows
Setting Java Environment
Sebelum memulainya jangan lupa ucapkan Bismillah biar lancar instalasinya ?. Setelah itu kita mempunyai 2 pilihan JOGL yang pertama JOGL lama dan JOGL JSR-231. Tapi tenang saja keduanya dibahas oleh penulis.
Pastikan terlebih dahulu JDK(java development kit) sudah terinstall terlebih dahulu dan classpath-nya sudah diatur. Jika belum tahu pengaturan classpath, baca Setting Classpath pada java.
1.    Instalasi JOGL(versi jadul dari JOGL)
Langkah pertama yang dilakukan adalah kunjungi https://jogl.dev.java.net/ dan unduh file JOGL(bukan JSR-231).
Pastikan file yang di unduh berisi :
    jogl.jar
dan library(windows):            Linux :

    jogl.dll                       libjogl.so
    jogl_cg.dll                  libjogl_cg.so

Letakkan file jar pada direktori:
adalah C:\Program Files\Java\jdk1.6.0_17\jre\lib\ext
and the libraries in :
adalah C:\Program Files\Java\jdk1.6.0_17\jre\bin

2. Instalasi JOGL JSR 231
Langkah pertama yang dilakukan adalah kunjungi https://jogl.dev.java.net/ dan unduh file JOGL JSR-231.
Archives download berisi File jar :

    jogl.jar
    gluegen-rt.jar

serta library (Windows):   or    for Linux :

    jogl.dll                           libjogl.so
    jogl_awt.dll                       libjogl_awt.so
    jogl_cg.dll                        libjogl_cg.so
    gluegen-rt.dll                     gluegen-rt.so

Letakkan file jar pada direktori:
adalah C:\Program Files\Java\jdk1.6.0_17\jre\lib\ext
dan letakkan pada direktori berikut :
adalah C:\Program Files\Java\jdk1.6.0_17\jre\bin

 
C:\Program Files\Java\jdk1.6.0_17 merupakan path dari instalasi java di komputer penulis.
dan langkah-langkahnya sama seperti diatas tetapi C:\Program Files\Java\jdk1.6.0_17 diganti C:\Program Files\Java\jre1.6.0_03

Hal itu dilakukan agar class yang telah di kompile bisa dijalankan oleh run time java.
Setelah proses diatas selesai sekarang siap ngoding openGL di Java.



Untuk melihat hasil dari setting diatas berhasil atau tidak kita perlu membuat program openGL sederhana seperti berikut:

//sayMost.java
import javax.media.opengl.*; //untuk JOGL versi lama pemanggilannya import net.java.games.jogl.*
import java.awt.*;
import java.awt.event.*;

public class sayMost{
public static void main(String[] args)
{
Frame frame = new Frame("Say MOST");
GLCanvas canvas = new GLCanvas();
frame.add(canvas);
frame.setSize(300, 300); //mengatur ukuran frame berukuran 300px x 300px

frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
frame.show();
}
}

Maka tampilan dari program diatas adalah sebagai berikut:



Kompilasi program diatas hanya menggunakan command prompt dengan cara kompilasi


javac C:\sayMost.java

dan untuk menjalankannya dengan perintah berikut:.
          java C:\sayMost

Setting Classpath pada java

Pertama-tama install terlebih dahulu java development kit dan installernya dapat diunduh di http://java.sun.com.

Setelah instalasi jdk selesai, maka diperlukan untuk mendefinisikan system variabel. Pertanyaannya, untuk apa mendefinisikan system variabel? Dengan mendefinisikan system variable, maka perintah yang dalam direktori yang akan kita definisikan dapat diakses melalui command prompt.

Langkah pertama yaitu klik Start-> Contol Panel-> System / klik kanan My Computer maka akan muncul tampilan seperti dibawah ini:

pilih tab Advanced dan klik pada tombol Environment Variables.

Kemudian pilih Path pada System Variables dan klik tombol Edit, setelah itu isikan PATH atau alamat lengkap dari direktori bin dari JDK, tetapi tidak perlu mencantumkan RT RW. Contohnya alamat bin di komputer penulis adalah C:\Program Files\Java\jdk1.6.0_17\bin maka dalam variable value ditambahkan alamat tersebut dan contohnya seperti pada gambar dibawah ini:

Jika alamat lengkap telah dimasukkan maka klik ok dan klik ok sekali lagi, nah sekarang kita bisa mengakses perintah kompilasi javac dan perintah eksekusi classjava melalui cmd atau command prompt.Setelah proses ini selesai anda bisa menggunakan cmd untuk kompilasi dan menjalankan java class. Namun untuk kemudahan disarankan menggunakan SciTe sebagai editor.
Happy coding….

Algoritma dan Pemrograman

Definisi Algoritma

Algoritma adalah logika, metode dan tahapan (urutan) sistematis yang digunakan untukmemecahkan suatu permasalahan.
Kamus besar bahasa Indonesia (Balai Pustaka 1988) secara formal mendefinisikan
algoritma sebagai:

Algoritma adalah urutan logis pengambilan putusan untuk pemecahan masalah.
Dari pengertian diatas sudah jelas bahwa algoritma tidak hanya identik dengan ilmu komputer atau teknik informatika, bahkan resep makanan merupakan suatu algoritma juga karena merupakan urutan sitematis untuk memecahkan masalah(membuat makanan)[MUN00]. Dan perlu diingat bahwa algoritma tidak terikat dengan bahasa pemrograman apapun, jadi dengan algoritma kita bisa menggunakan semua bahasa pemrograman yang kita mau. Yang terpenting algoritma harus dinyatakan langkah (dalam bentuk) yang dapat dimengerti oleh programmer lain . Jadi terserah kita mau bikin algoritmanya sebagai cerita atau gambar yang jelas orang lain bisa mengerti maksudnya. Dan sebagai programmer juga harus memiliki keahlian membaca algoritma. Sebagai analogi, Seorang pianis tidak dapat memainkan musik bila ia tidak mengerti not balok. Sama halnya dengan programmer, menurut [GOL88] seharusnya programmer mengerti setiap langkah dalam suatu algoritma, dan mengerjakan operasi yang bersesuaian dengan langkah tersebut.

Algoritma Vs Pemrograman
Kita mungkin sudah sering mendengar kata-kata algoritma dan pemrograman, apalagi bagi para mahasiswa teknik informatika, ilmu komputer, ataupun yang lainnya. Nah, kenapa judulnya “Algoritma Vs Pemrograman” ?? Mungkin dua kata tersebut sudah melekat disanubari kita, tapi jarang sekali yang paham bedanya, jikalau sudah paham apakah sudah diimplementasikan dengan benar?
Kita buat analogi sederhana, andaikan belajar pemrograman kita samakan dengan belajar mengendarai mobil. Maka jika kita belajar bahasa pemrograman Java, C#, atau delphi tak ubahnya seperti belajar mengendarai truk, sedan, atau bus. Jika kita sudah bisa mengendarai satu kendaraan itu pasti tidak akan sulit untuk mengendarai yang lain. Lha jika algoritma bagaimana? Tadi jika pemrograman sama saja dengan belajar mengendarai, tapi algoritma adalah belajar ngebut tapi selamat sampai tujuan. Dari analogi tersebut telah jelas beda Pemrograman dengan algoritma.

Let’s start
Sekarang kita mulai mencoba dari penulisan apa “>variabel, kebanyakan bagi para mahasiswa(TI, ilmu komputer, dll) semester awal penulisan variabel pada program sangat kacau. Misalnya dengan simbol satu karakter (int a, int b, dll) yang tidak menggambarkan apa variabel itu dan apa tipe yang digunakan. Ya mungkin karena baris kode program hanya 20 baris, jadi sangat mudah mengoreksinya, tapi jika sampai 10000 baris atau lebih anda butuh orang 1 RW lebih untuk membantu mengoreksi kode program anda.
Solusinya: misalkan kita akan membuat variabel untuk Luas bangun dengan tipe data integer(bilangan bulat), maka kita sering menulisnya sebagai berikut :
int luas; //hanya menggambarkan variabel itu dibuat untuk menampung nilai luas

Jika kita ganti sebagai berikut :
int iLuas; //terdapat tambahan huruf I yang merepresentasikan tipe data integer
int[] iArrLuas; //Arr merupakan penanda bahwa variabel itu merupakan array
float[] fArrLuas; //Arr merupakan penanda bahwa variabel itu merupakan array dan f adalah penanda jika variabel bertipe float.



Cara penulisan diatas adalah contoh penulisan dengan style saya agar memudahkan debugging(mencari serangga/bug atau kesalahan yang bikin program saya error). Anda bisa menggantinya dengan style anda sendiri yang memudahkan anda. Misalkan iLuas diganti menjadi i_luas atau intLuas.
Setelah variabel kita menuju ke komputasi program, dengan sedikit manipulasi rumus kita bisa memperoleh proses perhitungan yang jauh lebih cepat. Saya ambil kasus kombinasi,

rumusnya adalah seperti ini C(n,r)= n! / (n-r)!r!

misalkan kita menghitung C(5,2), secara konvensional kita langsung menghitungnya seperti ini
C(5,4) = 5 x 4 x 3 x 2 x 1 / (3 x 2 x 1 x 2 x 1) =10→memerlukan 11 perhitungan
namun jika kita mengganti rumusnya menjadi C(n,r) = (n-r+1)*…*n / r! perhitungannya

menjadi C(5,4) = 4×5 / 1×2 =10→ memerlukan 5 perhitungan.

Dari contoh diatas mungkin hanya sedikit sekali selisihnya, namun jika jumlah perhitungan diatas mencapat ratusan ribu dan nilai kombinasinya juga besar maka akan sangat berpengaruh.
Saya ambil contoh kasus polinomial berderajat n, saya memakai derajat 5 saja,

f(x) =ax5+bx4+cx3+dx2+ex+f    →pada perhitungan biasa terdapat 15 perkalian dan 5 penjumlahan.

Nah, apakah apakah “>masih bisa dioptimasi lagi? Dulu awalnya saya ragu apakah itu bisa disederhanakan lagi? Pasti memfaktorkannya sulit. Ternyata tidak begitu susah, saya hanya bisa geleng-geleng kepala saja saat dijelaskan Pak Wayan waktu kuliah Algoritma dan Struktur Data 2. Bagaimana bentuk fungsi yang teroptimasi? Bentuknya sebagai berikut:

f(x) =(( (((ax+b)x+c)x+d)x+e)x+f) → hanya terdapat 5 perkalian dan 5 penjumlahan

Gampang kan!! → kata2nya Pak Wayan yang sering saya dengar waktu kuliah.
Sekian dulu sedikit ilmu yang saya dapat waktu kuliah Algoritma, semoga bermanfaat…
Referensi:
Catatan kuliah
[GOL88] Goldshlager, Les & Lister, Anfrew. Computer Science. A Modern Introduction.
Edisi kedua. Prentice hall. 1998
[MUN00] Munir, Rinaldi. Algoritma & Pemrograman Dalam Bahasa Pascal dan C Buku 1.
Edisi Kedua. Informatika. Bandung. 2000

Terima kasih Pak Wayan atas bimbingannya di kelas.