penggunaan matrik konvolusi untuk efek emboss pada...
Post on 06-Nov-2020
21 Views
Preview:
TRANSCRIPT
PENGGUNAAN MATRIK KONVOLUSI
UNTUK EFEK EMBOSS PADA SUATU CITRA
SKRIPSI
Diajukan Untuk Memenuhi Salah Satu Syarat
Memperoleh Gelar Sarjana Sains
Program Studi Ilmu Komputer
Oleh:
LENY SUSILAWATI ANGGRAINI
NIM 023124040
PROGRAM STUDI ILMU KOMPUTER JURUSAN MATEMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SANATA DHARMA
YOGYAKARTA 2007
ii
iii
iv
Mereka yang memulai aktivitas dengan penuh keyakinan boleh jadi ditengah
jalan akan gagal tersandung keraguan. Sebaliknya, mereka yang memulai dengan keraguan bukan tidak mungkin di tengah
jalan bakal mendapat pencerahan.(Sir Francis)
Kupersembahkan Skripsiku ini untuk:
Allah Bapa di Surga
Kedua Orang Tuaku dan Pakde Parman
Saudara-saudaraku ( Mbak Gesti, Mas Win, Mas Indra,
Mas Joko, Novan, Wine,Wikri, Wildan, Winata, Lina).
“Aku mencintai kalian semua”
v
PERNYATAAN KEASLIAN KARYA
Saya menyatakan dengan sesungguhnya bahwa skripsi yang saya tulis ini tidak
memuat karya atau bagian dari orang lain, kecuali yang telah disebutkan dalam
kutipan dan daftar pustaka, sebagaimana layaknya karya ilmiah.
Yogyakarta, 27 Maret 2007
Penulis
Leny Susilawati Anggraini
vi
ABSTRAK
PENGGUNAAN MATRIK KONVOLUSI
UNTUK EFEK EMBOSS PADA SUATU CITRA
Oleh : Leny Susilawati Anggraini
Pengolahan citra dapat dilakukan untuk memperbaiki kualitas citra agar lebih indah atau mudah dikenali. Kadangkala citra yang kita temukan tampak terlihat biasa, oleh sebab itu perlu adanya penambahan atau pemberian efek pada citra tersebut. Salah satu efek yang dapat diberikan yaitu efek emboss. Efek emboss mampu memberikan ilusi efek optik dari sebuah citra dimana beberapa pixel dari sebuah objek dibuat agak lebih dekat atau lebih jauh dari background, sehingga akan sangat bermanfaat bagi para pelukis atau pemahat untuk membuat detail dari karya seninya. Sedangkan bagi orang awam, dengan memberikan efek emboss pada sebuah citra, akan didapat nilai estetika yang lebih dari citra itu, kerena pemberian efek emboss dapat menampilkan gambar lain dari citra awal. Efek emboss ini diperoleh dengan cara melakukan proses konvolusi, yaitu mengalikan matrik citra masukan dengan matrik filter.
vii
ABSTRACT
THE USE OF CONVOLUTION MATRIK
TO MAKE AN EMBOSS EFFECT ON AN IMAGE
By : Leny Susilawati Anggraini
The image processing can be done to improve the image quality, which is become more striking and easy to recognized. Sometime the image we observed seem ordinary, consequently it need and effects adding in the image. One of the effects is emboss effect. This effect is able to provide the optical effect illusion of an image where some pixel from an object made closer or farther from the background. As a result, it is very useful for painters or craftsmen to make details of their work. While for the ordinary people, the emboss effects provide more aesthetical values from the image, since it can presenting different image from the initial image. This emboss effect is obtained by performing the convolution process, which is multiplying the input image matrix with the filter matrix.
viii
KATA PENGANTAR
Puji syukur kami panjatkan kepada Tuhan dan Bunda Maria atas segala
kasih dan berkat yang telah dilimpahkan kepada kami sehingga kami dapat
menyelesaikan skripsi yang berjudul “Penggunaan Matrik Konvolusi Untuk Efek
Emboss Pada Suatu Citra”. Skripsi ini kami susun untuk memenuhi salah satu
syarat memperoleh gelar sarjana sains dari Universitas Sanata Dharma.
Pada kesempatan ini, penulis ingin menyampaikan ucapan terima kasih
kepada :
1. Bpk. Ir. Ign. Aris Dwiatmoko, M.Sc. selaku Dekan Fakultas Matematika
dan Ilmu Pengetahuan Alam.
2. Ibu. Paulina Heruningsih Prima Rosa, S.Si., M.Sc. selaku Kepala Program
Studi Ilmu Komputer.
3. Bpk. Iwan Binanto S.Kom. selaku dosen pembimbing akademik yang
telah memberikan bimbingan dan pengarahan sejak awal kuliah sampai
terselesaikannya Tugas Akhir ini.
4. Bpk. Joko Nugroho, S.Si., selaku dosen pembimbing skripsi yang telah
membantu, memberi semangat dan pengarahan kepada kami sehingga
skripsi ini dapat selesai.
5. Ibu. A. Rita Widiarti, S.Si., M.Kom. selaku dosen pembimbing akademik
dan dosen penguji.
6. Bpk. Eko Hari Parmadi, S.Si., M.Kom. selaku dosen penguji
ix
7. Staf pengajar, Staf sekretariat (Mas Tukijo dan Mbak Linda) dan staf LAB
(Mas Widodo dan Mas Susilo) Fakultas MIPA yang telah banyak
membantu kami selama perkuliahan sampai selesai.
8. Kedua Orang tuaku, Pakde Parman, saudara-saudaraku (Mbak Gesti, Mas
Win, Mas Indra, Mas Joko, Novan, Lina, Wine, Wikri, Wildan, Winata
dan Mugex) teimakasih atas dukungan dan doanya.
9. Mas Heru, thanks atas doa, dukungan, perhatian dan waktunya untuk
menemaniku dalam mengerjakan Skripsi ini.
10. Sahabatku Ari, Risma, Mayonx, Agnes, Nita, Hastin, Shinta, T2k dan Paul
terimakasih atas kebersamaannya selama ini.
11. Teman-teman kuliahku Rini, Tiwix, Eksi, Ika, Fenny, Bon2, Marto,
Koming dan semuanya, terimakasih atas doa, dan dukungannya.
12. Almamaterku Ikom 2002. Terima kasih atas kebersamaan kita selama
menempuh kuliah.
Penulis menyadari bahwa skripsi ini masih memiliki banyak kekurangan. Oleh
karena itu, penulis menerima masukan dan saran agar bisa berkembang dan
semakin baik lagi. Semoga Skripsi ini berguna bagi para pembaca.
Penulis
x
DAFTAR ISI
HALAMAN JUDUL ...................................................................................... i
HALAMAN PERSETUJUAN PEMBIMBING .......................................... ii
HALAMAN PENGESAHAN........................................................................ iii
HALAMAN PERSEMBAHAN .................................................................... iv
PERNYATAAN KEASLIAN KARYA ........................................................ v
ABSTRAK ...................................................................................................... vi
ABSTRACT.................................................................................................... vii
KATA PENGANTAR.................................................................................... viii
DAFTAR ISI................................................................................................... x
DAFTAR GAMBAR...................................................................................... xii
BAB I PENDAHULUAN............................................................................ 1
1.1 Latar Belakang Masalah.............................................................. 1
1.2 Rumusan Masalah....................................................................... 2
1.3 Batasan Masalah ......................................................................... 2
1.4 Tujuan Penelitian ........................................................................ 3
1.5 Manfaat Penelitian ...................................................................... 3
1.6 Sistematika Penulisan ................................................................. 3
1.7 Metodologi Penelitian ................................................................ 4
BAB II DASAR TEORI................................................................................ 6
2.1 Citra............................................................................................. 6
2.2 Format Citra ................................................................................ 7
xi
a. Citra Biner ............................................................................... 7
b. Warna ...................................................................................... 8
c. Greyscale................................................................................. 9
2.3 Pengolahan Citra Digital............................................................. 11
1. Aras Titik ................................................................................ 14
2. Aras Lokal............................................................................... 16
3. Aras Global ............................................................................. 17
4. Aras Objek .............................................................................. 17
2.4 Operasi Konvolusi ...................................................................... 17
2.5 Efek Emboss ............................................................................... 24
2.6 Pemrograman Delphi .................................................................. 26
2.7 Adope Photoshop ........................................................................ 27
2.8 Macromedia Flash Mx ................................................................ 28
BAB III ANALISIS DAN PERANCANGAN SISTEM.............................. 29
3.1 Analisis Sistem............................................................................ 29
3.1.1 Gambaran Umum Sistem................................................... 29
3.1.2 Analisis Kebutuhan............................................................ 29
3.2 Perancangan Proses..................................................................... 31
3.3 Perancangan Menu...................................................................... 36
3.4 Perancangan Interface................................................................. 37
BAB IV IMPLEMENTASI .......................................................................... 41
4.1 Implementasi Hasil Program....................................................... 41
xii
4.1.1 Halaman Pembuka ............................................................. 41
4.1.2 Form Emboss ..................................................................... 42
4.1.3 Form Matrik Warna ........................................................... 45
4.1.4 Form About ........................................................................ 46
4.1.5 Form Help .......................................................................... 46
4.2 Pembahasan................................................................................. 47
4.2.1 Mengubah Citra Berwarna Menjadi Greyscale ................. 47
4.2.2 Hasil Emboss Greyscale .................................................... 48
4.2.3 Hasil Emboss Warna.......................................................... 56
BAB V KESIMPULAN DAN SARAN ........................................................ 66
5.1. Kesimpulan .......................................................................... 66
5.2 Saran .................................................................................... 67
DAFTAR PUSTAKA ..................................................................................... 68
LAMPIRAN.................................................................................................... 69
xiii
DAFTAR GAMBAR
Gambar 2.1 Vektor warna dalam ruang tiga dimensi ........................................ 9
Gambar 2.2 Kubus warna RGB ......................................................................... 9
Gambar 2.3 Blok diagram pengolahan citra ...................................................... 11
Gambar 2.4 Operasi aras titik pada citra digital................................................. 15
Gambar 2.5 Operasi aras lokal pada citra digital ............................................... 16
Gambar 2.6 Operasi aras global pada citra digital ............................................. 17
Gambar 2.7 Ilustrasi Konvolusi ......................................................................... 19
Gambar2.8 Pixel-pixel pinggir (yang tidak terarsir) tidak dikonvolusikan ...... 23
Gambar 2.9 Matrik bertetangga dengan pixel (i,j) dengan matrik filter 3 x 3 .. 23
Gambar 2.10 Matrik bertetangga dengan pixel (i,j) dengan matrik filter 3 x 3 23
Gambar 2.11 Matrik bertetangga dengan pixel (i,j) dengan matrik filter 7 x 724
Gambar 2.12 hasil konvolusi setelah ditambah 128 .......................................... 26
Gambar 3.1 flowchart program keseluruhan .................................................... 32
Gambar 3.2 flowchart pilih emboss .................................................................. 33
Gambar 3.3 Flowchart Greyscale...................................................................... 34
Gambar 3.4 Flowchart Proses Emboss .............................................................. 35
Gambar 4.1 Halaman pembuka......................................................................... 41
Gambar 4.2 Form Emboss ................................................................................. 42
Gambar 4.3 Open Picture Dialog....................................................................... 43
Gambar 4.4 menampilkan gambar pada TImage foto awal ............................... 43
Gambar 4.5 menampilkan hasil emboss pada TImage foto hasil ...................... 44
Gambar 4.6 Save Picture Dialog........................................................................ 45
xiv
Gambar 4.7 Form Matrik Warna ....................................................................... 45
Gambar 4.8 Form About .................................................................................... 46
Gambar 4.9 Form Help ...................................................................................... 46
Gambar 4.10 Citra asli dan Citra Greyscale ..................................................... 48
Gambar 4.11 Hasil emboss Grey dengan jumlah elemen matrik filter < 0........ 49
Gambar 4.12 Hasil emboss Grey dengan jumlah elemen matrik filter > 0........ 50
Gambar 4.13 Hasil emboss Grey dengan jumlah elemen matrik filter = 0........ 51
Gambar 4.14 perbandingan gambar dengan letak elemen yang berbeda........... 53
Gambar 4.15 perbandingan gambar dengan nilai absolute yang berbeda ......... 55
Gambar 4.16 Hasil emboss greycale.................................................................. 56
Gambar 4.17 Hasil emboss warna dengan jumlah elemen matrik filter < 0...... 58
Gambar 4.18 Hasil emboss warna dengan jumlah elemen matrik filter = 0...... 59
Gambar 4.19 Hasil emboss warna dengan jumlah elemen matrik filter > 0...... 60
Gambar 4.20 Perbandingan gambar dengan letak elemen yang berbeda .......... 61
Gambar 4.21 Perbandingan gambar dengan nilai absolute yang berbeda ......... 64
Gambar 4.22 Hasil emboss warna...................................................................... 65
1
BAB I
PENDAHULUAN
1.1 Latar Belakang Masalah
Pada akhir abad ke 20 ilmu dan teknologi berkembang semakin
pesat, termasuk di dalamnya teknik komputer. Komputer pada awalnya
digunakan sebagai alat bantu untuk mempercepat proses menghitung.
Dalam perkembangan selanjutnya, komputer dapat digunakan sebagai
pengolah informasi yang datanya tidak hanya berupa angka saja, tapi dapat
berupa teks, gambar, audio (bunyi, suara, musik), dan video. Salah satu
perangkat lunak yang berkembang saat ini adalah perangkat lunak untuk
pengolahan citra, yang juga didukung dengan kemajuan teknologi optik
dan digital. Aplikasi yang tersedia untuk membantu proses pengolahan
citra antara lain seperti : paint, photoshop, coreldraw, dan masih banyak
lagi.
Pengolahan citra dapat dilakukan untuk memperbaiki kualitas citra
sedemikian rupa agar lebih indah atau mudah dikenali. Teknik-teknik
pengolahan citra biasanya digunakan untuk melakukan transformasi dari
satu citra menjadi citra yang lain, sementara tugas perbaikan informasi
terletak pada manusia melalui penyusunan algoritmanya. Bidang ini
meliputi penajaman citra, penajaman fitur tertentu dari suatu citra,
kompresi citra dan koreksi citra yang tidak fokus atau kabur.
2
Salah satu efek penajaman fitur yang dapat diberikan pada suatu citra
adalah dengan memberikan efek emboss. Pemberian efek emboss pada
sebuah citra ini akan mengakibatkan sebagian obyek citra terlihat lebih
dekat atau jauh dari citra latarnya, sehingga dapat bermanfat bagi pemahat
atau pelukis. Selain itu emboss yang dihasilkan juga dapat mempunyai
nilai estetika, yaitu dengan menampilkan sisi lain dari citra awal.
1.2. Rumusan Masalah
Berangkat dari pemikiran tersebut di atas maka rumusan masalah
yang diangkat dalam tugas akhir ini adalah “Bagaimana memberikan atau
menambahkan efek emboss pada sebuah citra“.
1.3 Batasan Masalah
Untuk menghindari pembahasan yang terlalu luas maka perlu
batasan-batasan masalah antara lain :
• Program ini menerima input berupa file citra berwarna dengan format
BMP
• Ukuran gambar yang digunakan sebagai input dan output :
• Matrik konvolusi berukuran 3 x 3, 5 x 5 dan 7 x 7
• Hasil disimpan dalam format BMP
• Program dibuat dengan menggunakan bahasa pemrograman Borland
Delphi 7
3
1.4 Tujuan Penelitian
Adapun tujuan penelitian antara lain:
1. Dapat memahami konsep matrik konvolusi pada suatu citra.
2. Memperluas pengetahuan bahwa sebuah citra (image) digital dapat
diolah menjadi beragam bentuk dengan berbagai metode salah satunya
metode emboss.
1.5 Manfaat Penelitian
1. Citra yang dihasilkan dari pemberian efek emboss dapat menghasilkan
nilai estetika.
2. Dapat memudahkan para pemahat dalam membuat seketsa ukiran yang
ingin dihasilkan.
1.6 Sistematika Penulisan
Bahasan secara keseluruhan dari tugas akhir ini dibagi menjadi lima
bab, yaitu :
BAB I PENDAHULUAN
Bab ini merupakan pendahuluan yang berisi latar belakang,
rumusan masalah, batasan masalah, manfaat dan tujuan dan
sistematika penulisan, serta metodologi penelitian.
BAB II DASAR TEORI
Bab ini merupakan landasan teori yang berisi antara lain :
pengertian dari efek emboss, hubungan antara matrik
konvolusi dalam proses emboss.
4
BAB III ANALISA DAN PERANCANGAN
Bab ini berisi analisa pembahasan dan perancangan
mengenai penggunaan matrik konvolusi yang dapat
digunakan untuk efek emboss.
BAB IV IMLEMENTASI PROGRAM
Bab ini berisi implementasi dan hasil yang didapat dari
penulisan dan juga pembahasan penulisan tersebut.
BAB V PENUTUP
Bab ini berisi kesimpulan dan saran yang berguna dari hasil
pembahasan.
1.7 Metodologi Penelitian
Dalam membangun sistem ini penulis menggunakan metode SDLC
(Software Development Life Cycle) yang meliputi tahap-tahap anatara lain:
1. Analisis (Analysis)
Tahap ini mengidentifikasikan suatu kebutuhan dan
mengumpulkan data yang diperlukan sesuai dengan kebutuhan sistem
yang akan dibangun.
Menganalisa data dengan menggunakan metode yaitu :
• Mengidentifikasikan masalah yang ada.
• Gambaran dari sistem yang akan dibangun.
• Menganalisa teknologi.
5
2. Perancangan sistem
Perancangan sistem ini dibuat berdasarkan analisa yang telah
dibuat yaitu,meliputi:
• Perancangan proses
Menentukan matrik yang akan digunakan dalam proses
emboss, menghitung matrik suatu citra dengan cara menentukan
matrik konvolusinya.
• Perancangan antar muka pemakai (user interface).
– Perancangan struktur menu
– Perancangan halaman utama
– Perancangan tampilan menu setiap data masing-masing
3. Coding
Hasil dari rancangan diterjemahkan dalam bahasa pemrograman
yang bisa dibaca oleh mesin dan hasil pemrograman tersebut dapat
memperoleh output dan digunakan oleh pengguna.
4. Testing
Dalam tahap ini fokus pada pengujian program. Uji coba ini
dilakukan untuk mencari kesalahan dengan jalan mengeksekusi
program, selain itu juga untuk menjamin kualitas dari sistem tersebut.
5. Perbaikan/Revisi
Setelah dilakukan testing, apabila ditemukan kesalahan pada
program maka dalam tahap ini dilakukan perbaikan atau revisi.
6
BAB II
DASAR TEORI
2.1 CITRA
Secara harafiah, citra (image) adalah gambar pada bidang dwimatra
(dua dimensi). Ditinjau dari sudut pandang matematis, citra merupakan
fungsi menerus (continue) dari intensitas cahaya pada bidang dwimatra
(Munir,R. 2004). Sumber cahaya menerangi objek, objek memantulkan
kembali sebagian dari berkas cahaya tersebut. Pantulan cahaya ini
ditangkap oleh alat-alat optik, misalnya mata pada manusia, kamera,
pemindai (scanner), dan sebagainya, sehingga bayangan objek yang
disebut citra tersebut terekam.
Citra sebagai keluaran dari suatu sistem perekaman data dapat bersifat:
1. Optik berupa foto.
2. Analog berupa sinyal video seperti gambar pada monitor televisi.
3. Digital yang dapat langsung disimpan pada suatu pita magnetik.
Citra dibagi menjadi dua jenis yaitu:
1. Citra diam (still images)
Adalah citra tunggal yang tidak bergerak. Untuk selanjutnya,
citra diam kita sebut citra saja.
2. Citra bergerak (moving images)
Adalah rangkaian citra diam yang ditampilkan secara beruntun
(sekuensial) sehngga memberi kesan pada mata kita sebagi gambar
yang bergerak. Setiap citra di dalam rangkaian itu disebut frame.
7
Gambar-gambar yang tampak pada film layar lebar atau televisi pada
hakikatnya terdiri atas ratusan sampai ribuan frame.
Citra yang dimaksud penulis dalam tulisan skripsi ini adalah “citra diam”
(still images).
Meskipun sebuah citra kaya informasi, namun seringkali citra yang
kita miliki mengalami penurunan mutu (degradasi), misalnya mengandung
cacat atau derau (noise), warnanya terlalu kontras, kurang tajam, kabur
(blurring), dan sebagainya. Tentu saja semacam ini menjadi lebih sulit
diintepretasikan karena informasi yang disampaikan oleh citra tersebut
menjadi berkurang.
Agar citra yang mengalami gangguan mudah diinterpretasikan (baik
oleh manusia maupun mesin), maka citra tersebut perlu dimanipulasi
menjadi citra lain yang kualitasnya lebih baik. Bidang studi yang
menyangkut hal ini adalah pengolahan citra (image processing).
2.2 Format Citra
Format citra terdiri dari 3 yaitu citra biner, warna dan greyscale:
a. Citra Biner
Citra biner (binary image) adalah citra yang hanya mempunyai dua
nilai derajat keabuan: hitam dan putih. Meskipun saat ini citra berwarna
lebih disukai karena memberi kesan yang lebih kaya dari pada citra biner,
namun tidak membuat citra biner mati. Pada beberapa aplikasi, citra biner
masih tetap dibutuhkan, misalnya citra logo instansi (yang terdiri dari
warna hitam dan putih), citra kode batang (bar code) yang tertera pada
8
label barang, citra hasil pemindaian dokumen teks, dan sebagainya.
Karena hanya mempunyai dua nilai derajat keabuan: hitam dan putih,
pixel-pixel objek bernilai 1 dan pixel-pixel latar belakang bernilai 0. Pada
waktu menampilkan gambar, 0 adalah putih dan 1 adalah hitam. Jadi, pada
citra biner, latar belakang berwarna putih sedangkan objek berwarna
hitam.
b. Warna
Persepsi visual citra berwarna (color image) umumnya lebih kaya
dibandingkan dengan citra hitam putih, karena itu citra berwarna lebih
disenangi daripada citra hitam putih. Warna-warna yang diterima oleh
mata manusia merupakan hasil kombinasi cahaya dengan panjang
gelombang berbeda. Penelitian memperlihatkan bahwa kombinasi warna
yang memberikan rentang warna paling lebar adalah red (R), green (G),
dan blue (B). Ketiga warna tersebut dinamakan warna pokok (primaries),
dan sering disingkat sebagai warna dasar RGB. Warna-warna lain dapat
diperoleh dengan mencampurkan ketiga warna pokok tersebut dengan
perbandingan tertentu (meskipun tidak sepenuhnya benar, karena tidak
semua kemungkinan warna dapat dihasilkan dengan kombinasi RGB saja).
Dekompresi warnanya pada gambar 2.1 di bawah ditunjukkan
dengan angka dari 0 – 255. Sebagai contoh putih akan dikodekan sebagai
(RGB) = (255, 255, 255); hitam akan diketahui sebagai (RGB) = (0, 0, 0).
Dengan kata lain, sebuah citra merupakan array dua dimensi dari nilai
warna pixel yang masing – masing besarnya 3 byte pada penyajian tiga
9
warna dasar yaitu Red, Green, dan Blue (RGB) ini memungkinkan sebuah
citra mempunyai total 256 * 256 * 256 = 16,8 juta warna berbeda.
Gambar 2.1 Vektor warna dalam ruang tiga dimensi
c. Greyscale
Citra greyscale dengan mudah dapat dihasilkan dari citra warna
RGB dengan mengambil nilai rata-rata dari ketiga komponen warna pokok
merah, hijau, dan biru, seperti terlihat pada gambar 2.2 berikut:
Gambar 2.2 Kubus warna RGB
10
Pada gambar tersebut terlihat bahwa warna hitam diwakili oleh
koordinat ruang (0,0,0) yang berarti intensitas semua warna pokok adalah
nol persen dan warna putih oleh koordinat (1,1,1) yang berarti semua
warna pokok berintensitas 100% karena nilai satu adalah maksimum untuk
skala yang dinormalkan pada kubus tersebut. Bila semua warna pokok
mempunyai intensitas yang sama dan berada diantara 0 dan 1, maka yang
tampak adalah warna abu-abu.
Karena ketiga warna pokok tersebut dianggap tidak seragam dalam
hal kemampuan kontribusi pada kecerahan, ada yang berpendapat bahwa
cara konversi yang lebih tepat adalah menggunakan persamaan berikut
(Ahmad, 2005).:
Y = 0.299R + 0.587G + 0.114B ………..persamaan 2.1
dimana Y = Nilai kecerahan pada citra abu-abu.
R = Nilai merah dari sebuah gambar berwarna (satuan = pixel)
G = Nilai hijau dari sebuah gambar berwarna (satuan = pixel)
B = Nilai biru dari sebuah gambar berwarna (satuan = pixel)
2.3 Pengolahan Citra Digital
Image processing atau sering disebut pengolahan citra digital
merupakan suatu proses filter gambar asli menjadi gambar lain sesuai
dengan keinginan kita. Misalnya, kita mendapatkan suatu gambar yang
terlalu gelap. Dengan image processing, kita dapat memprosesnya agar
mendapatkan gambar yang jelas. Secara garis besar, kita bisa
11
menggambarkannya seperti blok diagram pada gambar berikut (Rianto
Sigit, dkk. 2005) :
Gambar 2.3 Blok diagram pengolahan citra
Teknik-teknik pengolahan citra mentransformasikan citra menjadi
citra lain. Jadi, masukannya adalah citra dan keluarannya juga citra,
namun citra keluaran mempunyai kualitas yang lebih baik daripada citra
masukan.
Umumnya, operasi-operasi pada pengolahan citra diterapkan pada citra
bila:
1. Perbaikan atau modifikasi citra perlu dilakukan untuk meningkatkan
kualitas penampakan atau untuk menonjolkan beberapa aspek
informasi yang terkandung di dalam citra.
2. Elemen di dalam citra perlu dikelompokkan, dicocokkan atau diukur.
3. Sebagian citra perlu digabung dengan bagian citra yang lain.
Operasi-operasi yang dilakukan di dalam pengolahan citra banyak
ragamnya. Namun secara umum, operasi pengolahan citra dapat
diklasifikasikan dalam beberapa jenis sebagai berikut;
1. Perbaikan kualitas citra (image enchancement).
Jenis operasi ini bertujuan untuk memperbaiki kualitas citra dengan
cara memanipulasi parameter-parameter citra. Dengan operasi ini, ciri-
ciri khusus yang terdapat di dalam citra lebih ditonjolkan.
Gambar Asli
Proses Filter
Gambar Hasil
12
Contoh-contoh operasi perbaikan citra:
a. Perbaikan kontras gelap/terang
b. Perbaikan tepian objek (edge enhancement)
c. Penajaman (sharpening)
d. Pemberian warna semu (pseudocoloring)
e. Penapisan derau (noise filtering)
2. Pemugaran citra (image restoration).
Operasi ini bertujuan menghilangkan/meminimalkan cacat
pada citra. Tujuan pemugaran citra hampir sama dengan operasi
perbaikan citra. Bedanya, pada pemugaran citra penyebab degradasi
gambar diketahui.
Contoh-contoh operasi pemugaran citra:
a. Penghilangan kesamaran (debluring)
b. Penghilangan derau (noise)
3. Pemampatan citra (image compression)
Jenis operasi ini dilakukan agar citra dapat direpresentasikan dalam
bentuk yang lebih kompak sehingga memerlukan memori yang lebih
sedikit. Hal penting yang harus diperhatikan dalam pemampatan citra
adalah citra yang telah dimampatkan harus tetap mempunyai kualitas
gambar yang bagus.
4. Segmentasi citra (image segmentation)
Jenis operasi ini bertujuan untuk memecah suatu citra ke dalam
beberapa segmen dengan suatu kriteria tertentu. Jenis operasi ini
13
berkaitan erat dengan pengenalan pola.
5. Pengorakan citra (image analysis)
Jenis operasi ini bertujuan menghitung besaran kuantitatif dari citra
untuk menghasilkan deskripsinya. Teknik pengorakan citra
mengekstraksi ciri-ciri tertentu yang membantu dalam identifikasi
objek. Proses segmentasi kadangkala diperlukan untuk melokalisasi
objek yang diinginkan dari sekelilingnya.
Contoh-contoh operasi pengorakan citra:
a. Pendeteksian tepi (edge detection)
b. Ekstraksi batas (boundary)
c. Representasi daerah (region)
d. Pemberian efek emboss
6. Rekonstruksi citra (image reconstruction)
Jenis operasi ini bertujuan untuk membentuk ulang objek dari
beberapa citra hasil proyeksi. Operasi rekonstruksi citra banyak
digunakan dalam bidang medis. Misalnya beberapa foto rontgen
dengan sinar X digunakan untuk membentuk ulang gambar organ
tubuh.
Agar dapat diolah dengan komputer digital, maka suatu citra harus
direpresentasikan secara numerik dengan nilai-nilai diskrit. Representasi
citra dari fungsi malar (continue) menjadi nilai-nilai diskrit disebut
digitalisasi. Citra yang dihasilkan inilah yang disebut citra digital (digital
image). Pada umumnya citra digital berbentuk empat persegi panjang, dan
14
dimensi ukurannya dinyatakan sebagai tinggi x lebar (atau lebar x
panjang). Citra digital yang tingginya N, lebarnya M, dan memiliki L
derajat keabuan dapat dianggap sebagai fungsi:
0 ≤ χ ≤ M
ƒ(χ,y) 0 ≤ χ ≤ N
0 ≤ χ ≤ L
Citra digital yang berukuran N x M lazim dinyatakan dengan matrik yang
berukuran N baris dan M kolom sebagai berikut:
ƒ(0,0) ƒ(0,1) ... ƒ(0,M)
ƒ(x,y) ≈ ƒ(1,0) ƒ(1,1) ... ƒ(1,M)
: : : :
ƒ(N – 1,0) ƒ(N – 1,1) ... ƒ(N – 1,M -1)
Indeks baris (x) dan indeks kolom (y) menyatakan suatu koordinat titik
pada citra, sedangkan ƒ(x, y) merupakan intensitas (derajat keabuan) pada
titik (x, y).
Operasi pada citra digital pada dasarnya adalah memanipulasi
elemen-elemen matrik. Elemen matrik yang dimanipulasi dapat berupa
elemen tunggal (sebuah pixel), sekumpulan elemen yang berdekatan, atau
keseluruhan elemen matrik. Operasi-operasi yang dilakukan pada
pengolahan citra dapat dikelompokkan kedalam empat aras (level)
komputasi yaitu:
1. Aras Titik
Operasi pada aras titik hanya dilakukan pada pixel tunggal dalam
citra. Operasi titik dikenal juga dengan nama operasi pointwise. Operasi
15
ini terdiri dari pengaksesean pixel pada lokasi yang diberikan,
memodifikasinya dengan operasi-operasi lanjar (linear) atau nirlanjar
(nonlinear), dan menempatkan nilai pixel baru pada lokasi yang
bersesuaian di dalam citra yang baru. Operasi ini diulang untuk
keseluruhan pixel di dalam citra. Secara matematis, operasi pada aras titik
dinyatakan sebagai:
ƒB(x, y) = Otitik{ƒA(x, y)}
yang dalam hal ini ƒA dan ƒB masing-masing adalah citra masukan dan
citra keluaran. Otitik dapat berupa operasi lanjar (linear) atau nirlanjar
(nonlinear). Yang dimaksud dengan operasi lanjar adalah operasi yang
dapat dinyatakan secara matematis sebagai persamaan lanjar, kebalikannya
adalah persamaan nirlanjar.
Gambar 2.4 Operasi aras titik pada citra digital
Operasi pada aras titik dapat dibagi menjadi tiga macam: berdasarkan
intensitas, berdasarkan geometri, atau gabungan keduanya.
a. Berdasarkan intensitas.
Nilai intensitas u suatu pixel diubah dengan transformasi h menjadi nilai
intensitas baru v:
v = h(u), u, v Є [0, L]
Otitik {f(x,y)}
16
b. Beradasarkan geometri.
Posisi pixel diubah ke posisi yang baru, sedangkan intensitasnya tidak
berubah. Contoh operasi titik berdasarkan geometri misalnya pemutaran
(rotasi), pergeseran (translasi), penskalaan (dilatasi).
c. Gabungan intensitas dan geometri.
Operasi ini tidak hanya mengubah nilai intensitas pixel, tapi juga
mengubah posisinya. Misalnya image morphing, yaitu perubahan bentuk
objek beserta nilai intensitasnya.
2. Aras Lokal
Operasi pada aras lokal menghasilkan citra keluaran dimana
intensitas suatu pixel bergantung pada intensitas pixel-pixel tetangganya.
ƒB(x, y)’ = Olokal{ƒA(xi, yj); (xi, yj) Є N (x, y) }
(keterangan: N = neighborhood, yaitu pixel-pixel yang berada di sekitar
(x , y) ).
Gambar 2.5 Operasi aras lokal pada citra digital
Olokal{f(x,y),(xi, yi) pixel di sekitar (x,y)}
17
3. Aras Global
Operasi pada aras global menghasilkan citra keluaran yang
intensitas suatu pixel bergabung pada intensitas keseluruhan pixel.
ƒB(x, y)’ = Oglobal{ƒA(x, y)}
Gambar 2.6 Operasi aras global pada citra digital
4. Aras Objek
Operasi jenis ini hanya dilakukan pada objek tertentu di dalam citra.
Tujuan dari operasi pada aras objek adalah untuk mengenali objek
tersebut, misalnya dengan menghitung rata-rata intensitas, ukuran, bentuk,
dan karakteristik lain dari objek.
2.4 Operasi Konvolusi
Operasi konvolusi merupakan operasi matematika yang
mengalikan secara bersama-sama dua array yang berbeda ukuran namun
memiliki dimensi yang sama. Untuk mendapatkan efek emboss ktia dapat
mengunakan operasi konvolusi. Konvolusi digunakan untuk mencari nilai
pixel dengan cara menghitung nilai pixel tetangganya. Dalam proses
Oglobal{f(x,y)}
18
konvolusi dikenal juga nantinya istilah matrik filter, misalnya seperti
matrik filter yang berukuran 3x3 dibawah ini :
a b c
h ( i , j ) e f g
h i j
Operasi konvolusi dinyatakan dengan rumus sebagai berikut
(http://www.gamedev.net/reference/programing/features/imagepror/page2
asp).
Persamaan 2.2
Y [ r,c] = nilai pixel setelah dilakukan proses konvolusi
i = posisi di elemen-elemen matrik filter pada sumbu x (baris)
j = posisi dari elemen-elemen matrik filter pada sumbu y (kolom)
h (i,j) = matrik filter
M = lebar atau panjang matrik filter
r = row (baris)
c = colom (kolom)
gx = variabel yang menunjukkan letak suatu posisi pixel suatu citra.
19
Operasi konvolusi dapat diilustrasikan sebagai berikut:
P1 P2 P3 P4 P5 P6 P7 P8 P9
Filter Citra
Gambar 2.7 Ilustrasi Konvolusi
Dari hasil ilustrasi konvolusi tersebut maka didapatkan :
A p1 + B p2 + C p3 + D p4 + E p5 + F p6 + G p7 + H p8 + I p9 y(r,c) =
A + B + C + D + E + F + G + H + I
Contoh penggunaan operasi konvolusi
Misalkan citra f (x,y) yang berukuran 5 x 5 dan sebuah filter yang
berukuran 3 x 3 masing- masing adalah sebagai berikut:
40 45 30 15 45 60 20 25 15 20 0 0 1 F(x,y) = 35 45 30 25 20 filter = 0 -2 0 25 15 50 45 30 0 0 2 35 25 20 55 60
Dapat diilustrasikan sebagai berikut:
1. Tempatkan filter pada sudut kiri atas, kemudian hitung nilai pixel pada
posisi (0,0) dari filter.
A B C D E F G H I
Y (r,c)
20
Hasil konvolusi = 20. nilai ini dihitung dengan cara sebagai berikut:
(40.0+45.0+30.1+60.0+20.(-2)+25.0+35.0+45.0+30.2)
((0+0+30+0+(-40)+0+0+0+60)/1) = 50
2. Geser filter satu pixel ke kanan, kemudian hitung nilai pixel pada posisi
(0,0) dari filter.
Hasil konvolusi = 0. nilai ini dihitung dengan cara sebagai berikut:
((0+0+15+0+(-50)+0+0+0+50)/1) =15
3. Geser filter satu pixel ke kanan, kemudian hitung nilai pixel pada posisi
(0,0) dari filter.
Hasil konvolusi = 10. nilai ini dihitung dengan cara sebagai berikut:
((0+0+45+0+(-30)+0+0+0+40)/1) = 55
40 45 30 15 45 60 20 25 15 20 35 45 30 25 20 25 15 50 45 30 35 25 20 55 60
50
50 15
40 45 30 15 45 60 20 25 15 20 35 45 30 25 20 25 15 50 45 30 35 25 20 55 60
40 45 30 15 45 60 20 25 15 20 35 45 30 25 20 25 15 50 45 30 35 25 20 55 60
50 15 55
21
4. Selanjutnya, geser filter satu pixel ke bawah, lalu mulai lagi melakukan
konvolusi dari sisi kiri citra. Setiap konvolusi, geser filter satu pixel
kekanan.
Hasil konvolusi = 10. nilai ini dihitung dengan cara sebagai berikut:
((0+0+25+0+(-90)+0+0+0+100)/1) =35
5. Geser filter satu pixel ke kanan, kemudian hitung nilai pixel pada posisi
(0,0) dari filter.
Hasil konvolusi =30 nilai ini dihitung dengan cara sebagai berikut:
((0+0+15+0+(-60)+0+0+0+90)/1) =45
6. Geser filter satu pixel ke kanan, kemudian hitung nilai pixel pada posisi
(0,0) dari filter.
40 45 30 15 45 60 20 25 15 20 35 45 30 25 20 25 15 50 45 30 35 25 20 55 60
50 15 55 35
50 15 55 35 45
40 45 30 15 45 60 20 25 15 20 35 45 30 25 20 25 15 50 45 30 35 25 20 55 60
40 45 30 15 4560 20 25 15 2035 45 30 25 2025 15 50 45 3035 25 20 55 60
50 15 55 35 45 30
22
Hasil konvolusi = 138.nilai ini dihitung dengan cara sebagai berikut:
((0+0+20+0+(-50)+0+0+0+60)/1) =30
Dengan cara yang sama seperti di atas, maka pixel-pixel pada baris
ketiga dikonvolusikan sehingga menghasilkan:
Masalah timbul ketika bila pixel yang dikonvolusikan adalah pixel
pinggir (border), karena beberapa koefisien konvolusi tidak dapat
diposisikan pada pixel-pixel citra, seperti contoh:
Masalah seperti ini selalu terjadi pada pixel-pixel pinggir kiri,
kanan, atas dan bawah. Penyelesaian untuk masalah ini adalah :
1. Pixel-pixel pinggir diabaikan, tidak di-konvolusi
2. Duplikasi elemen citra. Diisikan sesuai dengan nilai yang ada pada
elemen tersebut.
3. Elemen yang ditandai dengan “?” diasumsikan bernilai 0 atau
konstanta lain, sehingga konvolusi pixel-pixel pinggir dapat dilakukan.
50 15 55 35 45 30 40 35 50
23
Gambar 2.8 Pixel-pixel pinggir (yang tidak terarsir) tidak dikonvolusikan
Algoritma konvolusi citra N x M dengan filter yang berukuran 3x3,
5x 5 dan 7x7. Pixel yang dikonvolusikan adalah elemen (i,j). delapan buah
pixel yang bertetangga dengan pixel (i,j) adalah sbb:
i-1,j-1 i-1,j i-1,j+1
i,j-1 i,j i,j+1
i+1,j+1 i+1,j i+1,j+1
Gambar 2.9 Matrik bertetangga dengan pixel (i,j) dengan matrik filter 3 x 3
i-2,j-2 i-2,j-1 i-2,j i-2,j+1 i-2,j+2
i-1,j-2 i-1,j-1 i-1,j i-1,j+1 i-1,j+2
i,j-2 i,j-1 i,j i,j+1 i,j+2
i+1,j-2 i+1,j-1 i+1,j i+1,j+1 i+1,j+2
i+2,j-2 i+2,j-1 i+2,j i+2,j+1 i+2,j+2
Gambar 2.10 Matrik bertetangga dengan pixel (i,j) dengan matrik filter 5 x 5
24
i-3,j-3 i-3,j-2 i-3,j-1 i-3,j i-3,j+1 i-3,j+2 i-3,j+3
i-2,j-3 i-2,j-2 i-2,j-1 i-2,j i-2,j+1 i-2,j+2 i-2,j+3
i-1,j-3 i-1,j-2 i-1,j-1 i-1,j i-1,j+1 i-1,j+2 i-1,j+3
i,j-3 i,j-2 i,j-1 i,j i,j+1 i,j+2 i,j+3
i+1,j-3 i+1,j-2 i+1,j-1 i+1,j i+1,j+1 i+1,j+2 i+1,j+3
i+2,j-3 i+2,j-2 i+2,j-1 i+2,j i+2,j+1 i+2,j+2 i+2,j+3
i+3,j-3 i+3,j-2 i+3,j-1 i+3,j i+3,j+1 i+3,j+2 i+3,j+3
Gambar 2.11 Matrik bertetangga dengan pixel (i,j) dengan matrik filter 7 x 7
2.5 Efek Emboss
Efek emboss mampu memberikan ilusi efek optik dari sebuah citra
dimana beberapa pixel dari sebuah objek dibuat agak lebih dekat atau
lebih jauh dari background, membuat sebuah 3 dimensi atau efek emboss.
Untuk mendapatkan sebuah citra baru yang merupakan pengolahan citra
asli menjadi citra atau gambar yang seolah – olah timbul pada objek, dapat
kita dapatkan dengan menkonvolusi nilai warna dari sebuah citra dengan
matrik yang bernilai ganjil misal 3x3, 5x5, 7x7 dst. Matrik tersebut
dimaksudkan karena teori dari konvolusi mewajibkan pixel–pixel yang
bisa dikonvolusi hanya pixel–pixel yang memiliki tetangga itu artinya
matrik yang digunakan untuk proses konvolusi adalah matrik–matrik yang
berukuran ganjil [http://www.catenary.com/howto/emboss.html].
Sedangkan pixel yang berada di sekitar pixel yang diemboss tersebut akan
25
dikalikan juga dengan matrik yang mengelilingi nilai tengah dari matrik
pengkonvolusi (filter) tersebut. Setelah proses konvolusi selesai maka
hasil dari konvolusi tersebut akan dijumlah sehingga menghasilkan angka
citra warna yang baru. Untuk tepi citra tidak dimungkinkan adanya proses
emboss, hal ini dikarenakan tidak adanya atau tidak lengkapnya nilai
warna yang mengelilingi warna dari tepi citra tersebut. Walaupun nantinya
akan didapat juga hasil yang baru pada tepi citra, namun secara teori
konvolusi/ emboss hal tersebut tidaklah dimungkinkan, hal ini disebabkan
warna-warna yang berada ditepi citra akan digunakan sebagai border saja
karena ukurannya yang kecil.
Aturan-aturan untuk mendapatkan hasil emboss yaitu:
• Apabila elemen-elemen matrik filter dijumlahkan dan hasilnya
adalah 0 (nol), maka nilai 0 tersebut akan diubah menjadi 1
0),(1
0
1
0=∑∑
−
=
−
=
M
i
M
ijih maka 1),(
1
0
1
0=∑∑
−
=
−
=
M
i
M
ijih
Penggambaran rumus tersebut didapat dengan alasan apabila jumlah
∑∑−
=
−
=
1
0
1
0),(
M
i
M
ijih atau hasil penjumlahan seluruh elemen matrik filter
sama dengan 0 tidak diganti maka nilai warna yang dicari tidak akan
ditemukan (1/0 = not define)
• Setelah nilai baru diperoleh maka nilai tersebut nantinya akan
ditambah dengan 128, ini dimaksudkan untuk mencegah warna hasil
tidak terlalu gelap (hitam), karena banyaknya nilai yang berada
dibawah 0.
26
• Setelah nilai tersebut ditambah dengan 128, maka apabila diperoleh
nilai baru yang kurang dari 0 maka dianggap sebagai 0, sedangkan
nilai yang melebihi 255 akan dibulatkan menjadi 255.
X<0 maka X=0,
X>= 255 maka X=255.
Gambar 2.12 hasil konvolusi setelah ditambah 128
2.6 Pemrograman Delphi
Borland Delphi atau yang biasa disebut Delphi saja, merupakan
sarana pemrograman aplikasi visual. Delphi merupakan generasi penerus
dari Turbo Pascal. Turbo Pascal yang diluncurkan pada tahun 1983
dirancang untuk dijalankan pada sistem operasi DOS (yang merupakan
sistem operasi yang paling banyak digunakan pada saat itu). Sedangkan
Delphi yang diluncurkan pertama kali tahun 1995 dirancang untuk
beroperasi di bawah sistem operasi Windows.
Delphi memiliki sarana yang tangguh untuk membuat aplikasi
mulai dari sarana untuk membuat form, menu, toolbar, hingga kemampuan
untuk menangani pengelolaan basis data yang besar. Kelebihan–kelebihan
yang dimiliki Delphi antara lain karena pada Delphi, form dan komponen-
komponenya dapat dipakai ulang dan dikembangkan, mampu mengakses
178 143 183113 173 158168 163 178
27
VBX, tersedia template aplikasi dan templete form, memiliki lingkungan
pengembangan visual yang diatur sesuai kebutuhan, menghasilkan file
terkompilasi yang berjalan lebih cepat, serta kemampuan mengakses data
dari bermacam-macam format.
Untuk pengembangan aplikasi pengolahan citra, Delphi
menyediakan fasilitas-fasilitas yang dapat memudahkan pembuat program.
Misalnya: open picture dialog (membuka gambar), image (untuk
menampilkan gambar), dan perintah-perintah lain yang mudah dikenali
oleh bahasa pemrograman Borland Delphi. Selain itu, hasil program yang
jelas akan langsung menghasilkan sebuah EXE file sehingga dapat
memudahkan dalam pemakaian program.
2.7 Adobe Photoshop
Adobe Photoshop adalah sebuah aplikasi yang di desain khusus
untuk memperoleh data bitmap dengan mendukung 32 format bitmap yang
ada seperti *.BMP, *.GIF dan masih banyak lainnya yang semua dapat
kita manipulasi dengan menggunakan software ini. Penggunaan metode
layer pada software ini menjadi kekuatan tersendiri dengan pesaing-
pesaing software sejenis seperti Corel Draw, Image Lopuser, sehingga
para grapichs design banyak menggunakan software ini sebagai alat bantu
kerja mereka.
Dengan Adobe Photoshop kita dapat dengan mudah memanipulasi
data gambar atau foto. Dalam aplikasi ini Adobe Photoshop digunakan
untuk mengatur konfigurasi warna tampilan dasar (background tampilan).
28
2.8 Macromedia Flash Mx
Macromedia Flash Mx merupakan program grafis animasi yang
sangat popular dan banyak digunakan disainer grafis khususnya animasi,
bahkan menjadi program professional standar dalam pengolahan animasi
web. Dalam hal ini aplikasi Macromedia Flash Mx digunakan untuk
membuat animasi tulisan pada salah satu form dan membuat background.
29
BAB III
ANALISIS DAN PERANCANGAN SISTEM
Pada bab ini akan menjelaskan tentang analisis serta konsep perancangan
umum program penggunaan matrik konvolusi untuk efek emboss pada suatu citra.
3.1 Analisis Sistem
3.1.1 Gambaran Umum Sistem
Sistem yang akan dibangun ini adalah suatu program untuk
mengubah citra asli, menjadi suatu citra hasil dimana citra hasil sudah
ditambah dengan efek emboss. Efek emboss yang dihasilkan didapatkan
dengan cara mengalikan matrik filter dengan matrik dari citra asli (proses
ini dikenal dengan proses konvolusi). Operasi konvolusi dapat dilakukan
dengan pilihan ukuran matrik filter yaitu 3x3, 5x5 dan7x7, dimana setiap
elemen dari matrik filter dapat diubah sesuai dengan keinginan. Selain itu
dalam program ini dapat menampilkan perbandingan matrik dari citra
sebelum dilakukan emboss dan matrik citra setelah dilakukan proses
emboss.
3.1.2 Analisis Kebutuhan
Agar pengolahan citra dengan memberikan efek emboss dapat
digunakan seoptimal mungkin, maka perlu identifikasi kebutuhan untuk
program yang akan dibuat
30
Kebutuhan tersebut dapat diidentifikasi dari beberapa sisi, yaitu:
1. Hardware yang digunakan untuk membangun sistem antara lain :
a. Seperangkat komputer:
• AMD Athlon
• RAM 512 MB
• Hard Disk 80GB
• VGA 64 MB
• Monitor SVGA
• Keyboard
• Mouse
b. Alat bantu:
• Scanner
• Kamera digital
Hardware dan software minimum yang dibutuhkan untuk menjalankan
sistem adalah :
• Prosesor Pentium II
• RAM 32MB
• Hard Disk 20GB
• VGA 4MB
• Monitor SVGA
• Keyboard
• Mouse
31
2. Software yang dibutuhkan untuk membangun sistem antara lain :
• Sistem operasi Windows
• Program Delphi 7.0
• Program Maceomedia Flash Mx
• Adobe Photoshop 7.0
3. Kebutuhan akan data yaitu berupa file citra berwarna.
3.2 Perancangan Proses
Sebelum memasuki tahap pembuatan program, terlebih dahulu harus
dilakukan perancangan proses. Perancangan proses ini dapat berupa
pembuatan algoritma dan flowchart program.
Algoritma adalah suatu langkah-langkah untuk menyelesaikan suatu
masalah (Budi Sutejo, S.Kom, 2003). Berikut adalah beberapa algoritma
untuk menyelesaikan program ::
1. Masukkan citra asli dimana citra yang digunakan adalah citra yang
berformat .bmp
2. Pilih ukuran matrik filter. Terdapat 3 pilihan ukuran matrik filter yaitu
3 x 3, 5 x 5 dan 7 x 7
3. Masukkan nilai elemen matrik filter
4. Pilih proses emboss yang akan dilakukan. Ada 2 pilihan proses emboss
yaitu emboss greyscale dan emboss warna. Apabila memilih emboss
greyscale, program akan langsung mengubah citra masukkan menjadi
greyscale. Sedangkan apabila memilih emboss warna citra akan langsung
diproses menjadi emboss.
32
5. Lakukan proses emboss
6. Tampilkan citra hasil emboss
Dari tahapan algoritma di atas dapat digambarkan flowchart program,
seperti dibawah ini :
Gambar 3.1 flowchart program keseluruhan
Pada flowchart di atas terdapat proses pilih emboss, dimana dalam
proses tersebut terdapat tahapan-tahapan proses yang dapat dituliskan
dengan algoritma dibawah ini :
1. Baca proses emboss yang akan dilakukan.
2. Ada 2 pilihan proses emboss yaitu emboss greyscale dan emboss
warna. Apabila memilih emboss greyscale, program akan langsung
Pilih proses emboss yang akan dilakukan
Lakukan proses emboss
Selesai
Masukkan citra asli
Masukkan nilai elemen matrik filter
Tampilkan citra hasil emboss
mulai
33
mengubah citra masukkan menjadi greyscale. Sedangkan apabila
memilih emboss warna citra akan langsung diproses menjadi emboss.
Gambar 3.2 flowchart pilih proses emboss
Berikut adalah algoritma yang digunakan untuk mendapatkan nilai
greyscale dari citra yang akan diproses :
1. Baca citra masukan (berupa citra yang berwarna).
2. Definisikan ukuran citra
3. Baca nilai RGB dari citra, untuk mengetahui nilai Red, Green dan Blue
dari tiap pixel citra masukan
4. Hitung greyscale dengan rumus
Y = 0.299R + 0.587G + 0.114B
5. Citra hasil greyscale
If pilih = gray
proses grayscale
selesai
tidak
ya
emboss = warna
proses emboss
baca masukan pilihan proses emboss
mulai
34
Berikut ini merupakan flowchart program untuk proses greyscale :
Gambar 3.3 Flowchart Greyscale
Setelah memilih proses emboss, maka akan dilanjutkan dengan
perhitungan untuk mendapatkan hasil emboss. Tahapan-tahapannya
sebagai berikut.
1. Lakukan proses konvolusi:
– Hitung jumlah elemen matrik filter, jika jumlah matrik filter = 0,
maka akan diubah menjadi 1
– Menjumlahkan perkalian tiap pixel matrik citra awal dengan
elemen matrk filter
Mulai
Selesai
Y = 0.299R + 0.587G + 0.114B
Citra hasil
Baca citra masukan
Baca ukuran citra
Baca nilai RGB citra
35
– Hasil konvolusi didapat dengan membagi penjumlahan matrik
tersebut dengan jumlah matrik filter.
2. Hitung nilai emboss dengan menambahkan tiap pixel matrik citra hasil
konvolusi dengan 128 untuk mendapatkan hasil yang lebih cerah.
– Jika hasil emboss pada tiap pixel ada yang kurang dari 0, maka
hasil emboss tiap pixel tersebut diubah menjadi 0
– Jika hasil emboss pada tiap pixel ada yang lebih dari 0, maka
hasil emboss tiap pixel tersebut diubah menjadi 255
Dari tahapan algoritma diatas dapat digambarkan flowchart program
untuk proses emboss, seperti dibawah ini :
Gambar 3.4 Flowchart Proses Emboss
36
3.3 Perancangan Menu
Dalam perancangan menu yang akan dibuat, terdapat beberapa
pilihan menu yang tersedia di Form Utama. Rancangan bagan struktur
menu yang tersedia di Form Utama antara lain :
File Emboss View About Help
Open Emboss Grayscale Matrik Warna About Me Help Save Emboss Warna Exit
• Pada menu File terdiri dari :
1. Open, untuk membuka atau menampilkan gambar (image) yang
akan diproses selanjutnya
2. Save, untuk menyimpan gambar (image) setelah proses
3. Exit, keluar dari program utama
• Pada menu Emboss terdapat 2 Proses emboss yang berfungsi untuk
menambahkan efek emboss pada gambar (image) sebelumnya.
1. Emboss Greyscale.
Dalam proses ini citra awal (yang berupa citra warna) diubah
terlebih dahulu ke bentuk greyscale dan kemudian dilakukan proses
emboss.
2. Emboss warna
Dalam proses ini citra awal (yang berupa citra warna) langsung
dilakukan proses emboss tanpa harus merubahnya dalam bentuk
greyscale.
37
• Pada menu View –> Matrik Warna, memanggil Form View
• Pada menu About –> About Me, memanggil Form About
• Pada menu Help –> Help, memanggil Form Help
3.4 Perancangan Interface
Terdapat beberapa perancangan interface yang akan dibuat antara lain:
Halaman pembuka
Halaman pembuka merupakan tampillan awal sebelum memasuki
program utama. Dalam halaman pembuka ini terdapat judul, logo Sanata
Dharma dan nama pembuat.
Perancangan Form Utama
LOGO
NAMA
JUDUL
38
Dalam form utama ini terdapat 3 pilihan ukuran matrik (matrik
filter) yaitu : 3x3, 5x5 dan 7x7. Komponen atau elemen dari matrik filter
tersebut dapat diisi sesuai dengan keinginan, tetapi harus menggunakan
aturan emboss yang ada.
Perancangan Form View
Dalam form view ini menampilkan nilai matrik sebelum dan
sesudah dilakukan proses emboss. Terdapat dua pilihan tipe gambar
sebelum dilakukan proses emboss, yaitu : warna dan Grey. Pada emboss
warna terdapat tiga pilihan tipe warna yaitu Red (R), Green (G), dan Blue
(B) yang semuanya direpresentasikan dengan matrik. Setelah dilakukan
proses emboss juga terdapat matrik warna yang juga dibentuk oleh warna
39
dasar Red, Green dan Blue. Tombol CLOSE digunakan untuk menutup
form View dan kembali ke form utama
Perancangan Form About
Dalam Form About berisi tentang profil pembuat program. Tombol
CLOSE digunakan untuk menutup form About dan kembali ke form
utama.
Perancangan Form Help
TEXT
Xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CLOSE
40
Dalam form Help berisi tentang cara penggunaan dari sistem yang
akan dibuat, agar pemakai sistem dapat mengetahui cara pemakaian
sistem. Tombol CLOSE digunakan untuk menutup form Help dan kembali
ke form utama.
41
BAB IV
IMPLEMENTASI
Pada bab ini akan dijelaskan tentang bagaimana pengimplementasian
sistem penggunaan matrik konvolusi untuk efek emboss pada suatu citra.
4.1 Implementasi Hasil Program
4.1.1 Halaman Pembuka
Halaman pembuka merupakan halaman pertama saat kita masuk ke
aplikasi program emboss. Untuk menuju ke Form Emboss dilakukan
dengan cara mengklik halaman pembuka.
Gambar 4.1 Halaman pembuka
Perintah untuk memanggil Form Emboss:
procedure TfrmDepan.FormClick(Sender: TObject); begin frmEmboss.show; end;
42
4.1.2 Form Emboss
Form emboss ini merupakan form utama dimana terdapat menu
pilihan yaitu File, Emboss, Matrik, About dan Help.
Gambar 4.2 Form Emboss
Dalam form emboss ini, terdapat dua animasi. Yang pertama,
animasi menggunakan timer. Dalam hal ini animasi yang dibuat adalah
teks berkedip (pada tulisan ‘Embossing menggunakan proses konvolusi’)
dengan nilai default interval adalah 1000 (1 detik) pada method timer
milik timer kode program yang diberikan:
if label1.Visible then label1.Visible:=false else label1.Visible:= true; Animasi yang kedua, yaitu animasi menggunakan animate. Animasi ini
telah disediakan oleh Delphi, dimana animasi tersebut harus berformat
.avi. Dalam animasi ini tulisan ‘Penggunaan Matrik Konvolusi Untuk Efek
Emboss’ dibuat menggunakan program Macromedia Flash MX 2004, yang
kemudian di Export Movie diubah menjadi format .avi
43
Untuk memulai pengolahan citra, hendaknya file citra harus dibuka
terlebih dahulu. Untuk membuka file citra, pilih menu, file → Open,
sehingga keluar form Open Picture Dialog.
Gambar 4.3 Open Picture Dialog
Jika file citra telah dipilih, maka citra tersebut masuk ke dalam
TImage foto awal. Hal ini dapat dilihat pada gambar 4.4
Gambar 4.4 menampilkan gambar pada TImage foto awal
44
Sebelum memproses menjadi emboss, dalam form ini terdapat tiga
ukuran filter matrik yaitu: 3x3, 5x5, dan 7x7. Setelah memilih salah satu
dari pilihan tersebut, masukkan nilai elemen matrik yang akan diproses,
sesuai dengan yang diinginkan. Terdapat dua pilihan untuk merubah citra
menjadi emboss, yaitu emboss greyscale dan emboss warna. Kemudian
untuk memproses menjadi emboss pilih menu Run → Emboss Grayscale
atau Run → Emboss Warna .
Gambar 4.5 menampilkan hasil emboss pada TImage foto hasil
Setelah dilakukan proses emboss, citra hasil ditampilkan di TImage foto
hasil. Apabila image hasil tersebut akan disimpan dapat dilakukan dengan
memilih menu File → Save,sehingga akan keluar form save picture seperti
pada gambar di bawah ini:
45
Gambar 4.6 Save Picture Dialog
4.1.3 Form Matrik Warna
Pada Form Matrik Warna berisi perbandingan matrik sebelum dan
sesudah dilakukan proses emboss. Sebelum dilakukan proses emboss,
terdapat pilihan matrik warna yang diinginkan sesuai dengan pilihan jenis
warna yaitu : Berwarna, Grey (abu-abu) dimana masing – masing
mempunyai nilai Red, Green dan Blue.
Untuk menampilkan form ini yaitu dengan memilih View→Matrik,
pada form utama.
Gambar 4.7 Form Matrik Warna
46
4.1.4 Form About
Pada form About berisi tentang profil pembuat program (nama,
alamat serta keterangan prodi), selain itu juga terdapat profil dosen
pembimbing. Cara menampilkan form ini yaitu dengan memilih menu
About→About Me pada menu Utama.
Gambar 4.8 Form About
4.1.5 Form Help
Apabila user mengalami kesulitan dalam menjalankan program ini
atau ingin melihat definisi dari efek emboss, user dapat melihat jendela
help yang dapat ditampilkan dengan cara memilih menu Help→ Help pada
menu utama.
Gambar 4.9 Form Help
47
4.2 Pembahasan
4.2.1 Mengubah Citra Berwarna Menjadi Greyscale
Sebelum melakukan proses emboss, citra masukan (citra berwarna)
diubah menjadi greyscale. Hal ini bertujuan untuk memperkecil nilai matrik
sehingga akan mempermudah proses perhitungan.
Berikut adalah function Grey yang digunakan untuk mengubah citra
berwarna menjadi greyscale
function Grey (): TBitmap; var x1,y1,x,y,R,G,B,Pixel:Integer; Xgambar : TBitmap; begin Xgambar := TBitmap.Create; Xgambar.Assign(gbr1); x1 := gbr1.Width; y1 := gbr1.Height; for x := 0 to x1-1 do for y := 0 to y1-1 do begin R := GetRvalue(gbr1.Canvas.Pixels[x,y]); G := GetGvalue(gbr1.Canvas.Pixels[x,y]); B := GetBvalue(gbr1.Canvas.Pixels[x,y]); Pixel := Round ((0.299*R)+(0.587*G)+(0.114*B)); Xgambar.Canvas.Pixels[x,y]:=RGB(Pixel,Pixel,Pixel); end ; Grey := Xgambar; end ;
48
(a) Citra asli (b) Citra Greyscale
Gambar 4.10 Citra asli dan Citra Greyscale
4.2.2 Hasil Emboss Greyscale
Setelah dilakukan proses konvolusi akan didapatkan hasil emboss,
tetapi hasil emboss tersebut harus ditambahkan dengan 128, hal ini
dimaksudkan untuk mencegah warna hasil emboss tidak terlalu gelap
(hitam) karena banyaknya nilai yang berada di bawah 0 (nol)
Program untuk menghitung emboss greyscale :
if (rbMatrik1.Checked) then with sgMatrik do for x := 1 to x1-1 do for y := 1 to y1-1 do begin R :=(GetRValue(gbr2.Canvas.Pixels[x-1,y-1])* StrtoInt(Cells[0,0]) + GetRValue(gbr2.Canvas.Pixels[x-1,y])* StrtoInt(Cells[0,1]) + GetRValue(gbr2.Canvas.Pixels[x-1,y+1])* StrtoInt(Cells[0,2]) + GetRValue(gbr2.Canvas.Pixels[x,y-1])* StrtoInt(Cells[1,0]) + GetRValue(gbr2.Canvas.Pixels[x,y])* StrtoInt(Cells[1,1]) + GetRValue(gbr2.Canvas.Pixels[x,y+1])* StrtoInt(Cells[1,2]) + GetRValue(gbr2.Canvas.Pixels[x+1,y-1])* StrtoInt(Cells[2,0]) + GetRValue(gbr2.Canvas.Pixels[x+1,y])* StrtoInt(Cells[2,1]) + GetRValue(gbr2.Canvas.Pixels[x+1,y+1])* StrtoInt(Cells[2,2])) ; R:=round(R / jml + 128); if R <0 then
49
R:=0; if R>255 then R:=255; hslEmbs.Canvas.Pixels[x,y]:= RGB(R,R,R);
Contoh diatas untuk menghitung emboss greyscale dengan ukuran
matrik filter 3 x 3, demikian halnya untuk ukuran matrik filter 5 x 5 dan
7 x 7 dapat dihasilkan dengan mengalikan tiap pixel matrik citra awal
(sebelum diemboss) dengan elemen pada matrik filter.
Contoh hasil emboss Greyscale
(a) matrik filter 3x3 (b) matrik filter 5x5
(c) matrik filter 7x7
Gambar 4.11 Hasil emboss Grey dengan jumlah elemen matrik filter < 0
1 0 0 0 0 0 0 0 -2 0 0 -1 0 0 0 0 0 0 2 0 0 -1 0 0 0
-1 0 00 1 00 0 -1
-2 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 2 0 0 4 0 0 0 0 -3 0 0 0 -2 0 0 0 0 0 -1 0 0 0 0 0 0 0
50
Gambar di atas merupakan perbandingan gambar hasil emboss dengan
ukuran matrik filter 3x3, 5x5, dan 7x7 dimana jumlah elemen matrik filter
kurang dari 0 (nol). Dari hasil tersebut dapat dilihat bahwa citra yang
dihasilkan didominasi oleh warna hitam.
(a) matrik filter 3x3 (b) matrik filter 5x5
(c) matrik filter 7x7
Gambar 4.12 Hasil emboss Grey dengan jumlah elemen matrik filter > 0
Gambar di atas merupakan perbandingan gambar hasil emboss dengan
ukuran matrik filter 3x3, 5x5, dan 7x7 dimana jumlah elemen matrik filter
lebih dari 0 (nol).
1 0 0 0 0 0 0 0 2 0 0 0 -2 0 0 0 -1 0 0 0
-1 0 0 0 2
-1 0 -20 1 11 1 0
1 0 0 0 0 0 20 0 0 0 0 0 00 0 1 0 0 0 00 2 0 0 0 -1 00 0 0 0 0 0 0
-2 0 0 0 0 0 -10 0 0 0 0 0 0
51
Dari gambar di atas dapat dilihat bahwa apabila jumlah elemen matrik
filter lebih dari 0 (nol) atau bernilai positif akan menghasilkan hasil emboss
yang didominasi oleh warna putih.
(a) matrik filter 3x3 (b) matrik filter 5x5
(c) matrik filter 7x7
Gambar 4.13 Hasil emboss Grey dengan jumlah elemen matrik filter = 0
Gambar di atas merupakan perbandingan gambar hasil emboss
dengan ukuran matrik filter 3x3, 5x5, dan 7x7 dimana jumlah elemen
2 0 1 0 1 0 0 0 0 0
-3 -2 0 -2 0 0 0 1 0 0 0 1 0 0 1
-1 0 -20 1 01 1 0
1 0 0 0 3 0 00 -1 0 1 0 0 -21 0 -1 0 0 0 00 0 0 0 -2 0 -20 3 0 1 0 0 0
-1 0 1 0 0 -2 00 0 0 0 0 0 0
52
matrik filter sama dengan 0 (nol). Dari gambar tersebut dapat dilihat bahwa
hasil emboss yang jumlah filternya sama dengan 0 (nol) terlihat lebih baik
dan jelas.
Dari perbandingan gambar di atas (4.11, 4.12 dan 4.13) dapat diketahui
bahwa efek emboss juga dipengaruhi oleh besar ukuran matrik filter dan
jumlah elemen pada matrik filter. Pada matrik filter berukuran 3x3 terlihat
bahwa objek gambar lebih menonjol dibanding dengan gambar pada matrik
filter yang berukuran 5x5 dan 7x7.
Faktor lain yang mempengaruhi hasil emboss adalah sebaran nilai
matrik filter yang digunakan. Meskipun nilai elemen yang diberikan sama,
tetapi dengan sebaran nilai yang berbeda maka hasil yang didapat akan
berbeda. Hal ini disebabkan karena nilai pixel baru yang didapat merupakan
hasil proses penjumlahan dari nilai pixel-pixel tetangga yang telah dikalikan
dengan matrik filter. Dalam hal ini saya akan menguji sebaran nilai matrik
filter berdasarkan letak nilai positif(+) dan negatif(-).
Perbandingan keempat sebaran nilai tersebut dapat dilihat pada gambar
di bawah ini:
- +
+ -
+ -
-
+
53
(a) Matrik filter ukuran 3 x 3
-1 -1 -1 -1 -1-3 -3 -3 -3 -30 0 0 0 03 3 3 3 31 1 1 1 1
1 1 1 1 1 3 3 3 3 3 0 0 0 0 0
-3 -3 -3 -3 -3 -1 -1 -1 -1 -1
54
(b) Matrik filter ukuran 5 x 5
1 2 3 4 0 2 1 2 0 -1 3 2 0 -2 -3 4 0 -2 -1 -2 0 -4 -3 -2 -1
-1 -2 -3 -4 -0-2 -1 -2 0 4-3 -2 0 2 3-4 0 2 1 20 4 3 2 1
1 2 3 4 5 6 71 1 1 1 1 1 11 2 1 2 1 2 10 0 0 0 0 0 0
-1 -2 -1 -2 -1 -2 -1-1 -1 -1 -1 -1 -1 -1-1 -2 -3 -4 -5 -6 -7
-1 -2 -3 -4 -5 -6 -7-1 -1 -1 -1 -1 -1 -1-1 -2 -1 -2 -1 -2 -10 0 0 0 0 0 01 2 1 2 1 2 11 1 1 1 1 1 11 2 3 4 5 6 7
55
(c) Matrik filter ukuran 7 x 7
Gambar 4.14 Perbandingan gambar dengan letak elemen yang berbeda.
Selain itu hasil emboss juga dipengaruhi oleh besar nilai absolute
(mengabaikan tanda negatif (-) atau positif (+)) pada setiap elemen matrik
filter.Semakin besar nilai absolute maka efek emboss akan terlihat lebih
tebal. Dapat dilihat pada gambar dibawah ini :
Gambar 4.15 Perbandingan gambar dengan nilai absolute yang berbeda
-1 -2 -3 -4 -5 -6 0-2 -1 -2 -3 -4 0 6-3 -2 -1 -4 0 4 5-4 -3 -4 0 4 3 4-5 -4 0 4 1 2 3-6 0 4 3 2 1 20 6 5 4 3 2 1
1 2 3 4 5 6 02 1 2 3 4 0 -63 2 1 4 0 -4 -54 3 4 0 -4 -3 -45 4 0 -4 -1 -2 -36 0 -4 -3 -2 -1 -20 -6 -5 -4 -3 -2 -1
56
Gambar 4.16 Hasil emboss greycale
4.2.3 Hasil Emboss warna
Selain emboss greyscale, program ini juga menyediakan fasilitas
untuk emboss citra yang berwarna. Citra masukan (berupa citra berwarna)
akan diproses langsung menjadi citra yang mempunyai efek emboss tanpa
harus mengubahnya dalam bentuk greyscale.
Program untuk menghitung emboss warna :
if (rbMatrik1.Checked) then with sgMatrik do for x := 1 to x1-1 do for y := 1 to y1-1 do begin R :=(GetRValue(gbr1.Canvas.Pixels[x-1,y-1])* StrtoInt(Cells[0,0]) + GetRValue(gbr1.Canvas.Pixels[x-1,y])* StrtoInt(Cells[0,1]) + GetRValue(gbr1.Canvas.Pixels[x-1,y+1])* StrtoInt(Cells[0,2]) + GetRValue(gbr1.Canvas.Pixels[x,y-1])* StrtoInt(Cells[1,0]) + GetRValue(gbr1.Canvas.Pixels[x,y])* StrtoInt(Cells[1,1]) +
57
GetRValue(gbr1.Canvas.Pixels[x,y+1])* StrtoInt(Cells[1,2]) + GetRValue(gbr1.Canvas.Pixels[x+1,y-1])* StrtoInt(Cells[2,0]) + GetRValue(gbr1.Canvas.Pixels[x+1,y])* StrtoInt(Cells[2,1]) + GetRValue(gbr1.Canvas.Pixels[x+1,y+1])* StrtoInt(Cells[2,2])) ;
G :=(GetGValue(gbr1.Canvas.Pixels[x-1,y-1])* StrtoInt(Cells[0,0]) + GetGValue(gbr1.Canvas.Pixels[x-1,y])* StrtoInt(Cells[0,1]) + GetGValue(gbr1.Canvas.Pixels[x-1,y+1])* StrtoInt(Cells[0,2]) + GetGValue(gbr1.Canvas.Pixels[x,y-1])* StrtoInt(Cells[1,0]) + GetGValue(gbr1.Canvas.Pixels[x,y])* StrtoInt(Cells[1,1]) + GetGValue(gbr1.Canvas.Pixels[x,y+1])* StrtoInt(Cells[1,2]) + GetGValue(gbr1.Canvas.Pixels[x+1,y-1])* StrtoInt(Cells[2,0]) + GetGValue(gbr1.Canvas.Pixels[x+1,y])* StrtoInt(Cells[2,1]) + GetGValue(gbr1.Canvas.Pixels[x+1,y+1])* StrtoInt(Cells[2,2])) ; B :=(GetBValue(gbr1.Canvas.Pixels[x-1,y-1])* StrtoInt(Cells[0,0]) + GetBValue(gbr1.Canvas.Pixels[x-1,y])* StrtoInt(Cells[0,1]) + GetBValue(gbr1.Canvas.Pixels[x-1,y+1])* StrtoInt(Cells[0,2]) + GetBValue(gbr1.Canvas.Pixels[x,y-1])* StrtoInt(Cells[1,0]) + GetBValue(gbr1.Canvas.Pixels[x,y])* StrtoInt(Cells[1,1]) + GetBValue(gbr1.Canvas.Pixels[x,y+1])* StrtoInt(Cells[1,2]) + GetBValue(gbr1.Canvas.Pixels[x+1,y-1])* StrtoInt(Cells[2,0]) + GetBValue(gbr1.Canvas.Pixels[x+1,y])* StrtoInt(Cells[2,1]) + GetBValue(gbr1.Canvas.Pixels[x+1,y+1])* StrtoInt(Cells[2,2])) ; R:=round(R / jml + 128); G:=round(G / jml + 128); B:=round(B / jml + 128); if R <0 then R:=0; if R>255 then R:=255; if G <0 then G:=0; if G>255 then G:=255; if B <0 then B:=0; if B>255 then B:=255; hslEmbs.Canvas.Pixels[x,y]:= RGB(R,G,B);
58
Contoh diatas untuk menghitung emboss warna dengan ukuran
matrik filter 3 x 3, demikian halnya untuk ukuran matrik filter 5 x 5 dan 7
x 7 dapat dihasilkan dengan mengalikan tiap pixel matrik citra awal
(sebelum diemboss) dengan elemen pada matrik filter.
Contoh hasil emboss warna :
(a) matrik filter 3x3 (b) matrik filter 5x5
(c) matrik filter 7x7
Gambar 4.17 Hasil emboss warna dengan jumlah elemen matrik filter < 0
1 0 0 0 0 0 1 0 0 -1 0 0 -2 0 0 0 0 0 -1 0 0 0 1 0 0
0 1 0-1 0 00 0 -1
0 0 -2 0 0 0 0 2 0 0 0 0 0 0 0 0 1 0 -1 0 0 1 0 0 -1 0 0 0 0 0 -1 0 0 1 0 0 1 0 0 0 0 -2 0 0 0 0 0 0 0
59
Gambar di atas merupakan gambar hasil emboss warna dimana
jumlah matrik filter kurang dari 0 (nol). Hal ini menyebabkan citra hasil
akan didominasi oleh warna hitam.
(a) matrik filter 3x3 (b) matrik filter 5x5
(c) matrik filter 7x7
Gambar 4.18 Hasil emboss warna dengan jumlah elemen matrik filter = 0
Gambar di atas merupakan gambar hasil emboss warna, dimana
jumlah elemen matrik filter sama dengan 0 (nol). Gambar yang dihasilkan
didominasi oleh warna abu-abu (greyscale).
2 0 1 0 1 0 -3 0 0 0 0 -2 0 -2 0 0 0 1 0 0 0 1 0 0 1
-1 0 -2-1 0 01 1 2
0 -2 0 0 0 0 0 1 0 0 1 0 0 2 0 0 -3 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 1
60
(a) matrik filter 3x3 (b) matrik filter 5x5
(c) matrik filter 7x7
Gambar 4.19 Hasil emboss warna dengan jumlah elemen matrik filter > 0
Gambar di atas merupakan hasil emboss dengan jumlah elemen
matrik filter lebih dari 0 (nol). Dari gambar tersebut terlihat bahwa gambar
yang dihasilkan lebih terang dan citra warnanya lebih terlihat, dibanding
jika jumlah elemen matrik filter kurang atau lebih dari 0 (nol).
Sama halnya dengan emboss greyscale, faktor lain yang
mempengaruhi hasil emboss warna adalah sebaran nilai matrik filter yang
1 0 0 0 0 0 0 2 0 0 0 0 -2 0 0 0 -1 0 0 0
-1 0 0 0 2
-1 0 -20 1 11 1 0
2 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 -1 0 -1 0 -1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 0
61
digunakan. Meskipun nilai elemen yang diberikan sama, tetapi dengan
sebaran nilai yang berbeda maka hasil yang didapat akan berbeda. Hal ini
disebabkan karena nilai pixel baru yang didapat merupakan hasil proses
penjumlahan dari nilai pixel-pixel tetangga yang telah dikalikan dengan
matrik filter. Dalam hal ini saya akan menguji sebaran nilai matrik filter
berdasarkan letak nilai positif (+) dan negatif(-).
Perbandingan keempat sebaran nilai tersebut dapat dilihat pada gambar
di bawah ini:
-1 -2 -30 0 02 3 4
2 3 40 0 0
-1 -2 -3
- +
+ -
+ -
-
+
62
(a) Matrik filter ukuran 3 x 3
2 3 05 0 -40 -2 -3
-2 -3 0-4 0 30 5 2
1 1 1 1 13 3 3 3 30 0 0 0 0
-2 -2 -2 -2 -2-1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -2 -2 -2 -2 -2 0 0 0 0 0 3 3 3 3 3 1 1 1 1 1
63
(b) Matrik filter ukuran 5 x 5
-1 -1 -1 -1 -1 -1 -1-2 -2 -2 -2 -2 -2 -20 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 03 3 3 3 3 3 34 4 4 4 4 4 4
-1 -1 -1 0 0-2 -2 0 0 0-2 0 0 0 30 0 0 3 30 0 1 1 1
1 1 1 0 0 2 2 0 0 0 2 0 0 0 -1 0 0 0 -1 -1 0 0 -1 -1 -1
2 2 2 2 2 2 22 2 2 2 2 2 20 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0
-1 -1 -1 -1 -1 -1 -1-2 -2 -2 -2 -2 -2 -2
64
(c) Matrik filter ukuran 7 x 7
Gambar 4.20 Perbandingan gambar dengan letak elemen yang berbeda
Selain itu, hasil emboss juga dipengaruhi oleh besar nilai absolute
(mengabaikan tanda negatif (-) atau positif (+)) pada setiap elemen matrik
filter. Semakin besar nilai absolute, maka efek emboss akan terlihat lebih
tebal. Hal tersebut dapat dilihat pada gambar dibawah ini :
-1 -1 -2 0 0 0 0-1 -2 0 0 0 0 0-2 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 40 0 0 0 0 4 30 0 0 0 4 3 3
5 3 4 0 0 0 05 4 0 0 0 0 03 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 -20 0 0 0 0 -1 -20 0 0 0 -2 -2 -3
1 -1 -1 1 02 2 0 0 0
-1 -1 2 -1 00 0 0 0 00 -1 0 0 -1
65
Gambar 4.21 Perbandingan gambar dengan nilai absolute yang berbeda
Gambar 4.22 Hasil emboss warna
5 0 0 0 -20 5 0 -3 0
-1 0 3 0 00 -4 0 2 0
-3 0 0 0 1
66
BAB V
KESIMPULAN DAN SARAN
5.1 Kesimpulan
Berdasarkan hasil penelitian yang telah dilakukan dapat ditarik
kesimpulan sebagai berikut :
1. Penerapan matrik konvolusi terhadap suatu citra ternyata mampu
menghasilkan efek emboss.
2. Pada emboss greyscale, jika elemen matrik filter keseluruhan berjumlah
kurang dari 0 (nol), maka hasil citra baru yang dihasilkan akan terlihat
terlalu gelap. Begitu juga sebaliknya, jika elemen matrik filter berjumlah
lebih besar dari 0 (nol), citra hasil akan terlihat terlalu terang atau
didominasi oleh warna putih. Hasil emboss akan terlihat lebih jelas
apabila jumlah elemen matrik filter sama dengan 0 dan terlihat jelas
letak pengelompokan nilai elemen yang bernilai positif dan negatif.
3. Pada emboss warna jika jumlah elemen matrik filter kurang dari 0 (nol),
citra baru yang dihasilkan akan terlihat terlalu gelap. Jika jumlah
elemen sama dengan 0(nol) akan terlihat hasil emboss lebih jelas tetapi
warnanya lebih didominasi warna greyscale. Apabila hasil jumlah
elemen sama dengan 1, emboss warna akan terlihat tetapi juga
tergantung dari letak nilai negatif dan positifnya. Jika jumlah elemen
matrik filter lebih besar dari 1, maka citra hasil akan lebih terang atau
didominasi oleh warna putih.
67
4. Hasil emboss dipengaruhi oleh besar kecilnya ukuran matrik filter.
Semakin besar ukuran matrik filter, maka obyek utama citra akan
semakin menjauh dari obyek latar citra.
5. Semakin besar nilai absolute setiap elemen matrik filter, maka efek
emboss akan terlihat lebih tebal.
5.2 Saran
Untuk pengembangan dari skripsi ini perlu adanya saran antara lain :
1. Matrik filter yang digunakan tidak hanya berukuran 3 x 3, 5 x 5 atau 7x7.
2. Ukuran citra masukan dan citra hasil lebih diperbesar ukurannya.
3. Format citra tidak hanya berupa .bmp, dapat diperluas menjadi format
citra yang lain .
68
DAFTAR PUSTAKA
Achmad, Balza dan Firdausy, Kartika (2005), Teknik Pengolahan Citra Digital
menggunakan Delphi. Penerbit Ardi Publishing
Ahmad, Usman. (2005), Pengolahan Citra Digital, Penerbit Graha Ilmu,
Yogyakarta.
Hakim, Lukmanul dan Mutmainah, Siti.(2003). Teknik Jitu Menguasai Flash MX.
Jakarta : PT Elex Media Komputindo.
Kadir, Abdul (2002), Dasar Pemrograman Delphi 5.0. Penerbit Andi,
Yogyakarta.
Munir, Rinaldi (2004), Pengolahan Citra Digital, Penerbit Informatika, Bandung.
_______. (2003), Pemrograman Borlan Delphi 7.0, Kerjasama Wahana Komputer
Semarang dan Penerbit Andi Yogyakarta.
_______. (2004). Pembuatan CD Interaktif dengan Macromedia Flash MX
Professional 2004. Jakarta : Penerbit Salemba Infotek.
www.fotografer.net/isi/artikel/www.stotzka.de Portal Penggemar Fotografi.
www.gamedev.net/reference/articles/ article2007.asp An Introduction To Digital
Image Processing
www.catenary.com/howto/emboss.html How to Emboss an Image
69
LAMPIRAN
Source code form judul unit judul; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TfrmDepan = class(TForm) procedure FormPaint(Sender: TObject); procedure FormClick(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var frmDepan: TfrmDepan; implementation uses emboss; {$R *.dfm} procedure TfrmDepan.FormPaint(Sender: TObject); var Bitmap :TBitmap; begin Bitmap:=TBitmap.Create; Bitmap.loadFromFile('D:\CNTH_FLASH\coba\depan.bmp'); Canvas.CopyMode := cmSrcAnd; Canvas.Draw(0,0,Bitmap); Bitmap.free; end; procedure TfrmDepan.FormClick(Sender: TObject); begin frmEmboss.show;
end; procedure TfrmDepan.Timer1Timer(Sender: TObject); begin frmEmboss.Show; end; end. Source code form Emboss unit emboss; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, Grids, StdCtrls, ExtCtrls, ExtDlgs, OpenPictureDialog1, OpenPictureDialog2, ComCtrls; type TfrmEmboss = class(TForm) imgFotoawal: TImage; imgHasil: TImage; lbMatrik: TLabel; rbMatrik1: TRadioButton; rbMatrik2: TRadioButton; rbMatrik3: TRadioButton; sgMatrik: TStringGrid; menu: TMainMenu; File1: TMenuItem; Open1: TMenuItem; Save1: TMenuItem; N1: TMenuItem; Exit1: TMenuItem; Run1: TMenuItem; Run2: TMenuItem; View1: TMenuItem; Matrik: TMenuItem; About1: TMenuItem; AboutEmboss1: TMenuItem; Help1: TMenuItem; Help2: TMenuItem; OpenPictureDialog1: TOpenPictureDialog2; SavePictureDialog1: TSavePictureDialog; Label1: TLabel; Timer1: TTimer; Animate1: TAnimate;
Label2: TLabel; EmbossWarna1: TMenuItem; procedure Exit1Click(Sender: TObject); procedure Open1Click(Sender: TObject); procedure AboutEmboss1Click(Sender: TObject); procedure Help2Click(Sender: TObject); procedure MatrikClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure rbMatrik1Click(Sender: TObject); procedure rbMatrik2Click(Sender: TObject); procedure rbMatrik3Click(Sender: TObject); procedure Save1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Animate1Stop(Sender: TObject); procedure Run2Click(Sender: TObject); procedure EmbossWarna1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var frmEmboss: TfrmEmboss; gbr1 : TBitMap; gbr2 : TBitMap; hslEmbs : TBitMap; implementation uses about, help, matrik, judul; {$R *.dfm} function Grey (): TBitmap; var x1,y1,x,y,R,G,B,Pixel:Integer; Xgambar : TBitmap; begin Xgambar := TBitmap.Create; Xgambar.Assign(gbr1); x1 := gbr1.Width;
y1 := gbr1.Height; for x := 0 to x1-1 do for y := 0 to y1-1 do begin R := GetRvalue(gbr1.Canvas.Pixels[x,y]); G := GetGvalue(gbr1.Canvas.Pixels[x,y]); B := GetBvalue(gbr1.Canvas.Pixels[x,y]); Pixel := Round ((0.299*R)+(0.587*G)+(0.114*B)); Xgambar.Canvas.Pixels[x,y]:=RGB(Pixel,Pixel,Pixel); end ; Grey := Xgambar; end ; procedure TfrmEmboss.Exit1Click(Sender: TObject); begin IF MessageDlg ('Yakin Anda Keluar?',mtConfirmation,[mbYes]+[mbNo],0)=mrYes then application.Terminate; end; procedure TfrmEmboss.Open1Click(Sender: TObject); begin gbr1 := TBitMap.Create; gbr2 := TBitMap.Create; if OpenPictureDialog1.Execute then gbr1.LoadFromFile(OpenPictureDialog1.FileName) ; imgFotoawal.Canvas.Draw( 0,0 ,gbr1); gbr2.Assign(Grey); // imgHasil.Canvas.Draw( 0,0 ,gbr2); frmEmboss.imgFotoawal.Refresh; end; procedure TfrmEmboss.AboutEmboss1Click(Sender: TObject); begin frmAbout.show; frmEmboss.Close; end; procedure TfrmEmboss.Help2Click(Sender: TObject); begin frmHelp.show; frmEmboss.Close; end;
procedure TfrmEmboss.MatrikClick(Sender: TObject); begin frmMatrik.Show; frmEmboss.Close; end; procedure TfrmEmboss.FormCreate(Sender: TObject); var Bitmap :TBitmap; begin Bitmap:=TBitmap.Create; Bitmap.loadFromFile('D:\CNTH_FLASH\coba\utama.bmp'); Canvas.CopyMode := cmSrcAnd; Canvas.Draw(0,0,Bitmap); Bitmap.free; end; procedure TfrmEmboss.rbMatrik1Click(Sender: TObject); var i,j : integer; begin sgMatrik.Height := 89; sgMatrik.RowCount :=3; sgMatrik.ColCount := 3; with sgMatrik do for i:=0 to 2 do for j:=0 to 2 do Cells[i,j]:= '0'; end; procedure TfrmEmboss.rbMatrik2Click(Sender: TObject); var i,j : integer; begin sgMatrik.RowCount :=5; sgMatrik.ColCount := 5; sgMatrik.Height := 150; with sgMatrik do for i:=0 to 4 do for j:=0 to 4 do Cells[i,j]:= '0'; end;
procedure TfrmEmboss.rbMatrik3Click(Sender: TObject); var i,j : integer; begin sgMatrik.RowCount :=7; sgMatrik.ColCount := 7; sgMatrik.Height := 150; with sgMatrik do for i:=0 to 6 do for j:=0 to 6 do Cells[i,j]:= '0'; end; procedure TfrmEmboss.Save1Click(Sender: TObject); begin if SavePictureDialog1.Execute then begin gbr2.SaveToFile(SavePictureDialog1.FileName) ; ShowMessage('Anda menyimpan ke File' +SavePictureDialog1.FileName); end; end; procedure TfrmEmboss.Timer1Timer(Sender: TObject); begin if label1.Visible then label1.Visible:=false else label1.Visible:= true; end; procedure TfrmEmboss.Animate1Stop(Sender: TObject); begin frmEmboss.close; end; procedure TfrmEmboss.Run2Click(Sender: TObject); var i,j,R : Integer; x1,y1,x,y,jml: Integer; //S : Double; begin
hslEmbs := TBitmap.Create; hslEmbs.Assign(gbr2); jml:=0; with sgMatrik do for i:=0 to 6 do for j:=0 to 6 do jml:= jml+ StrtoInt(Cells[i,j]); if jml<= 0 then jml:=1; // Label2.Caption:=InttoStr(jml); x1 := gbr1.Width; y1 := gbr1.Height; if (rbMatrik1.Checked) then with sgMatrik do for x := 1 to x1-1 do for y := 1 to y1-1 do begin R :=(GetRValue(gbr2.Canvas.Pixels[x-1,y-1])* StrtoInt(Cells[0,0]) + GetRValue(gbr2.Canvas.Pixels[x-1,y])* StrtoInt(Cells[0,1]) + GetRValue(gbr2.Canvas.Pixels[x-1,y+1])* StrtoInt(Cells[0,2]) + GetRValue(gbr2.Canvas.Pixels[x,y-1])* StrtoInt(Cells[1,0]) + GetRValue(gbr2.Canvas.Pixels[x,y])* StrtoInt(Cells[1,1]) + GetRValue(gbr2.Canvas.Pixels[x,y+1])* StrtoInt(Cells[1,2]) + GetRValue(gbr2.Canvas.Pixels[x+1,y-1])* StrtoInt(Cells[2,0]) + GetRValue(gbr2.Canvas.Pixels[x+1,y])* StrtoInt(Cells[2,1]) + GetRValue(gbr2.Canvas.Pixels[x+1,y+1])* StrtoInt(Cells[2,2])) ; R:=round(R / jml + 128); //G:=round(G / jml + 128); // B:=round(B / jml + 128); if R <0 then R:=0; if R>255 then R:=255;
hslEmbs.Canvas.Pixels[x,y]:= RGB(R,R,R); end; if (rbMatrik2.Checked) then with sgMatrik do for x := 1 to x1-1 do for y := 1 to y1-1 do begin R :=( GetRValue(gbr2.Canvas.Pixels[x-2,y-2])* StrtoInt(Cells[0,0]) + GetRValue(gbr2.Canvas.Pixels[x-2,y-1])* StrtoInt(Cells[0,1]) + GetRValue(gbr2.Canvas.Pixels[x-2,y])* StrtoInt(Cells[0,2]) + GetRValue(gbr2.Canvas.Pixels[x-2,y+1])* StrtoInt(Cells[0,3]) + GetRValue(gbr2.Canvas.Pixels[x-2,y+2])* StrtoInt(Cells[0,4]) + GetRValue(gbr2.Canvas.Pixels[x-1,y-2])* StrtoInt(Cells[1,0]) + GetRValue(gbr2.Canvas.Pixels[x-1,y-1])* StrtoInt(Cells[1,1]) + GetRValue(gbr2.Canvas.Pixels[x-1,y])* StrtoInt(Cells[1,2]) + GetRValue(gbr2.Canvas.Pixels[x-1,y+1])* StrtoInt(Cells[1,3]) + GetRValue(gbr2.Canvas.Pixels[x-1,y+2])* StrtoInt(Cells[1,4]) + GetRValue(gbr2.Canvas.Pixels[x,y-2])* StrtoInt(Cells[2,0]) + GetRValue(gbr2.Canvas.Pixels[x,y-1])* StrtoInt(Cells[2,1]) + GetRValue(gbr2.Canvas.Pixels[x,y])* StrtoInt(Cells[2,2]) + GetRValue(gbr2.Canvas.Pixels[x,y+1])* StrtoInt(Cells[2,3]) + GetRValue(gbr2.Canvas.Pixels[x,y+2])* StrtoInt(Cells[2,4]) + GetRValue(gbr2.Canvas.Pixels[x+1,y-2])* StrtoInt(Cells[3,0]) + GetRValue(gbr2.Canvas.Pixels[x+1,y-1])* StrtoInt(Cells[3,1]) + GetRValue(gbr2.Canvas.Pixels[x+1,y])* StrtoInt(Cells[3,2]) + GetRValue(gbr2.Canvas.Pixels[x+1,y+1])* StrtoInt(Cells[3,3])+ GetRValue(gbr2.Canvas.Pixels[x+1,y+2])* StrtoInt(Cells[3,4]) + GetRValue(gbr2.Canvas.Pixels[x+2,y-2])* StrtoInt(Cells[4,0]) + GetRValue(gbr2.Canvas.Pixels[x+2,y-1])* StrtoInt(Cells[4,1]) + GetRValue(gbr2.Canvas.Pixels[x+2,y])* StrtoInt(Cells[4,2]) + GetRValue(gbr2.Canvas.Pixels[x+2,y+1])* StrtoInt(Cells[4,3]) + GetRValue(gbr2.Canvas.Pixels[x+2,y+2])* StrtoInt(Cells[4,4])) ; R:=round(R / jml + 128); //G:=round(G / jml + 128); // B:=round(B / jml + 128); if R <0 then R:=0; if R>255 then
R:=255; hslEmbs.Canvas.Pixels[x,y]:= RGB(R,R,R); end; if (rbMatrik3.Checked) then with sgMatrik do for x := 1 to x1-1 do for y := 1 to y1-1 do begin R :=( GetRValue(gbr2.Canvas.Pixels[x-3,y-3])* StrtoInt(Cells[0,0]) + GetRValue(gbr2.Canvas.Pixels[x-3,y-2])* StrtoInt(Cells[0,1]) + GetRValue(gbr2.Canvas.Pixels[x-3,y-1])* StrtoInt(Cells[0,2]) + GetRValue(gbr2.Canvas.Pixels[x-3,y])* StrtoInt(Cells[0,3]) + GetRValue(gbr2.Canvas.Pixels[x-3,y+1])* StrtoInt(Cells[0,4]) + GetRValue(gbr2.Canvas.Pixels[x-3,y+2])* StrtoInt(Cells[0,5]) + GetRValue(gbr2.Canvas.Pixels[x-3,y+3])* StrtoInt(Cells[0,6]) + GetRValue(gbr2.Canvas.Pixels[x-2,y-3])* StrtoInt(Cells[1,0]) + GetRValue(gbr2.Canvas.Pixels[x-2,y-2])* StrtoInt(Cells[1,1]) + GetRValue(gbr2.Canvas.Pixels[x-2,y-1])* StrtoInt(Cells[1,2]) + GetRValue(gbr2.Canvas.Pixels[x-2,y])* StrtoInt(Cells[1,3]) + GetRValue(gbr2.Canvas.Pixels[x-2,y+1])* StrtoInt(Cells[1,4]) + GetRValue(gbr2.Canvas.Pixels[x-2,y+2])* StrtoInt(Cells[1,5]) + GetRValue(gbr2.Canvas.Pixels[x-2,y+3])* StrtoInt(Cells[1,6]) + GetRValue(gbr2.Canvas.Pixels[x-1,y-3])* StrtoInt(Cells[2,0]) + GetRValue(gbr2.Canvas.Pixels[x-1,y-2])* StrtoInt(Cells[2,1]) + GetRValue(gbr2.Canvas.Pixels[x-1,y-1])* StrtoInt(Cells[2,2]) + GetRValue(gbr2.Canvas.Pixels[x-1,y])* StrtoInt(Cells[2,3]) + GetRValue(gbr2.Canvas.Pixels[x-1,y+1])* StrtoInt(Cells[2,4]) + GetRValue(gbr2.Canvas.Pixels[x-1,y+2])* StrtoInt(Cells[2,5]) + GetRValue(gbr2.Canvas.Pixels[x-1,y+3])* StrtoInt(Cells[2,6]) + GetRValue(gbr2.Canvas.Pixels[x,y-3])* StrtoInt(Cells[3,0]) + GetRValue(gbr2.Canvas.Pixels[x,y-2])* StrtoInt(Cells[3,1]) + GetRValue(gbr2.Canvas.Pixels[x,y-1])* StrtoInt(Cells[3,2]) + GetRValue(gbr2.Canvas.Pixels[x,y])* StrtoInt(Cells[3,3]) + GetRValue(gbr2.Canvas.Pixels[x,y+1])* StrtoInt(Cells[3,4]) + GetRValue(gbr2.Canvas.Pixels[x,y+2])* StrtoInt(Cells[3,5]) + GetRValue(gbr2.Canvas.Pixels[x,y+3])* StrtoInt(Cells[3,6]) + GetRValue(gbr2.Canvas.Pixels[x+1,y-3])* StrtoInt(Cells[4,0]) + GetRValue(gbr2.Canvas.Pixels[x+1,y-2])* StrtoInt(Cells[4,1]) + GetRValue(gbr2.Canvas.Pixels[x+1,y-1])* StrtoInt(Cells[4,2]) + GetRValue(gbr2.Canvas.Pixels[x+1,y])* StrtoInt(Cells[4,3]) +
GetRValue(gbr2.Canvas.Pixels[x+1,y+1])* StrtoInt(Cells[4,4])+ GetRValue(gbr2.Canvas.Pixels[x+1,y+2])* StrtoInt(Cells[4,5]) + GetRValue(gbr2.Canvas.Pixels[x+1,y+3])* StrtoInt(Cells[4,6]) + GetRValue(gbr2.Canvas.Pixels[x+2,y-3])* StrtoInt(Cells[5,0]) + GetRValue(gbr2.Canvas.Pixels[x+2,y-2])* StrtoInt(Cells[5,1]) + GetRValue(gbr2.Canvas.Pixels[x+2,y-1])* StrtoInt(Cells[5,2]) + GetRValue(gbr2.Canvas.Pixels[x+2,y])* StrtoInt(Cells[5,3]) + GetRValue(gbr2.Canvas.Pixels[x+2,y+1])* StrtoInt(Cells[5,4]) + GetRValue(gbr2.Canvas.Pixels[x+2,y+2])* StrtoInt(Cells[5,5]) + GetRValue(gbr2.Canvas.Pixels[x+2,y+3])* StrtoInt(Cells[5,6])+ GetRValue(gbr2.Canvas.Pixels[x+3,y-3])* StrtoInt(Cells[6,0]) + GetRValue(gbr2.Canvas.Pixels[x+3,y-2])* StrtoInt(Cells[6,1]) + GetRValue(gbr2.Canvas.Pixels[x+3,y-1])* StrtoInt(Cells[6,2]) + GetRValue(gbr2.Canvas.Pixels[x+3,y])* StrtoInt(Cells[6,3]) + GetRValue(gbr2.Canvas.Pixels[x+3,y+1])* StrtoInt(Cells[6,4]) + GetRValue(gbr2.Canvas.Pixels[x+3,y+2])* StrtoInt(Cells[6,5]) + GetRValue(gbr2.Canvas.Pixels[x+3,y+3])* StrtoInt(Cells[6,6])); R:=round(R / jml + 128); // G:=round(G / jml + 128); // B:=round(B / jml + 128); if R <0 then R:=0; if R>255 then R:=255; hslEmbs.Canvas.Pixels[x,y]:= RGB(R,R,R); end; imgHasil.Canvas.Draw( 0,0 ,hslEmbs); end; procedure TfrmEmboss.EmbossWarna1Click(Sender: TObject); var i,j,R,G,B : Integer; x1,y1,x,y,jml: Integer; //S : Double;
begin hslEmbs := TBitmap.Create; hslEmbs.Assign(gbr1); jml:=0; with sgMatrik do for i:=0 to 6 do for j:=0 to 6 do jml:= jml+ StrtoInt(Cells[i,j]); if jml<= 0 then jml:=1; Label2.Caption:=InttoStr(jml); x1 := gbr1.Width; y1 := gbr1.Height; if (rbMatrik1.Checked) then with sgMatrik do for x := 1 to x1-1 do for y := 1 to y1-1 do begin R :=(GetRValue(gbr1.Canvas.Pixels[x-1,y-1])* StrtoInt(Cells[0,0]) + GetRValue(gbr1.Canvas.Pixels[x-1,y])* StrtoInt(Cells[0,1]) + GetRValue(gbr1.Canvas.Pixels[x-1,y+1])* StrtoInt(Cells[0,2]) + GetRValue(gbr1.Canvas.Pixels[x,y-1])* StrtoInt(Cells[1,0]) + GetRValue(gbr1.Canvas.Pixels[x,y])* StrtoInt(Cells[1,1]) + GetRValue(gbr1.Canvas.Pixels[x,y+1])* StrtoInt(Cells[1,2]) + GetRValue(gbr1.Canvas.Pixels[x+1,y-1])* StrtoInt(Cells[2,0]) + GetRValue(gbr1.Canvas.Pixels[x+1,y])* StrtoInt(Cells[2,1]) + GetRValue(gbr1.Canvas.Pixels[x+1,y+1])* StrtoInt(Cells[2,2])) ; G :=(GetGValue(gbr1.Canvas.Pixels[x-1,y-1])* StrtoInt(Cells[0,0]) + GetGValue(gbr1.Canvas.Pixels[x-1,y])* StrtoInt(Cells[0,1]) + GetGValue(gbr1.Canvas.Pixels[x-1,y+1])* StrtoInt(Cells[0,2]) + GetGValue(gbr1.Canvas.Pixels[x,y-1])* StrtoInt(Cells[1,0]) + GetGValue(gbr1.Canvas.Pixels[x,y])* StrtoInt(Cells[1,1]) + GetGValue(gbr1.Canvas.Pixels[x,y+1])* StrtoInt(Cells[1,2]) + GetGValue(gbr1.Canvas.Pixels[x+1,y-1])* StrtoInt(Cells[2,0]) +
GetGValue(gbr1.Canvas.Pixels[x+1,y])* StrtoInt(Cells[2,1]) + GetGValue(gbr1.Canvas.Pixels[x+1,y+1])* StrtoInt(Cells[2,2])) ; B :=(GetBValue(gbr1.Canvas.Pixels[x-1,y-1])* StrtoInt(Cells[0,0]) + GetBValue(gbr1.Canvas.Pixels[x-1,y])* StrtoInt(Cells[0,1]) + GetBValue(gbr1.Canvas.Pixels[x-1,y+1])* StrtoInt(Cells[0,2]) + GetBValue(gbr1.Canvas.Pixels[x,y-1])* StrtoInt(Cells[1,0]) + GetBValue(gbr1.Canvas.Pixels[x,y])* StrtoInt(Cells[1,1]) + GetBValue(gbr1.Canvas.Pixels[x,y+1])* StrtoInt(Cells[1,2]) + GetBValue(gbr1.Canvas.Pixels[x+1,y-1])* StrtoInt(Cells[2,0]) + GetBValue(gbr1.Canvas.Pixels[x+1,y])* StrtoInt(Cells[2,1]) + GetBValue(gbr1.Canvas.Pixels[x+1,y+1])* StrtoInt(Cells[2,2])) ; R:=round(R / jml + 128); G:=round(G / jml + 128); B:=round(B / jml + 128); if R <0 then R:=0; if R>255 then R:=255; if G <0 then G:=0; if G>255 then G:=255; if B <0 then B:=0; if B>255 then B:=255; hslEmbs.Canvas.Pixels[x,y]:= RGB(R,G,B); end; if (rbMatrik2.Checked) then with sgMatrik do for x := 1 to x1-1 do for y := 1 to y1-1 do begin R :=( GetRValue(gbr1.Canvas.Pixels[x-2,y-2])* StrtoInt(Cells[0,0]) + GetRValue(gbr1.Canvas.Pixels[x-2,y-1])* StrtoInt(Cells[0,1]) + GetRValue(gbr1.Canvas.Pixels[x-2,y])* StrtoInt(Cells[0,2]) + GetRValue(gbr1.Canvas.Pixels[x-2,y+1])* StrtoInt(Cells[0,3]) + GetRValue(gbr1.Canvas.Pixels[x-2,y+2])* StrtoInt(Cells[0,4]) +
GetRValue(gbr1.Canvas.Pixels[x-1,y-2])* StrtoInt(Cells[1,0]) + GetRValue(gbr1.Canvas.Pixels[x-1,y-1])* StrtoInt(Cells[1,1]) + GetRValue(gbr1.Canvas.Pixels[x-1,y])* StrtoInt(Cells[1,2]) + GetRValue(gbr1.Canvas.Pixels[x-1,y+1])* StrtoInt(Cells[1,3]) + GetRValue(gbr1.Canvas.Pixels[x-1,y+2])* StrtoInt(Cells[1,4]) + GetRValue(gbr1.Canvas.Pixels[x,y-2])* StrtoInt(Cells[2,0]) + GetRValue(gbr1.Canvas.Pixels[x,y-1])* StrtoInt(Cells[2,1]) + GetRValue(gbr1.Canvas.Pixels[x,y])* StrtoInt(Cells[2,2]) + GetRValue(gbr1.Canvas.Pixels[x,y+1])* StrtoInt(Cells[2,3]) + GetRValue(gbr1.Canvas.Pixels[x,y+2])* StrtoInt(Cells[2,4]) + GetRValue(gbr1.Canvas.Pixels[x+1,y-2])* StrtoInt(Cells[3,0]) + GetRValue(gbr1.Canvas.Pixels[x+1,y-1])* StrtoInt(Cells[3,1]) + GetRValue(gbr1.Canvas.Pixels[x+1,y])* StrtoInt(Cells[3,2]) + GetRValue(gbr1.Canvas.Pixels[x+1,y+1])* StrtoInt(Cells[3,3])+ GetRValue(gbr1.Canvas.Pixels[x+1,y+2])* StrtoInt(Cells[3,4]) + GetRValue(gbr1.Canvas.Pixels[x+2,y-2])* StrtoInt(Cells[4,0]) + GetRValue(gbr1.Canvas.Pixels[x+2,y-1])* StrtoInt(Cells[4,1]) + GetRValue(gbr1.Canvas.Pixels[x+2,y])* StrtoInt(Cells[4,2]) + GetRValue(gbr1.Canvas.Pixels[x+2,y+1])* StrtoInt(Cells[4,3]) + GetRValue(gbr1.Canvas.Pixels[x+2,y+2])* StrtoInt(Cells[4,4])) ; G :=(GetGValue(gbr1.Canvas.Pixels[x-2,y-2])* StrtoInt(Cells[0,0]) + GetGValue(gbr1.Canvas.Pixels[x-2,y-1])* StrtoInt(Cells[0,1]) + GetGValue(gbr1.Canvas.Pixels[x-2,y])* StrtoInt(Cells[0,2]) + GetGValue(gbr1.Canvas.Pixels[x-2,y+1])* StrtoInt(Cells[0,3]) + GetGValue(gbr1.Canvas.Pixels[x-2,y+2])* StrtoInt(Cells[0,4]) + GetGValue(gbr1.Canvas.Pixels[x-1,y-2])* StrtoInt(Cells[1,0]) + GetGValue(gbr1.Canvas.Pixels[x-1,y-1])* StrtoInt(Cells[1,1]) + GetGValue(gbr1.Canvas.Pixels[x-1,y])* StrtoInt(Cells[1,2]) + GetGValue(gbr1.Canvas.Pixels[x-1,y+1])* StrtoInt(Cells[1,3]) + GetGValue(gbr1.Canvas.Pixels[x-1,y+2])* StrtoInt(Cells[1,4]) + GetGValue(gbr1.Canvas.Pixels[x,y-2])* StrtoInt(Cells[2,0]) + GetGValue(gbr1.Canvas.Pixels[x,y-1])* StrtoInt(Cells[2,1]) + GetGValue(gbr1.Canvas.Pixels[x,y])* StrtoInt(Cells[2,2]) + GetGValue(gbr1.Canvas.Pixels[x,y+1])* StrtoInt(Cells[2,3]) + GetGValue(gbr1.Canvas.Pixels[x,y+2])* StrtoInt(Cells[2,4]) + GetGValue(gbr1.Canvas.Pixels[x+1,y-2])* StrtoInt(Cells[3,0]) + GetGValue(gbr1.Canvas.Pixels[x+1,y-1])* StrtoInt(Cells[3,1]) + GetGValue(gbr1.Canvas.Pixels[x+1,y])* StrtoInt(Cells[3,2]) + GetGValue(gbr1.Canvas.Pixels[x+1,y+1])* StrtoInt(Cells[3,3])+ GetGValue(gbr1.Canvas.Pixels[x+1,y+2])* StrtoInt(Cells[3,4]) + GetGValue(gbr1.Canvas.Pixels[x+2,y-2])* StrtoInt(Cells[4,0]) + GetGValue(gbr1.Canvas.Pixels[x+2,y-1])* StrtoInt(Cells[4,1]) + GetGValue(gbr1.Canvas.Pixels[x+2,y])* StrtoInt(Cells[4,2]) + GetGValue(gbr1.Canvas.Pixels[x+2,y+1])* StrtoInt(Cells[4,3]) +
GetGValue(gbr1.Canvas.Pixels[x+2,y+2])* StrtoInt(Cells[4,4])) ; B :=(GetBValue(gbr1.Canvas.Pixels[x-2,y-2])* StrtoInt(Cells[0,0]) + GetBValue(gbr1.Canvas.Pixels[x-2,y-1])* StrtoInt(Cells[0,1]) + GetBValue(gbr1.Canvas.Pixels[x-2,y])* StrtoInt(Cells[0,2]) + GetBValue(gbr1.Canvas.Pixels[x-2,y+1])* StrtoInt(Cells[0,3]) + GetBValue(gbr1.Canvas.Pixels[x-2,y+2])* StrtoInt(Cells[0,4]) + GetBValue(gbr1.Canvas.Pixels[x-1,y-2])* StrtoInt(Cells[1,0]) + GetBValue(gbr1.Canvas.Pixels[x-1,y-1])* StrtoInt(Cells[1,1]) + GetBValue(gbr1.Canvas.Pixels[x-1,y])* StrtoInt(Cells[1,2]) + GetBValue(gbr1.Canvas.Pixels[x-1,y+1])* StrtoInt(Cells[1,3]) + GetBValue(gbr1.Canvas.Pixels[x-1,y+2])* StrtoInt(Cells[1,4]) + GetBValue(gbr1.Canvas.Pixels[x,y-2])* StrtoInt(Cells[2,0]) + GetBValue(gbr1.Canvas.Pixels[x,y-1])* StrtoInt(Cells[2,1]) + GetBValue(gbr1.Canvas.Pixels[x,y])* StrtoInt(Cells[2,2]) + GetBValue(gbr1.Canvas.Pixels[x,y+1])* StrtoInt(Cells[2,3]) + GetBValue(gbr1.Canvas.Pixels[x,y+2])* StrtoInt(Cells[2,4]) + GetBValue(gbr1.Canvas.Pixels[x+1,y-2])* StrtoInt(Cells[3,0]) + GetBValue(gbr1.Canvas.Pixels[x+1,y-1])* StrtoInt(Cells[3,1]) + GetBValue(gbr1.Canvas.Pixels[x+1,y])* StrtoInt(Cells[3,2]) + GetBValue(gbr1.Canvas.Pixels[x+1,y+1])* StrtoInt(Cells[3,3])+ GetBValue(gbr1.Canvas.Pixels[x+1,y+2])* StrtoInt(Cells[3,4]) + GetBValue(gbr1.Canvas.Pixels[x+2,y-2])* StrtoInt(Cells[4,0]) + GetBValue(gbr1.Canvas.Pixels[x+2,y-1])* StrtoInt(Cells[4,1]) + GetBValue(gbr1.Canvas.Pixels[x+2,y])* StrtoInt(Cells[4,2]) + GetBValue(gbr1.Canvas.Pixels[x+2,y+1])* StrtoInt(Cells[4,3]) + GetBValue(gbr1.Canvas.Pixels[x+2,y+2])* StrtoInt(Cells[4,4])); R:=round(R / jml + 128); G:=round(G / jml + 128); B:=round(B / jml + 128); if R <0 then R:=0; if R>255 then R:=255; if G <0 then G:=0; if G>255 then G:=255; if B <0 then B:=0; if B>255 then B:=255;
hslEmbs.Canvas.Pixels[x,y]:= RGB(R,G,B); end; if (rbMatrik3.Checked) then with sgMatrik do for x := 1 to x1-1 do for y := 1 to y1-1 do begin R :=( GetRValue(gbr1.Canvas.Pixels[x-3,y-3])* StrtoInt(Cells[0,0]) + GetRValue(gbr1.Canvas.Pixels[x-3,y-2])* StrtoInt(Cells[0,1]) + GetRValue(gbr1.Canvas.Pixels[x-3,y-1])* StrtoInt(Cells[0,2]) + GetRValue(gbr1.Canvas.Pixels[x-3,y])* StrtoInt(Cells[0,3]) + GetRValue(gbr1.Canvas.Pixels[x-3,y+1])* StrtoInt(Cells[0,4]) + GetRValue(gbr1.Canvas.Pixels[x-3,y+2])* StrtoInt(Cells[0,5]) + GetRValue(gbr1.Canvas.Pixels[x-3,y+3])* StrtoInt(Cells[0,6]) + GetRValue(gbr1.Canvas.Pixels[x-2,y-3])* StrtoInt(Cells[1,0]) + GetRValue(gbr1.Canvas.Pixels[x-2,y-2])* StrtoInt(Cells[1,1]) + GetRValue(gbr1.Canvas.Pixels[x-2,y-1])* StrtoInt(Cells[1,2]) + GetRValue(gbr1.Canvas.Pixels[x-2,y])* StrtoInt(Cells[1,3]) + GetRValue(gbr1.Canvas.Pixels[x-2,y+1])* StrtoInt(Cells[1,4]) + GetRValue(gbr1.Canvas.Pixels[x-2,y+2])* StrtoInt(Cells[1,5]) + GetRValue(gbr1.Canvas.Pixels[x-2,y+3])* StrtoInt(Cells[1,6]) + GetRValue(gbr1.Canvas.Pixels[x-1,y-3])* StrtoInt(Cells[2,0]) + GetRValue(gbr1.Canvas.Pixels[x-1,y-2])* StrtoInt(Cells[2,1]) + GetRValue(gbr1.Canvas.Pixels[x-1,y-1])* StrtoInt(Cells[2,2]) + GetRValue(gbr1.Canvas.Pixels[x-1,y])* StrtoInt(Cells[2,3]) + GetRValue(gbr1.Canvas.Pixels[x-1,y+1])* StrtoInt(Cells[2,4]) + GetRValue(gbr1.Canvas.Pixels[x-1,y+2])* StrtoInt(Cells[2,5]) + GetRValue(gbr1.Canvas.Pixels[x-1,y+3])* StrtoInt(Cells[2,6]) + GetRValue(gbr1.Canvas.Pixels[x,y-3])* StrtoInt(Cells[3,0]) + GetRValue(gbr1.Canvas.Pixels[x,y-2])* StrtoInt(Cells[3,1]) + GetRValue(gbr1.Canvas.Pixels[x,y-1])* StrtoInt(Cells[3,2]) + GetRValue(gbr1.Canvas.Pixels[x,y])* StrtoInt(Cells[3,3]) + GetRValue(gbr1.Canvas.Pixels[x,y+1])* StrtoInt(Cells[3,4]) + GetRValue(gbr1.Canvas.Pixels[x,y+2])* StrtoInt(Cells[3,5]) + GetRValue(gbr1.Canvas.Pixels[x,y+3])* StrtoInt(Cells[3,6]) + GetRValue(gbr1.Canvas.Pixels[x+1,y-3])* StrtoInt(Cells[4,0]) + GetRValue(gbr1.Canvas.Pixels[x+1,y-2])* StrtoInt(Cells[4,1]) + GetRValue(gbr1.Canvas.Pixels[x+1,y-1])* StrtoInt(Cells[4,2]) + GetRValue(gbr1.Canvas.Pixels[x+1,y])* StrtoInt(Cells[4,3]) + GetRValue(gbr1.Canvas.Pixels[x+1,y+1])* StrtoInt(Cells[4,4])+ GetRValue(gbr1.Canvas.Pixels[x+1,y+2])* StrtoInt(Cells[4,5]) + GetRValue(gbr1.Canvas.Pixels[x+1,y+3])* StrtoInt(Cells[4,6]) +
GetRValue(gbr1.Canvas.Pixels[x+2,y-3])* StrtoInt(Cells[5,0]) + GetRValue(gbr1.Canvas.Pixels[x+2,y-2])* StrtoInt(Cells[5,1]) + GetRValue(gbr1.Canvas.Pixels[x+2,y-1])* StrtoInt(Cells[5,2]) + GetRValue(gbr1.Canvas.Pixels[x+2,y])* StrtoInt(Cells[5,3]) + GetRValue(gbr1.Canvas.Pixels[x+2,y+1])* StrtoInt(Cells[5,4]) + GetRValue(gbr1.Canvas.Pixels[x+2,y+2])* StrtoInt(Cells[5,5]) + GetRValue(gbr1.Canvas.Pixels[x+2,y+3])* StrtoInt(Cells[5,6])+ GetRValue(gbr1.Canvas.Pixels[x+3,y-3])* StrtoInt(Cells[6,0]) + GetRValue(gbr1.Canvas.Pixels[x+3,y-2])* StrtoInt(Cells[6,1]) + GetRValue(gbr1.Canvas.Pixels[x+3,y-1])* StrtoInt(Cells[6,2]) + GetRValue(gbr1.Canvas.Pixels[x+3,y])* StrtoInt(Cells[6,3]) + GetRValue(gbr1.Canvas.Pixels[x+3,y+1])* StrtoInt(Cells[6,4]) + GetRValue(gbr1.Canvas.Pixels[x+3,y+2])* StrtoInt(Cells[6,5]) + GetRValue(gbr1.Canvas.Pixels[x+3,y+3])* StrtoInt(Cells[6,6])); G :=(GetGValue(gbr1.Canvas.Pixels[x-3,y-3])* StrtoInt(Cells[0,0]) + GetGValue(gbr1.Canvas.Pixels[x-3,y-2])* StrtoInt(Cells[0,1]) + GetGValue(gbr1.Canvas.Pixels[x-3,y-1])* StrtoInt(Cells[0,2]) + GetGValue(gbr1.Canvas.Pixels[x-3,y])* StrtoInt(Cells[0,3]) + GetGValue(gbr1.Canvas.Pixels[x-3,y+1])* StrtoInt(Cells[0,4]) + GetGValue(gbr1.Canvas.Pixels[x-3,y+2])* StrtoInt(Cells[0,5]) + GetGValue(gbr1.Canvas.Pixels[x-3,y+3])* StrtoInt(Cells[0,6]) + GetGValue(gbr1.Canvas.Pixels[x-2,y-3])* StrtoInt(Cells[1,0]) + GetGValue(gbr1.Canvas.Pixels[x-2,y-2])* StrtoInt(Cells[1,1]) + GetGValue(gbr1.Canvas.Pixels[x-2,y-1])* StrtoInt(Cells[1,2]) + GetGValue(gbr1.Canvas.Pixels[x-2,y])* StrtoInt(Cells[1,3]) + GetGValue(gbr1.Canvas.Pixels[x-2,y+1])* StrtoInt(Cells[1,4]) + GetGValue(gbr1.Canvas.Pixels[x-2,y+2])* StrtoInt(Cells[1,5]) + GetGValue(gbr1.Canvas.Pixels[x-2,y+3])* StrtoInt(Cells[1,6]) + GetGValue(gbr1.Canvas.Pixels[x-1,y-3])* StrtoInt(Cells[2,0]) + GetGValue(gbr1.Canvas.Pixels[x-1,y-2])* StrtoInt(Cells[2,1]) + GetGValue(gbr1.Canvas.Pixels[x-1,y-1])* StrtoInt(Cells[2,2]) + GetGValue(gbr1.Canvas.Pixels[x-1,y])* StrtoInt(Cells[2,3]) + GetGValue(gbr1.Canvas.Pixels[x-1,y+1])* StrtoInt(Cells[2,4]) + GetGValue(gbr1.Canvas.Pixels[x-1,y+2])* StrtoInt(Cells[2,5]) + GetGValue(gbr1.Canvas.Pixels[x-1,y+3])* StrtoInt(Cells[2,6]) + GetGValue(gbr1.Canvas.Pixels[x,y-3])* StrtoInt(Cells[3,0]) + GetGValue(gbr1.Canvas.Pixels[x,y-2])* StrtoInt(Cells[3,1]) + GetGValue(gbr1.Canvas.Pixels[x,y-1])* StrtoInt(Cells[3,2]) + GetGValue(gbr1.Canvas.Pixels[x,y])* StrtoInt(Cells[3,3]) + GetGValue(gbr1.Canvas.Pixels[x,y+1])* StrtoInt(Cells[3,4]) + GetGValue(gbr1.Canvas.Pixels[x,y+2])* StrtoInt(Cells[3,5]) + GetGValue(gbr1.Canvas.Pixels[x,y+3])* StrtoInt(Cells[3,6]) + GetGValue(gbr1.Canvas.Pixels[x+1,y-3])* StrtoInt(Cells[4,0]) + GetGValue(gbr1.Canvas.Pixels[x+1,y-2])* StrtoInt(Cells[4,1]) + GetGValue(gbr1.Canvas.Pixels[x+1,y-1])* StrtoInt(Cells[4,2]) +
GetGValue(gbr1.Canvas.Pixels[x+1,y])* StrtoInt(Cells[4,3]) + GetGValue(gbr1.Canvas.Pixels[x+1,y+1])* StrtoInt(Cells[4,4])+ GetGValue(gbr1.Canvas.Pixels[x+1,y+2])* StrtoInt(Cells[4,5]) + GetGValue(gbr1.Canvas.Pixels[x+1,y+3])* StrtoInt(Cells[4,6]) + GetGValue(gbr1.Canvas.Pixels[x+2,y-3])* StrtoInt(Cells[5,0]) + GetGValue(gbr1.Canvas.Pixels[x+2,y-2])* StrtoInt(Cells[5,1]) + GetGValue(gbr1.Canvas.Pixels[x+2,y-1])* StrtoInt(Cells[5,2]) + GetGValue(gbr1.Canvas.Pixels[x+2,y])* StrtoInt(Cells[5,3]) + GetGValue(gbr1.Canvas.Pixels[x+2,y+1])* StrtoInt(Cells[5,4]) + GetGValue(gbr1.Canvas.Pixels[x+2,y+2])* StrtoInt(Cells[5,5]) + GetGValue(gbr1.Canvas.Pixels[x+2,y+3])* StrtoInt(Cells[5,6])+ GetGValue(gbr1.Canvas.Pixels[x+3,y-3])* StrtoInt(Cells[6,0]) + GetGValue(gbr1.Canvas.Pixels[x+3,y-2])* StrtoInt(Cells[6,1]) + GetGValue(gbr1.Canvas.Pixels[x+3,y-1])* StrtoInt(Cells[6,2]) + GetGValue(gbr1.Canvas.Pixels[x+3,y])* StrtoInt(Cells[6,3]) + GetGValue(gbr1.Canvas.Pixels[x+3,y+1])* StrtoInt(Cells[6,4]) + GetGValue(gbr1.Canvas.Pixels[x+3,y+2])* StrtoInt(Cells[6,5]) + GetGValue(gbr1.Canvas.Pixels[x+3,y+3])* StrtoInt(Cells[6,6])); B :=( GetBValue(gbr1.Canvas.Pixels[x-3,y-3])* StrtoInt(Cells[0,0]) + GetBValue(gbr1.Canvas.Pixels[x-3,y-2])* StrtoInt(Cells[0,1]) + GetBValue(gbr1.Canvas.Pixels[x-3,y-1])* StrtoInt(Cells[0,2]) + GetBValue(gbr1.Canvas.Pixels[x-3,y])* StrtoInt(Cells[0,3]) + GetBValue(gbr1.Canvas.Pixels[x-3,y+1])* StrtoInt(Cells[0,4]) + GetBValue(gbr1.Canvas.Pixels[x-3,y+2])* StrtoInt(Cells[0,5]) + GetBValue(gbr1.Canvas.Pixels[x-3,y+3])* StrtoInt(Cells[0,6]) + GetBValue(gbr1.Canvas.Pixels[x-2,y-3])* StrtoInt(Cells[1,0]) + GetBValue(gbr1.Canvas.Pixels[x-2,y-2])* StrtoInt(Cells[1,1]) + GetBValue(gbr1.Canvas.Pixels[x-2,y-1])* StrtoInt(Cells[1,2]) + GetBValue(gbr1.Canvas.Pixels[x-2,y])* StrtoInt(Cells[1,3]) + GetBValue(gbr1.Canvas.Pixels[x-2,y+1])* StrtoInt(Cells[1,4]) + GetBValue(gbr1.Canvas.Pixels[x-2,y+2])* StrtoInt(Cells[1,5]) + GetBValue(gbr1.Canvas.Pixels[x-2,y+3])* StrtoInt(Cells[1,6]) + GetBValue(gbr1.Canvas.Pixels[x-1,y-3])* StrtoInt(Cells[2,0]) + GetBValue(gbr1.Canvas.Pixels[x-1,y-2])* StrtoInt(Cells[2,1]) + GetBValue(gbr1.Canvas.Pixels[x-1,y-1])* StrtoInt(Cells[2,2]) + GetBValue(gbr1.Canvas.Pixels[x-1,y])* StrtoInt(Cells[2,3]) + GetBValue(gbr1.Canvas.Pixels[x-1,y+1])* StrtoInt(Cells[2,4]) + GetBValue(gbr1.Canvas.Pixels[x-1,y+2])* StrtoInt(Cells[2,5]) + GetBValue(gbr1.Canvas.Pixels[x-1,y+3])* StrtoInt(Cells[2,6]) + GetBValue(gbr1.Canvas.Pixels[x,y-3])* StrtoInt(Cells[3,0]) + GetBValue(gbr1.Canvas.Pixels[x,y-2])* StrtoInt(Cells[3,1]) + GetBValue(gbr1.Canvas.Pixels[x,y-1])* StrtoInt(Cells[3,2]) + GetBValue(gbr1.Canvas.Pixels[x,y])* StrtoInt(Cells[3,3]) + GetBValue(gbr1.Canvas.Pixels[x,y+1])* StrtoInt(Cells[3,4]) + GetBValue(gbr1.Canvas.Pixels[x,y+2])* StrtoInt(Cells[3,5]) +
GetBValue(gbr1.Canvas.Pixels[x,y+3])* StrtoInt(Cells[3,6]) + GetBValue(gbr1.Canvas.Pixels[x+1,y-3])* StrtoInt(Cells[4,0]) + GetBValue(gbr1.Canvas.Pixels[x+1,y-2])* StrtoInt(Cells[4,1]) + GetBValue(gbr1.Canvas.Pixels[x+1,y-1])* StrtoInt(Cells[4,2]) + GetBValue(gbr1.Canvas.Pixels[x+1,y])* StrtoInt(Cells[4,3]) + GetBValue(gbr1.Canvas.Pixels[x+1,y+1])* StrtoInt(Cells[4,4])+ GetBValue(gbr1.Canvas.Pixels[x+1,y+2])* StrtoInt(Cells[4,5]) + GetBValue(gbr1.Canvas.Pixels[x+1,y+3])* StrtoInt(Cells[4,6]) + GetBValue(gbr1.Canvas.Pixels[x+2,y-3])* StrtoInt(Cells[5,0]) + GetBValue(gbr1.Canvas.Pixels[x+2,y-2])* StrtoInt(Cells[5,1]) + GetBValue(gbr1.Canvas.Pixels[x+2,y-1])* StrtoInt(Cells[5,2]) + GetBValue(gbr1.Canvas.Pixels[x+2,y])* StrtoInt(Cells[5,3]) + GetBValue(gbr1.Canvas.Pixels[x+2,y+1])* StrtoInt(Cells[5,4]) + GetBValue(gbr1.Canvas.Pixels[x+2,y+2])* StrtoInt(Cells[5,5]) + GetBValue(gbr1.Canvas.Pixels[x+2,y+3])* StrtoInt(Cells[5,6])+ GetBValue(gbr1.Canvas.Pixels[x+3,y-3])* StrtoInt(Cells[6,0]) + GetBValue(gbr1.Canvas.Pixels[x+3,y-2])* StrtoInt(Cells[6,1]) + GetBValue(gbr1.Canvas.Pixels[x+3,y-1])* StrtoInt(Cells[6,2]) + GetBValue(gbr1.Canvas.Pixels[x+3,y])* StrtoInt(Cells[6,3]) + GetBValue(gbr1.Canvas.Pixels[x+3,y+1])* StrtoInt(Cells[6,4]) + GetBValue(gbr1.Canvas.Pixels[x+3,y+2])* StrtoInt(Cells[6,5]) + GetBValue(gbr1.Canvas.Pixels[x+3,y+3])* StrtoInt(Cells[6,6])); R:=round(R / jml + 128); G:=round(G / jml + 128); B:=round(B / jml + 128); if R <0 then R:=0; if R>255 then R:=255; if G <0 then G:=0; if G>255 then G:=255; if B <0 then B:=0; if B>255 then B:=255; hslEmbs.Canvas.Pixels[x,y]:= RGB(R,G,B); end;
imgHasil.Canvas.Draw( 0,0 ,hslEmbs); end; end. Source code form matrik unit matrik; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls,emboss, ComCtrls; type TfrmMatrik = class(TForm) Label5: TLabel; Label7: TLabel; Label4: TLabel; Label6: TLabel; rbred1: TRadioButton; rbgreen1: TRadioButton; Button2: TButton; sgMatrik2: TStringGrid; Label2: TLabel; Label3: TLabel; StringGrid1: TStringGrid; Label1: TLabel; Label9: TLabel; rbred2: TRadioButton; rbgreen2: TRadioButton; rbblue2: TRadioButton; rbblue1: TRadioButton; rbgrey1: TRadioButton; rbgrey2: TRadioButton; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure RadioButton12Click(Sender: TObject); procedure rbred1Click(Sender: TObject); procedure rbgreen1Click(Sender: TObject); procedure rbblue2Click(Sender: TObject); procedure rbgrey1Click(Sender: TObject);
procedure FormPaint(Sender: TObject); procedure rbred2Click(Sender: TObject); procedure rbgrey2Click(Sender: TObject); procedure RadioButton7Click(Sender: TObject); procedure rbgreen2Click(Sender: TObject); procedure rbblue1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var frmMatrik: TfrmMatrik; implementation //uses emboss; {$R *.dfm} procedure TfrmMatrik.Button2Click(Sender: TObject); begin frmEmboss.show; frmMatrik.Close; end; procedure TfrmMatrik.Button1Click(Sender: TObject); begin application.Terminate; end; procedure TfrmMatrik.FormCreate(Sender: TObject); var Bitmap :TBitmap; begin Bitmap:=TBitmap.Create; Bitmap.loadFromFile('D:\CNTH_FLASH\about3.bmp'); Canvas.CopyMode := cmSrcAnd; Canvas.Draw(0,0,Bitmap); Bitmap.free; end; procedure TfrmMatrik.RadioButton12Click(Sender: TObject); var i,j : integer;
begin sgMatrik2.RowCount := gbr1.Height; sgMatrik2.ColCount := gbr1.Width; label4.Caption := FloatToStr(gbr1.Height); label5.Caption := FloatToStr(gbr1.Width); with sgMatrik2 do for i:=0 to gbr1.Height do for j:=0 to gbr1.Width do Cells[i,j]:= FloatToStr(round((GetRValue(gbr1.Canvas.Pixels[i,j])+GetGValue(gbr1.Canvas.Pixels[i,j])+GetBValue(gbr1.Canvas.Pixels[i,j]))/3)); //Cells[i,j]:= FloatToStr(gbr1.Canvas.Pixels[i,j]); // RGB(GetRValue(gbr1.Canvas.Pixels[i,j]),GetGValue(gbr1.Canvas.Pixels[i,j]),GetBValue(gbr1.Canvas.Pixels[i,j])) end; procedure TfrmMatrik.rbred1Click(Sender: TObject); var i,j : integer; begin sgMatrik2.RowCount := gbr1.Height; sgMatrik2.ColCount := gbr1.Width; label4.Caption := FloatToStr(gbr1.Height); label5.Caption := FloatToStr(gbr1.Width); with sgMatrik2 do for i:=0 to gbr1.Height do for j:=0 to gbr1.Width do Cells[i,j]:= FloatToStr(GetRValue(gbr1.Canvas.Pixels[i,j])); // RGB(GetRValue(gbr1.Canvas.Pixels[i,j]),GetGValue(gbr1.Canvas.Pixels[i,j]),GetBValue(gbr1.Canvas.Pixels[i,j])) end; procedure TfrmMatrik.rbgreen1Click(Sender: TObject); var i,j : integer; begin sgMatrik2.RowCount := gbr1.Height; sgMatrik2.ColCount := gbr1.Width; label4.Caption := FloatToStr(gbr1.Height); label5.Caption := FloatToStr(gbr1.Width); with sgMatrik2 do
for i:=0 to gbr1.Height do for j:=0 to gbr1.Width do Cells[i,j]:= FloatToStr(GetGValue(gbr1.Canvas.Pixels[i,j])); // RGB(GetRValue(gbr1.Canvas.Pixels[i,j]),GetGValue(gbr1.Canvas.Pixels[i,j]),GetBValue(gbr1.Canvas.Pixels[i,j])) end; procedure TfrmMatrik.rbblue2Click(Sender: TObject); var i,j : integer; begin StringGrid1.RowCount := gbr1.Height; StringGrid1.ColCount := gbr1.Width; label4.Caption := FloatToStr(gbr1.Height); label5.Caption := FloatToStr(gbr1.Width); with StringGrid1 do for i:=0 to gbr1.Height do for j:=0 to gbr1.Width do Cells[i,j]:= FloatToStr(GetBValue(hslEmbs.Canvas.Pixels[i,j])); // RGB(GetRValue(gbr1.Canvas.Pixels[i,j]),GetGValue(gbr1.Canvas.Pixels[i,j]),GetBValue(gbr1.Canvas.Pixels[i,j])) end; procedure TfrmMatrik.rbgrey1Click(Sender: TObject); var i,j : integer; begin sgMatrik2.RowCount := gbr1.Height; sgMatrik2.ColCount := gbr1.Width; label4.Caption := FloatToStr(gbr1.Height); label5.Caption := FloatToStr(gbr1.Width); with sgMatrik2 do for i:=0 to gbr1.Height do for j:=0 to gbr1.Width do Cells[i,j]:= FloatToStr(GetRValue(gbr2.Canvas.Pixels[i,j])); // RGB(GetRValue(gbr1.Canvas.Pixels[i,j]),GetGValue(gbr1.Canvas.Pixels[i,j]),GetBValue(gbr1.Canvas.Pixels[i,j])) end; procedure TfrmMatrik.FormPaint(Sender: TObject);
var Bitmap :TBitmap; begin Bitmap:=TBitmap.Create; Bitmap.loadFromFile('D:\CNTH_FLASH\coba\back4.bmp'); Canvas.CopyMode := cmSrcAnd; Canvas.Draw(0,0,Bitmap); Bitmap.free; end; procedure TfrmMatrik.rbred2Click(Sender: TObject); var i,j : integer; begin StringGrid1.RowCount := gbr1.Height; StringGrid1.ColCount := gbr1.Width; label4.Caption := FloatToStr(gbr1.Height); label5.Caption := FloatToStr(gbr1.Width); with StringGrid1 do for i:=0 to gbr1.Height do for j:=0 to gbr1.Width do Cells[i,j]:= FloatToStr(GetRValue(hslEmbs.Canvas.Pixels[i,j])); // RGB(GetRValue(gbr1.Canvas.Pixels[i,j]),GetGValue(gbr1.Canvas.Pixels[i,j]),GetBValue(gbr1.Canvas.Pixels[i,j])) end; procedure TfrmMatrik.rbgrey2Click(Sender: TObject); var i,j : integer; begin StringGrid1.RowCount := gbr1.Height; StringGrid1.ColCount := gbr1.Width; label4.Caption := FloatToStr(gbr1.Height); label5.Caption := FloatToStr(gbr1.Width); with StringGrid1 do for i:=0 to gbr1.Height do for j:=0 to gbr1.Width do Cells[i,j]:= FloatToStr(GetRValue(hslEmbs.Canvas.Pixels[i,j])); end; procedure TfrmMatrik.RadioButton7Click(Sender: TObject); var i,j : integer;
begin sgMatrik2.RowCount := gbr1.Height; sgMatrik2.ColCount := gbr1.Width; label4.Caption := FloatToStr(gbr1.Height); label5.Caption := FloatToStr(gbr1.Width); with sgMatrik2 do for i:=0 to gbr1.Height do for j:=0 to gbr1.Width do Cells[i,j]:= FloatToStr(GetBValue(gbr2.Canvas.Pixels[i,j])); // RGB(GetRValue(gbr1.Canvas.Pixels[i,j]),GetGValue(gbr1.Canvas.Pixels[i,j]),GetBValue(gbr1.Canvas.Pixels[i,j])) end; procedure TfrmMatrik.rbgreen2Click(Sender: TObject); var i,j : integer; begin StringGrid1.RowCount := gbr1.Height; StringGrid1.ColCount := gbr1.Width; label4.Caption := FloatToStr(gbr1.Height); label5.Caption := FloatToStr(gbr1.Width); with StringGrid1 do for i:=0 to gbr1.Height do for j:=0 to gbr1.Width do Cells[i,j]:= FloatToStr(GetGValue(hslEmbs.Canvas.Pixels[i,j])); // RGB(GetRValue(gbr1.Canvas.Pixels[i,j]),GetGValue(gbr1.Canvas.Pixels[i,j]),GetBValue(gbr1.Canvas.Pixels[i,j])) end; procedure TfrmMatrik.rbblue1Click(Sender: TObject); var i,j : integer; begin sgMatrik2.RowCount := gbr1.Height; sgMatrik2.ColCount := gbr1.Width; label4.Caption := FloatToStr(gbr1.Height); label5.Caption := FloatToStr(gbr1.Width); with sgMatrik2 do for i:=0 to gbr1.Height do for j:=0 to gbr1.Width do Cells[i,j]:= FloatToStr(GetBValue(gbr1.Canvas.Pixels[i,j]));
// RGB(GetRValue(gbr1.Canvas.Pixels[i,j]),GetGValue(gbr1.Canvas.Pixels[i,j]),GetBValue(gbr1.Canvas.Pixels[i,j])) end; end. Source code form about unit about; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TfrmAbout = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var frmAbout: TfrmAbout; implementation uses emboss; {$R *.dfm} procedure TfrmAbout.Button1Click(Sender: TObject); begin frmEmboss.show; frmAbout.Close; end;
procedure TfrmAbout.Button2Click(Sender: TObject); begin application.Terminate; end; procedure TfrmAbout.FormCreate(Sender: TObject); var Bitmap :TBitmap; begin Bitmap:=TBitmap.Create; Bitmap.loadFromFile('D:\CNTH_FLASH\coba\about.bmp'); Canvas.CopyMode := cmSrcAnd; Canvas.Draw(0,0,Bitmap); Bitmap.free; end; end. Source code form help unit help; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TfrmHelp = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var frmHelp: TfrmHelp; implementation uses emboss, about;
{$R *.dfm} procedure TfrmHelp.Button1Click(Sender: TObject); begin frmEmboss.show; frmHelp.Close; end; procedure TfrmHelp.Button2Click(Sender: TObject); begin application.Terminate; end; procedure TfrmHelp.FormCreate(Sender: TObject); var Bitmap :TBitmap; begin Bitmap:=TBitmap.Create; Bitmap.loadFromFile('D:\CNTH_FLASH\coba\help.bmp'); Canvas.CopyMode := cmSrcAnd; Canvas.Draw(0,0,Bitmap); Bitmap.free; end; end. Source code program utama program utama; uses Forms, emboss in 'emboss.pas' {frmEmboss}, help in 'help.pas' {frmHelp}, about in 'about.pas' {frmAbout}, matrik in 'matrik.pas' {frmMatrik}, judul in 'judul.pas' {frmDepan}; {$R *.res} begin Application.Initialize; Application.CreateForm(TfrmDepan, frmDepan); Application.CreateForm(TFrmEmboss, FrmEmboss); Application.CreateForm(TfrmHelp, frmHelp);
Application.CreateForm(TfrmAbout, frmAbout); Application.CreateForm(TfrmMatrik, frmMatrik); Application.Run; end.
top related