Pengembangan Tutorial Interaktif Pengolahan Citra Digital Berbasis Web: Laporan Penelitian Kopertis, Setyo Nugroho

  • Uploaded by: Setyo Nugroho
  • 0
  • 0
  • October 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Pengembangan Tutorial Interaktif Pengolahan Citra Digital Berbasis Web: Laporan Penelitian Kopertis, Setyo Nugroho as PDF for free.

More details

  • Words: 6,640
  • Pages: 24
LAPORAN PENELITIAN

PENGEMBANGAN TUTORIAL INTERAKTIF PENGOLAHAN CITRA DIGITAL BERBASIS WEB

Oleh: SETYO NUGROHO, ST, MKOM

DANA BERASAL DARI ANGGARAN DIPA KOPERTIS WILAYAH XI TAHUN 2005

JURUSAN TEKNIK INFORMATIKA SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER STMIK BALIKPAPAN NOPEMBER 2005

RINGKASAN Judul

: PENGEMBANGAN TUTORIAL INTERAKTIF PENGOLAHAN CITRA DIGITAL BERBASIS WEB

Penulis

: Setyo Nugroho

Pemakaian komputer dan internet sebagai alat bantu dalam bidang pendidikan semakin banyak dirasakan manfaatnya. Dalam penyampaian materi pelajaran, penggunaan komputer memiliki beberapa kelebihan seperti: dapat menampilkan teks, gambar, maupun animasi, bersifat interaktif, dan dapat digunakan sewaktu-waktu tanpa tergantung oleh kehadiran pengajar. Sedangkan penggunaan internet memiliki kelebihan dalam hal dapat diakses kapan pun dan di manapun tanpa tergantung waktu dan tempat, asalkan tersedia komputer dan koneksi ke internet. Pada penelitian ini itu kami mencoba membuat suatu program berbasis web yang dapat memberikan tutorial pengolahan citra digital secara interaktif. Program ini diharapkan dapat melengkapi materi pelajaran yang sudah ada sebelumnya baik yang diperoleh dari buku maupun yang disampaikan di kelas. Dengan program ini mahasiswa dapat melakukan uji coba pada contoh-contoh yang tersedia di halaman web sehingga diharapkan dapat memperoleh pemahaman yang lebih jelas terhadap materi yang diberikan. Untuk dapat mengakses program tutorial ini, pengguna cukup menggunakan web browser yang telah mendukung Java applet. Dengan teknologi Java applet dan Java Virtual Machine, program tutorial ini dapat langsung dieksekusi secara otomatis di dalam web browser pada saat pengguna membuka halaman web tersebut. Sebagai langkah awal, penelitian ini difokuskan pada pembelajaran dengan materi pemrosesan kontras dan kecerahan citra. Hasil dari tutorial yang telah kami buat dapat diakses secara langsung melalui internet di alamat http://sn.or.id/javapcd/javapcd.htm atau dapat juga didownload kemudian dijalankan di komputer lokal. Hasil penelitian menunjukkan bahwa teknologi Java applet dapat dimanfaatkan untuk membangun tutorial interaktif berbasis web mengenai pengolahan citra digital. Tutorial interaktif ini dapat membantu mempermudah mahasiswa untuk memahami konsep dan teori pengolahan citra digital tanpa harus membuat program dan melakukan kompilasi program sendiri. Dengan tutorial yang berbasis web, pengguna juga dapat mengakses tutorial ini dari mana saja dan kapan saja selama tersedia koneksi internet dan browser internet yang mendukung.

i

SUMMARY Title

: DEVELOPMENT OF INTERACTIVE WEB-BASED TUTORIAL FOR DIGITAL IMAGE PROCESSING

Author

: Setyo Nugroho

The use of computers and internet as additional and alternative media in education is more widely applied and believed to give many benefits. In delivering lesson topics, the use of computers have some advantages such as: able to display text, graphics, sound, and animations, interactive, and could be use any time even though when the teacher or the lecturer is not present. Furthermore, the use of internets gives advantage such as could be used any time and any where by students, as long as computers and internet connection are available. In this research, we tried to develop a web-based application that provide interactive tutorial in the field of digital image processing. This program is expected to complement other existing lesson materials form books and tutorials delivered by lecturer in the classroom. Through this program, students could do experiments by using examples provided in the web pages, so it is expected that the students will understand more clearly the lesson he have got from books or in the classroom. To access this tutorial, the students will only have to use web browser that supports Java applet. Using Java applet technology and Java Virtual Machine, this tutorial program will be executed directly in the web browser when users open the web page contain the tutorial. As the first step, this research is focused on lesson topic in contrast and brightness of digital images. The tutorial we have developed could be directly accessed via internet at http://sn.or.id/javapcd/javapcd.htm or downloaded to be run locally. The results show that Java applet technology could be used to develop interactive web-based tutorial on digital image processing. This interactive tutorial could help students understand theory and concepts of digital image processing better without developing and compiling programs by themselves. By web based tutorial, students also have access to the tutorial any where and at any time as long as internet connection and Java-enabled web browser are available.

ii

PRAKATA Segala puji syukur kami panjatkan ke hadirat Allah swt sehingga kami dapat menyelesaikan laporan penelitian kami yang berjudul “PENGEMBANGAN TUTORIAL INTERAKTIF PENGOLAHAN CITRA DIGITAL BERBASIS WEB”. Program hasil penelitian kami telah kami publikasikan secara terbuka melalui internet dan dapat diakses di alamat http://sn.or.id/javapcd/javapcd.htm . Pada kesempatan ini kami ingin menyampaikan ucapan terima kasih kepada Bp Drs. Satria Dharma sebagai Ketua STMIK Balikpapan dan Bp Ridwansyah Heman, SKom sebagai Pembantu Ketua Bidang Akademik yang telah memberikan dukungan penuh kepada kami untuk terus mengembangkan diri dan melaksanakan penelitian ini. Kami juga berterima kasih kepada rekan-rekan dosen dan karyawan STMIK Balikpapan atas bantuan dan kerjasamanya selama ini. Terima kasih juga untuk para mahasiswa yang telah menjadi sumber inspirasi sehingga kami memilih topik penelitian ini. Dari penelitian ini, kami berharap hasilnya dapat memberikan kontribusi untuk pengembangan ilmu pengetahuan dan teknologi. Kami juga berharap hasil penelitian kami dapat berperan dalam penyebarluasan ilmu pengetahuan, khususnya di bidang informatika. Bagi para pembaca yang ingin memberikan saran dan kritik yang membangun, kami akan menerimanya dengan senang hati.

Balikpapan, Nopember 2005

Setyo Nugroho, ST, MKom

iii

DAFTAR ISI

LEMBAR IDENTITAS DAN PENGESAHAN ................................................................. i RINGKASAN ..................................................................................................................... ii SUMMARY .......................................................................................................................iii PRAKATA ......................................................................................................................... iv DAFTAR ISI ....................................................................................................................... v I. PENDAHULUAN............................................................................................................ 1 II. TINJAUAN PUSTAKA ................................................................................................. 2 III. TUJUAN DAN MANFAAT PENELITIAN ................................................................. 7 IV. METODE PENELITIAN .............................................................................................. 7 V. HASIL DAN PEMBAHASAN .................................................................................... 11 VI. KESIMPULAN DAN SARAN ................................................................................... 13 DAFTAR PUSTAKA ........................................................................................................ 14

iv

I. PENDAHULUAN

Pemakaian komputer dan internet sebagai alat bantu dalam bidang pendidikan semakin banyak diterapkan dan dirasakan manfaatnya. Dalam penyampaian materi pelajaran, penggunaan komputer memiliki beberapa kelebihan seperti: dapat menampilkan teks, gambar, maupun animasi, bersifat interaktif, dan dapat digunakan sewaktu-waktu tanpa tergantung oleh kehadiran pengajar. Sedangkan penggunaan internet memiliki kelebihan dalam hal dapat diakses kapan pun dan di manapun tanpa tergantung waktu dan tempat, asalkan tersedia komputer dan koneksi ke internet. Pengolahan citra digital adalah salah satu mata kuliah yang diberikan di jurusan teknik informatika. Materi yang diberikan pada mata kuliah ini banyak berisi teori dan contoh penerapan algortima untuk mengolah citra digital. Contoh-contoh yang tersedia di buku-buku teks yang digunakan selama ini memiliki keterbatasan, yaitu tidak bisa dipraktekkan secara langsung dan interaktif dengan memberikan jenis masukan citra maupun parameter perubahan yang berbeda. Ada juga buku teks yang menyediakan contoh source program, namun untuk dapat menjalankan program tersebut, mahasiswa harus menyiapkan dan menginstalasi developer tools atau compiler bahasa program yang sesuai, kemudian melakukan kompilasi program, dan selanjutnya mengeksekusi program tersebut untuk melihat hasilnya. Untuk itu kami mencoba membuat suatu program berbasis web yang dapat memberikan tutorial pengolahan citra digital secara interaktif. Program ini diharapkan dapat melengkapi materi pelajaran yang sudah ada sebelumnya baik yang diperoleh dari buku maupun yang disampaikan di kelas. Dengan program ini mahasiswa atau pengguna dapat melakukan uji coba pada contoh-contoh yang tersedia di halaman web sehingga diharapkan dapat memperoleh pemahaman yang lebih jelas terhadap materi yang diberikan. Untuk dapat mengakses program tutorial ini, pengguna cukup menggunakan web browser yang telah mendukung Java applet. Mahasiswa tidak perlu melakukan instalasi software compiler, melakukan kompilasi program, dan mengeksekusi program seperti biasanya. Dengan teknologi Java applet dan Java Virtual Machine, program tutorial ini dapat langsung dieksekusi secara otomatis di dalam web browser pada saat pengguna membuka halaman web tersebut. Sebagai langkah awal, penelitian ini difokuskan pada pembelajaran dengan materi pemrosesan kontras dan kecerahan citra.

1

II. TINJAUAN PUSTAKA

HTML Salah satu protokol yang banyak digunakan di internet adalah HTTP (hypertext transer protocol). HTTP adalah protokol yang digunakan untuk mentransfer data atau dokumen antara web server dengan web browser (Internet Explorer, Firefox, Netscape, Opera, dll). Protokol ini melakukan transfer dokumen yang ditulis dengan menggunakan format standar yang disebut dengan HTML (hypertext markup language). Kemampuan yang disediakan oleh HTML antara lain: -

Mengontrol tampilan dari web page dan isinya.

-

Mempublikasikan dokumen secara online sehingga bisa di akses dari seluruh dunia.

-

Membuat form online yang bisa di gunakan untuk menangani input dan transaksi secara online.

-

Menambahkan objek-objek seperti image, audio, video dan juga java applet dalam document HTML.

TEKNOLOGI JAVA Java adalah bahasa pemrograman yang dibuat oleh SUN Microsystems. Java merupakan bahasa pemrograman tingkat tinggi yang memiliki berbagai kelebihan antara lain sebagai berikut: berorientasi objek, portabel, netral terhadap arsitektur, memiliki fasilitas keamanan yang tinggi, dan mendukung multithreaded. Dalam pemrograman Java, program yang ditulis akan dikompilasi sehingga menghasilkan Java bytecode, yaitu kode yang bersifat bebas-platform dan siap dijalankan oleh interpreter yang tersedia. Interpreter ini disebut juga Java Virtual Machine (Java VM). Kompilasi program Java hanya perlu dilakukan sekali saja, sedangkan interpretasi akan dilakukan setiap kali program dieksekusi. Java bytecode dapat dipandang sebagai kumpulan instruksi-instruksi kode mesin untuk dijalankan oleh mesin virtual Java (Java VM). Java bytecode memungkinkan apa yang disebut dengan istilah “write once, run anywhere”. Artinya, program Java hanya perlu dikompilasi sekali menjadi bytecode, kemudian bytecode tersebut dapat dijalankan di komputer dengan sistem operasi apapun (Windows, UNIX, Linux, MacOS, dan lain-lain ) asalkan sudah dilakukan instalasi JVM di dalam komputer tersebut. Gambar di bawah ini menggambarkan sifat multiplatform dari suatu program yang ditulis dengan bahasa Java. 2

Program Java Class Coba { public static void main(String[] args) { System.out.println(“Coba…”); } }

Compiler

Interpreter

Win32

Interpreter

Linux

Interpreter

MacOS

Gambar 1. Sifat multiplatform program Java

JAVA PLATFORM Platform adalah lingkungan perangkat keras atau perangkat lunak di mana suatu program dapat dijalankan. Beberapa contoh platform yang banyak digunakan saat ini adalah Windows, Linux, Solaris, dan MacOS. Pada umumnya platform-platform tersebut di atas adalah merupakan kombinasi antara sistem operasi dengan perangkat keras tertentu, misalnya Windows/Linux pada arsitektur Intel 386. Java platform adalah platform yang hanya terdiri dari perangkat lunak dan berjalan di atas platform-platform lain yang berbasis perangkat keras. Java platform memiliki dua komponen, yaitu Java Virtual Machine (Java VM) dan Java Application Programming Interface (Java API). Java VM merupakan mesin virtual yang dapat menjalankan program-program Java dalam bentuk bytecode. Sedangkan Java API adalah sekumpulan komponen perangkat lunak yang menyediakan berbagai kemampuan, termasuk sarana antar muka grafis (graphical user interface). Java API dikelompokkan menjadi paket-paket (package) yang berisi class-class dan interface-interface yang berkaitan. Di antara jenis-jenis program yang dapat ditulis dengan bahasa Java adalah applet dan application. Java applet adalah program Java khusus yang dapat dijalankan pada web browser yang mendukung Java VM. Dengan adanya Java applet dimungkinkan untuk membangun aplikasi berbasis web yang lebih interaktif. Untuk menjamin keamanan data pada komputer, Java applet memiliki batasan-batasan tertentu yang berbeda dengan 3

program Java yang lain. Sebagai contoh, Java applet tidak dapat melakukan operasi baca tulis pada file yang berada di dalam komputer yang sedang mengeksekusinya.

JAVA APPLET Di antara jenis-jenis program yang dapat dihasilkan dengan bahasa Java adalah applet, application, dan servlet. Java applet adalah program Java khusus yang dapat dijalankan pada web browser yang mendukung JVM. Dengan adanya Java applet dimungkinkan untuk membangun aplikasi berbasis web yang lebih interaktif. Untuk menjamin keamanan data pada komputer, Java applet memiliki batasan-batasan tertentu yang berbeda dengan program Java yang lain. Sebagai contoh, Java applet tidak dapat melakukan operasi baca tulis pada file yang berada di dalam komputer yang sedang mengeksekusinya. Adapun Java application adalah program yang berdiri sendiri (standalone) dan dapat langsung dijalankan pada platform Java. Sedangkan Java servlet adalah aplikasi yang dapat dijalankan pada web server yang dapat digunakan untuk membangun aplikasi web interaktif pada sisi server.

CITRA DIGITAL DAN CONTRAST STRETCHING Citra didefinisikan sebagai fungsi intensitas cahaya dua-dimensi f(x,y) dimana x dan y menunjukkan koordinat spasial, dan nilai f pada suatu titik (x,y) sebanding dengan kecerahan (brightness) yang biasanya dinyatakan dalam tingkatan abu-abu (gray-level) dari citra di titik tersebut. Citra digital adalah citra dengan f(x,y) yang nilainya didigitalisasi-kan (dibuat diskrit) baik dalam koordinat spasialnya maupun dalam gray-levelnya. Digitalisasi dari koordinat spasial citra disebut dengan image sampling, sedangkan digitalisasi dari gray-level citra disebut dengan gray-level quantization. Citra digital dapat dibayangkan sebagai suatu matriks dimana baris dan kolomnya menunjukkan suatu titik di dalam citra, dan nilai elemen matriks tersebut menunjukkan gray level di titik tersebut. Elemen-elemen dari citra digital tersebut biasanya disebut dengan pixel, yang merupakan singkatan dari picture elements. Tujuan pengolahan citra digital adalah untuk mendapatkan citra baru yang lebih sesuai untuk digunakan dalam aplikasi tertentu. Salah satu jenis pengolahan citra adalah yang disebut dengan contrast stretching. Contrast stretching ini adalah teknik yang digunakan untuk mendapatkan citra baru dengan kontras yang lebih baik daripada kontras dari citra asalnya. Citra yang memiliki kontras rendah dapat terjadi karena kurangnya pencahayaan, kurangnya bidang dinamika dari sensor citra, atau kesalahan setting 4

pembuka lensa pada saat pengambilan citra. Ide dari proses contrast stretching adalah untuk meningkatkan bidang dinamika dari gray level di dalam citra yang akan diproses. Proses contrast stretching termasuk proses perbaikan citra yang bersifat point processing, yang artinya proses ini hanya tergantung dari nilai intensitas (gray-level) dari satu pixel, tidak tergantung dari pixel lain yang ada di sekitarnya.

255 d2

d

d1 0

c2

c1

255

c Gambar 2. Transformasi Nilai Intensitas Pixel pada Contrast Stretching

Gambar 2 menunjukkan salah satu bentuk transformasi yang dapat digunakan untuk contrast stretching. Disini diasumsikan bahwa citra memiliki range gray level dari 0 sampai 255. Pada gambar tersebut, c adalah gray-level dari citra sebelum diproses dan d adalah gray-level dari citra setelah diproses. Titik (c1,d1) dan titik (c2,d2) akan menentukan bentuk dari fungsi transformasi, dan dapat diatur untuk menentukan tingkat penyebaran gray-level dari citra yang dihasilkan. Jika c1=c2 dan d1=d2 maka transformasi akan berbentuk garis lurus yang berarti tidak ada perubahan gray level pada citra yang dihasilkan. Secara umum diasumsikan c1<=c2 dan d1<=d2 sehingga fungsi akan menghasilkan nilai tunggal dan nilainya akan selalu naik. Untuk menghitung nilai hasil transformasi tersebut, kita dapat membuat tiga fungsi sebagai berikut: Untuk c <= 0 < c1, maka d = c . (d1 / c1) Untuk c1 <= c < c2, maka d = d1 + ( (c-c1) . ((d2-d1) / (c2-c1)) ) Untuk c2 <= c <=255, maka d = d2 + ( (c-c2) . (255-d2) / (255-c2) )

5

HISTOGRAM Histogram dari suatu citra digital dengan gray-level di dalam range [0,L-1] adalah fungsi diskrit p(rk) = nk/n, dimana: rk : gray level ke-k nk : banyaknya pixel di dalam citra dengan gray level tersebut n : jumlah seluruh pixel di dalam citra k=0, 1, 2, …, L-1 Jika fungsi ini digambarkan dengan grafik maka akan memberikan deskripsi secara global dari penampakan citra. Gambar 3 menunjukkan histogram dari empat jenis citra secara umum. Citra gelap

Citra berkontras rendah

Citra terang

Citra berkontras tinggi

(b) Citra yang terang:

Gambar 3. Histogram dari Berbagai Jenis Citra Digital

Meskipun histogram hanya menunjukkan sifat-sifat umum dari citra dan tidak memberikan informasi apa pun mengenai isi suatu citra, namun bentuk dari histogram dapat memberikan informasi mengenai kemungkinan untuk melakukan perbaikan kontras citra tersebut.

6

III. TUJUAN DAN MANFAAT PENELITIAN TUJUAN PENELITIAN Penelitian ini bertujuan untuk mengembangkan suatu program berbasis web yang berisi tutorial pengolahan citra digital yang dapat dijalankan secara interaktif.

MANFAAT PENELITIAN Hasil penelitian ini diharapkan dapat membantu dalam mempelajari materi pengolahan citra digital, dan melengkapi metode lain yang sudah ada sebelumnya, yaitu melalui buku maupun yang disampaikan di kelas. Dengan program ini mahasiswa dapat melakukan uji coba pada contoh-contoh yang tersedia di halaman web sehingga memperoleh pemahaman yang lebih jelas terhadap materi yang diberikan.

IV. METODE PENELITIAN

Metode yang digunakan dalam penelitian ini terdiri dari langkah-langkah berikut: •

Melakukan studi kepustakaan pada berbagai referensi yang berkaitan dengan penelitian yang dilakukan. Topik-topik yang akan dikaji antara lain meliputi: pemrograman internet, pengolahan citra digital, HTML, pemrograman Java dan Java applet.



Menyiapkan data-data citra yang akan digunakan dalam program tutorial pengolahan citra digital.



Merancang dan membuat program tutorial pengolahan citra digital berbasis web.



Melakukan instalasi program pada web server di intranet dan di internet.



Melakukan pengujian program pada server web di intranet dan di internet.

PERSIAPAN DATA CITRA DIGITAL

Data citra digital yang digunakan dalam tutorial ini adalah file citra dengan format JPG. Format file ini memiliki beberapa kelebihan yaitu: •

dipilih sebagai salah satu format standar citra digital untuk world wide web



sangat populer dan banyak digunakan di internet



disimpan dalam bentuk terkompresi sehingga ukuran filenya relatif kecil



mendukung resolusi warna 24 bit per pixel (true-color) 7

Untuk format citra yang lain sebenarnya tersedia format seperti BMP, GIF dan PNG. Namun format BMP memiliki ukuran file yang besar karena tidak terkompresi. Sedangkan format GIF hanya mendukung resolusi warna maksimum 256 warna sehingga kurang cocok untuk digunakan menyimpan citra berisi gambar alami atau foto. Format PNG cukup bagus karena terkompresi dan mendukung resolusi warna 24 bit per pixel, namun karena format ini relatif masih baru, ada kemungkinan belum didukung oleh browser internet versi lama. Untuk dapat melihat perbedaan antara citra berkontras tinggi dengan berkontras rendah, maka kami menyiapkan beberapa citra dengan kontras dan kecerahan yang bervariasi.

PERANCANGAN TUTORIAL Tujuan dari tutorial ini adalah untuk membantu mempermudah pemahaman materi pengolahan citra digital dengan cara melakukan praktek secara visual dan interaktif. Untuk itu program tutorial ini kami rancang dengan spesifikasi sebagai berikut: •

Program berbasis web dengan memanfaatkan teknologi Java applet sehingga dapat dijalankan dari berbagai platform (sistem operasi) dengan cukup menggunakan browser internet yang dilengkapi dengan Java Virtual Machine, atau Java Run-time Environment (JRE), atau Java Plug-in.



Program dapat memproses citra berwarna maupun hitam putih (grayscale).



Program menyediakan beberapa file citra yang berbeda dan pemakai dapat memilih sendiri citra yang diinginkan.



Pemakai program dapat memilih untuk menambah atau mengurangi kontras suatu citra.



Pemakai dapat menentukan seberapa besar penambahan atau pengurangan kontras citra yang diinginkan.



Program menampilkan histogram citra asal maupun citra hasil proses sehingga pemakai dapat mengamati secara langsung perubahan histogram yang terjadi dan melihat perbedaannya secara lebih nyata.



Program dapat menampilkan nilai numerik warna pixel dalam format RGB (RedGreen-Blue) dari suatu titik lokasi citra yang diinginkan pemakai.

8

USER INTERFACE Untuk menyediakan tutorial yang interaktif, tampilan progam dirancang agar dapat digunakan semudah mungkin oleh pemakai. User interface yang digunakan oleh program terdiri dari komponen-komponen sebagai berikut: •

Objek Choice untuk menyediakan pilihan operasi yang akan dilakukan terhadap citra. Pilhan yang tersedia adalah:  mengubah kecerahan (brightness) citra  mengubah kontras (contrast) citra



Objek Choice untuk menyediakan pilihan file-file citra yang akan dimanipulasi oleh pemakai.



Objek Scrollbar untuk memungkinkan pemakai dapat mengatur besar kecilnya perubahan kontras atau kecerahan citra yang diinginkan dengan menggunakan mouse.



Objek TextField untuk menampilkan besarnya perubahan kontras yang diinginkan.



Objek Label untuk menampilkan informasi mengenai warna pixel citra pada suatu titik yang diinginkan oleh pemakai. Warna pixel dinyatakan dalam bentuk RGB (red-green-blue) yang terdiri dari tiga komponen warna: merah, hijau, dan biru dengan jangkauan nilai masing-masing antara 0 sampai dengan 255.



Objek Image untuk menampilkan citra asal (sebelum dimanipulasi) maupun citra hasil (setelah dimanipulasi).



Objek Image untuk menampilkan histogram dari citra asal dan citra hasil.

File kode sumber (source code) yang bernama JavaPCD.java dikompilasi sehingga menghasilkan bytecode yang diberi nama JavaPCD.class. File JavaPCD.class ini kemudian diletakkan dalam directory yang sama dengan file HTML yang akan digunakan. Di dalam file HTML juga harus dicantumkan sintaks untuk menampilkan applet ini.

PERANCANGAN APPLET Java telah menyediakan class Applet yang diperlukan untuk membuat suatu applet. Class, tersebut berada di dalam package java.applet. Setiap applet harus diimplementasikan dengan cara membuat subclass dari class Applet, yang dinyatakan di dalam program sebagai berikut:

9

public class JavaPCD extends Applet …

Karena tutorial ini dirancang agar bersifat interaktif, maka applet ini harus dapat menangani event-event (kejadian) yang diakibatkan oleh interaksi antara pengguna dengan program. Contoh event yang dapat terjadi misalnya saat pengguna mengklik mouse di lokasi tertentu untuk memilih citra atau mengatur tingkat kontras citra, atau saat pengguna memindahkan posisi kursor untuk mengetahui nilai intensitas warna dari suatu titik di dalam citra. Untuk dapat menangani event-event tersebut applet ini melakukan implementasi terhadap beberapa interface yang diperlukan, yaitu ActionListener, ItemListener, AdjustmentListener, MouseListener, dan MouseMotionListener. Di dalam program hal ini dinyatakan dengan: public class JavaPCD extends Applet implements ActionListener, ItemListener, AdjustmentListener, MouseListener, MouseMotionListener {

PENGGABUNGAN APPLET PADA FILE HTML Applet adalah program kecil yang dirancang untuk tidak berjalan sendiri, namun menjadi bagian dari program yang lain. Dalam hal ini program yang lain tersebut adalah browser internet. Karena file standar yang dapat dibaca oleh browser internet adalah file HTML, maka harus ada suatu cara untuk memberitahu browser internet melalui file HTML mengenai keberadaan suatu applet. Di dalam file HTML dapat digunakan tag <APPLET> untuk memberi informasi mengenai applet. Untuk itu di dalam file HTML dari tutorial ditambahkan kode berikut: <APPLET code = "JavaPCD.class" width= "700" height= "450">

Kode tersebut menyatakan bahwa di dalam direktori yang sama dengan dimana file HTML tersebut berada terdapat file Java applet yang bernama JavaPCD.class. Applet ini akan ditampilkan dengan ukuran 700x450 pixel, dan menerima parameter-parameter yang dituliskan di dalam tag .

PROSES PERUBAHAN KONTRAS DAN KECERAHAN CITRA Proses perubahan kontras citra yang digunakan di sini adalah dengan mengubah histogram dari citra tersebut. Untuk menambah kontras citra menjadi maksimum, maka cara yang 10

digunakan adalah dengan mencari nilai intensitas pixel terendah dan tertinggi yang dapat diketahui dari histogram. Kemudian nilai intensitas terendah dikonversi menjadi 0 atau hitam, dan nilai intensitas tertinggi dikonversi menjadi 255 atau putih. Nilai-nilai intensitas yang lain dikonversi sedemikian hingga berada di antara 0 dan 255. Jika diinginkan, tingkat penambahan kontras dapat diatur sehingga batas nilai intensitas terendah dan tertinggi dari citra hasil rentangnya lebih kecil, bukan di antara 0 dan 255. Untuk mengubah kecerahan (brightness) dari citra, maka masing-masing pixel dari citra ditambah dengan suatu konstanta yang ditentukan oleh pengguna. Jika konstanta yang ditambahkan positif maka kecerahan citra akan bertambah, dan jika konstanta yang ditambahkan negatif maka kecerahan citra akan berkurang atau dengan kata lain citra menjadi lebih gelap. Karena rentang nilai intensitas pixel adalah dari 0 sampai dengan 255 maka perlu dilakukan pemotongan (clipping) terhadap nilai intensitas pixel yang baru setelah terjadi penambahan atau pengurangan dengan suatu konstanta. Jika nilai intensitas pixel yang baru kurang dari 0, maka nilai intensitas pixel tersebut dijadikan 0. Jika nilai intensitas pixel yang baru lebih dari 255, maka nilai intensitas pixel tersebut dijadikan 255.

V. HASIL DAN PEMBAHASAN

Hasil dari tutorial yang telah kami buat dapat diakses secara langsung melalui internet di alamat http://sn.or.id/javapcd/javapcd.htm atau dapat juga didownload kemudian dijalankan di komputer lokal. Contoh tampilan dari applet program dapat dilihat pada gambar 4. Pada program tutorial ini pengguna dapat melakukan beberapa pengaturan secara interaktif, yaitu: •

Memilih file citra yang akan diproses.



Memilih jenis pemrosesan. Untuk saat ini baru tersedia pemrosesan kontras dan kecerahan dari citra.



Mengatur besarnya penambahan atau pengurangan kontras atau kecerahan citra.

File citra yang dapat dipilih oleh pengguna pada tutorial ini terbatas hanya citra yang tersedia pada komponen Choice. File-file citra tersebut tersimpan di web server pada direktori yang sama dengan direktori di mana file HTML dan file Java applet berada. Untuk alasan keamanan, Java applet tidak diijinkan membuka file yang berada di lokasi yang berbeda dengan lokasi file appletnya. Namun demikian jika pengguna ingin menggunakan file citranya sendiri, pengguna dapat mendownload file HTML dan Java 11

applet tersebut ke direktori komputer lokal dan melakukan beberapa modifikasi pada file HTML-nya. Petunjuk detail mengenai modifikasi yang harus dilakukan juga dicantumkan di dalam halaman web tersebut.

Gambar 4. Tampilan Applet Tutorial Pengolahan Citra Digital

Pada contoh tampilan applet tutorial di atas terlihat perbedaan citra digital antara sebelum dan setelah mengalami proses penambahan kontras citra. Citra di sebelah kiri adalah citra asal yang belum diproses, sedangkan citra di sebelah kanan adalah citra hasil setelah diproses. Di sini terlihat bahwa citra hasil setelah diproses kelihatan lebih jelas dan lebih informatif dibandingkan dengan citra asal. Jika dilihat dari histogram masing-masing citra, terlihat juga bahwa citra yang kontrasnya lebih baik memiliki histogram yang lebih menyebar dan rentang nilainya lebih luas. Sedangkan citra yang kontrasnya rendah memiliki histogram yang terkumpul di satu wilayah yang sempit. Salah satu keterbatasan dari Java applet adalah tidak dapat mengakses file yang terletak di lokasi yang berbeda dari lokasi di mana applet tersebut berada. Keterbatasan ini memang sengaja dibuat untuk alasan keamanan agar Java applet tidak disalahgunakan 12

untuk mengakses file-file di komputer lokal melalui komputer yang berada di tempat lain tanpa disadari oleh pengguna. Keterbatasan ini juga yang membuat tutorial ini tidak dapat membuka file citra yang berada di harddisk komputer lokal jika diakses melalui internet. Untuk itulah pada halaman web tutorial ini juga disediakan petunjuk jika pengguna ingin mencoba dengan file citra miliknya sendiri. Caranya adalah dengan mendownload file HTML maupun file applet dari web server dan menyimpannya di harddisk komputer lokal. Setelah itu file citra yang akan dibuka juga disalin ke dalam direktori yang sama. Dengan melakukan sedikit perubahan pada file HTML, maka pengguna akan dapat melakukan ujicoba dengan file citra apapun, asalkan citra tersebut memiliki format GIF atau JPG. Program ini telah dicoba untuk diakses dengan menggunakan browser Opera 8.5, Internet Explorer 6.0, dan Firefox 1.05 dan dapat berjalan dengan baik. Program ini juga telah dicoba untuk diakses melalui platform Windows maupun Linux dan dapat berjalan dengan baik.

VI. KESIMPULAN DAN SARAN

Dari eksperimen yang telah dilakukan dapat disimpulkan bahwa teknologi Java applet dapat dimanfaatkan untuk membuat tutorial interaktif mengenai pengolahan citra digital. Tutorial yang bersifat interaktif ini dapat membantu mempermudah mahasiswa untuk memahami konsep dan teori pengolahan citra digital tanpa harus membuat program dan melakukan kompilasi program sendiri. Dengan tutorial yang berbasis web, pengguna juga dapat mengakses tutorial ini dari mana saja dan kapan saja selama tersedia koneksi internet dan browser internet yang mendukung. Untuk pengembangan lebih lanjut di masa mendatang, tutorial ini dapat dilengkapi dengan materi lain yang berisi contoh teknik-teknik pemrosesan citra tingkat lanjut seperti menambah ketajaman citra (sharpening), menambah kehalusan citra (blurring), histogram equalization, median filtering, deteksi tepi (edge detection), dan lain-lain.

13

DAFTAR PUSTAKA



-, “Java 2 SDK, Standard Edition Documentation Version 1.2.2”, 1999, Sun Microsystems, Inc.



M. Campione, K. Walrath, A. Huml, 2000, “Java Tutorial, Third Edition: A Short Course on the Basics”, Addison Wesley.



M. Cohn, B. Morgan, 1996, “Java Developer’s Reference”, Sams.net Publishing.



B. Eckel, 1998, “Thinking in Java”, Prentice Hall PTR.



R.C. Gonzalez, R.E. Woods, 2001, “Digital Image Processing, Second Edition”, Addison-Wesley Publishing Company.



K.C. Hopson, S.E. Ingram, 1996, “Developing Professional Java Applets”, Sams.net Publishing.



C. Musciano, B. Kennedy, 1997, “HTML: The Definitive Guide”, O'Reilly & Associates.



W. K. Pratt, “Digital Image Processing: PIKS Inside, Third Edition”, 2001, John Wiley & Sons, Inc.



D. Raggett, A. Le Hors, I. Jacobs, 1999, “HTML 4.01 Specification”, W3C, http://www.w3.org/TR/html401



J. Zukowski, “Java AWT Reference”, 1997, O'Reilly & Associates.

14

LAMPIRAN lblStatus = new Label("Size: 000x000"); lblHistogram = new Label("Level 000: 0000000 / 000000"); String strNextImgFileName = getParameter("nextimg"); String fname; int nImg = 0; int npos; do { npos = strNextImgFileName.indexOf(","); if (npos > 0) { fname = strNextImgFileName.substring(0,npos); strNextImgFileName = strNextImgFileName.substring(npos+1); } else { fname = strNextImgFileName; } choImageSrc.add(fname.trim()); } while (npos >0); choImageEnh.add("Contrast"); choImageEnh.add("Brightness"); scbBrightness = new Scrollbar(Scrollbar.HORIZONTAL); scbBrightness.setValues(0, 20, -255, 275); scbBrightness.setBlockIncrement(20); btnReset = new Button("Reset"); tf1 = new TextField("80", 3); tf1.setEnabled(false); scbBrightness.setValue(Integer.parseInt(tf1.ge tText())); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); PCDPanel.setLayout(gridbag); //lblAtur c.gridwidth = 1; c.ipadx = 0; c.insets = new Insets(0,0,0,5); gridbag.setConstraints(lblAtur, c); PCDPanel.add(lblAtur); //choImageEnh c.fill = GridBagConstraints.HORIZONTAL; c.gridwidth = 2; gridbag.setConstraints(choImageEnh, c); PCDPanel.add(choImageEnh); //lblPilihCitra gridbag.setConstraints(lblPilihCitra, c); PCDPanel.add(lblPilihCitra); //choImageSrc //c.gridwidth = GridBagConstraints.REMAINDER; gridbag.setConstraints(choImageSrc, c); PCDPanel.add(choImageSrc); //lblColor c.gridwidth = GridBagConstraints.REMAINDER; gridbag.setConstraints(lblColor, c); PCDPanel.add(lblColor); //btnReset c.gridwidth = 1; c.anchor = GridBagConstraints.WEST; c.insets = new Insets(0,0,0,5); c.fill = GridBagConstraints.HORIZONTAL; gridbag.setConstraints(btnReset, c); PCDPanel.add(btnReset); //tf1 c.gridwidth = 1; c.anchor = GridBagConstraints.WEST; gridbag.setConstraints(tf1, c);

File JavaPCD.java /** * @(#)JavaPCD.java * * @Setyo Nugroho * @version 1.00 05/11/24 */ import java.applet.Applet; import java.awt.*; import java.net.URL; import java.awt.image.*; import java.awt.event.*; public class JavaPCD extends Applet implements ActionListener, ItemListener, AdjustmentListener, MouseListener, MouseMotionListener { Image image; Image image2; Image imgHistogram; Image imgHistogram2; MemoryImageSource misHasil; Button btnReset; Choice choImageSrc; Choice choImageEnh; TextField tf1; Scrollbar scbBrightness; Label lblColor; Label lblStatus; Label lblHistogram; String strImgFileName; Color clr = new Color(255,255,255); int cmd; int pixels_asal[]; int pixels[]; int imgw, imgh; int arHistogram[]; int arHistogramR[]; int arHistogramG[]; int arHistogramB[]; int arHistogram2[]; int arHistogram2R[]; int arHistogram2G[]; int arHistogram2B[]; int px, py; Rectangle rect; public void init() { arHistogram = new int[256]; arHistogramR = new int[256]; arHistogramG = new int[256]; arHistogramB = new int[256]; arHistogram2 = new int[256]; arHistogram2R = new int[256]; arHistogram2G = new int[256]; arHistogram2B = new int[256]; Panel PCDPanel = new Panel(); Panel PCDPanel2 = new Panel(); URL url = getDocumentBase(); strImgFileName = getParameter("startimg"); // user interface, pasang di PCDPanel Label lblAtur = new Label("Ubah:"); lblAtur.setBackground(Color.white); Label lblPilihCitra = new Label("File:"); lblPilihCitra.setBackground(Color.white); choImageSrc = new Choice(); choImageEnh = new Choice(); choImageSrc.add(strImgFileName); lblColor = new Label("x,y=(000,000). RGB=(000,000,000) / (000,000,000)");

1

PCDPanel.add(tf1); //scbBrightness c.gridwidth = 5; c.fill = GridBagConstraints.HORIZONTAL; gridbag.setConstraints(scbBrightness, c); PCDPanel.add(scbBrightness); //lblStatus c.gridwidth = 1; gridbag.setConstraints(lblStatus, c); PCDPanel.add(lblStatus); //lblHistogram c.gridwidth = 1; gridbag.setConstraints(lblHistogram, c); PCDPanel.add(lblHistogram); //this.setLayout(new FlowLayout(FlowLayout.LEFT)); this.setLayout(null); add(PCDPanel); PCDPanel.setLocation(5,5); PCDPanel.setSize(PCDPanel.getPreferredSiz e()); add(PCDPanel2); PCDPanel2.setLocation(5, 5+PCDPanel.getHeight()+3); PCDPanel2.setSize(0,0); btnReset.addActionListener(this); choImageSrc.addItemListener(this); choImageEnh.addItemListener(this); scbBrightness.addAdjustmentListener(this); this.addMouseMotionListener(this); setBackground(clr); BukaCitra(); }

public void itemStateChanged(ItemEvent e) { if (e.getSource() == choImageSrc) { if (strImgFileName != choImageSrc.getSelectedItem()) { strImgFileName = choImageSrc.getSelectedItem(); BukaCitra(); } return; } if (e.getSource() == choImageEnh) { tf1.setText("0"); scbBrightness.setValue(0); BukaCitra(); return; } } public void adjustmentValueChanged(AdjustmentEvent e) { if (e.getSource() == scbBrightness) { scbBrightness.removeAdjustmentListener(this) ; tf1.setText(new Integer(e.getValue()).toString()); int add = Integer.parseInt(tf1.getText()); if (choImageEnh.getSelectedItem() == "Brightness") setBrightness(add); if (choImageEnh.getSelectedItem() == "Contrast") setContrast(add);

public void paint(Graphics g) { switch (cmd) { case 0:

scbBrightness.addAdjustmentListener(this); }

g.setColor(getBackground()); int w = getSize().width; int h = getSize().height; g.fillRect(0,0,w,h); break; case 1: break; case 2: break; case 3: break; default: break; } g.drawImage(image, 12, 55, this); g.drawImage(image2, 322, 55, this); g.drawImage(imgHistogram, 10, 315, this); g.drawImage(imgHistogram2, 320, 315, this); g.setColor(Color.black); rect = choImageSrc.getBounds(); //System.out.println(rect); g.drawString("JavaPCD (C) 2005 Setyo Nugroho, http://sn.or.id", 10, 440); }

} public void mouseClicked(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseDragged(MouseEvent e) {} public void mouseMoved(MouseEvent e) { boolean blMouseInImage = false; boolean blMouseInHistogram = false; px = e.getX(); py = e.getY(); if ((px>=12) && (px<12+imgw)) { if ((py>=55) && (py<55+imgh)) { px = px - 12; py = py - 55; blMouseInImage = true; } } if ((px>=322) && (px<322+imgw)) { if ((py>=55) && (py<55+imgh)) { px = px - 322; py = py - 55; blMouseInImage = true; } } if ((py>=315) && (py<315+110)) { if ((px>=12) && (px<12+256)) { px = px - 12; blMouseInHistogram = true; } if ((px>=322) && (px<322+256)) { px = px - 322; blMouseInHistogram = true; }

public void update(Graphics g) { paint(g); return; } public void actionPerformed(ActionEvent e) { if (e.getActionCommand()=="Reset") { tf1.setText("0"); scbBrightness.setValue(0); BukaCitra(); return; } }

2

} if (blMouseInImage) { int color = pixels_asal[py*imgw + px]; int cR, cG, cB; int cR2, cG2, cB2; cR = (color >> 16) & 0xff; cG = (color >> 8) & 0xff; cB = (color) & 0xff; color = pixels[py*imgw + px]; cR2 = (color >> 16) & 0xff; cG2 = (color >> 8) & 0xff; cB2 = (color) & 0xff; lblColor.setText("x,y=(" + px + "," + py + "). RGB=(" + cR + "," + cG + "," + cB + ") / (" + cR2 + "," + cG2 + "," + cB2 + ")" ); return; } if (blMouseInHistogram) {

pixels[y*imgw + x] = 0xff000000 | (R << 16) | (G << 8) | B; } int getPixel(int x, int y) { return pixels_asal[y*imgw + x]; } int getR(int color) { return (color >> 16) & 0xff; } int getG(int color) { return (color >> 8) & 0xff; } int getB(int color) { return (color) & 0xff; } void setBrightness(int add) { int ix,iy; int clr; int r,g,b; for (ix=0; ix255) r=255; if (g>255) g=255; if (b>255) b=255; setPixel(ix, iy, r, g, b); } } image2 = createImage(misHasil); //showStatus("Brightness updated."); cmd = 3; drawHistogram(); paint(this.getGraphics()); return; }

lblHistogram.setText("Level " + px + ": " + arHistogram[px] + " / " + arHistogram2[px]); return; } return; } //========================================== =================================== //========================================== =================================== void BukaCitra() { image = getImage(getDocumentBase(), strImgFileName); System.out.println("BukaCitra"); showStatus("Sedang membuka file citra..."); do { imgw = image.getWidth(this); } while (imgw==-1); do { imgh = image.getHeight(this); } while (imgh==-1); showStatus("width=" + imgw + " , height=" + imgh); pixels_asal = new int[imgw*imgh]; pixels = new int[imgw*imgh]; PixelGrabber pg = new PixelGrabber(image, 0, 0, imgw, imgh, pixels_asal, 0, imgw); try { pg.grabPixels(); } catch (InterruptedException e) { System.err.println("interrupted waiting for pixels!"); return; } for (int i=0; i
void setContrast(int add) { int minhist, maxhist; int minhistR, maxhistR; int minhistG, maxhistG; int minhistB, maxhistB; //cari nilai min & max graylevel dari histogram minhist = 255; maxhist = 0; minhistR = 255; maxhistR = 0; minhistG = 255; maxhistG = 0; minhistB = 255; maxhistB = 0; for (int i=0; i<256; i++) { if (arHistogram[i] > 0) { if (i < minhist) minhist = i; if (i > maxhist) maxhist = i; } } for (int i=0; i<256; i++) { if (arHistogramR[i] > 0) { if (i < minhistR) minhistR = i; if (i > maxhistR) maxhistR = i; }

void setPixel(int x, int y, int color) { pixels[y*imgw + x] = 0xff000000 | color; } void setPixel(int x, int y, int R, int G, int B) {

3

} for (int i=0; i<256; i++) { if (arHistogramG[i] > 0) { if (i < minhistG) minhistG = i; if (i > maxhistG) maxhistG = i; } } for (int i=0; i<256; i++) { if (arHistogramB[i] > 0) { if (i < minhistB) minhistB = i; if (i > maxhistB) maxhistB = i; } } // contrast stretching int c1, c2, d1, d2; int c1R, c2R, d1R, d2R; int c1G, c2G, d1G, d2G; int c1B, c2B, d1B, d2B; c1 = minhist; c2 = maxhist; c1R = minhistR; c2R = maxhistR; c1G = minhistG; c2G = maxhistG; c1B = minhistB; c2B = maxhistB; //if contrast is set to 255 (maximum), then d1=0 , d2=255 if (add > 0) { d1 = (int) (minhist - ((float)add / 255 * minhist)); d2 = (int) (maxhist + ((float)add / 255 * (255-maxhist))); d1R = (int) (minhistR - ((float)add / 255 * minhistR)); d2R = (int) (maxhistR + ((float)add / 255 * (255-maxhistR))); d1G = (int) (minhistG - ((float)add / 255 * minhistG)); d2G = (int) (maxhistG + ((float)add / 255 * (255-maxhistG))); d1B = (int) (minhistB - ((float)add / 255 * minhistB)); d2B = (int) (maxhistB + ((float)add / 255 * (255-maxhistB))); } else { int histwidth = maxhist - minhist; d1 = (int) (minhist - ((float)add / 255 * ((float)histwidth/2))); d2 = (int) (maxhist + ((float)add / 255 * ((float)histwidth/2))); int histwidthR = maxhistR minhistR; d1R = (int) (minhistR - ((float)add / 255 * ((float)histwidthR/2))); d2R = (int) (maxhistR + ((float)add / 255 * ((float)histwidthR/2))); int histwidthG = maxhistG minhistG; d1G = (int) (minhistG - ((float)add / 255 * ((float)histwidthG/2))); d2G = (int) (maxhistG + ((float)add / 255 * ((float)histwidthG/2))); int histwidthB = maxhistB - minhistB; d1B = (int) (minhistB - ((float)add / 255 * ((float)histwidthB/2))); d2B = (int) (maxhistB + ((float)add / 255 * ((float)histwidthB/2))); } //System.out.println("d1,d2="+d1+","+d2); int color,R,G,B; int newR, newG, newB; for (int i=0; i> 16) & 0xff; G = (color >> 8) & 0xff;

B = (color) & 0xff; // komponen R c1=c1R; c2=c2R; d1=d1R; d2=d2R; if (R < c1 ) // zone 1 newR = (int)( (float) R * d1 / c1 ); else if (R < c2) // zone 2 newR = d1 + (int)( (float)(R-c1) * (d2-d1) / (c2-c1) ); else // zone 3 newR = d2 + (int)( (float)(R-c2) * (255-d2) / (255-c2) ); // komponen G c1=c1G; c2=c2G; d1=d1G; d2=d2G; if (G < c1 ) // zone 1 newG = (int)( (float) G * d1 / c1 ); else if (G < c2) // zone 2 newG = d1 + (int)( (float)(G-c1) * (d2-d1) / (c2-c1) ); else // zone 3 newG = d2 + (int)( (float)(G-c2) * (255-d2) / (255-c2) ); // komponen B c1=c1B; c2=c2B; d1=d1B; d2=d2B; if (B < c1 ) // zone 1 newB = (int)( (float) B * d1 / c1 ); else if (B < c2) // zone 2 newB = d1 + (int)( (float)(B-c1) * (d2-d1) / (c2-c1) ); else // zone 3 newB = d2 + (int)( (float)(B-c2) * (255-d2) / (255-c2) ); pixels[i] = 0xff000000 | (newR << 16) | (newG << 8) | newB; } image2 = createImage(misHasil); cmd = 3; drawHistogram(); paint(this.getGraphics()); } void drawHistogram() { int i, color, r, g, b, gray, maxh; int wHist = 260; int hHist = 110; Graphics gr; // histogram untuk citra asal for (i=0; i<256; i++) { arHistogram[i] = 0; arHistogramR[i] = 0; arHistogramG[i] = 0; arHistogramB[i] = 0; } imgHistogram = createImage(wHist, hHist); int iw, ih; for (i=0; i> 16) & 0xff; g = (color >> 8) & 0xff; b = (color) & 0xff; gray = (int)((r+g+b) / 3); arHistogram[gray]++; arHistogramR[r]++; arHistogramG[g]++; arHistogramB[b]++; } maxh = 0; for (i=0; i<256; i++) if (maxh < arHistogram[i]) maxh = arHistogram[i]; gr = imgHistogram.getGraphics(); gr.drawRect(0,0,wHist-1,hHist-1);

4

for (i=0; i<256; i++) { gr.drawLine(i+2,107,i+2,107 (100*arHistogram[i]/maxh) ); } // histogram untuk citra hasil for (i=0; i<256; i++) { arHistogram2[i] = 0; } imgHistogram2 = createImage(wHist, hHist); for (i=0; i> 16) & 0xff; g = (color >> 8) & 0xff; b = (color) & 0xff; gray = (int)((r+g+b) / 3); arHistogram2[gray]++; } maxh = 0;

Pengaturan yang tersedia saat ini adalah untuk mengubah kecerahan (brightness) dan kontras (contrast) dari citra. Hasil manipulasi citra akan langsung ditampilkan di layar.

Selamat bereksperimen dengan JavaPCD...

<APPLET code = "JavaPCD.class" width = "700" height = "450" >

Keterangan:
Citra di sebelah kiri adalah citra asal, sedangkan citra di sebelah kanan adalah citra hasil manipulasi. Di bawah masing-masing citra adalah histogram dari citra tersebut. Untuk melakukan perubahan, pilihlah Brightness atau Contrast pada combo box yang tersedia. Kemudian gunakan mouse untuk menggeser scrollbar yang ada. Tombol Reset dapat digunakan untuk mengembalikan citra ke keadaan semula. Jika anda ingin mencoba dengan file citra yang lain, pilihlah pada combo box yang tersedia.

for (i=0; i<256; i++) if (maxh < arHistogram2[i]) maxh = arHistogram2[i]; gr = imgHistogram2.getGraphics(); gr.drawRect(0,0,wHist-1,hHist-1); for (i=0; i<256; i++) { gr.drawLine(i+2,107,i+2,107 (100*arHistogram2[i]/maxh) ); } return; } }

File javapcd.htm

Jika anda ingin mencoba tutorial ini dengan citra anda sendiri, silakan download file javapcd.zip (~14 KB), kemudian ekstrak file tersebut ke dalam satu folder di harddisk lokal anda. Setelah itu masukkan file citra anda ke folder tersebut. Kemudian buka file javapcd.htm dengan editor berbasis teks (misalnya Notepad, vi, KWrite, atau GEdit). Lakukan perubahan pada bagian <PARAM NAME="nextimg" VALUE="nadiabw-hi.jpg, ..."> dengan memasukkan nama file citra anda ke dalam daftar file citra yang sudah ada. Gunakan koma untuk memisahkan nama file yang satu dengan yang lain. Setelah itu simpan file javapcd.htm. Selanjutnya gunakan browser internet untuk membuka file javapcd.htm.

(C) 2005 Setyo Nugroho, http://sn.or.id


JavaPCD - Tutorial Pengolahan Citra Digital Berbasis Web

(C) 2005 Setyo Nugroho

Halaman ini berisi tutorial dasar pengolahan citra digital berbasis web dengan menggunakan teknologi Java. Untuk dapat mengakses tutorial ini anda harus menggunakan browser yang mendukung Java applet, misalnya: Internet Explorer, Firefox, Opera, atau Netscape Navigator. Untuk mendapatkan tampilan yang optimal, disarankan menggunakan resolusi layar minimal 800x600 pixel, dengan kedalaman warna highcolor (16-bit) atau lebih tinggi.

Pada tutorial ini anda dapat melakukan percobaan secara interaktif untuk memanipulasi citra digital.

5


Related Documents


More Documents from "anggar_55"