Thursday, December 31, 2015

how to measurement validity value



Perhatikan contoh plot 2 dimensi dari sebuah data berikut, secara visual, kita bisa melihat adanya 3 cluster, nah kita bisa membuat 3 class menggunakan algoritma Kmeans atau Fuzzy Clustering Means (FCM)

Friday, December 25, 2015

Efek Kuantisasi Citra Digital

Kuantisasi yaitu mengubah scaling range nilai. Misalkan berikut, sebuah citra mempunyai rentang nilai 0 sampai 255, demi alasan komputasi agar lebih cepat, maka akan di reduksi menjadi skala 0 – 15 saja. Contohnya value=200 dengan range =15, maka x didapatkan 12

Monday, November 23, 2015

Bagaimana sih mengolah citra ukuran besar

Gambar diatas mempunyai ukuran yang lumayan besar yaitu 3000*4000, jika kita me load gambar disamping kedalam sebuah memory komputer secara langsung, tentu akan terasa berat untuk ukuran RAM yang kecil! Terkadang ukuran diatas pun masih ada yang lebih besar lagi, biasanya untuk citra data satelit bisa berukuran 5500*3500. Maka penulis biasanya melakukan croping seperti berikut, 

Friday, November 13, 2015

the Scientific PYthon Development EnviRonment


Spyder is the Scientific PYthon Development EnviRonment: a powerful interactive development environment for the Python language. Versi windows https://github.com/spyder-ide/spyder/releases

Python-KNN untuk pengenalan ciri fitur

Penulis mencoba menggunakan KNN untuk melakukan tugas sebagai algoritma dalam hal pengenalan objek, penulis sederhanakan menjadi contoh berikut

Wednesday, October 28, 2015

How to create and write INI format in net Framework



Format *.ini sangat populer digunakan terutama untuk menyimpan data settingan dari sebuah aplikasi, karena mudah dipahami sehingga kita bisa mengedit isinya menggunakan beragam aplikasi default seperti notepad, wordpad, text editor.

Anatomi Neural Network Backpropagation

Bagi kamu yang masih penasaran mengenai Jaringan syarat tiruan Backpropagation, kamu bisa melihat anatomi berikut

Sunday, October 25, 2015

Print File PDF di Net Platform


Postingan kali ini dimulai ketika penulis mengerjakan project yang melibatkan proses printing, maka hal yang paling mudah yaitu menggunakan format PDF dengan menggunakan itextsharp sebagai library untuk membuat table di pdf
 

Thursday, October 22, 2015

Membaca file avi dengan C-sharp

Ketika penulis menjumpai riset untuk pengolahan video berformat *.avi, penulis menggunakan Aforge.net 2.2.5. Kamu bisa donwload dan menyertakan *.dll berikut diproject 

Friday, October 2, 2015

Leaf shape based plant species recognition



softscients - Itulah judul yang banyak berseliweran dan banyak dibahas dibeberapa paper yang intinya adalah membuat algoritma pengenalan jenis daun berdasarkan perhitungan fitur morfologinya. Penulis meng copy paste kan isi dari paper sebagai berikut: Digital morphology features extraction yang terdiri dari berikut dan untuk mencoba menggunakan persamaan tersebut diimplementasikan kedalam matlab

Disini hanya sampai pada tahap perhitungan morfologinya saja tidak sampai pada recognition, pada tahap recognitionnya, bisa kamu pakai dengan beragam metode yang ada saat ini baik supervised atau unsupervised learning bahkan statistika biasa

Saturday, September 26, 2015

Steganography: Hiding Data Within Data



softscients - LSB dikenal sebagai metode untuk steganografi yang diterapkan untuk menyembunyikan pesan juga bisa menyembunyikan sebuah file kedalam sebuah gambar yaitu dengan membaca data file tersebut kedalam sebuah byte (256) yang kemudian disisipkan kedalam pixel gambar.

Sunday, September 20, 2015

Bikin Aplikasi berbasis Python dengan mudah

Bagi kamu yang hobi mencoba hal baru, bisa menggunakan IDE selain IDLE bawaan dari Python yaitu PyCharm, hal menarik selain autocompletion, folding, coloring, dan juga refactoring!

Sunday, September 13, 2015

Buku Belajar Pemrogaman Matlab - Koneksi Matlab dengan Sqlite







Siapa tidak mengenal sqlite? Database engine yang kecil dan ringan! Kamu bisa menggunakan beragam driver untuk menghubungkan matlab dengan sqlite, kamu layak coba link berikut  https://sourceforge.net/projects/mksqlite/files/ penulis sudah mencoba, juga ada sqlite browser


Daripada kamu menggunakan access sebagai database engine nya, mending kamu coba pake sqlite saja 

Thursday, September 3, 2015

Aplikasi Digital Mark Recognition

DMR Digital Mark Recognition sering disebut Optical Mark Recognition yaitu salah satu bentuk penggunaaan image processing dalam mengolah sebuah otomatisasi dokumen, misalnya dalam mengolah Lembar Jawab Komputer seperti berikut

Tuesday, August 25, 2015

How to convert byte to int without minus value

Perbedaan mendasar type data primitif di java seperti byte, int, long, double, dan yang lainnya harus dipahami dengan baik, penulis pernah mendapati sedikit masalah ketika ingin mengolah sebuah file data mentah yang dibaca kedalam sebuah type data primitive yaitu byte, seperti berikut

Saturday, August 1, 2015

Algoritma Dijkstra untuk Pencarian Jalur Terpendek



Telah banyak dibahas mengenai algoritma pencarian jalur terpendek yaitu algoritma semut, dijkstra. Penulis
Penulis mempunyai gambaran kasus diatas untuk mencari solusi tercepat (menggunakan teknik algoritma greedy) yaitu dijkstra sebagai visualisasi sebagai berikut


Tuesday, July 28, 2015

Visualisasi Filter Gabor untuk Ekstraksi Ciri

Filter gabor dikenal dengan ketahanan terhadap suatu rotasi, banyak kegunaan dari filter gabor yang salah satunya digunakan untuk ekstraksi fitur pada citra sidik jari dengan menggunakan teknik convolution fast forier transform. Penulis tidak membahas mengenai teknik convolution tetapi membahas mengenai filter gabor, persamaan matematis gabor sebagai berikut:

Dengan paramater sebagai berikut:

Theta, Lambda,Gamma, Sigma.


Friday, July 3, 2015

Decompose the image into bit-planes



Suatu citra digital yang mengandung kedalaman 256 warna atau 2^8 kombinasi warna pada format abu-abu dapat kita representasikan dalam multi level yang terdiri dari n-bit.
Misalkan saja kita mempunyai nilai pixel 190 yang bisa konversikan kedalam 8bit menghasilkan 10111110 dengan urutan bit 8-7-6-5-4-3-2-1
Nilai bit ke 8 disebut dengan the most significant bit-planes (MSB) yaitu bernilai 1 pada contoh diatas
Nilai bit ke 1 disebut dengan the least significant planes (LSB) yaitu bernilai 0 pada contoh diatas


Scrambler and descrambler pada Citra Digital

Scrambler seringkali didefinisikan sebagai dasar pengacak untuk menghilangkan urutan bit 1 dan 0 yang terlalu panjang. Ini biasanya digunakan pada rangkaian transimisi tanpa kabel. Misalnya rangkaian ekstraksi pulsa detak (clock recovery) pada sistem akan kehilangan fungsinya bila menerima urutan data “1” atau “0” yang sangat panjang, sehingga pada penerima dapat terjadi pendeteksian yang salah (http://www.elektroindonesia.com/elektro/tel36.html)

Saturday, June 27, 2015

Bit Plane Slicing untuk Steganografi

 Adalah teknik untuk menyembunyikan sebuah data menggunakan penyisipan bit. Penulis menggunakan matlab untuk menyembunyikan sebuah gambar dengan format grayscale. Hal yang perlu diperhatikan adalah untuk menyisipkan sebuah gambar maka harus dibuat mode BW atau black white yang berisi pixel 1 putih, 0 hitam seperti pada gambar berikut.

 
Dalam teknik ini, kita akan bekerja pada kedalaman 8 bit, misalkan kita mempunyai sebuah angka 168 yang mempunyai nilai bit 10101000 dengan urutan bit 87654321
Misalkan kita akan menggunakan LSB (least significant bit) yaitu bit no 1 akan diubah menjadi 1 sehingga menjadi


Monday, June 15, 2015

Python-Neural network backpropagation

Berkembangnya masalah nonlinear dalam dunia real dapat dipecahkan menggunakan teknik black box yaitu memandang suatu permasalahan hanya dengan melibatkan 2 buah komponen diketahui sebuah input dan outputnya sehingga tugas dari black box tersebut yaitu ‘menghubungkan’ antara keduanya menggunakan sebuah persamaan pendekataan – generalisasi yang disimpan dalam sebuah bobot. Biasanya para periset menggunakan neural network bisa disebut JST atau jaringan syaraf buatan. JST sendiri ada banyak jenisnya yaitu percepton, learning vector quantization, probabilistic neural network, feed forward backpropogation. 

Thursday, June 11, 2015

Segmentasi Warna Citra Digital dalam Nilai Range


Proses segmentasi citra digital menjadi persoalan rumit dalam format truecolor! Sehingga proses trial and error perlu dicoba!
Penulis menggunakan function inRange bawaan opencv untuk melakukan hal tersebut!
Agar lebih baik dan interactiv, penulis menggunakan aplikasi dalam bentuk GUI yaitu PyQT tentu dengan python sebagai bahasa favorit dalam kategori bahasa functional

Pada tampilan bawah berikut! Penulis menggunakan component slider untuk mengatur nilai range secara dinamis



Saturday, May 30, 2015

Algoritma Kriptografi simetris Hill Cipher

Kriptografi Simetris adalah : Kode Hill atau lebih dikenal dengan Hill cipher merupakan salah satu algoritma kriptografi kunci simetris dan merupakan salah satu kripto polyalphabetic. Hill cipher diciptakan oleh Lester S. Hill pada tahun 1929.

Teknik kriptografi ini diciptakan dengan maksud untuk dapat menciptakan cipher yang tidak dapat dipecahkan menggunakan teknik analisis frekuensi. Berbeda dengan caesar cipher, hill cipher tidak mengganti setiap abjad yang sama pada plainteks dengan abjad lainnya yang sama pada cipherteks karena menggunakan operasi matematika  pada dasar enkripsi dan dekripsinya


Friday, May 29, 2015

Deteksi Wajah menggunakan library opencv



Penulis hanya menulis ulang dari  http://fewtutorials.bravesites.com untuk digunakan kembali pada riset yaitu face recognition. Penulis sedang membuat aplikasi presensi (malah kadang disebut absensi) yang biasanya menggunakan mesin sidik jari, tapi ini diganti dengan wajah, sehingga kita membutuhkan 2 proses utama yaitu deteksi wajah dan pengenalan wajah. Untuk hardware nya menggunakan webcam saja. Penulis menggunakan beberapa pustaka seperti Aforget.Net, EmguCV, Opencv yang digabung menjadi 1 pada teknologi Net Framework. 


Pada tahap sejauh ini, penulis hanya menggunakan class dan function bawaan dari opencv untuk melakukan deteksi area wajah, sedangkan pada selanjut untuk pengenalan wajah menggunakan teknik lainnya. Kamu bisa melihat kita menggunakan webcam dan aplikasi secara langsung melakukan perhitungan untuk mendapatkan lokasi sebuah wajah.

Sunday, May 24, 2015

Transformasi Circle ke Rectangular pada Citra Iris



Kamu pasti sering lihat teknologi iris recognition bukan?
Dalam teknologi tersebut memanfaatkan ke unikan ciri dari sebuah citra mata, seperti berikut

Tuesday, May 19, 2015

Pengenalan Wajah dengan teknik PCA



Apakah pernah melihat film yang bercerita tentang betapa mudahnya sebuah komputer melakukan pelacakan sebuah wajah seseorang seketika dari ribuan database wajah. Salah satu teknologi olah citra dalam biometrika adalah pengenal wajah atau yang lebih dikenal dengan face recognition (berbeda dengan face detection - bila anda penggunan facebook akan ditemui pada fitur tag foto).







Teknologi face recognition berkembang begitu cepat seiring dengan berkembangnya teknologi komputasi dari sisi hardware nya. Secara garis besar teknologi face recognition dapat dibedakan dalam 2 hal yaitu berbasis tektur dan berbasis geometri (mengukur jarak bagian wajah seperti hidung, mata, mulut, dahi).

C# - Steganografi Pesan dengan Teknik Least Significant Bit-LSB

Teknik LSB (Least Significant Bit) sudah sangat luas digunakan untuk modifikasi sebuah bit-bit pixel untuk diganti dengan bit-bit pesan, dalam proses LSB nilai bit akhir yang dimodifikasi, penulis menggunakan .NET 4.0 dengan bahasa C# dan IDE sharp develop untuk mengimplementasikan teknik LSB.
Berikut alur dari teknik LSB yaitu, misalkan kita mempunyai string ‘C’ dan pixel citra yaitu 11,12,13,14,5,16,17,18
Diubah kedalam ASCII

Monday, May 18, 2015

Buku Pengolahan Citra Digital dengan Java - Gray Level Coocurance Matrix (GLCM)



UPDATE: 01 FEBRUARI 2019
BAHASA: JAVA
SYSTEM:
a. Windows 10
b. NetBeans IDE 8.0.2 (Build 201411181905)
c. Java: 1.8.0_111; Java HotSpot(TM) 64-Bit Server VM 25.111-b14

PENGANTAR:


Manusia mengenal tekstur seperti lembut dan kasar walaupun tangan tidak menyentuh benda tersebut, tapi otak mampu membedakan hal tersebut melalui visualisasi yang ditangkap oleh mata. Tekstur dapat dicirikan sebagai berikut

  1. Pengulangan pola dari variasi lokal sehingga membentuk kesatuan yang utuh
  2. Menyediakan informasi susunan spasial dari warna dan intensitas citra
  3. Dicirikan dengan distribusi spasial dari level intensitas dari nilai pixel ketetanggaan
  4. Tidak bisa didefinisikan sebagai suatu satu point / nilai tertentu karena merupakan sebuah pola / kesatuan


Lihatlah ilustrasi berikut tentang tekstur sebuah citra yaitu terdiri dari 50% hitam dan 50% putih






Tentunya uji statistik standar seperti mean, standar deviasi tidak akan mampu membedakan ketiga citra tersebut karena akan menghasilkan nilai yang sama. Seperti yang sudah dijelaskan bahwa tekstur merupakan suatu pengulangan pola dan distribusi spasial artinya ketiga citra tersebut mempunyai tingkat intensitas nilai pixel yang sama tapi mempunyai distribusi spasial yang berbeda.


Analisis tekstur merupakan salah satu metode untuk melakukan identifikasi atau klasifikasi suatu citra, analisis tersebut telah banyak digunakan dalam berbagai bidang yaitu uji tekstur wajah, mutu keramik, membedakan jenis daun dan dalam interpretasi suatu peta sehingga dapat diketahui jenis lahan.

#GLCM sebagai salah satu metode analisis tekstur

Gray-Level Co-occurrence matrix merupakan metode paling banyak digunakan untuk analisis tekstur. Metode ini diperkenalkan oleh Haralick di tahun 1973 yang merupakan bagian dari project yang didukung olah NASA yaitu tepatnya NASA Goddard Space Flight Center. Haralick menggunakan citra dari NASA ERTS untuk melakukan klasifikasi dengan tingkat akurasi diatas 80%.

Matrix GLCM dihitung dari nilai pixel yang berpasangan dan memiliki nilai intensitas tertentu. Misalkan d adalah jarak antara dua pixel yaitu (x1,y1) dan (x2,y2) dan Ѳ tetha didefinisikan sebagai sudut antara keduanya, maka matrix GLCM merupakan distribusi spasial dari Pd Ѳ (i,j). Banyak paper menuliskan berbagai versi tentang perhitungan GLCM terutama mengenai masalah sudut yang digunakan. Berikut adalah ilustrasi yang menggambarkan arah sudut dengan jarak 1 pixel dan ada 4 jenis sudut yang digunakan:
  • 0=180;
  • 45=225,
  • 90=270, dan
  • 135=315

tapi terkadang ada yang menyatakan terdiri dari 8 arah, hal ini terjadi karena antara sudut 0o dan 180o dianggap berbeda begitu juga dengan arah sudut yang lainnya






#Perhitungan 7 fitur utama

[1] Angularsecond moment/uniformity/energy
Mengukur tentang keseragaman atau sering disebut angular second moment. Energy akan bernilai tinggi ketika nilai pixel mirip satu sama lain sebaliknya akan bernilai kecil menandakan nilai dari GLCM normalisasi adalah heterogen. Nilai maksimum dari energy adalah 1 yang artinya distribusi pixel dalam kondisi konstan atau bentuk nya yang berperiodik (tidak acak).




[2] Entropy
Mengukur kompleksitas(keacakan) citra. Entropy akan bernilai tinggi ketika citra tidak seragam.



[3] Dissimilarity
Mengukur ketidakmiripan suatu tekstur, yang akan bernilai besar bila acak dan sebaliknya akan bernilai kecil bila seragam.

[4] Contrast/inertia
Mengukur frekuensi spasial dari citra dan perbedaan moment GLCM. Perbedaan yang dimaksudkan adalah perbedaan tinggi dan rendah nya pixel. Contrast akan bernilai 0 jika pixel ketetanggaan mempunyai nilai yang sama.


[5]Correlation
Mengukur linearitas (the joint probability) dari sejumlah pasangan pixel (pairs).

[6] Homogeneity/inversedifference moment
Mengukur homogenitas. Nilai ini sangat sensitif terhadap nilai disekitar diagonal utama. Bernilai tinggi ketika semua pixel mempunyai nilai yang sama / seragam. Kebalikan dari contrast yaitu akan bernilai besar jika mempunyai nilai pixel yang sama pada saat energy bernilai tetap.



[7] Autocorrelation
Mengukur correlation diantara garis diagonal utama.


Untuk lebih jelasnya bisa kunjungi link berikut yang telah ditulis ulang ke bahasa C#
http://www.softscients.web.id/2018/10/bab-5-analisis-tekstur.html


DATASET:


Untuk dataset, kita mencoba untuk versi simple saja untuk menghitung GLCM dari Feature dari sebuah array berikut

 int [][] data = new int[][] {
 { 0,   0,   1,   2 },
 {2,   0,   2,   0 },
 {1,   0,   0,   2 },
 {2,   0,   1,   1 }
  };      
 


Dengan nilai maksimal array adalah 2, dan sudut yang akan hitung adalah 0

GLCM glcm = new GLCM();
int maksimal = 2; //karena nilai 
glcm.process(data,GLCM.SUDUT_0,2);

Hitung feature GLCM

FeatGLCM fitur = new FeatGLCM();
fitur.process(glcm.getT());//matrix normalisasi
System.out.println("Fitur");
System.out.println("Autocorrelation : " + fitur.getAutocorrelation());
System.out.println("Contrast : " + fitur.getContrast());
System.out.println("Correlation : " + fitur.getCorrelation());
System.out.println("Dissimilarity : " + fitur.getDissimilarity());
System.out.println("Energy : " + fitur.getEnergy());
System.out.println("Entropy : " + fitur.getEntropy());
System.out.println("Homogen : " + fitur.getHomogen());

Kode lengkapnya sebagai berikut

import glcm.FeatGLCM;
import glcm.GLCM;
public class DemoConsole {
    public static void main(String[] args) {
        // TODO code application logic here
        int [][] data = new int[][] {
                    { 0,   0,   1,   2 },
                    {2,   0,   2,   0 },
                    {1,   0,   0,   2 },
                    {2,   0,   1,   1 }
                  };
        GLCM glcm = new GLCM();
        int maksimal = 2; //karena nilai 
        glcm.process(data,GLCM.SUDUT_0,2);
        
        FeatGLCM fitur = new FeatGLCM();
        fitur.process(glcm.getT());//matrix normalisasi
        System.out.println("Fitur");
        System.out.println("Autocorrelation : " + fitur.getAutocorrelation());
        System.out.println("Contrast : " + fitur.getContrast());
        System.out.println("Correlation : " + fitur.getCorrelation());
        System.out.println("Dissimilarity : " + fitur.getDissimilarity());
        System.out.println("Energy : " + fitur.getEnergy());
        System.out.println("Entropy : " + fitur.getEntropy());
        System.out.println("Homogen : " + fitur.getHomogen());
    }
}

Output

Fitur
Autocorrelation : 2.75
Contrast : 2.0
Correlation : -0.45454545454545453
Dissimilarity : 1.1666666666666667
Energy : 0.15625
Entropy : 1.9439903027667307
Homogen : 0.49999999999999994

Untuk versi pengolahan gambar, agar lebih mudah telah dibuatkan GUI

 PUSTAKA GLCM:




Kode GLCM tidak memerlukan library tambahan karena ditulis sendiri.

Friday, May 8, 2015

Grouping Text in OCR



Dalam algoritma OCR, hal yang tak kalah penting adalah menentukan sebuah kumpulan huruf termasuk sebuah kalimat atau bukan! Penulis memberi tanda garis warna merah sesuai dengan kumpulan kalimat!

Sunday, May 3, 2015

Python-Percepton Dataset Non Linear

Penulis mencoba menggunakan teknik percepton sebagai teknik klasifikasi secara linear! Cara kerja hampir sama seperti SVM tapi lebih mudah!
 




Persamaan dasarnya adalah 
y = x1*w1+x2*w2+b, if y>=0, then +1
else -1

Saturday, May 2, 2015

Move Membuat list directory dengan extension di python


Seiring dengan meningkatnya traffic dan kemudahan dalam mengelola content, kami mengucapkan banyak terima kasih kepada para pembaca setia pada blog www.softscients.web.id

Per 19 Maret 2020, kami sedang melakukan migrasi ke domain dan hosting yang lebih baik yaitu
Semoga dengan alamat domain dan hosting terbaru akan semakin memudahkan para pembaca dalam mencari materi/content. Migrasi dilakukan secara bertahap yang membutuhkan waktu yang cukup lama jadi jangan kuatir selama migrasi akan dilakukan secara hati-hati untuk memimalkan broken link


kalian bisa lanjut baca lagi di  http://softscients.com/2020/03/30/buku-pemrograman-python-list-file-dengan-extension/


Penulis bekerja dengan banyak data dalam proses pengujian suatu algoritma, misalkan saja dengan mudahnya meletakan ratusan file gambar kedalam satu folder kemudian diolah one by one untuk menghasilkan ciri fitur dan menyimpan nya dalam bentuk format csv. Tapi kali ini penulis hanya membahas cara me list suatu direktory/folder dengan sebuah extension, misakan saja untuk melihat suatu daftar file *.jpg
print daftar('.','jpg')
['A01.jpg', 'A02.jpg', 'A03.jpg', 'A04.jpg', 'A05.jpg', 'B01.jpg', 'B02.jpg', 'B03.jpg', 'B04.jpg', 'B05.jpg', 'C01.jpg', 'C02.jpg', 'C03.jpg', 'C04.jpg', 'C05.jpg']
Penulis sajikan code nya yaitu

Friday, May 1, 2015

Fungsi Limit Aljabar

Bagi kamu yang ingin belajar mengenai limit, bisa berkunjung ke
http://soulmath4u.blogspot.com/2014/01/limit-fungsi-aljabar.html
Limit dan Turunan akan sering digunakan dalam memecahkan persoalan dalam machine learning!
Sehingga membutuhkan dasar pengertian matematika aljabar  
Turunan
https://fanzdirectory.wordpress.com/2013/10/03/turunan-fungsi/

Thursday, April 30, 2015

Kumpulan E-book Python


Kamu ingin belajar bahasa functional yang keren dan powerfull yaitu python!
Penulis akan memberikan link berikut:
http://musaamin.web.id/ebook-belajar-pemrograman-python-dasar/
https://dl.dropboxusercontent.com/u/17443462/ebook/poss%20upi%20press%20-%20python%20dasar%20-%2017.pdf

VB.net does not support unsafe code

Walau sama-sama menggunakan teknologi-platform NET, ternyata ketika penulis sedang mendapatkan kerjaan untuk mengerjakan sebuah operasi kriptografi dan steganografi yang melibatkan beberapa komputasi sampai ketingkat biner, ternyata kendala pada compliance yaitu C# dan VB#. Penulis menjumpai ketika sedang melakukan include code dengan C# (*.dll) untuk digunakan oleh aplikasi berbasis VB#, penulis menjumpai bahwa usafe itu tidak didukung oleh VB#
http://stackoverflow.com/questions/5915874/how-can-i-use-unsafe-code-in-vb-net
http://www.vbforums.com/showthread.php?562397-RESOLVED-How-to-use-unsafe-C-function-in-VB

Setelah mencari referensi kesana-kemari dapat disimpulkan VB.net does not support unsafe code sehingga terpaksa porting ulang. Terkadang ketika penulis telah membuat code di C# kemudian di porting ulang ke VB, pun bisa-bisa menghasilkan output yang berbeda! untuk menjembatani hal tersebut, maka code C# akan dibuat library (*.dll) yang akan digunakan oleh VB#

Referensi Lain

More significantly, C# gives programmers the option of using pointers. Pointers are variables which refer or ‘point’ to specific locations in memory. They are so widely used in C and C++ that many programmers may find it difficult to conceive of programming without them.
The trouble with pointers is that they are inherently unsafe. They make it easy to corrupt memory, overwrite data and crash your applications. C# discourages the use of pointers but doe permit their use within blocks of code marked with the unsafe directive.
Code marked with the unsafe directive is ‘unmanaged’. This means that it is run as native machine code without benefiting from the services of the CLR. The use of pointers may be useful for certain special programming tasks that require the direct manipulation of memory or interaction with COM. In most cases, however, the .NET Framework provides all the services your program requires without having to resort to the hazards of unmanaged code. VB.NET is more restrictive than C# in this respect. It does not permit the use of unsafe code under any circumstances.
Even so, it is not quite true to say that pointers can never be used. VB.NET provides access to pointers using the IntPtr type. This allows a limited range of pointer operations. For example, an IntPtr variable can be used to store a handle to a file or a window.
If you prefer to program in VB.NET but have an occasional need to use pointers, you can, of course, add a C# or even a C++ project to your solution in order to do all the ‘dirty work’.






http://blog.mattmags.com/2005/03/31/choosing-between-c-and-vb-net/

Penulis lebih suka menggunakan C# karena selain case sensitif juga sintaks mirip C/C++, java daripada delphi dan VB#

Monday, April 27, 2015

Buku Pengolahan Citra Digital dengan Python dan OpenCV - Operasi Histogram Equalization


Seiring dengan meningkatnya traffic dan kemudahan dalam mengelola content, kami mengucapkan banyak terima kasih kepada para pembaca setia pada blog www.softscients.web.id

Per 19 Maret 2020, kami sedang melakukan migrasi ke domain dan hosting yang lebih baik yaitu
Semoga dengan alamat domain dan hosting terbaru akan semakin memudahkan para pembaca dalam mencari materi/content. Migrasi dilakukan secara bertahap yang membutuhkan waktu yang cukup lama jadi jangan kuatir selama migrasi akan dilakukan secara hati-hati untuk memimalkan broken link


kalian bisa lanjut baca lagi di  http://softscients.com/2020/03/30/buku-pengolahan-citra-digital-dengan-python-dan-opencv-operasi-histogram-equalization/





Perbaikan citra atau yang biasa disebut image enhancement adalah proses perbaikan kualitas citra atau gambar dengan cara memanipulasi parameter-parameter citra. dengan adanya perbaikan citra maka ciri-ciri khusus yang terdapat di dalam citra lebih ditajamkan. Salah satu operasi perbaikan citra format grayscale adalah histogram equalizationperataanhistogram. Disadur dari http://angeljohnsy.blogspot.com/2011/04/matlab-code-histogram-equalization.html





 












Terlihat bahwa operasi perataan histogram dapat bekerja dengan baik Buat kamu yang suka mempelajari code nya, penulis membuat code berdasarkan algoritma diatas, tentu menggunakan bahasa functional yaitu python



import cv2
import numpy as np
from  matplotlib import pyplot as plt
#oleh mulkan.ms@gmail.com
#www.softscients.web.id
def perataanHistogram(A):    
    nilai_bin = 255 #angka value pixel maximal!
    A = A+1 #agar terhindari dari pixel bernilai 0
    [frekuensi,value] = np.histogram(A,bins=nilai_bin) #langkah 2
    cumulatif_histogram = frekuensi.cumsum() #langkah 3
    [baris,kolom] = A.shape
    probabilty_frekuensi = np.round((cumulatif_histogram/float(A.size))*nilai_bin) #langkah 4 dan 5
    B = np.empty(A.shape)    
    for i in range(0,baris):
        for j in range(0,kolom):
            B[i,j] = probabilty_frekuensi[A[i,j]-1] #langkah 6
    return B

I = cv2.imread('pohon.bmp')
gray = cv2.cvtColor(I,cv2.COLOR_BGR2GRAY) #ubah ke format gray
hasil = perataanHistogram(gray)
plt.figure('perataan histogram! www.softscients.web.id')
plt.subplot(1,2,1),plt.imshow(gray,cmap='gray'),plt.title('gray')
plt.subplot(1,2,2),plt.imshow(hasil,cmap='gray'),plt.title('perataan histogram')
plt.show()