Deteksi Warna dengan Jarak Euclidean

[peng.citra|t.kom|lab.hardware|pert.6]

Sistem cerdas membutuhkan teknik agar peralatan dapat membedakan satu warna dengan warna lainnya. Teknik termurah dan termudah adalah dengan jarak Euclidean. Perhitungannya menggunakan rumus jarak dua titik koordinat (dua, tiga, dan dimensi-n) yang mirip garis miring Phytagoras. Sebagai kelanjutan dari pertemuan 5 yang lalu, tambahkan tombol pushbutton disertai edit text untuk melihat komposisi RGB sebuah citra.

Agar ukuran dan format sama dengan tombol-tombol yang lain, kita boleh meng-copy paste tombol dan isian lainnya. Jika sudah simpan dan tambahkan tiga buah warna yang akan diuji. Buat saja dengan menggunakan paint pada Windows. Simpan dalam format JPG agar lebih mudah karena kebanyakan citra dibuat dalam format ini.

Mencari Nilai Terbesar RGB

Salah satu teknik termudah menebah warna sebuah citra adalah dengan mencari nilai terbesar. Cara ini tentu banyak kelemahannya, khususnya untuk warna komposit (gabungan) seperti kuning, ungu, orange, dan lain-lain. Namun, teknik ini tetap digunakan ketika menggunakan jarak Euclidean, tetapi menggunakan fungsi mencari nilai terkecil (kebalikannya). Kode berikut diletakan di Callback deteksi warna.

  • fR=handles.y(:,:,1);
  • fG=handles.y(:,:,2);
  • fB=handles.y(:,:,3);
  • fr=mean(mean(fR));
  • fg=mean(mean(fG));
  • fb=mean(mean(fB));
  • % mencari terbesar
  • warna=[fr fg fb]
  • strwarna={‘merah’ ‘hijau’ ‘biru’}
  • [maks,indeks]=max(warna)
  • outwarna=strwarna(indeks)
  • set(handles.edit4,’String’,outwarna)
  • set(handles.edit5,’String’,fr)
  • set(handles.edit6,’String’,fg)
  • set(handles.edit7,’String’,fb)

fR, fG dan fB adalah berturut-turut matriks citra merah, hijau dan biru. Sementara fr, fg, dan fb nilai rata-rata ekstrak warna dari citra. Perhatikan bagian % mencari nilai terbesar b di atas. Di sini digunakan fungsi max. Fungsi set di akhir fungsi mengirim jawaban yang merupakan warna yang ditebak oleh sistem ke edit text4 dalam contoh ini.

Menggunakan Jarak Euclidean

Jarak Euclidean lebih “ampuh” karena mampu mendeteksi warna komposit dengan menghitung jaraknya dari warna-warna yang jadi patokan/kelas. Sebagai latihan, patokannya misal dianggap sama yaitu merah, hijau dan biru. Pada prakteknya bisa saja merah, kuning dan hijau seperti lampu lalu-lintas.

Tambahkan satu tombol pushbutton “Deteksi Warna (Euclidean)” untuk membedakan dengan tombol sebelumnya yang hanya menggunakan nilai maksimal RGB.

Sebagai ilustrasi, nilai X tentu saja dengan nilai terbesar akan ditebak masuk kategori R. Tetapi di sini kita menghitung terlebih dahulu jaraknya terhadap R, G, dan B lalu dibandingkan mana jarak terkecilnya. Rumus Euclidean adalah mirip sisi miring Phytagoras:

Silahkan menggunakan rumus di atas, atau bisa menggunakan fasilitas fungsi norm pada Matlab yang artinya “normal Euclidean”. Berbeda dengan fungsi max untuk mencari nilai maksimum, untuk mencari nilai minimum dapat menggunakan fungsi min. Ok, masukan kode ini pada tombol “Deteksi Warna (Euclidean)”.

  • warna=[fr fg fb]
  • dR=norm(warna-[255 0 0])
  • dH=norm(warna-[0 255 0])
  • dB=norm(warna-[0 0 255])
  • hasil=[dR dH dB]
  • % mencari jarak terkecil
  • strwarna={‘merah’ ‘hijau’ ‘biru’}
  • [minimum,indeks]=min(hasil)
  • outwarna=strwarna(indeks)
  • set(handles.edit4,’String’,outwarna)
  • set(handles.edit5,’String’,fr)
  • set(handles.edit6,’String’,fg)
  • set(handles.edit7,’String’,fb)

Uji dengan me-run GUI yang baru saja diisi kode-nya. Pastikan sistem bisa menebak warna. Selamat Ber-praktikum.

Sumber Inspirasimu Ada di Sekitar

Teman/Guru

Pergaulan kita memang sangat mempengaruhi perkembangan jiwa kita. Apa corak yang mewarnai diri kita sangat ditentukan oleh teman. Bahkan di Islam dikatakan bahwa “seseorang mengikuti agama temannya ..”. Jadi peran teman, apalagi sahabat sangat menentukan bentuk pribadi kita. Mungkin agama lain memiliki prinsip yang sama. Postingan ringan ini sedikit berbagi pengalaman hal-hal yang mempengaruhi atau menginspirasi hidup saya yang mungkin ada kemiripan dengan pembaca sekalian.

Banyak teman yang menginspirasi saya. Dampaknya sangat luar biasa, mengalahkan sumber-sumber inspirasi lain karena sifatnya yang “live”, berbeda dengan sumber-sumber lain yang sedikit ada campuran rekayasa. Setidaknya kita kurang percaya. Bandingkan Anda melihat maling secara langsung dengan lewat berita di koran, di radio, di televisi atau internet. Atau melihat hantu .. upss.

Banyak guru atau dosen yang menginspirasi. Entah karena kepintaran, skill, atau sekedar sifat baiknya, tutur kata, dan hal-hal menarik lainnya. Bagaimana yang sudah selesai sekolah? Silahkan cari sumber-sumber lain, entah di asosiasi, pertemuan-pertemuan ilmiah dan sejenisnya. Pasti ada satu, dua yang bisa memacu kita untuk maju.

Film

Ya, yang satu ini mau tidak mau pasti dialami oleh sebagian besar anak kecil, terutama seumuran saya, maksimal. Maksudnya maksimal adalah saya sudah mengalami nonton film walaupun di TVRI waktu itu. Generasi seusia orang tua saya tentu saja belum ada, entah mungkin tontongan wayang kulit/golek atau ketoprak bisa saja mirip pengaruhnya. Waktu kecil ketika teman sebaya saya mengagumi sebuah tokoh jagoan, saya malah tertarik dengan orang tua berkacamata tebal, dan biasanya berjenggot lebat. Siapakah dia? Dia lah yang saya kagumi, seorang profesor. Seseorang yang mensuport si jagoan, bahkan mampu menciptakan robot yang bisa berubah-ubah. Generasi milenial tentu saja sulit dibayangkan dampaknya mengingat informasi sudah berkembang dengan cepat dan murah. Lewat youtube, seorang anak bisa menikmati beragam tontonan yang diinginkan tanpa menunggu jadwal dan duduk manis menikmati acara.

Bacaan

Bacaan paling berkesan bagi seorang anak adalah bacaan ketika kecil. Generasi 80-an pasti mengenal “ini ibu budi”. Untuk masalah keagamaan pasti mengenal juga “juz ama” yang sulit dipelajari waktu itu ketika teknik iqra belum ada. Sayangnya bacaan pelajaran di sekolah jarang yang menginspirasi. Untungnya beberapa guru bisa menginspirasi, tentu saja yang ringan tangan. Maksudnya gemar membantu dan membimbing, bukan meng … silahkan isi sendiri.

Untuk yang terakhir ini, agak unik. Dibilang sangat berpengaruh juga tidak, karena kalah dengan sumber yang lain. Tetapi dibilang tidak berpengaruh juga tidak. Lihat saja berita hoax yang saat ini marak kebanyakan dari tulisan yang dibaca. Mungkin karena kurangnya orang kita membaca lebih lanjut jadi mencari bacaan yang instan yang biasanya diperoleh di medsos. Bacaan juga memiliki keunggulan dibanding sumber yang dibahas di awal, yaitu jumlah informasi yang didapat tiap waktu lebih banyak. Teman mungkin bercengkerama beberapa jam, film juga, tetapi buku bisa berjam-jam dan tidak perlu urut/serial seperti film. Makanya, malaikat Jibril kabarnya gemas ketika menyuruh nabi membaca dan ternyata memang waktu itu nabi tidak bisa membaca. Kita yang bisa membaca karena memang disekolahkan sejak kecil tetapi malas membaca sepertinya Jibril a.s lebih gemas lagi, apalagi sampai percaya berita hoax.

Deteksi Tepi dengan Matlab

[peng.citra|t.kom|lab.hardware|pert.5]

Di antara deteksi lainnya, seperti titik dan garis, deteksi tepi sangat bermanfaat untuk mengetahui suatu objek secara pasti dan terpisah dari objek lainnya, misalnya background. Pertemuan kali ini sedikit membahas metode-metode deteksi tepi yang terkenal antara lain: sobel, prewitt, dan robert. Untuk itu lanjutkan proyek sederhana pertemuan yang lalu dengan menambahkan satu panel berisi tiga pushbutton: sobel, prewitt, dan robert.

Konversi ke Gray

Deteksi tepi bermain dengan intensitas brightness. Ketika langsung mengakses gambar berwarna RGB ada pesan kesalahan. Perlu merubah terlebih dahulu citra yang diambil dari pushbutton “Ambil Citra” menjadi gray. Copas saja kode pada tombol “Konversi ke Gray” dan masukan ke “Sobel”.

  • z=rgb2gray(handles.y);
  • [g,t]=edge(z,’sobel’)
  • axes(handles.axes2)
  • imshow(g)

Silahkan lihat tatacara penggunaan fungsi edge dengan mengetik “help edge” pada command window. Untuk metode Prewitt dan Robert, caranya sama hanya saja menggunakan parameter berturut-turut ‘prewitt’ dan ‘robert’.

Perhatikan ada noise yang tertangkap. Biasanya sebelum deteksi tepi beberapa manipulasi terhadap citra original-nya diperlukan, misalnya filter dengan fungsi imfilter. Selamat mencoba, semoga bermanfaat.

Jika Ingin Dibutuhkan, Jadilah Server yang Baik

Yang pernah belajar jaringan pasti mengenal istilah client-server dan peer-to-peer. Istilah yang menggambarkan jenis hubungan antara satu titik/perangkat dengan perangkat lainnya yang biasanya sebuah komputer. Server yang merupakan komponen utama jaringan client-server memberikan layanan-layanan yang sangat dibutuhkan oleh client. Di dalam literatur komputasi, server cukup unik, di satu sisi sebagai pemimpin dan raja, di sisi lain memberikan layanan-layanan kepada bawahannya, dalam hal ini client. Memimpin tetapi juga melayani, alias sebagai pelayan.

Saya termasuk generasi X (generasi yang berusia 38-53 tahun ketika tulisan ini dibuat) yang sempat mengalami masa krisis ekonomi di tahun 98. Jangankan memperoleh pekerjaan, yang sudah bekerja saja banyak yang menganggur. Sempat beberapa kali melamar pekerjaan, tetapi perusahaan-perusahaan yang dituju “tidak membutuhkan”. Artinya tidak bisa membutuhkan “layanan” dari saya, atau setidaknya sudah ada orang lain yang terpilih. Ada sedikit paradox waktu itu, ketika negara krisis, sejatinya membutuhkan pelayan=pelayan yang bisa mengurangi atau mengatasi krisis, tetapi banyak tenaga-tenaga muda yang tidak bisa/berkesempatan melayani. Waktu berjalan, akhirnya beberapa lembaga membutuhkan layanan saya, dari kampus hingga perusahaan-perusahaan.

Jaman berubah, era dimana informasi tidak/belum berkembang cukup baik di tahun 90-an menjadi era dimana informasi datang secepat kilat. Bila suatu hal butuh beberapa hari untuk tersebar, saat ini hanya dalam hitungan detik bisa menyebar. Tentu saja jika “hal” tersebut dibutuhkan orang banyak. Lembaga yang bisa melayani kebutuhan akan menjadi kuat, sebaliknya yang abai terhadap pelayanan akan tergusur. Era itu saat ini dikenal dengan istilah “disrupsi”. Komplain, keterlambatan, dan kekecewaan-kekecewaan lain yang dirasakan konsumen akan berakibat fatal. Jangankan bisnis yang penuh saingan, bisnis yang tanpa saingan pun akan hancur karena muncul jenis bisnis baru yang memenuhi aspirasi para konsumen.

Beberapa perusahaan bisnis yang saat ini eksis, merupakan perusahaan-perusahaan yang pernah trauma dengan krisis ekonomi. Beberapa bisa eksis bahkan bergerak maju karena permintaan dan suplier yang memang berlebihan dan murah waktu itu (tenaga kerja). Misalnya kampus-kampus, bahkan sangat membutuhkan tenaga pengajar. Saya sendiri mengalami masa di mana siangnya bekerja, malamnya mengajar di kampus. Prinsipnya tetap sama, ketika ada permintaan layanan, ada pula yang menyediakan/menawarkan.

Pertarungan Tak Terhingga (Infinity War)

Ada dua jenis pertarungan, terhingga dan tak terhingga. Contoh pertarungan terhingga adalah pertandingan sepakbola. Ketika waktu habis dan satu tim unggul selisih gol, maka pertarungan berakhir. Di sini dalam kompetisi persaingan sudah jelas, yaitu antar klub. Tetapi dalam bisnis, pertarungannya adalah tak terhingga. Tidak ada yang menang dan kalah, melainkan tetap bermain atau berganti permainan. Bangkrut pun bukan kalah, karena pemainnya bisa bermain lagi, tetepi tidak di pertandingan yang sama. Ketika instagram diambil alih oleh Facebook, instagram tidak bisa dikatakan kalah, melainkan pemilik lamanya berganti permainan. Perhatikan saat ini banyak institusi pendidikan yang merger atau berganti pemilik. Di sini tidak bisa dikatakan kalah, melainkan pemilik lama berganti permainan, alias tidak tertarik lagi memainkan laga di pertandingan yang sama (mengelola kampus)

Dalam pidato-nya di Bali, presiden Jokowi mengingatkan dunia agar janganlah seperti “game of throne” dimana pertandingan bersifat saling menaklukan seperti pertandingan terhingga. Satu untung berarti yang lain rugi. Padahal jika memakai prinsip jaringan komputer client-server jika ada yang membutuhkan maka perlu ada yang melayani. Client itu sendiri sejatinya adalah server bagi pengguna/user yang memakai piranti tersebut. Bagi rekan-rekan yang bekerja, selalu ingat prinsip melayani tersebut. Anda melayani dan sekaligus juga membutuhkan layanan orang lain. Anggaplah pertandingan tak terhingga di perusahaan tempat Anda bekerja. Jangan anggap jabatan yang diturunkan atau bahkan dipecat sebagai kekalahan, melainkan berhenti dan melanjutkan permainan di medan pertandingan menarik lainnya, selama nafas masih ada. Bisa jadi itu merupakan arahan tuhan agar kita berganti permainan, atau setidaknya mengarahkan ke tangga lainnya untuk maju, alias tidak “ngono-ngono thok” (gitu-gitu aja). Bagaimana agar bisa optimal dalam melayani? Tidak ada cara lain dengan terus “mengasah pedang” dan “melatih jurus-jurus” layaknya seorang samurai. Sehingga lebih optimal melayani dan client puas, yuk jadi server yang handal.

 

Membuat Kunci Komposit

[basis.data|akuntansi|lab.software|pert.4]

Kunci komposit adalah kunci yang merupakan gabungan dari beberapa field. Misalnya mahasiswa yang mengambil beberapa kelas mata kuliah dan kelas mata kuliah yang memiliki beberapa mahasiswa. Hal itu akibat dari hubungan/relasi Many-to-Many yang mengharuskan dibentuk satu tabel baru (Lihat Post sebelumnya). Untuk membuat kunci komposit pada Ms Access, gunakan SHIFT ketika menyorot field-field yang akan dijadikan primary key. Setelah itu tekan simbol key.

Instal Lex and Yacc untuk Praktikum Teknik Kompilasi

[tek.kompilasi|tek.informatika|s.103|pert.6]

Compilers and language atau yang di Indonesia dikenal dengan mata kuliah teknik kompilasi merupakan materi dasar ilmu komputer, teknik informatika atau sistem komputer. Isinya adalah seluk beluk bagaimana compiler bekerja dari saat scanning, parsing, hingga menghasilkan output dalam bahasa mesin (komputer).

Peran Kompiler

Dahulu, teori-teori kompilasi yang berasal dari teori automata dan grammar dapat diibaratkan “fardhu kifayah”. Hanya segelintir yang tertarik, karena fokusnya adalah menciptakan compiler yang handal dan interaktif, dimana tiap kesalahan dapat diketahui letak kesalahannya. Level mahasiswa doktoral yang biasanya mengutak-atik bidang ini.

Namun saat ini dengan makin memasyarakatnya bidang pemrograman, para pemerhati kompiler berusaha membuat compiler yang bahkan mensuport para anak-anak yang tertarik dengan bahasa pemrograman. Munculnya bahasa-bahasa baru seperti Groovy, Rust, Elixir, Go, Swift, Arduino, Kotlin, dan bahasa pemrograman untuk Android. Android sendiri sangat mensuport Kotlin yang merupakan bahasa pemrograman yang dirancang dalam rangka mengisi kelemahan-kelemahan Java.

Lex and Yacc

Lex yang merupakan Lexical Analyzer Generator bermaksud men-scan kode yang ditulis. Sementara pasangannya Yacc (yet another compilers compiler) berfungsi melakukan parsing berdasarkan grammar. Dengan lex and yacc ini kita dapat membuat kompiler sendiri yang akan memerintahkan komputer menjalankan instruksi sesuai keinginan kita. Misalnya jika dalam bahasa pemrograman rata-rata menggunakan kata “if-else”, maka kita bisa saja menggantinya menjadi “jika-maka” setelah mengaturnya dengan Lex and Yacc ini. Silahkan unduh sourcecode nya lewat Google, lalu instal.

Instalasi

Lex and Yacc dapat berjalan di banyak platform. Untuk mudahnya di sini akan kita coba pada Windows 10. Setelah memperoleh kode sumbernya, klik ganda hingga muncul informasi bahwa akan diinstal Lex and Yacc.

Tekan saja Next> untuk lanjut ke menu persetujuan. Tekan saja Agree.

Berikutnya, Lex and Yacc akan meminta folder tempat program diinstal. Arahkan sesuai dengan keinginan, atau biarkan secara default dengan menekan Next>.

Berikutnya instalasi menanyakan lokasi menu folder Lex and Yacc nantinya. Biarkan secara default saja.

Akhirnya setelah menekan tombol Install maka proses instalasi akan berjalan hingga selesai. Hanya butuh satu hingga beberapa menit.

Pastikan instalasi lengkap dan tombol Finish muncul. Centang jika ingin langsung menjalankan aplikasi ini.

Akan muncul konsol dos (CMD) ketika aplikasi ini berjalan. Tunggu sesaat.

Jika sudah muncul tampilan seperti gambar di bawah berarti Lex and Yacc sudah siap untuk digunakan. Silahkan cari tatacara penggunaannya, bahkan ada juga yang menyediakan sampel programnya. Selamat mencoba.

Menghitung Jumlah Kalimat dengan Regular Expression

[perolehan.inf|t.kom|lab.soft|per.4]

Jumlah kalimat dihitung berdasarkan jumlah stop indicator, dalam hal ini berupa simbol titik. Tentu saja ada beberapa kondisi khusus, misalnya ketika merepresentasikan sebuah bilangan, maka titik tidak dianggap sebagai stop condition. Termasuk juga untuk penunjukan bab atau referensi dalam tanda kurung.

Lanjutkan proyek sederhana perhitungan jumlah kata yang telah dibahas pada pertemuan yang lalu. Tambahkan sebuah tombol pushbutton dan edit text, masing-masing untuk perintah eksekusi dan mengeluarkan/mepresentasikan hasil eksekusi.

Fungsi Find

Silahkan ketik “help find” pada command window untuk mempelajari aturan penulisannya. Dengan melakukan kode di bawah ini pada fungsi Jumlah Kalimat = dapat diketahui lokasi dan jumlah titik yang dimiliki suatu string.

  • titik=find(handles.str==’.’)         %mencari lokasi karakter “.” berada
  • [baris,jlhtitik]=size(titik)            %mencari jumlah titik yang ditemukan
  • set(handles.edit3,’String’,jlhtitik)    %mengeluarkan jawab berapa banyak titik/sekaligus jlh kalimat

Perhatikan gambar di atas. Karena ada dua titik maka terhitung jumlah kalimatnya dua. Bagaimana jika ada titik yang ternyata bukan akhir sebuah kalimat, misalnya sub-bab atau angka decimal, dan lain-lain?

Fungsi Regular Expression (REGEXP)

Fungsi ini bermaksud mencari berdasarkan karakter (huruf per huruf). Fungsi ini digunakan ketika mencari kasus kusus jika ada angka dengan titik di dalamnya yang tidak dihitung sebagai stopping suatu kalimat.

  • titik=find(handles.str==’.’)            %menemukan karakter titik
  • [baris,jlhtitik]=size(titik)                %menghitung banyaknya titik
  • pat = {‘(\d)+[.]’};                    %keyword
  • angkatitik=regexp(handles.str,pat,’match’)    %mencari angka dengan titik
  • angka=angkatitik{1}                %mengeluarkan isi cell
  • [baris,jlhangka]=size(angka)            %menghitung berapa banyak angka-titik
  • jlhtitik=jlhtitik-jlhangka                %mengurangkan jlh titik
  • set(handles.edit3,’String’,jlhtitik)        %mengirim hasil pemrosesan teks

Instruksi pat={‘\d+[.]’) bermaksud mempersiapkan keyword fungsi regexp. Simbol \d+ maksudnya mencari angka desimal (simbol “d”) yang bersisian dengan titik (simbol “[.]”). Perhatikan titik harus dilingkupi dengan kurung kotak “[ ]” yang mengharuskan regexp menyamakan dengan karakter di dalam kurung tersebut, dalam hal ini titik.

Suatu string “Perhatikan gambar 3.2 di bawah ini.” jika menggunakan kode tambahan di atas akan menghasilkan jumlah kalimat yang tepat walaupun ada dua titik di sana karena titik yang berdekatan setelah angka dianggap bukan akhir kalimat. Tentu saja ada masalah jika string “Perhatikan gambar 3.”. Maka harus dibuat kode tambahan agar titik tersebut dianggap akhir kalimat, silahkan coba buat kode-nya sendiri untuk mengatasi hal tersebut.

Membuat Satu Halaman Landscape Pada Sebuah Naskah

[komputer1|psikologi|lab.soft|pert4]

Terkadang satu halaman karena berisi tabel yang melebar agar terlihat jelas dibutuhkan format landscape. Karena hanya satu lembar/page yang landscape maka diperlukan format section agar section lainnya tidak terpengaruh oleh format landscape-nya.

Menggunakan Fungsi Section Breaks

Format ini memisahkan satu section dengan section lainnya. Letakan kursor pada bab yang akan dibedakan section-nya. Lanjutkan dengan menu Page Layout Breaks Section Breaks dan lanjutkan memilih Next Page jika belum pindah halaman dan Continuous jika sudah pindah halaman.

Jika sudah selesai pastikan Section terpisah, misal section 1 dan section 2. Kemudian pada page/lembar berikutnya lakukan cara yang sama, sehingga section 2 yang akan landscape terpisah dengan section 1 dan section 2 yang portrait.

 

 

Kemudian lakukan hal yang sama untuk section 3. Jadi urutannya section-1, Section 2 dan section 3. Jika section 2 dirubah jadi landscape section 1 dan 3 tidak ikut landscape. Hanya saja perhatikan lagi format page number – nya. Selamat mencoba..

Menampilkan Matriks Pada GUI Matlab

Biasanya output ditampilkan pada GUI dengan memanfaatkan Edit Text. Namun jika data yang dihasilkan lebih dari satu maka pada Edit Text tersebut tidak muncul angka/hasil perhitungannya. Salah satu hasil perhitungan yang lebih dari satu angka adalah Matriks. Postingan ini sekedar menginformasikan bagaimana menampilkan matriks pada GUI yang kita buat.

Komponen Uitable

Misal kita memiliki satu matriks berukuran 2×2 yang akan ditampilkan dalam suatu GUI. Setelah sebuah matriks dimasukan, maka gunakan fungsi set untuk mengirimkan ke komponen uitable. Ketik kode berikut:

  • >> a=[1 2 ;3 4];
  • >> figure
  • >> t=uitable;
  • >> set(t,’Data’,a)

Akan dihasilkan sebuah matriks dalam GUI berikut ini:

    

Selanjutnya data yang ditampilkan pada Matriks di GUI bisa berupa hasil perhitungan Matlab. Sebagai contoh GUI di bawah ini menampilan matriks confusion saat testing. Semoga postingan singkat ini bermanfaat.

 

Melakukan Cropping Pada Citra

[peng.citra|t.komputer|lab.hardware|pert.4]

Terkadang untuk menangkap secara detil suatu permukaan diperlukan proses pemotongan/cropping. Sebagai contoh, lanjutan dari pertemuan 3 yang lalu, tambahkan satu tombol Crop Gambar.

Jika tombol “Crop Gambar” ditekan maka gambar hasil cropping akan ditampilkan pada axes2 di sebelah kanan. Dan jika tombol “Ekstrak Citra R-G-B” ditekan akan menghasilkan harga-harga R,G, dan B yang sudah ternormalisasi di tiga edit text di atasnya.

Cropping Image Pada Matlab

Pada Matlab, fungsi cropping dengan menggunakan fasilitas fungsi imcrop. Silahkan tekan “help imcrop” di command window untuk mengetahui format penulisan fungsi tersebut di kode yang akan dibuat.

  • x=uigetfile(‘*.jpg’);
  • data=imread(x);
  • size(data)
  • ans =
  • 423 644 3

Perhatikan ukuran data citra yang dibaca (lewat imread). Jika kita bayangkan dengan koordinat kartesians, maka panjangnya adalah 644 dan lebarnya adalah 423. Untuk panjang tidak masalah karena arahnya dari kiri ke kanan, hanya saja untuk lebar sedikit berbeda dengan koordinat kartesian. Di sini positif ke arah bawah. Jadi titik tengah gambar tersebut adalah panjang 322 dan lebar 211. Jika ingin mengambil lebar 50 dan panjang juga 50 maka region tersebut dari titik (297, 186) dan offset sebesar masing-masing 50 piksel. Masukan fungsi imcrop untuk memotong gambar.

  • >> data2=imcrop(data,[297 186 50 50]);
  • >> imshow(data2)

Perhatikan format penulisan cropping dimana dua angka terakhir merupakan offset dari titik dimana posisi awal crop dimulai. Untuk mengekstrak citra RGB silahkan gunakan kode di pertemuan 3 yang lalu. Selamat mencoba, semoga bermanfaat.

Problem Many-to-Many Pada Sistem Basis Data

[sist.basis.data|akuntansi|lab.software|pert.3]

Dalam relasi suatu basis data dikenal beragam kardinalitas, antara lain: one-to-one, one-to-many dan many-to-many. Kardinalitas (cardinality) merupakan derajat jumlah suatu hubungan entitas. Entitas sendiri merupakan suatu abstraksi independen dari hal-hal yang terlibat dalam suatu sistem, misalnya dosen, mahasiswa, karyawan, dan lain-lain. Misalnya antara dosen dengan kelas, hubungannya biasanya one-to-many yaitu satu dosen mengajar satu atau lebih kelas dan satu kelas diampu oleh satu dosen (walaupun bisa saja lebih dari satu dosen). Jika dimodelkan konsepnya (conceptual model) akan berbentuk seperti ini (digambar online dengan ini: https://cloud.smartdraw.com/):

Untuk hubungan one-to-many, semua sistem basis data bisa membuat model logikanya beserta implementasi fisiknya. Caranya adalah dengan menambahkan satu Foreign Key di tabel kelas, yaitu nip dosen yang merupakan primary key pada tabel dosen nantinya. Sebaliknya untuk hubungan many-to-many, sistem basis data yang ada saat ini tidak bisa langsung memodelkan model konsep, misalnya atribut kelas dengan mahasiswa yang mengambil kelas tersebut. Di sini many-to-many karena satu kelas lebih dari satu siswa dan satu siswa mengambil lebih dari satu kelas.

Beberapa teknik mengharuskan konversi dari ERD ke Logical Record Structure (LRS). Beberapa alat bantu perancangan basis data, seperti Datanamic Dezign ketika ada hubungan Many-to-Many akan menghasilkan satu tabel baru di tengah-tengahnya (defaultnya bernama mahasiswa-kelas, dalam contoh ini, misalnya kita beri nama tabel perkuliahan. Tabel baru tersebut mengambil kode kelas dan nomor pokok mahasiswa sebagai kunci tamu (Foreign Key).

Biasanya tabel baru tersebut berjenis tabel transaksi, misalnya mahasiswa yang mendaftarkan dalam KRS-nya kuliah apa yang akan diambil. Biasanya kunci utamanya (Primary Key) adalah gabungan npm dan kode_kelas, tapi bisa saja menggunakan kode baru, misalnya generated numbers. Nyambung dengan ERD di atasnya, dalam tabel kelas ada kunci tamu kode dosen (NIP). Jadi kelas yang diambil oleh seorang siswa dapat diketahui dosen yang mengajarnya. Jika ingin melihat list peserta kuliah suatu kode kelas, dapat menggunakan perintah select untuk kode kelas tertentu di tabel perkuliahan tersebut. Tinggal praktekan pembuatan tabel-tabelnya.

Menghitung Nilai RGB Sebuah Citra

[peng.citra.digital|tek.komputer|lab.software|pert.4]

Nilai RGB merupakan format pewarnaan yang paling banyak digunakan. Format ini menangkap warna merah (red), hijau (green) dan biru (blue) suatu citra. Dengan komposisi tiga warna tersebut dapat dibuat beragam spektrum warna lainnya. Postingan kali ini akan dibahas bagaimana mengekstrak nilai R, G, dan B suatu citra.

Format RGB

Letakan current directory pada folder di mana citra berada. Kemudian lanjutkan dengan menarik suatu gambar bertipe jpg, png, bmp dan lain-lain. Format RGB suatu citra dapat diketahui dengan fungsi size dan menghasilkan format:

(baris) (kolom) (rgb)

Untuk contoh penerapan dapat menggunakan instruksi berikut ini:

  • [1] x=uigetfile(‘*.jpg*’);
  • [2] data=imread(x);

Misalnya dengan mengetik instruksi size(data) diperoleh hasil:

1150         1427          3

Kolom ke-3 mengindikasikan tiga komposisi warna (merah, hijau, dan biru).

Mengekstrak R, G, dan B

Untuk mengetahui komposisi warna (RGB) dapat dengan cara mengakses data yang dibaca lewat fungsi imread mengikuti indeks kolom 3 apakah 1 (untuk red), 2 (untuk green) dan 3 (untuk blue).

  • [3] fR=data(:,:,1);
  • [4] fG=data(:,:,2);
  • [5] fB=data(:,:,3);

 

Tingkat R, G, dan B

Untuk mengetahui tingkat merah, hijau, dan biru secara total dapat mencari nilai rata-rata lewat fungsi mean. Line [6] – [8] bermaksud menghitung rata-rata masing-masing kelas warna. Dua buah fungsi mean dibutuhkan untuk menghitung total baris dan kolom. Line [9] – [11] bermaksud menormalkan tingkat warna dengan jangkauan 0 hingga 1.

  • [6] fr=mean(mean(fR));
  • [7] fb=mean(mean(fG));
  • [8] fc=mean(mean(fB));
  • [9] frr=fr/255;
  • [10]fbb=fb/255;
  • [11]fcc=fc/255;

Contoh GUI Menghitung Tingkat RGB

Untuk memudahkan, terkadang perlu dibuat GUI agar lebih mudah mencari nilai RGB suatu citra. Contohnya adalah rancangan berikut. Gunakan fungsi tambahan set untuk mengirim hasil perhitungan rgb (nilai RGB yang sudah dinormalkan).


  • [12] set(handles.edit1,‘String’,frr)
  • [13] set(handles.edit2,‘String’,fbb)
  • [14] set(handles.edit3,‘String’,fcc)

Jalankan dan lihat hasilnya seperti di bawah (nilai dari atas ke bawah menunjukkan masing-masing R, G, dan B). Padukan dengan fungsi lain seperti imcrop untuk memotong citra agar tidak masuk di dalamnya background, dibahas pada pertemuan yang lain. Semoga bermanfaat.

 

Membuat Halaman yang Berbeda dalam Satu Naskah

[komputer1|psikologi|lab.software|pert.3]

Dalam satu naskah yang berisi daftar isi, kata pengantar, bab 1 dan seterusnya terkadang memiliki penomoran halaman yang berbeda. Misalnya daftar isi memiliki nomor halaman i, ii, iii, dst sementara bab 1, bab 2, dan seterusnya bernomor 1, 2, 3, .. dan seterusnya.

Page Break

Pisahkan dengan fungsi Page Break dengan menekan Insert – Page break.

Section Break

Jika page break sudah dilakukan semua, langkah berikutnya adalah membuat section break yang akan memisahkan satu section (bab) dengan section lainnya, misalnya antara bab 1 dengan daftar tabel, daftar gambar dan daftar isi. Arahkan kembali kursor di sisi BAB I kemudian masuk ke Page Layout – Breaks – Section Break. Pilih fungsi yang sesuai yaitu Next Page.

Dengan melakukan Section Breaks maka antara bab 1 dan daftar tabel dianggap bab yang berbeda. Untuk mengujinya dobel klik di atas Bab 1 dan pastikan ada dua section yang terpisah (section 1 di atas dan section 2 di bawah).

Membuat Halaman

Pada Daftar Isi tambah halaman dengan menu Insert – Page Numbers – Buttom of Page misalnya. Jangan khawatir nanti bisa diset ulang. Pastikan ada halaman muncul di bagian bawah berkas tersebut.

Berikutnya, karena misal menurut panduan penulisan bahwa daftar isi, daftar gambar dan daftar tabel ditulis dalam format huruf: i, ii, iii, dst, maka harus dilakukan format halaman ulang.

Memformat Nomor Halaman

Arahkan ke nomor halaman, lalu sorot dengan kursor (menekan sambil ditahan) halaman tersebut. Pastikan nomor halaman tersorot.

Setelah itu muncul jendela Format Page Numbers. Ganti format angka dengan format huruf i, ii, dan seterusnya.

Terakhir perlu merubah nomor halaman bab 1 yang sebelumnya lanjut dari halaman daftar tabel menjadi halaman 1.

Lanjutkan dengan me-refresh/update daftar isi agar sesuai dengan halaman yang baru saja diseting. Pastikan halaman sudah berubah sesuai dengan format (daftar isi, daftar gambar, dan daftar tabel berturut-turut i, ii, dan iii, sementara bab 1 dan seterusnya 1, 2, 3, dan seterusnya).

Menghapus Section Break (UNDO Section Break)

Dobel klik di halaman atas untuk membuka header – footer. Masuk ke menu View – Draft. Arahkan ke Section Break (Next Page). Lanjutkan dengan menekan Delete di Keyboard. Kembalikan ke lagi ke Print Layout.

Praktek Menghitung Jumlah Kata dan Kalimat dengan Regular Expression Matlab

[perolehan.informasi|tek.komputer|lab.software|pert.3]

Salah satu fungsi penting dalam perolehan informasi (information retrieval) adalah pencarian kata. Untuk sampai ke sana ada baiknya mengetahui berapa jumlah kata dalam suatu berkas. Dan untuk itu harus mampu membedakan antara kata dengan bukan kata. Yang bukan kata seperti tanda petik, tanda khusus (bintang, pagar), dan spasi.

Fungsi REGEXP

Regular expresion merupakan fungsi yang ditemui dalamm mata kuliah teknik komputesi dan kompilasi. Fungsinya adalah mencari serangkaian kata atau diistilahkan token dalam materi tersebut. Untuk materi perolehan informasi (dan juga text mining) fungsinya sama. Pada Matlab fungsi regular expresion dalam bentuk regexp.

Menghitung Jumlah Kata

Bagi yang sering mengetik dengan MS Word, pasti sudah mengenal indikator jumlah kata yang telah diketik. Letaknya di bagian kiri MS Word. Misalnya, ketika saya menulis sampai sini ada indikator jumlah kata yang tertulis sebanyak 143 kata.

Untuk mengetahui fungsi regexp silahkan mengetik help regexp pada command window. Tampak untuk mencari suatu kata menggunakan parameter \w+ dan ‘match’. Untuk mencobanya, masukan kode berikut pada command window:

  1. string=’Presiden Jokowi mengunjungi kota Palu’;
  2. hasil=regexp(string,’\w+’,’match’);
  3. [baris,kolom]=size(hasil);
  4. jumlahkata=kolom
  5. jumlahkata =
  6. 5

Baris ke 3 hingga 5 menghitung jumlah kata yang berhasil dipilah. Jumlah kata string tersebut sesuai dengan jumlah kata yang berhasil dipisahkan oleh fungsi regexp. Pada lab software coba buat GUI seperti di bawah ini. Jika tombol Jumlah Kata = ditekan maka akan menunjukan jumlah kata yang terdapat pada string yang dicopas dan paste-kan ke edit text di atasnya. Ada perbedaan antara kata yang dihitung MS Word dengan kode di atas, perlu diteliti lebih lanjut.

Menghitung Jumlah Kalimat

Untuk menghitung jumlah kalimat, fungsi regexp harus mampu menghitung berapa jumlah titik dalam satu berkas. Jika ada dua titik maka ada dua kalimat. Tentu saja di sini harus mampu membedakan antara titik desimal dengan titik yang merupakan akhir dari kalimat. Silahkan mencoba dahulu.

Hal-hal Kecil tetapi Rutin

Kita cenderung “wah” terhadap hal-hal besar yang dilakukan oleh sesorang, misalnya menjuarai suatu kompetisi, menemukan suatu teknologi, dan sejenisnya. Dan cenderung ingin mengikuti mereka berdasarkan hasil akhirnya saja. Padahal tidak demikian sesungguhnya yang terjadi. Ibarat gunung es di permukaan lautan yang tampak kecil dari atas tetapi ketika melihat ke bawah permukaan, malah justru lebih banyak yang berada di dalam.

Kita melupakan hal-hal kecil ketika ingin mencapai yang besar. Sebagai contoh sederhana dalam kehidupan sehari-hari, misalnya seorang pria mengucapkan cinta kepada seorang wanita. Jika si wanita hanya melihat dari aspek “wah” saja, bisa jadi dia memercayai ucapan tersebut. Tetapi jika dia memperhatikan hal-hal kecil yang telah dilakukan oleh si pria itu selama beberapa waktu, barulah dia bisa menyimpulkan bahwa memang benar pria itu mencintainya. Seperti dalam film “Dilan”, Milea dapat mengetahui siapa yang sesungguhnya pria yang mencintainya, dari hal-hal kecil yang dilakukan kepadanya.

Saya banyak memiliki teman dosen yang kerap mengungkapkan suatu ide, niat, rencana, dan sejenisnya yang “wah”, seperti publikasi di jurnal Q1, riset ini, itu dan sejenisnya yang tidak pernah saya lihat pelaksanaannya. Namun banyak juga rekan yang melakukan hal-hal yang dimulai dari yang sederhana, menulis di jurnal biasa, berlanjut ke konferensi internasional, lolos di jurnal internasional berimpak rendah, dan hal-hal yang sepertinya sederhana tetapi dilakukan rutin tiap semester. Akhirnya yang bersangkutan berkeinginan untuk studi lanjut S3. Dengan toefl di bawah 400 dia berusaha perlahan-lahan mencapai di atas 500 dan saat ini gelar Ph.D sudah di tangannya.

Sering kali saya membaca buku-buku yang pernah dulu saya baca dan saya tidak mengerti. Tetapi saat ini ketika kembali membacanya, ntah mengapa saya jadi heran kenapa waktu itu tidak mengerti. Padahal mudah sekali. Hal-hal rutin yang sering kita lakukan seperti membaca buku, jurnal, melakukan studi ringan, mereview paper, dan lain-lain, karena sering walau kecil dan sederhana ternyata dapat membangun skill kita. Tidak ada salahnya melakukan hal-hal yang menurut kita kecil tetapi merupakan tangga dalam menempuh hal-hal yang besar. Jika ingin profesor, tidak ada cara lain saat ini untuk menempuh S3 bagi seorang dosen, dan untuk itu tidak ada cara lain mengasah kemampuan riset dan meneliti. Tidak perlu hal-hal yang besar, mulai saja dari riset dasar, mencoba membangun dan mencari GAP, mengikuti ROADMAP yang kita kuasai, dan mencoba menghadiri konferensi-konferensi, terutama yang internasional. Walau terkadang nombok karena kurang dibiayai oleh kampus tempat kita bekerja, tetapi demi kemajuan kita dan para mahasiswa kita (karena kita yang mengajari mereka) apa salahnya menyisihkan uang, hitung-hitung membantu kampus kita (terutama yang swasta) .. keren kan, biasanya kampus yang membiayai kita tetapi kita yang membiayai kampus (karena nombok). Semoga postingan ini bukan hayalan saya saja, sebaliknya bisa menginspirasi para pembaca sekalian.