BAB II

 

KAJIAN LITERATUR

 

 

2.1 Kajian Ke Atas Aplikasi Berasaskan Web Sedia Ada

2.1.1 WEB FX - A web based graphic effects generator

Laman web ini boleh dicapai di url http://www.nbswebfx.com adalah merupakan satu aplikasi berasaskan web yang akan menjanakan kesan grafik ke atas imej yang diinputkan oleh pengguna.

Laman web ini membenarkan pengguna melakukan kesan grafik ke atas mana-mana imej dengan syarat imej tersebut dapat dicapai secara online. Kesemua aplikasi kesan grafik ini ditulis dengan menggunakan bahasa pengaturcaraan C. Teknologi pembangunan laman web ini adalah CGI.Langkah-langkah untuk melakukan kesan grafik ke atas imej bagi laman web ini adalah seperti berikut :

· Pengguna perlu memasukkan url bagi imej yang akan diberi kesan grafik pada textbox yang disediakan.
· Pengguna juga boleh memasukkan alamat bagi satu laman web, di mana kesemua imej bagi laman tersebut akan dipaparkan pada browser. Pengguna boleh memilih imej yang diingini dengan mengklik pada mana-mana imej.
· Pengguna seterusnya memilih satu kesan daripada lebih empat dozen kesan grafik yang disediakan dalam pull down menu.
· Pengguna kemudiannya memasukkan kadar intensiti kesan grafik atau warna latarbelakang sekiranya kesan grafik yang dipilih memerlukan input tersebut.
· Pengguna perlu klik butang Apply Effect bagi membolehkan kesan grafik dijalankan.
· Satu imej baru yang telah diberikan kesan grafik yang dipilih oleh pengguna akan dipaparkan pada skrin sebagai keputusan aplikasi tadi.
· Pengguna boleh menyimpan imej tersebut ke dalam hard disk ataupun menghantarnya kepada rakan-rakan sebagai file attachment.

Berikut adalah proses-proses yang terlibat dalam aplikasi kesan grafik pada laman web ini :
· Input
Pengguna menggunakan form untuk memasukkan url bagi satu imej dan memilih kesan grafik yang dikehendaki.
· Download
Nbswebfx.com melarikan Lynx, satu web browser untuk download imej yang dipilih oleh pengguna.
· Decode
Nbswebfx.com melakukan proses dekod data GIF dan JPEG kepada raw data
· Effect
Kesan grafik ke atas imej akan dilakukan di peringkat ini.
· Recode
Nbswebfx.com akan menyimpan imej yang diberi kesan grafik sebagai satu fail imej yang baru pada server.
· Output
Seterusnya, Nbswebfx.com akan memaparkan satu satu laman web mudah berserta sekali dengan fail imej yang baru tersebut.

Secara keseluruhannya, laman web ini adalah satu laman web yang membolehkan kesan grafik dilakukan ke atas imej secara online dengan cara yang mudah dan pantas. Kesan grafik yang disediakan adalah hampir sebanyak empat dozen seperti shadow, mosaic, mirror, emboss, animated ripple, lake effect, drop bricks dan banyak lagi.

Laman web ini merupakan satu alternatif yang baik bagi pembangun laman-laman web yang mahukan kesan grafik diberikan ke atas imej-imej yang diletakkan pada laman web mereka supaya antaramuka laman web mereka menjadi lebih menarik lagi.

Pengguna tidak akan mengalami masalah untuk menggunakan aplikasi yang disediakan. Laman web ini ternyata dapat membuatkan pengguna berasa tertarik dengan keupayaan aplikasi kesan grafik yang disediakan. Walaupun begitu, kelemahan ketara laman web ini dapat dilihat pada antaramukanya yang agak hambar dan terlalu ringkas.

 

2.2 Kajian Ke Atas Bahasa Pengaturcaraan Java

2.2.1 Sejarah Java

Pada tahun 1991, Sun Microsystem sedang membangunkan satu sistem untuk menyokong pasaran alatan elektronik. Oleh yang demikian, satu projek yang dipanggil Green telah dibentuk untuk mengkaji mengenai penggunaan mikroprosessor yang murah dan boleh diprogramkan dalam pelbagai alatan elektronik termasuklah PDA(Personal Devices Assistant), Interactive TV Boxes dan kemudahan domestik.

Bahasa pengaturcaraan C++ telah dieksperimen tetapi tenyata tidak dapat mencapai matlamat kerana tidak dapat berfungsi dengan pelbagai rekabentuk peralatan. Oleh itu, satu bahasa pengaturcaraan baru telah dibangunkan yang pada mulanya dinamakan Oak tetapi kemudaian dikenali sebagai Java kerana berlaku konflik hakcipta berikutan dengan kewujudan produk bernama Oak yang lain.

Pada tahun 1994, Netscape telah memperkenalkan web browsernya yang baru dan telah menukarkan fenomena dan menjadi teknologi terbaru dalam aplikasi Web dan Internet. Walaupun Java telah direkabentuk untuk matlamat lain, tetapi ternyata dapat menyokong dan bersesuaian dengan aplikasi yang berasaskan web.

Java mempunyai kebolehupayaan multiplatform, keselamatan, mudah dan lasak untuk memenuhi keperluan dalam aplikasi berasaskan web. Dengan memenuhi keperluan keselamatan dan distributed, Java mula dikenali sebagai satu tool yang semakin meningkat permintaannya dalam memenuhi keperluan persekitaran World Wide Web.

 

2.2.2 Senibina Java

Senibina dan rekabentuk Java adalah terdiri daripada teknologi berikut :
· Bahasa pengaturcaraan Java
· Format fail .class Java
· Java API (Application Programming Interface)
· Java Virtual Machine (JVM)

Pengekodan dan pelaksanaan program Java akan menggunakan keempat-empat teknologi di atas. Program di dalam fail sumber ditulis dengan bahasa pengaturcaraan Java dan kemudiannya akan dikompil kepada format fail .class sebelum fail .class tersebut dilaksanakan (run) pada JVM.

Semasa pengekodan Java dilakukan, capaian ke atas sumber sistem dilakukan dengan memanggil fungsi-fungsi (method) tertentu di dalam kelas yang mengimplementasikan Java API.

Projek ini dibangunkan menggunakan bahasa pengaturcaraan Java dengan JDK 1.2.2 sebagai platformnya. Java menyediakan banyak pakej-pakej untuk memudahkan pengaturcaraan dilakukan. Setiap pakej mempunyai public interface dan class yang tersendiri di mana ia terbahagi kepada empat kategori iaitu :
· Interfaces
· Classes
· Exceptions
· Errors

Setiap public interface dan class yang telah dikategorikan di atas mempunyai class declaration sendiri. Class declaration tersebut dapat dikategorikan kepada tiga bahagian iaitu :
· Field / variable
· Constructor
· Method

Setiap bahagian di atas pula boleh terdiri daripada jenis-jenis seperti di bawah :
· Instance variable (non static field)
· Static Field (class variable)
· Constructor
· Instance method (non static method)
· Class method (static method)


Rajah 2.1 Senibina Pakej Dalam Java



2.2.3 Bahasa Pengaturcaraan Java

Java adalah bahasa pengaturcaraan yang berorientasikan objek yang disertakan sekali dengan development tool. Java dapat diterangkan sebagai :
· Sintaks iaitu peraturan bagaimana hendak menulis bahasanya.
· Semantik iaitu maksud bagi setiap statement program.

Penggunaan bahasa Java adalah hampir sama dengan C dan C++ dalam pengisytiharan pembolehubah dan kawalan aliran. Walaubagaimanapun terdapat perbezaan yang nyata dalam persekitaran programnya.

Java adalah bahasa pengaturcaraan yang fleksibel di mana ia boleh menjadi bahasa pengaturcaraan untuk aplikasi dan juga web. Java didatangkan di dalam dua bentuk iaitu aplikasi dan applet. Perbezaaan di antara kedua-duanya adalah seperti di bawah :

i) Aplikasi

- ianya adalah sama dengan mana-mana program yang dilarikan pada komputer contohnya seperti program .exe
- dijalankan pada local machine iaitu server side
- tiada kekangan keselamatan iaitu tidak ada sandbox


ii) Applet

- aplikasi mini yang akan dilaksanakan dalam konteks web browser
- applet akan dimuatturun ke browser dan akan mula dilaksanakan apabila halaman HTML dipaparkan
- adanya kekangan keselamatan iaitu applet sandbox untuk mengelakkan daripada berlakunya capaian ke atas fail local dan pencetak
- applet adalah pada sebelah pelanggan, iaitu client side
- di atas sebab-sebab keselamatan, kebanyakan web browser meletakkan kekangan ke atas applet. Berikut adalah kekangan-kekangan ke atas applet :

· Applet tidak boleh load libraries ataupun mendefinisikan native methods
· Applet tidak boleh membaca dan menulis fail pada klien
· Applet hanya boleh membuat hubungan rangkaian dengan hos asalnya sahaja
· Applet tidak boleh mengaktifkan mana-mana program yang terdapat pada klien
· Applet tidak boleh mengetahui system properties tertentu
· Applet boleh memanggil public method daripada applet lain dalam halaman yang sama


2.2.4 Kebaikan Dan Kelemahan Java

Kebaikan bahasa pengaturcaraan Java adalah seperti berikut:
· Machine independence
JVM adalah multiplatform, oleh sebab itu Java bytecode akan dapat dilaksanakan pada mana-mana mesin.
· Keselamatan
JVM dapat mengelakkan daripada berlakunya pencerobohan ke atas keselamatan oleh applet kerana adanya applet sandbox.
· Mengurangkan saiz applet
Fungsi built in Java library adalah teletak di dalam browser bukannya dimuaturunkan bersama-sama dengan applet.

Kelemahan bahasa pengaturcaraan Java :adalah seperti yang diterangkan di bawah :
· Persembahan
Proses penterjemahan on-the-fly adalah mahal.
· Pengkompil Java menterjemahkan bytecode kepada arahan target dependent machine semasa perlaksanaan, tetapi kod Java masih lagi 3 hingga 10 kali lebih perlahan daripada kod C atau C++.

 

2.3 Kajian Ke Atas Kesan Grafik Invert, Blur Dan Emboss

Kajian yang dilakukan ke atas kesan invert adalah melibatkan kesan invert, blur dan emboss itu sendiri, sistem warna RGB, proses filtering dalam Java dan dalam projek, penggunaan package dalam Java, kelas dan interface untuk operasi filtering dalam Java dan algoritma setiap kesan grafik.

 

2.3.1 Sokongan Java Terhadap Sistem Warna RGB

Sebuah color monitor mempunyai tiga senapang elektron, iaitu senapang elektron untuk warna merah, biru dan hijau. Sinaran elektron bagi ketiga-tiga senapang elektron ini ditujukan kepada fosfor yang berada pada skrin monitor. Tindakbalas di antara sinaran elektron daripada ketiga-tiga senapang elektron dengan fosfor akan menghasilkan satu warna tertentu bagi membentuk setiap piksel pada skrin.

Komputer mewakilkan warna-warna dengan menggabungkan nilai keamatan warna-warna primer dalam bentuk numerik. Warna-warna primer yang dimaksudkan adalah merah, hijau dan biru. Sistem warna ini dikenali sebagai RGB (red, green, blue) dan disokong sepenuhnya dalam Java. Sistem warna RGB akan digunakan untuk menyokong pembangunan projek ini.

Walaupun RGB adalah sistem warna komputer yang paling banyak digunakan, terdapat juga beberapa sistem warna yang lain. Antaranya ialah, HSB (hue, saturation, brightness) da;am sistem warna HSB, warna adalah ditakrifkan dengan mengubah nilai darjah bagi hue, saturation dan brightness. Sistem warna HSB juga disokong oleh Java. Walaubagaimanapun, sistem warna HSB tidak akan digunakan dalam projek ini.

Java menyokong penggunaan imej 32 bit, bermaksud komponen merah, hijau dan biru serta alpha bagi imej tersebut disimpan dalam bentuk 32 bit. Setiap komponen ini adalah terdiri daripada 8 bit (1 bait) di mana nilai warnanya adalah daripada 0 hingga 255. (Jumlah warna adalah 28 = 256)

Warna RGB adalah 32 bit integer yang disimpan dalam bentuk 0xAARRGGBB di mana ;
· AA mewakili nilai transparent bagi imej,
· RR mewakili nilai warna merah bagi imej,
· GG mewakili nilai warna hijau bagi imej, dan
· BB mewakili nilai warna biru bagi imej.

Dalam komputer, setiap nilai piksel dalam sesuatu imej adalah diwakili dengan nilai RGB. Kesan invert yang akan dijalankan adalah dengan melaksanakan manipulasi ke atas nilai RGB bagi setiap piksel dalam imej.

Nilai 0 bagi satu komponen warna bermaksud komponen itu adalah tidak wujud sama sekali manakala nilai 255 bagi satu komponen warna memberi makna bahawa nilai komponen tersebut adalah pada tahap maksima.

Sekiranya ketiga-tiga komponen warna adalah mempunyai nilai 0, hasil warna bagi sesuatu piksel adalah warna hitam. Sebaliknya, jika nilai kesemua komponen-komponen tersebut adalah 255, warna yang dihasilkan adalah warna putih. Jika komponen warna merah bernilai 255 dan yang lain adalah bernilai 0, maka warna yang dihasilkan adalah warna merah yang asli (pure red).

Komponen alpha pula menerangkan nilai transparency bagi sesuatu piksel. Sekiranya nilai alpha adalah 0, ini bermaksud, satu piksel tersebut adalah transparent (invisible) sepenuhnya. Manakala, jika komponen alpha bernilai 255, ini bermakna satu piksel adalah legap (opaque) sepenuhnya. Nilai di antara 0 hingga 255 membolehkan warna latarbelakang (background color) akan kelihatan atau tidak menerusi sesuatu piksel dengan hanya mengubah nilai darjah bagi komponen alpha.

Dalam Java, komponen warna untuk sesuatu imej adalah diencapsulated dalam satu kelas dipanggil Color. Kelas Color adalah ahli bagi package java.awt dan mewakilkan tiga koponen warna primer iaitu merah, hijau dan biru. Kelas Color adalah sangat berguna kerana ia menyediakan abstrak (abstraction) untuk perwakilan warna, bersama-sama dengan method untuk extract dan mengubahsuai komponen warna primer. Kelas Color juga mengandungi ahli berjenis constant yang mewakili warna-warna yang popular.

Walaubagaimanapun, sekiranya Java ingin memaparkan warna pada sistem yang menyokong perwakilan warna yang kurang daripada 32 bit, ini boleh dilakukan dengan memetakan (mapping) nilai warna 32 bit kepada sistem ini dengan menggunakan model warna indeks (index color model). Kualiti imej mungkin akan berkurang kerana tidak semua warna dapat dipaparkan. Tetapi, perkara ini tidak akan dibincangkan dengan lebih mendalam dalam projek ini.

 

2.3.2 Proses Filtering Dalam Java

Image filtering kadangkala dirujuk sebagai image processing. Kebanyakan program seperti Adobe Photoshop menggunakan konsep image processing seperti sharpen dan soften sesuatu imej. Program image processing melibatkan penggunaan rutin library yang kompleks untuk memanipulasi imej.

Dalam Java, objek image processing dipanggil image filter dan objek ini akan melakukan proses filtering ke atas imej. Bolehlah disimpulkan di sini bahawa image filter adalah satu objek yang mengubah nilai piksel dalam sesuatu imej berdasarkan algoritma tertentu.

Image filter bagi Java bolehlah digambarkan sebagai satu filter untuk data bagi satu imej, masuk dan keluar daripada sumber ke satu destinasi. Image filter yang disokong oleh Java adalah berdasarkan kepada tiga komponen iaitu :
· Image producer
Image producer membekalkan data imej (raw data) bagi sesuatu imej.
· Image filter
Image filter melakukan proses filter ke atas data imej (raw data) imej.
· Image consumer
Data imej (raw data) yang telah dilakukan proses filter ke atasnya akan dihantar kepada image consumer.

Rajah 2.1 : Hubungan Antara Image Producer, Image Filter Dan Image Consumer

Untuk melakukan filtering ke atas imej, data imej tersebut perlulah dibaca sebagai raw data. Raw data adalah merupakan nilai setiap piksel bagi imej tersebut. Proses filtering kemudian dilakukan ke atas raw data ini oleh filter berdasarkan kepada algoritma tertentu. Seterusnya, raw data yang telah diubah nilainya dengan algoritma tadi akan digunakan untuk melukis kembali satu imej hasil. Imej hasil ini adalah merupakan hasil keputusan daripada proses filtering tadi.

Untuk projek ini, kesan grafik yang akan dibangunkan adalah kesan invert. Data imej akan dibaca daripada imej sebagai raw data. Proses filtering dilaksanakan ke atas raw data tersebut dengan menggunakan algoritma invert. Pengiraan ke atas raw data dengan algoritma invert akan menghasilkan satu imej hasil. Imej hasil ini merupakan output bagi proses filtering ini iaitu negatif foto bagi imej tersebut.

 

2.3.3 Kelas Dan Interface Untuk Operasi Filtering Dalam Java

Berikut adalah kelas dan interface yang disediakan dalam Java untuk proses image filtering yang digunakan dalam pembangunan projek ini:

· Interface ImageProducer
Interface ini menyediakan method yang diperlukan untuk mengekstrakkan (membaca) raw data daripada objek Image. Kelas yang mengimplementasikan interface ini dibolehkan untuk implement kesemua method yang disediakan dalam interface ImageProducer.
· Kelas FilteredImageSource
Kelas FilteredImageSource akan mengimplementasikan interface ImageProducer dan menghasilkan data image yang telah difilterkan.
· Interface ImageObserver
Interface ini digunakan untuk mendapatkan status bagi imej melalui method imageUpdate (Image, int, int, int, int, int).
· Interface ImageConsumer
Interface ImageConsumer pula menyediakan method untuk membaca (retrieve) data imej (raw data) daripada interface ImageProducer.
· Kelas ImageFilter
Kelas ImageFilter mengandungi image filter yang akan memproses data imej yang dihantar daripada image producer kepada image consumer.
· Kelas RGBImageFilter
Kelas RGBImageFilter menjalankan proses filtering ke atas model warna yang terkandung dalam image producer. Kelas RGBImageFilter akan mengimplementasikan image filter tertentu ke atas model warna image producer.

Untuk pembangunan projek ini, kelas dan interface di atas akan digunakan. Proses membaca raw data daripada satu imej akan menggunakan kelas dan interface yang telah disediakan dalam Java, hanya kesan invert sahaja yang akan dibangunkan sendiri. Kesan invert yang dibangunkan nanti adalah terkandung dalam kelas InvertFilter di mana algoritma kesan invert akan digunakan.


2.4 Kesan Invert

Terdapat banyak kesan grafik yang boleh diberikan ke atas sesuatu imej. Antaranya adalah seperti blurring di mana imej itu akan menjadi kabur apabila diberikan kesan ini, kesan lake effect akan memberikan kesan alunan air ke atas imej dan kesan emboss yang menjadikan imej diberi impak acuan besi.

Kesan grafik yang dipilih bagi projek ini adalah kesan invert. Kesan invert akan menjadikan sesuatu imej menjadi seperti negatif foto. Ia sebenarnya bertindak dengan cara menggantikan nilai warna imej dengan nilai warna yang berlawanan dengannya. Contohnya, menggantikan warna hitam kepada warna putih. Di bawah adalah contoh imej sebenar dengan imej yang diberikan kesan invert.

imej sebelum kesan invert
imej selepas kesan invert

Rajah 2.2 Rajah Menunjukkan Imej Asal Dan Imej Yang Telah Diimplimen Dengan Kesan Invert

 

2.4.1 Algoritma Kesan Invert

Kesan grafik yang akan dibangunkan untuk projek ini adalah kesan invert. Apabila sesuatu imej diberikan kesan grafik ini , hasilnya adalah merupakan negatif foto bagi imej tersebut seperti yang ditunjukkan sebelum ini.

Kesan grafik ini dilakukan dengan melakukan sedikit perubahan kepada nilai warna bagi imej. Proses filtering akan dijalankan ke atas imej di mana ia akan mengubah data imej dengan melaksanakan pengiraan berdasarkan satu algoritma tertentu. Di sini, nama InvertFilter digunakan untuk untuk merujuk proses filtering yang akan menghasilkan kesan invert ke atas imej.

Kesan grafik ini melibatkan proses filtering ke atas warna setiap pixel bagi sesuatu imej. Kesan invert dihasilkan dengan melakukan operasi NOT ke atas nilai merah, hijau dan biru setiap piksel bagi sesuatu imej.

Operasi NOT di sini bermaksud bitwise NOT. Keterangan lanjut mengenai operasi NOT adalah berdasarkan seperti Jadual 2.1 di bawah.

Jadual 2.1 : Operasi NOT

Jadual 2.1 menerangkan bagaimana operasi NOT dilakukan. Operasi ini memerlukan satu input dan akan menghasilkan bit 0 atau 1 berdasarkan kepada input yang dimasukkan. Secara keseluruhannya, operasi NOT adalah berdasarkan peraturan di bawah :

· Sekiranya input bernilai 0, maka outputnya adalah 1
· Sekiranya input bernilai 1, maka outputnya adalah 0

Kesan invert memerlukan nilai merah, hijau dan biru setiap piksel bagi sesuatu imej. Katakanlah nilai merah, hijau dan biru bagi satu piksel dalam imej sumber adalah seperti berikut :
· Nilai R (red) = 3
· Nilai G (green) = 105
· Nilai B (blue) = 89

Untuk menghasilkan kesan invert bagi piksel tersebut itu, kelas InvertFilter akan melaksanakan operasi NOT ke atas setiap nilai merah, hijau dan biru di atas. Manakala nilai alpha (transparency) tidak akan berubah, bermakna nilai asal bagi setiap piksel imej tersebut akan dikekalkan. Oleh sebab komputer hanya mengenali bit 0 dan 1, maka operasi NOT ini dilakukan dalam persekitaran binari bagi memudahkan pemahaman ke atas operasi NOT.

Jadual 2.2 : Operasi NOT Ke Atas Nilai R

Nilai R adalah bersamaan dengan 3 dalam persekitaran desimal, dan dalam persekitaran binari, nilai 3 adalah bersamaan dengan 00000011. Operasi NOT dilakukan ke atas nilai 00000011 (3) dan hasil output bagi operasi NOT ke atas nilai R adalah 11111100. 11111100 adalah bersamaan dengan 252 dalam persekitaran desimal. Jadual 2.2 menerangkan operasi NOT ke atas nilai R yang memegang nilai 3.
Operasi NOT juga dilakukan ke atas nilai G dan nilai B seperti yang telah dinyatakan di atas. Keputusan bagi operasi NOT bagi nilai merah, hijau dan biru yang dinyatakan dalam contoh adalah seperti berikut.

Jadual 2.3 : Keputusan Operasi NOT Ke Atas Nilai RGB



Rajah 2.3 : Algoritma Kesan Invert

Oleh sebab itu, secara ringkasnya, dapatlah disimpulkan di sini bahawa algoritma kesan invert adalah seperti berikut :Algoritma ini perlulah dilaksanakan ke atas nilai merah, hijau dan biru bagi setiap piksel dalam imej bagi menghasilkan kesan invert. Apabila proses filtering ini selesai dilakukan, imej hasil akan kelihatan seperti negatif foto bagi imej sebenar.



2.5 Kesan Kabur (Blur )

Perpustakaan kesan grafik yang akan dibangunkan dalam projek ini ialah kesan kabur. Secara kasarnya, kesan kabur ini akan menghasilkan imej yang kabur, pudar, kelam, kurang jelas, suram dan samar-samar dari segi bentuk imej, warna dan keamatan cahaya imej tersebut berbanding imej asal sebelum kesan kabur dijanakan.

Kesan ini bertindak dengan menggunakan teknik convolution filter yang digunakan dengan meluas dalam perpustakaan kesan grafik seperti kesan kabur, kesan ketajaman (sharpening), kesan emboss, kesan edge-detection dan banyak lagi.

imej asal
imej hasil implemen terhadap kesan kabur

Rajah 2.4 Rajah Menunjukkan Imej Asal Dan Imej Yang Telah Diimplimen Dengan Kesan Kabur

2.5.1 Convolution Kernel atau Convolution Matrix

Convolution Kernel atau Convolution Matrix merupakan satu matriks yang disetkan sebagai matriks piawai untuk mendapatkan kesan grafik terhadap piksel yang dipilih. Bagi kebanyakan jenis kesan grafik, matriks peringkat 3 X 3 telah dipilih sebagai saiz piawai convolution kernel atau convolution matrix kesan grafik tersebut. Dalam membangunkan perpustakaan kesan kabur ini, penulis juga telah memilih untuk menggunakan matriks peringkat 3 X 3 sebagai matriks piawai bagi kesan kabur ini. Walaubagaimanapun, dalam beberapa kes convolution matrix ini boleh bertukar kepada matriks 2 X 2, 2 X 3 dan 3 X 2.

 

contoh matriks 3 X 3
contoh matriks 2 X 3
contoh matriks 3 X 2

Rajah 2.5 Contoh-contoh peringkat Convolution Matrix yang digunakan dalam algoritma Kesan Kabur

Convolution Kernel atau Convolution Matrix ialah semua piksel-piksel disekitar piksel yang dipilih untuk diimplemenkan kesan grafik ke atasnya. Convolution kernel ini boleh bernilai lapan, enam dan empat.

contoh convolution kernel bagi piksel yang berada ditengah-tengah imej
contoh convolution kernel bagi piksel yang berada dibahagian hujung atas atau bawah imej
contoh convolution kernel bagi piksel yang berada dibahagian pepenjuru imej

Rajah 2.6 Contoh-contoh convolution kernel bagi piksel dalam sesebuah imej

 

2.5.2 Teknik Convolution Filter

Pada dasarnya, algoritma kesan kabur yang ingin penulis bangunkan menggunakan teknik convolution filter. Secara kasar, teknik ini akan memproses nilai sesuatu piksel berdasarkan piksel-piksel disekeliling piksel tersebut. Teknik convolution filter digunakan dengan meluas dalam membangunkan banyak perpustakaan kesan grafik seperti kesan kabur, ketajaman (sharpening) dan edge-detection effects, emboss dan lain-lain kesan grafik. Teknik ini juga digunakan dengan meluas dalam membangunkan kesan-kesan grafik lain yang lebih kompleks. Algoritma yang diterangkan di bawah merupakan teknik convolution filter.

  1. Untuk mengimplemenkan kesan filter ke atas piksel yang telah dipilih, nilai RGB bagi setiap piksel pada convolution kernel akan didapatkan.
  2. Nilai RGB bagi piksel pada convolution kernel akan di proses berdasarkan algoritma filter yang dipilih.
  3. Nilai akhir proses filtering pada convolution kernel akan dinilaikan terhadap piksel yang berada ditengah-tengah kernel.

 

2.5.3 Algoritma Kesan Kabur

 

Dalam mendapatkan kesan kabur terhadap piksel yang telah dipilih, algoritma di bawah telah pilih untuk digunakan untuk diimplemenkan dalam projek nanti.

  1. Pilih piksel yang ingin diimplimenkan kesan kabur ke atas piksel tersebut. Sebagai contoh, piksel pada koordinat (25,87) dipilih untuk diproses.
  2. Rajah 2.7 : Contoh Titik Untuk Diproses Bagi Menghasilkan Kesan Kabur.

  3. Kenalpasti semua piksel pada convolution kernel piksel (25,87).
  4.  

    Rajah 2.8 : Piksel-Piksel Pada Convolution Kernel Titik (25,87)

  5. Dapatkan nilai RGB setiap piksel pada convolution kernel tersebut.
  6.  

    Rajah 2.9 : Nilai-Nilai RGB Pada Convolution Kernel Didapatkan.

  7. Jumlahkan nilai-nilai RGB dalam convolution kernel.
  8. KOORDINAT

    NILAI

    R

    G

    B

    24,86

    204

    204

    205

    25,86

    255

    102

    153

    26,86

    204

    153

    204

    24,87

    255

    204

    153

    25,87

    145

    054

    151

    26,87

    255

    255

    0

    24,88

    0

    153

    0

    25,88

    204

    102

    53

    26,88

    151

    255

    153

    JUMLAH

    1528

    1428

    921

    Jadual 2.4 Jumlah Bagi Nilai RGB Setiap Piksel Pada Convolution Kernel Dikira.

  9. Bahagikan jumlah tersebut dengan jumlah nilai piksel dalam convolution kernel.
  10. Jumlah nilai piksel convolution kernel = 9

    Rajah 2.10 Jumlah Nilai Piksel Dalam Convolution Matriks

    NILAI

    R

    G

    B

    JUMLAH

    1528

    1428

    921

    JUMLAH / 9

    191

    178.5

    115.125

    NILAI AKHIR

    191

    178

    115

    Jadual 2.5 : Purata Bagi Nilai RGB Setiap Piksel Pada Convolution Kernel Dikira.

  11. Nilaikan RGB piksel yang berada di tengah-tengah convolution kernel dengan nilai hasil bahagi tadi.

Rajah 2.11 Purata Nilai Piksel Diumpukkan Pada Piksel Ditengah-Tengah Kernel

 

Algoritma ini perlulah dilaksanakan ke atas nilai RGB bagi setiap piksel dalam imej bagi menghasilkan kesan kabur. Apabila proses filtering ini selesai dilakukan, imej hasil akan kelihatan kabur dan kurang jelas berbanding imej sebenar.



2.6 Kesan Emboss

Imej yang diberikan kesan emboss akan kelihatan seolah-olah seperti diukir pada permukaan besi kerana ianya akan menjadi timbul (raised) atau tenggelam (stamped) melalui gabungan warna kelabu, hitam dan putih. Berikut ditunjukkan imej asal dan hasilnya setelah diberikan kesan emboss.

imej asal
imej selepas kesan emboss

Rajah 2.12 Imej asal dan hasilnya setelah diberi kesan emboss




Rajah 2.13 : Pandangan geometri terhadap kesan emboss
.


Terdapat dua faktor yang mempengaruhi kesan emboss, iaitu arah cahaya dan kedalaman. Arah cahaya yang dipancarkan ke atas imej diwakilkan dengan nilai azimuth. Azimuth ialah nilai sudut dari paksi X, sama seperti bearing kompas. Azimuth sifar bermaksud cahaya dipancarkan dari paksi X imej, yakni arah kanan. Kedalaman pula menentukan kadar timbul atau tenggelam bagi kesan. Nilai kedalaman yang tinggi akan menghasilkan kesan emboss yang lebih jelas berbanding nilai kedalaman yang rendah. Rajah 2.13 menunjukkan pandangan geometri bagi kedalaman dan arah sumber cahaya dalam penghasilan kesan emboss dalam perpustakaan ini. Rajah 2.14 pula menunjukkan imej dengan kesan emboss pada arah cahaya dan kedalaman yang berbeza.



Cahaya dari arah kiri atas, kedalaman 2


Cahaya dari arah atas, kedalaman 10


Cahaya dari arah kanan atas, kedalaman 15


Cahaya dari arah kiri, kedalaman 2


Imej asal


Cahaya dari arah kanan, kedalaman 15


Cahaya dari arah kiri bawah, kedalaman 2


Cahaya dari arah bawah, kedalaman 10


Cahaya dari arah kanan bawah, kedalaman 15

Rajah 2.14 : Imej dengan kesan emboss pada arah cahaya dan kedalaman yang berbeza.



2.6.1 Algoritma Convolution

Algoritma convolution adalah satu teknik yang tidak asing lagi dalam pemprosesan imej. Algoritma convolution ini diaplikasikan dalam menghasilkan pelbagai kesan grafik ke atas imej misalnya emboss, find edges, glowing edges, sharpen, trace contour, blur, dan solarize. Persamaan umum convolution ( Burdick, 1997 ) adalah seperti Rajah 2.15 :


Rajah 2.15 : Algoritma convolution


Perbezaan utama dalam penghasilan setiap kesan grafik seperti yang dinyatakan di atas adalah convolution kernel yang digunakan dalam algoritma convolution ini. Convolution kernel merupakan elemen penting dalam algoritma convolution, yang diwakili sebagai M dengan setiap elemen dilabelkan Mi,j dalam rajah di atas. Convolution kernel tersebut mempunyai satu susunan nombor dalam lajur dan baris yang selalunya diwakili dengan m x n.

Dari persamaan umum bagi algoritma convolution tersebut, setiap elemen dalam convolution kernel iaitu Mi,j akan didarabkan dengan nilai piksel dalam neighbourhood (piksel yang berada di sekeliling piksel P2,2) bagi imej input berlabel P, iaitu Pi,j. Hasil pendaraban ini akan dijumlahkan dan dibahagikan dengan hasil tambah nilai convolution kernel, iaitu Mi,j. Hasil tambah nilai convolution kernel ini turut dikenali sebagai pemberat kernel. Hasil yang didapati adalah nilai piksel Cx,y dalam imej output yang dilabelkan sebagai C dalam rajah ini.



2.6.2 Convolution Kernel Bagi Filter Kesan Emboss

Berikut adalah Convolution kernel bagi filter yang dibangunkan dalam perpustakaan kesan emboss ini. Nilai integer k mewakili nilai kedalaman emboss, nilai 1 hingga 8 pula merujuk kepada piksel sekeliling kernel (piksel ditengah-tengah kernel diabaikan kerana nilainya sentiasa 0).


i.









· melihat perubahan nilai piksel secara vertikal
· arah cahaya dari kanan imej (azimuth 0°)

ii.









· melihat perubahan nilai piksel secara vertikal
· arah cahaya dari kiri imej (azimuth 180°)

iii.









· melihat perubahan nilai piksel secara horizontal
· arah cahaya dari atas imej (azimuth 90°)

iv.









· melihat perubahan nilai piksel secara horizontal
· arah cahaya dari bawah imej (azimuth -90°)



Semua convolution kernel di atas hanya mengesan perubahan nilai piksel dalam satu arah, iaitu samada arah horizontal ataupun vertikal sahaja. Bagi membolehkan perubahan nilai piksel dilakukan dalam arah pepenjuru, convolution kernel ini digabungkan bersama atau pun ditambah, seperti berikut:


i.








· gabungan kernel bagi arah cahaya kanan dan atas
· melihat perubahan nilai piksel secara pepenjuru
· arah cahaya dari penjuru atas kanan imej (azimuth +45°)

ii.










· gabungan kernel bagi arah cahaya kanan dan bawah
· melihat perubahan nilai piksel secara pepenjuru
· arah cahaya dari penjuru bawah kanan imej (azimuth -45°)

iii.










· gabungan kernel bagi arah cahaya kira dan atas
· melihat perubahan nilai piksel secara pepenjuru
· arah cahaya dari penjuru atas kiri imej (azimuth +135°)

iv.









· gabungan kernel bagi arah cahaya kira dan bawah
· melihat perubahan nilai piksel secara pepenjuru
· arah cahaya dari penjuru bawah kiri imej (azimuth -135°)



Memandangkan nilai pemberat bagi filter emboss ini adalah sifar (0), langkah terakhir dalam persamaan convolution iaitu membahagikan hasil darab convolution kernel dengan nilai piksel neighbourhood kepada pemberat kernel hendaklah diabaikan ( Burdick, 1997 ). Ini kerana jumlah pemberat kernel bagi filter emboss ini sentiasa bernilai sifar, dan telah diketahui adalah mustahil untuk membahagi dengan sifar.



2.6.3 Proses Pengiraan Bagi Mendapatkan Kesan Emboss

Rajah 2.16 berikut menunjukkan proses pengiraan bagi menghasilkan kesan emboss dengan menggunakan algoritma convolution. Katakan kesan emboss yang diingini adalah kesan emboss dengan arah cahaya dari arah kanan imej dengan nilai kedalaman adalah 3. Jadi, nilai bagi convolution kernel adalah seperti rajah di atas dengan nilai k1, k4, dan k6 adalah 3, nilai k2 dan k7 adalah 0 dan nilai k3, k5, k8 adalah -3.



Rajah 2.16 : Proses pengiraan bagi menghasilkan kesan emboss


Katakan piksel yang diuji dengan algoritma ini adalah piksel P2,2, maka lapan piksel disekeliling P2,2 yang dipanggil piksel neighbouring akan diambil kira dalam algoritma convolution ini. Nilai RGB bagi piksel neighbouring dalam rajah di atas akan didarabkan dengan nilai convolution kernel. P1,1, P1,2 dan P1,3 didarabkan dengan –3, P3,1, P3,2 dan P3,3 didarabkan dengan 3, manakala P2,1 dan P2,3 didarab dengan sifar. Hasil darab ini akan dijumlahkan dan dibahagi kepada lapan untuk mendapatkan pemberat purata. Katakanlah nilai RGB bagi piksel P2,2 dan piksel di sekelilingnya adalah seperti dalam Rajah 2.17 berikut :



Rajah 2.17 : Nilai RGB bagi piksel neighbouring imej P


Pendaraban nilai RGB bagi piksel neighbouring dengan convolution kernel ditunjukkan dalam Rajah 2.18 berikut :



Rajah 2.18 : Pendaraban nilai RGB bagi piksel sekeliling piksel P dengan kernel

Seterusnya, pemberat purata diperolehi dengan membahagi jumlah hasil darab dari rajah di atas dengan 8, seperti berikut :

Pemberat purata

= -885 / 8
  = -111 (bundaran terdekat)


Seterusnya, nilai piksel bagi piksel P2,2 akan dibandingkan dengan pemberat purata ini. Nilai pemberat puratayang positif bermaksud piksel sekeliling piksel P2,2 mempunyai nilai RGB yang rendah. Nilai pemberat purata yang negatif pula menandakan piksel sekeliling bagi piksel P2,2 mempunyai nilai RGB yang lebih tinggi.

Bagi nilai piksel P2,2 yang sama dengan pemberat purata, warna kelabu akan diperolehi bagi piksel Cx,y. Tetapi jika nilai piksel P2,2 lebih tinggi dari pemberat purata, warna putih akan diperolehi bagi piksel Cx,y. Seterusnya jika nilai piksel P lebih rendah dari pemberat purata, warna hitam akan diperolehi bagi piksel Cx,y.

Bagi contoh pengiraan di atas, nilai RGB bagi piksel P2,2 adalah 150, manakala nilai pemberat purata pula adalah -111. Ini bermakna nilai piksel P2,2 lebih tinggi daripada pemberat purata. Jadi warna yang diperolehi bagi piksel Cx,y adalah warna hitam.

Proses pengiraan ini akan diulang ke atas semua piksel yang terdapat dalam imej input. Gabungan warna kelabu, hitam dan putih ini akan menghasilkan kesan emboss kepada imej, seperti yang ditunjukkan di Rajah 2.12.



2.7 Kajian Ke Atas Pendekatan Berorientasikan Objek

Metodologi berorientasikan objek menganggap kedua-dua data dan aksi (action) adalah sama penting. Teknik ini adalah berorientasikan objek dan mengimplementasikan beberapa konsep seperti object, information hiding, inheritance, encapsulation dan association.

 

2.7.1 Konsep Kelas dan Objek

Dalam dunia sebenar, terdapat banyak basikal yang sama jenis. Contohnya, basikal milik satu individu adalah salah satu daripada pelbagai basikal di dunia ini. Dalam terminologi berorientasikan objek, objek basikal milik individu tersebut merupakan instance bagi satu kelas objek yang dikenali sebagai basikal.

Katakanlah seseorang itu ingin membina satu basikal, basikal itu akan berkongsi ciri-ciri dengan basikal-basikal lain seperti mempunyai tempat duduk dan tayar. Pembinaan kesemua basikal adalah merujuk kepada satu blueprint, kerana adalah tidak efisyen untuk membina satu blueprint bagi setiap satu basikal.

Blueprint bagi objek basikal inilah yang dipanggil kelas. Oleh sebab itu, kelas boleh dimaksudkan sebagai blueprint atau prototaip yang menakrifkan pembolehubah dan method yang biasa pada semua objek yang berjenis sepertinya.

Objek pula adalah satu instance bagi satu kelas yang mempunyai pembolehubah (variable) dan method yang berkaitan. Contohnya, pembolehubah bagi objek basikal adalah seperti kelajuan basikal (5km/j), jumlah pusingan pedal sebanyak 90 kali seminit dan gear yang sedang digunakan adalah gear 5. Manakala method pula adalah untuk memberhentikan basikal (brake), menukar gear dan menukar jumlah pusingan pedal.


 

2.7.2 Inheritance

Mountain bikes, racing bikes dan tandem bikes adalah jenis-jenis basikal yang berlainan. Dalam terminologi berorientasikan objek, mountain bikes, racing bikes dan tandem bikes adalah subkelas bagi kelas basikal. Kelas basikal pula merupakan superkelas bagi mountain bikes, racing bikes dan tandem bikes.

Setiap subkelas inherite kesemua keadaan (state) yang berbentuk pembolehubah daripada superkelasnya. Mountain bikes, racing bikes dan tandem bikes berkongsi keadaan yang sama iaitu kelajuan basikal, jumlah pusingan pedal dan gear yang sedang digunakan. Selain daripada itu, mountain bikes, racing bikes dan tandem bikes juga inherite kesemua kelakuan(behaviour) atau method milik superkelasnya, seperti menukar jumlah pusingan pedal, memberhentikan basikal dan mengubah gear.

Walaubagaimanapun, subkelas tidak hanya terhad kepada keadaan (state) dan kelakuan (behaviour) yang disediakan oleh superkelas. Subkelas boleh mempunyai pembolehubah dan method mereka sendiri. Contohnya seperti, tandem bikes yang mempunyai dua tempat duduk dan dua set handle manakala mountain bikes mempunyai set gear khas yang membolehkannya ditunggang menaiki bukit.


 

2.7.3 Encapsulation, Modularity Dan Information Hiding

Daripada rajah pada bahagian 2.4.1, pembolehubah objek adalah berada pada bahagian tengah objek, manakala method pula berada di sekeliling dan menyembunyikan bahagian tengah objek daripada objek-objek lain dalam program. Penyembunyian pembolehubah objek dengan method objek dipanggil encapsulation.

Keseluruhannya, encapsulation adalah digunakan untuk menyembunyikan implementasi sesuatu objek daripada objek-objek yang lain. Misalnya, jika anda ingin menukar gear pada basikal anda, anda tidak perlu tahu bagaimana mekanisme gear bekerja, anda hanya perlu mengetahui suis mana yang perlu ditekan.

Ini adalah sama juga dengan sesuatu program, anda tidak perlu tahu bagaimana sesuatu kelas itu diimplementasikan, anda hanya perlu mengetahui method mana yang perlu dipanggil. Oleh sebab itu, implementasi sesuatu objek boleh diubah pada bila-bila masa tanpa memberi kesan kepada mana-mana bahagian dalam program tersebut.

Encapsulation adalah idea yang sangat bermanfaat dan memberi faedah kepada semua kerana ia membolehkan modularity dan information hiding dilakukan. Modularity bermaksud kod sumber (source code) bagi sesuatu objek boleh ditulis dan disenggarakan secara independent dengan kod sumber bagi objek-objek yang lain. Selain itu, satu objek juga boleh digunapakai oleh kelas lain dalam program. Ini bermaksud dalam dunia sebenar, anda boleh memberi basikal anda kepada orang lain dan basikal itu masih lagi boleh digunakan

Information hiding pula membawa membawa maksud satu objek itu mempunyai public interface yang membolehkan objek-objek lain berkomunikasi dengannya. Tetapi objek itu juga boleh menyembunyikan maklumat dan method miliknya yang boleh diubah pada bila-bila masa tanpa memberi kesan kepada objek-objek lain yang bergantung kepadanya.


2.7.4 Association Dan Aggregation

Aggregation merujuk kepada komponen sesuatu kelas. Sebagai contohnya, kelas PersonalComputer mungkin terdiri daripada komponen CPU, Monitor, Keyboard dan Printer.

 

Association pula adalah merujuk kepada hubungan di antara dua kelas yang tidak berkaitan. Contohnya, tidak terdapat apa-apa perkaitan di antara seorang doktor dan seorang pelukis.Tetapi seorang doktor mungkin akan consult seorang pelukis untuk melukis gambarajah satu mesin x-ray. Manakala seorang pelukis yang patah kakinya akan consult seorang doktor mengenai kesihatannya.