Selamat datang di sonoku.com

Merancang Kendali Fuzzy Sederhana

Untuk memahami bagaimana Fuzzy Logic Controler (FLC) dirancang dan bagaimana bekerja, dapat dimulai dengan beberapa contoh kasus sederhana seperti salah satunya berikut ini. Akan dirancang kontroler untuk mengatur kecepatan motor DC dengan merubah besar tegangan masukan motor. Pada saat motor berputar terlalu cepat dari set point yang ditetapkan, maka untuk memperlambat putaran motor tegangan motor DC perlu dikurangi. Jika motor terlalu lambat, maka tegangan masukan motor harus ditambah agar kecepatan motor mencapai nilai set point.


Gambar 1. Diagram Blok Sistem Kendali Kecepatan Motor

Menentukan masukan dan keluaran kontroler

Sesuai dengan Gambar 1 diatas masukan kontroler fuzzy hanya satu yaitu error (Error). Error merupakan selisih antara kecepatan motor saat ini dengan kecepatan yang diinginkan (setpoint). Dalam kasus ini kecepatan motor diatur agar mempunyai kecepatan yang stabil pada 260 rpm.

Keluaran kontroler yaitu besar tegangan kontrol motor (Teg). Tegangan kerja yang diberikan pada motor mempunyai rentang antara 0 Volt hingga 5 volt. Motor akan berputar dengan kecepatan 260 rpm (yg diinginkan) jika tegangan yang diberikan pada motor sebesar 2.5 volt.

Menentukan Membership Function (MF)

Langkah berikutnya adalah menentukan fungsi keanggotaan (membership function), baik masukan maupun keluaran. Fungsi keanggotaan masukan Error ditentukan terdiri dari 3 himpunan yaitu, Negatif (Neg), Zero (Zero), dan Positif (Pos).


Gambar 2. MF Error (error)

Secara matematis fungsi keanggotaan Error dapat dituliskan sebagai berikut.




Sedangkan untuk keluaran kontroler Teg dibagi menjadi 3 himpunan juga yaitu, Kecil (K), Sedang (S), Besar (B).


Gambar 3. MF Tegangan (Teg)

Secara matematis fungsi keanggotaan Tegangan dapat dituliskan sebagai berikut.




Membuat rule (aturan)

Setelah menenutukan fungsi keanggotaan masing-masing masukan dan keluaran, selanjutnya ditentukan rules (aturan) yang akan diterapkan kontroler. Aturan dibuat untuk mengendalikan motor agar kecepatannya stabil pada 260 rpm. Jadi ketika kecepatan motor sekarang dinilai terlalu cepat (>260rpm) daripada nilai setpoint maka nilai error-nya bernilai negatif (-). Dengan demikian kontroler harus menurunkan tegangan motor agar motor melambat. Sebaliknya jika kecepatan motor terlalu lambat maka nilai error-nya positif (+) maka tegangan motor perlu dinaikkan. Jika kecepatan telah tepat pada 260 rpm maka kontroler mengeluarkan tegangan sebesar 2.5 volt. Diharapkan dengan aturan tersebut motor akan berputar dengan kecepatan yang stabil pada 260 rpm.

Dari penjelasan diatas dapat ditentukan ada 3 aturan pengendalian sebagai berikut:

Aturan #1:

IF error IS negatif THEN teg IS kecil

Aturan #2:

IF error IS zero THEN teg IS sedang

Aturan #3:

IF error IS positif THEN teg IS besar

Menganalisa bagaimana FLC bekerja

Diambil contoh ketika kecepatan motor 285 rpm, dimana lebih besar dari kecepatan yang diinginkan yaitu 260 rpm, berapakah tegangan yang dikeluarkan kontroler agar motor berputar pada kecepatan normalnya (260 rpm)?

Sesuai kasus diatas, nilai error adalah sebesar -25 rpm. Langkah pertama yang dilakukan kontroler adalah menentukan derajat keanggotaan dari -25 rpm terhadap fungsi error (fuzzyfikasi). Nilai -25 rpm masuk dalam keanggotaan dari Zero dan Neg (Gambar 4), untuk itu ada dua proses fuzzyfikasi untuk menentukan derajat keanggotaannya.




Gambar 4. Fuzzyfikasi masukan error

Dari dua nilai derajat keanggotaan Error kemudian kita tentukan nilai derajat keanggotaannya terhadap keluaran Tegangan. Untuk menentukan termasuk fungsi keanggotaan keluaran yang mana, sebelumnya kita tentukan aturan (rule) yang aktif. Karena nilai masukan Error masuk dalam keanggotaan Zero dan Pos, maka setelah dievaluasi aturan yang aktif adalah Aturan #1 dan Aturan #2. Untuk itu selanjutnya dilakukan inmplikasi untuk memperoleh consequent/keluaran sebuah aturan IF THEN
berdasarkan derajat keanggotaan antecedent.


Gambar 5. Proses Implikasi

Langkah selanjutnya adalah melakukan agregasi, yaitu mengombinasikan keluaran aturan IF-THEN menjadi fuzzy set tunggal. Pada kasus ini ditentukan menggunakan fungsi max sehingga menghasilkan fuzzyset seperti gambar berikut.

Gambar 6. Proses Agregasi


Hasil dari proses agregasi masih merupakan informasi fuzzy, untuk itu perlu dilakukan perhitungan yang menghasilkan bilangan tunggal sebagai nilai keluaran kontroler (defuzzyfikasi). Proses defuzzifikasi pada kasus ini menggunakan metode COG (Center of Gravity), dengan perhitungan seperti berikut.


Dengan metode COG (Center of Gravity) didapat nilai defuzzifikasi (nilai teg) sebesar 1.87 Volt. Jadi dapat disimpulkan bahwa pada saat kecepatan motor 285 rpm (terlalu cepat), kontroler harus memberikan tegangan pada motor lebih kecil dari tegangan normalnya (2.5Volt) yaitu sebesar 1.87 Volt agar kecepatan motor melambat.


Membuat Adaptive Neuro Fuzzy Inference System (ANFIS) di MATLAB

Akan dibuat rancangan FIS (Fuzzy Inference System) dengan proses training Adaptive Neuro Fuzzy Inference System (ANFIS) di MATLAB.

TRAINING DATA

Untuk membuat training data mulailah dengan membuat matrik pada command window MATLAB sesuai tabel dibawah ini (atau dapat disesuaikan).

Ketik perintah berikut pada command window MATLAB

>> trainData=[1 20 0; 1.1 25.6 0.146;…dst]

Untuk me-load kita bisa lakukan di ANFIS editor. Ketik anfisedit pada command window MATLAB. Kemudian pada kolom Load Data pilih type Training, dan kita bisa ambil dari file atau workspace. Klik Load Data, kemudian pada window kecil yang muncul ketikkan nama file training data yang kita buat tadi (trainData). Hasil plot trainData akan tampak seperti gambar berikut.

GENERATE ANFIS

Selanjutnya menentukan parameter-parameter fungsi keanggotaan dalam ANFIS. Untuk melakukannya, pada kolom generate ANFIS kita pilih GridPartition. Kemudian kita tentukan banyaknya input MF sebanyak 5 dengan type trapesium masing-masing untuk input 1 dan 2, sedangkan type MF ouput kita pilih constant.

Untuk melihat struktur model ANFIS yang kita buat, pada bagian ANFIS info klik Structure. Hasil ANFIS yang kita buat akan tampak seperti berikut.

Pada gambar diatas tampak bahwa ANFIS terdiri dari dua input, dengan masing-masing terdiri dari 5 Membership Function. Terdapat rule sebanyak 25 buah, dengan operator and. ANFIS terdiri dari satu output dengan output MF yang terbentuk sebanyak 25 buah. Garis-garis yang menghubungkan antar node menunjukkan sebuah rule yang bersesuaian.

TRAINING ANFIS

Untuk pelatihan FIS, ANFIS menyediakan dua metode optimasi parameter fungsi keanggotaan yaitu Backpropagation dan Hybrid (gabungan backpropagation dan least square). Untuk kali ini akan dicoba menggunakan optimasi Hybrid.

Untuk menghentikan proses training, ANFIS menggunakan nilai error tolerance, sehingga jika setelah training data error memasuki daerah error tolerance ini maka training akan berhenti. Dipilih error tolerance sebesar 0 (default). Kemudian banyaknya epoch (iterasi) proses training ditentukan sebanyak 40.

Untuk memulai proses training, klik train now. Hasilnya akan seperti gambar berikut.

Jika diperhatikan, training error grafiknya semakin menurun dan mencapai titik erorr tetap pada angka 0.0083152 pada saat epoch mencapai 20. Artinya bahwa proses training menghasilkan error minimum pada nilai 0.0083152 yaitu selisih 0.0016848 dari toleransi error yang kita definisikan (tidak pernah mencapai nilai 0), untuk itu proses training dibatasi dengan banyaknya iterasi (epoch), yaitu 40 kali.

PENGUJIAN PASCA TRAINING ANFIS

Untuk mengetahui performance ANFIS yang telah ditraining dengan data awal (trainData), kita bisa lakukan test dengan melakukan ploting data trainData dan ANFIS dengan nilai input yang sama. Pada kolom Test FIS di ANFIS editor klik Test Now dengan sebelumnya memilih training data.

Jika kita perhatikan gambar diatas tampak bahwa hasil ploting trainData (o) dan ANFIS output (*) pada beberapa nilai berhimpitan. Artinya ANFIS yang kita training telah dapat memetakan masukan terhadap keluaran dengan baik. Pada saat tertentu hasil ploting FIS output tampak bergeser dari trainData, ini menunjukkan ada error yang relatif besar ketika ANFIS diberi masukan pada masukan sekitar nilai tersebut.


Pada perancangan FIS sebelumnya didasarkan pada IF-THEN rules yang sudah didefinisikan sebelumnya. Jadi pendekatan yang dipakai sebelumnya diasumsikan kita sudah memiliki IF-THEN rules, dengan kata lain kita sudah mengetahui lebih dulu bagaimana kelakukan dari sistem yang dimodelkan. Tujuannya adalah mentransfer pengetahuan kita tersebut kedalam sistem fuzzy dalam bentuk FIS.

Sedangkan pada ANFIS, pemodelan didasarkan pada pasangan input dan output. Jadi diasumsikan kita mempunyai data input dan output dari sistem sebelumnya, kemudian baru mencari IF-THEN rules yang bisa memetakan input menjadi output. ANFIS mengandaikan bahwa data input dan output dari suatu Blackbox system telah ada, kemudian kita menebak model apa yang cocok pada blackbox tersebut.

ANFIS dapat mengatasi kesulitan menentukan prameter-parameter fungsi keanggotaan untk mendapatkan FIS yang memetakan input ke output dengan benar pada pemodelan yang didasarkan pada data.

Membuat button pada saat runtime

Jarang sekali programmer membuat sebuah komponen/objek visual pada saat runtime. Artinya mereka membuat sebuah komponen visual pada saat program di jalankan (run). Biasanya semua dibuat pada saat mereka merancang tampilan program dengan meletakkan semua komponen seperti tombol (TButton), Combobox, dan lain sebagainya pada form. Cara seperti ini sering disebut dengan istilah “Designtime” atau saat merancang.

Namun jika anda perlu sekali untuk membuat sebuah komponen visual secara runtime, mungkin cara ini adalah cara pragmatis yang tepat untuk anda ikuti. Kali ini kita coba untuk membuat sebuah tombol (TButton) pada saat program dijalankan. Jadi rencananya dengan menekan sebuah tombol yang pasang pada Form pada saat designtime, program akan membuat tombol yang lain. Baik langsung saja.

Letakkan sebuah tombol pada Form utama, kemudian masuklah pada bagian prosedur OnClick tombol tersebut. Pada frame OnClick tersebut masukkan kode berikut:

Pada kode diatas kita menggunakan metode “Create”, dimana sebuah kelas objek  TButton dibuat menggunakan perintah create.  Setelah pemanggilan create, kemudian kita deklarasikan property button yang akan tampil nanti, mulai dari visibilitas, parental,  posisi tombol, lebar, caption, dan tidak tertinggal adalah nama objek itu sendiri. Semua persis seperti kita membuat tombol pada saat designtime, hanya saja kita menuliskan value sebuah objek secara pragmatis melalui sebuah kode.

Jika anda berniat untuk memberikan sebuah aksi pada tombol yang kita buat secara runtime, misalnya pada event OnClick (aksi pada saat tombol di-klik), pertama deklarasikan sebuah prosedur OnClick pada bagian Private Declarations seperti dibawah ini.

setelah itu buatlah prosedur dengan nama KlikTombol seperti kode berikut.

Kemudian tambahkan pada event OnClick tombol “Buat Tombol” sebuah deklarasi event KlikTombol tadi sehingga kodenya akan seperti berikut.

Cukup mudah bukan? Perhatikan sekarang, bagaimana jika tombol “Buat Tombol” di-klik untuk kedua kalinya? Pastinya akan muncul pesan orror bahwa terdapat duplikasi nama sebuah objek. Hal ini memang sangat dilarang dalam Delphi. Untuk jika anda ingin membuat tombol lain secara runtime, anda harus membuat tombol tersebut dengan nama yang unik. Perhatikan contoh kode berikut.

Contoh diatas akan membuat tombol sebanyak 5 kali, kemudian menatanya sedemikian rupa agar tidak bertumpuk dengan memodifikasi properti top dan left tombol. Agar nama objek menjadi unik, kita tambahkan sebuah angka yang diambilkan dari variabel iterasi “i” di belakang value properti Name tombol. Namun tetap saja, jika tombol “Buat Tombol 5” ditekan utuk kedua kalinya akan tetap muncul pesan erorr duplikat  nama objek. Lalu bagaiamana mengatasinya? Tunggu artikel berikutnya…oke :)


Source Code (170kB
)
Download sourcecode Runtime Object Creation<a href=

Versi Delphi

a

Borland Delphi 1
Delphi 1 dirilis pada tahun 1995 untuk 16-bit Windows 3.1 dan merupakan proyek awal dari apa yang sekarang disebut dengan  perangkat Rapid Application Development (RAD). Delphi 1 adalah penerus dari Turbo Pascal dan Borland Pascal. Seperti Turbo Pascal, Delphi kode ditulis dalam dialek bahasa pemrograman Pascal yang dikenal sebagai Object Pascal.

Borland Delphi 2
Dirilis pada tahun 1996, didukung dengan Windows 32-bit. Digabungkan dengan Delphi 1 untuk aplikasi Windows 16-bit.

Borland Delphi 3

Delphi’s Active Insight and Broker Technologies combine to give you a flexible and powerful architecture for developing distributed client/server applications.[1]
Billy Bosworth, DBMS Online, April, 1997

Delphi 3 dikenal dengan “Delphi klasik” yang dirilis pada tahun 1997, beberapa penambahan pada versi ini antara lain: teknologi code insight, DLL debugging, template komponen, komponen DecisionCube and TeeChart, teknologi WebBroker, ActiveForms, paket komponen, dan integrasi dengan antarmuka COM.

Delphi 4

Delphi 4 is a comprehensive set of professional and client/server development tools for building high productivity solutions for distributed computing. Delphi provides Java interoperability, high performance database drivers, CORBA development, and Microsoft BackOffice support. You’ve never had a more productive way to customize, manage, visualize and update data. With Delphi, you deliver robust applications to production, on time and on budget[2].

Delhi 4 dirilis pada tahun 1996, support Windows98 dan lebih mengembangkan OLE dan COM juga menambahkan fitur Array Dinamis.

Delphi 5
Delphi 5 banyak memperkenalkan fitur baru seperti berbagai layout desktop, konsep frame, pembangunan paralel, kemampuan terjemahan, debugger terintegrasi yang disempurnakan, kemampuan Internet yang baru (XML), powerful database (dukungan ADO), dll. Delphi 5 rilis pada tahun 1997.

Kylix
Kylix merupakan Delphi untuk sistem operasi Linux yang rilis pada tahun 2001.




Borland Delphi 6
Hadir untuk mendukung baik Windows maupun Linux.

Borland Delphi 7
Versi ini menjadi versi standar yang banyak digunakan oleh para programmer. Dirilis pada tahu 2002, Delphi 7 dibuat Borland populer karena stabilitas, kecepatan dan persyaratan perangkat keras yang rendah dan masih banyak digunakan hingga saat ini. Delphi 7 menambahkan dukungan untuk Windows XP, dan menambahkan lebih banyak dukungan untuk membangun aplikasi Web. Ini juga merupakan versi terakhir dari Delphi yang dapat digunakan tanpa aktivasi.

Borland Delphi 8
Delphi 8, dirilis Desember 2003, adalah rilis NET-satunya yang memungkinkan pengembang untuk mengkompilasi kode Delphi Object Pascal ke .NET CIL (Common Intermediate Language). IDE ditulis ulang untuk mengakomodasi untuk pengembangan .NETdan berubah menjadi antarmuka yang mirip dengan Microsoft Visual Studio.NET. Sayangnya versi ini tidak lagi mendukung pengembang untuk membuat aplikasi asli (*.exe).

Borland Delphi 2005
Disebut juga Delphi 9 atau Borland Developer Studio 3.0, versi ini memasukkan pengembangan Win32 dan pengembangan NET. dalam satu IDE. Banyak yang ditambahkan pada Delphi versi ini, seperti pada sisi IDE, dan perintah for..in (seperti foreach s # pada bahasa C). Kemampuan untuk mengkompilasi aplikasi asli windows (*. exe) telah ditambahkan kembali ke Delphi 2005.

Delphi 2006
Pada akhir 2005 versi baru, Delphi 2006 atau Delphi 10 atau Borland Developer Studio 4.0 dirilis. Versi ini menggabungkan beberapa pengembangan seperti Delphi .NET, C#, Delphi Win32 dan C++. Delphi 10 lebih stabil dibandingkan dengan Delphi 8 atau Delphi 2005, dan ditingkatkan bahkan lebih dengan merilis service pack dan beberapa perbaikan terbaru.

Delphi 2007

Delphi 2007 (Delphi 11), versi pertama oleh CodeGear, dirilis pada tanggal 16 Maret 2007. Fitur-fitur baru termasuk dukungan untuk MS Build dan penyempurnaan Visual Component Library untuk Windows Vista, tapi fitur C# Builder dalam rilis ini penjualannya tidak setinggi seperti yang diharapkan karena Visual Studio juga menawarkan C#. Windows Form desainer untuk Delphi. NET juga ditambahkan di D2007 karena didasarkan atas bagian dari NET framework. API yang telah dirubah begitu drastis oleh Microsoft di NET 2.0 yang akan memperbarui IDE menjadi langkah besar. Untuk pertama kalinya Delphi bisa di-download dari Internet dan diaktifkan dengan kunci lisensi, kemampuan didukung oleh teknologi instalasi InstallAware baru Internasionalisasi versi Delphi 2007 dikirim secara bersamaan dalam bahasa Inggris, Perancis, Jerman dan Jepang. RAD Studio 2007 (kode bernama Highlander), yang meliputi NET dan pengembangan C++ Builder, dirilis pada September 5, 2007

What you need to start building a website or blog

webbuildingThere are some things that need to be prepared if you want to build a website or blog. But, before you start to prepare it just answer this question “What is the main purpose of your website or your blog?”

Why this question is so important, it’s will make your work more focus and of course answer these next question as well. “What a blog or website looks like you will build?” , and “how to build it?”. Read More

Pemfilteran Domain Spasial

Sebenarnya istilah filter mengacu pada proses melakukan penyaringan komponen frekuensi tertentu (yang sama diterima, yang tidak ditolak). Jika kita ingat kembali pelajaran tentang filter di Teknik Elektro, kita tahu bahwa filter lolos rendah (Low Pass Filter/LPF) akan meloloskan komponen yang berfrekuensi rendah, dalam image processing LPF akan menghasilkan citra Blur (lembut/halus). Lalu filter dalam pengolahan citra bentuknya seperti apa? Biasanya dalam bentuk piksel berukuran 2×2, 3×3 atau 5×5 dan seterusnya, tergantung kebutuhan, dan piksel ini biasa disebut dengan mask atau kernel ataupun window. Kalau saya menyebutnya saringan, karena cara kerjanya memang mirip saringan :).

Pemfilteran domain spasial adalah proses manipulasi kumpulan piksel dari sebuah citra untuk menghasilkan citra baru[1]. Aplikasinya untuk perbaikan kualitas citra. Read More

Mengatur Brigthness Citra menggunakan Delphi

Sebuah citra grayscale 256 warna akan tampak gelap bila seluruh komponen warnanya berada mendekati nilai 0, dan juga sebaliknya jika seluruh komponen warnya mendekati nilai 255 maka citra akan tampak lebih terang. Untuk dapat mengatur kecerahan suatu citra kita dapat menambahkan nilai intensitas piksel dengan suatu nilai konstanta. Persamaannya seperti berikut.

Dimana fi adalah nilai intensitas (warna) piksel pada citra asli, dan b adalah nilai konstanta kecerahan (brightness). Jika nilai b negatif maka intensitas piksel akan lebih gelap, sebaliknya jika nilai b positif maka intensitas citra akan semakin cerah.

Berikut ilustrasi operasi brightness pada sebuah citra.

Untuk citra true color, masing-masing komponen warna Red, Green dan Blue perlu ditambahkan dengan suatu konstanta.

Mengatur kecerahan citra dengan Delphi

 

Rancang tampilan form seperti pada gambar, atur properti komponennya seperti pada tabel.

Program yang kita buat dapat merubah level kecerahan pada citra 24 bit di setiap kanalnya (R, G, B), untuk itu kita memerlukan 3 Trackbar masing-masing untuk kanal (channel) R, G dan B. Nilai posisi trackbar kita atur nilainya mulai -255 hingga 255, tujuannya agar kita bisa mendapatkan penambahan dengan nilai negatif (pengurangan).

Pada saat pertama kali membuka file gambar kita perlu membuat dulu citra/image sementara untuk diolah kecerahannya. Selain itu khusus untuk citra 8 bit (grayscale) kita tidak bisa mengatur kecerahan warna perkanal (RGB) seperti pada citra true color (24bit),untuk itu kita perlu mengatur perubahan kecerahan citra satu kanal saja. Ini dapat diatur dengan menambahkan checkbox (Equal Track) agar TrackBar dapat aktif bersamaan (seolah hanya 1 nilai kanal yang aktif). Potongan programnya akan tampak seperti berikut.

Operasi kontrol kecerahan dilakukan dengan menambahkan tiap nilai intensitas citra dengan nilai posisi Trackbar tiap kanalnya. Kemudian dicek apakah hasil penambahan melebihi nilai maksimum intensitasnya(255), jika ya maka nilai intensitas yang baru dibuat sama dengan 255. Sebaliknya jika melebihi nilai intensitas nol (negatif) maka intensitas citra yang baru dibuat sama dengan 0. Berikut potongan programnya.

;

Berikut hasil kontrol kecerahan citra dengan berbagai nilai konstanta b yang berbeda-beda.

Download (source code)

1. Image Processing – Brightness.rar (190kb)

References

[1] Wikipedia

[2] imageprocessingindelphi.blogspot.com

[3] Sutoyo,T., Edy Mulyanto, Vincent Suhartono, Oky Dwi Nurhayati, Wijanarto, Teori Pengolahan Citra Digital, UDINUS, Penerbit Andi, 2009

Operasi Inversi (Negasi Citra) dengan Delphi

Operasi ini akan menghasilkan citra negatif seperti film (negatif) foto. Pada citra greyscale, operasi inversi mengubah piksel warna putih menjadi hitam, dan sebaliknya. Sedangkan jika kita lihat dari histogramnya maka histogram citra negatif adalah pencerminan dari histogram citra asal/asli.

Operasi inversi dilakukan dengan mengurangkan nilai intensitas piksel dari nilai intensitas piksel maksimumnya.

Jadi jika ada citra 8 bit dengan 256 level intensitas maka persamaan untuk mendapatkan citra negatif adalah

Operasi Inversi dengan Delphi

Oke kita langsung saja dengan implementasinya dengan Delphi. Seperti biasa tambahkan komponen berikut dan atur propertinya.

Program yang akan kita buat akan memproses citra dengan format 8 bit dan 24 bit. Berikut potongan programnya.

[sourcecode language=”delphi”]
procedure TForm1.Invert1Click(Sender: TObject);
var piksel : PByteArray;
brs, kol: Integer;
rgb1 : array [0..2] of Integer;
begin
for brs := 0 to Image2.Picture.Height – 1 do
begin
piksel := Image2.Picture.Bitmap.ScanLine [brs];
for kol := 0 to Image2.Picture.Width-1 do
begin
if Image2.Picture.Bitmap.PixelFormat = pf8bit then // citra 8 bit
piksel[kol] := 256 – piksel[kol];
if Image2.Picture.Bitmap.PixelFormat = pf24bit then //citra 24 bit
begin
piksel[3*kol] := 256 – piksel[3*kol];
piksel[3*kol+1] := 256 – piksel[3*kol+1];
piksel[3*kol+2] := 256 – piksel[3*kol+2];
end;
end;
Image2.Invalidate;
end;
end;
[/sourcecode]

Download (source code)

1. Image Processing – Invert.rar (178kb)

References

[1] Wikipedia

[2] imageprocessingindelphi.blogspot.com

[3] Sutoyo,T., Edy Mulyanto, Vincent Suhartono, Oky Dwi Nurhayati, Wijanarto, Teori Pengolahan Citra Digital, UDINUS, Penerbit Andi, 2009

Thresholding Citra menggunakan Delphi

Thresholding (pengambangan) artinya adalah nilai piksel pada citra yang memenuhi syarat nilai ambang yang kita tentukan dirubah kenilai tertentu yang dikehendaki. Secara matematis ditulis seperti berikut

Dengan fi (x,y) adalah citra asli (input), fo(x,y) adalah piksel citra baru (hasil/output), Tn adalah nilai ambang yang ditentukan. Nilai piksel pada (x,y) citra output akan sama dengan T1 jika nilai piksel (x,y) citra input tersebut ? T1. Nilai piksel (x,y) citra input akan sama dengan T2 jika T1 < fi(x,y)< T2, dan seterusnya…

Kita ambil contoh citra greyscale 8 bit akan dipetakan menjadi peta biner (hitam dan putih saja) dengan nilai ambang tunggal = 128 maka persamaan matematisnya

Ini berarti piksel yang nilai intensitasnya dibawah 128 akan diubah menjadi hitam (nilai intensitas = 0), sedangkan piksel yang nilai intensitasnya diatas 128 akan menjadi putih (nilai intensitas = 255).

Thresholding dengan Delphi
Contoh berikut kita akan  melakukan operasi thresholding tunggal dengan nilai ambang yang bisa diatur. Citra yang diolah adalah citra true color dan hasilnya berupa berupa citra biner. Implementasi dengan Delphi cukup mudah, mulailah dengan membentuk tampilan formnya seperti berikut. Tambahkan beberapa komponen dan atur propertinya seperti tabel.

Proses pertama adalah merubah citra true color menjadi citra greyscale , menggunakan metode nilai maksimum. Berikut potongan kode programnya.

Setelah itu kita mulai dengan proses thresholding. Nilai level grey yang didapat dibandingkan dengan nilai ambang yang ditentukan oleh posisi TrackBar1. Jika nilainya lebih kecil dari nilai ambang maka piksel akan diubah ke intensitas nol (warna putih), jika lebih besar atau sama dengan nilai ambang piksel diubah ke intensitas 255 (hitam).

Berikut potongan programnya.

Gambar berikut menunjukkan hasil thresholding dengan nilai ambang yang berbeda-beda.

Download source code

1. Image Processing – Thresholding.rar (184kb)

References

[1] Wikipedia

[2] imageprocessingindelphi.blogspot.com

[3] Sutoyo,T., Edy Mulyanto, Vincent Suhartono, Oky Dwi Nurhayati, Wijanarto, Teori Pengolahan Citra Digital, UDINUS, Penerbit Andi, 2009