Bab 1 Pengolahan Citra
Bab 1 Pengolahan Citra
Pendahuluan
Manusia merupakan makhluk yang paling visual. Hal tersebut didasari pada
kemampuan dalam merasakan maupun menilai jelas tidaknya suatu visualisasi objek dalam
waktu yang singkat. Kemampuan yang dimiliki manusia terus berkembang, terutama dalam
menangkap informasi visual sehingga dapat dengan mudah membedakan warna, mengenali
wajah, dan yang lainnya meskipun dalam waktu yang singkat. Namun pada dasarnya, objek
visual secara cepat juga akan berubah keadaan, seperti halnya keadaan gelap terangnya.
Salah satu cara untuk mengatasi kurang maksimalnya informasi visual, dapat dilakukan
suatu pemrosesan citra. Oleh karena itu, pada bahasan ini memfokuskan pada objek diam
(gambar) bukan objek bergerak. Sehingga kedepannya berbagai objek yang ada disekitar kita
dapat dengan maksimal kita perjelas agar informasi visual yang terkandung dapat diterima
lebih baik. Contohnya seperti, foto seseorang, pemandangan, mikropotograf dari komponen
elektronik, pencitraan medis, dsb.
Menghapus "noise" dari gambar; noise merupakan gangguan pada citra. Contoh
diberikan pada gambar 1.2. Noise adalah masalah yang sangat umum dan salah
satu penyebabnya oleh ketidaksempurnaan kinerja komponen elektronik. Untuk
masing-masing jenis noise membutuhkan metode penghapusan yang berbeda.
Menghapus gerakan blur dari citra. Contoh diberikan pada gambar 1.3.
Perhatikan bahwa pada citra yang telah dihapus (b) lebih jelas dan detil
dibandingkan pada gambar asli (a). Buram/blur dapat terjadi ketika kecepatan
pengambilan oleh kamera tidak sebanding dengan kecepatan objek. Hal ini
sering ditemui pada objek yang bergerak cepat sepert : laju atlet, kendaraan, dsb.
a. Citra asli b. Setelah penghilangan blur
pada hal ini nilai x digambarkan dalam sepuluh titik. Poin sampel yang
dihasilkan ditunjukkan pada Gambar 1.6. Berdasarkan gambar didapati undersampling,
di mana jumlah titik tidak cukup untuk merekonstruksi fungsi. Misalkan kita ambil
fungsi dengan 100 titik, seperti yang ditunjukkan pada gambar 1.7. dapat dengan jelas
rekonstruksi fungsi jauh lebih baik dari sebelumnya. Sebagai dasar dalam poin sampel
yang cukup, dapat disyaratkanbahwa periode pengambilan sampel tidak lebih dari
setengah dalam fungsi . Hal ini dikenal sebagai kriteria Nyquist dan dapat dirumuskan
lebih tepat dalam kasus "frekuensi", yang dibahas dalam bab 4. Kriteria Nyquist dapat
dinyatakan sebagai teorema pengambilan sampel, yang pada dasarnya bahwa fungsi
kontinu dapat direkonstruksi dari sampelnya jika frekuensi sampling setidaknya dua
kali frekuensi maksimum dalam fungsi.
Gambar 1.7: Mengambil sampel suatu fungsi dengan lebih banyak poin
Menggunakan cahaya
Cahaya adalah sumber energi utama untuk citra dan dapat diamati secara
langsung. Kita semua akrab dengan foto-foto, yang merupakan rekaman citra
pemandangan visual.
Banyak citra digital ditangkap menggunakan cahaya tampak sebagai sumber
energinya; hal ini memiliki keuntungan karena aman, murah, mudah dideteksi dan siap
diproses dengan perangkat keras yang sesuai. Dua metode yang sangat populer untuk
menghasilkan citra digital adalah dengan kamera digital atau pemindai flat-bed.
1. Kamera CCD.
Kamera semacam ini memiliki pengganti film yang biasa, sebuah array
photosites; kamera adalah perangkat elektronik silikon yang output tegangannya
sebanding dengan intensitas cahaya yang jatuh pada CCD.
Untuk kamera yang terpasang pada komputer, informasi dari photosites
kemudian di-output ke media penyimpanan yang sesuai. Secara umum, ini diproses
pada perangkat keras, karena jauh lebih cepat dan lebih efisien daripada perangkat
lunak yang menggunakan kartu bingkai. Kamera memungkinkan citra ditangkap
dalam waktu yang sangat singkat dengan urutan masing-masing seperseribu detik.
Citra yang diperoleh kemudian dapat disalin ke perangkat penyimpanan
permanen.Hal Ini ditunjukkan secara skematis pada gambar 1.9.
Outputnya akan berupa array nilai yang merepresentasikan titik sampel dari
citra aslinya. Elemen-elemen dari array ini disebut elemen citra, atau lebih tepatnya
piksel. Kamera digital masih menggunakan beragam perangkat, dari disket dan CD
hingga berbagai kartu khusus dan "memory stick". Informasi citra tersebut
kemudian dapat diunduh dari perangkat tersebut ke hard disk komputer.
2. Pemindai flatbed.
Ini bekerja berdasarkan prinsip yang mirip dengan kamera CCD. Pengambilan
data sekaligus pada array besar, satu baris fotosit bergerak melintasi citra,
menangkapnya baris-demi-baris saat bergerak. Hal ini ditunjukkan secara skematis
pada Gambar 1.10. Ppada hal ini proses jauh lebih lambat daripada mengambil citra
dengan kamera dan memerlukan perangkat lunak khusus untuk
mengoperasikannya.
Gambar 1.10: Mengambil gambar dengan pemindai CCD
1. Biner. Setiap piksel hanya hitam atau putih. Karena hanya ada dua nilai yang
mungkin untuk setiap piksel, kita hanya perlu satu bit per piksel. Karena itu gambar
seperti itu bisa sangat efisien dalam hal penyimpanan. Gambar yang mungkin cocok
dengan representasi biner termasuk teks (dicetak atau tulisan tangan),? sidik jari, atau
rencana arsitektur.
Contohnya adalah gambar yang ditunjukkan pada gambar 1.4 (b) di atas. Dalam
gambar ini, kita hanya memiliki keduanya warna: putih untuk tepi, dan hitam untuk
latar belakang. Lihat? Angka 1.16 di bawah ini.
2. Skala abu-abu. Setiap piksel berwarna abu-abu, biasanya dari 0 (hitam) hingga 255
(putih). Kisaran ini berarti bahwa setiap piksel dapat diwakili oleh delapan bit, atau
tepat satu byte. Ini sangat kisaran alami untuk penanganan gambar. Rentang skala
abu-abu lainnya digunakan, tetapi umumnya mereka kekuatan 2. Gambar seperti itu
muncul dalam pengobatan (sinar-X), gambar karya cetak, dan bahwa tingkat abu-abu
256 cukup untuk sebagian besar objek alami.
Contohnya adalah adegan jalanan yang ditunjukkan pada gambar 1.1 di atas, dan
gambar 1.17 di bawah ini.
3. True color, atau RGB. Di sini setiap piksel memiliki warna tertentu; warna yang
sedang dijelaskan oleh jumlah merah, hijau dan biru di dalamnya. Jika masing-masing
komponen ini memiliki jangkauan 0-255, ini memberi total dari
255x255x255=16777216 beda warna yang mungkin pada gambar. Ini cukup warna
untuk gambar apa pun. Karena jumlah total bit yang diperlukan untuk setiap piksel
adalah 24, gambar seperti itu disebut juga Gambar warna 24-bit. Gambar seperti itu
dapat dianggap terdiri dari “Stack” dari tiga matriks; mewakili nilai merah, hijau dan
biru untuk setiap piksel. Ini berarti bahwa untuk setiap piksel sesuai tiga nilai.
Contoh ditunjukkan pada Gambar 1.18.
4. indexed. Sebagian besar gambar berwarna hanya memiliki sebagian kecil lebih dari
enam belas juta kemungkinan warna. Untuk kenyamanan penyimpanan dan? File
penanganan, gambar memiliki peta warna yang terkait,
atau palet warna, yang hanyalah daftar semua warna yang digunakan dalam gambar itu.
Setiap piksel memiliki nilai yang tidak memberikan warnanya (seperti untuk gambar RGB),
tetapi indeks untuk warna dalam gambar.
Lebih mudah jika suatu gambar memiliki 256 warna atau kurang, untuk itu nilai indeks hanya
akan membutuhkan masing-masing satu byte untuk disimpan. Beberapa format file
(misalnya, Compuserve GIF), hanya bolehkan 256 warna atau lebih sedikit di setiap gambar,
untuk alasan inilah.
Gambar 1.19 menunjukkan contoh. Dalam gambar ini indeksnya, alih-alih menjadi nilai abu-
abu piksel, hanya indeks ke dalam peta warna. Tanpa peta warna, gambar akan sangat gelap
dan tidak berwarna. Dalam grafik, misalnya, piksel berlabel 5 bersesuaian dengan 0,2627
0,2588 0,2549, yang merupakan warna keabu-abuan yang gelap.
1.9 Ukuran File Gambar
File gambar cenderung besar. Kami akan menyelidiki jumlah informasi yang
digunakan dalam gambar yang berbeda jenis ukuran yang bervariasi. Misalnya,
anggaplah kita mempertimbangkan 512 x 512 gambar biner. Jumlah bit yang digunakan
dalam gambar ini (dengan asumsi tidak ada kompresi, dan mengabaikan, demi diskusi,
apa saja informasi tajuk) adalah
(Di sini kita menggunakan konvensi bahwa satu kilobita adalah seribu byte, dan satu
megabita adalah satu juta byte.)
Jika sekarang kita mengalihkan perhatian kita ke gambar berwarna, setiap piksel
dikaitkan dengan 3 byte warna informasi. 512x512 gambar dengan demikian
membutuhkan
Banyak gambar tentu saja lebih besar dari ini; gambar satelit mungkin dari beberapa
urutan seribu piksel di setiap arah.
Misalkan sudah memulai Matlab. Anda akan memiliki Matlab command window, dan di
dalamnya prompt Matlab
Gambar 1.21: Intensitas yang terus bervariasi
Ini mengambil nilai abu-abu dari semua piksel dalam gambar skala abu-abu wombats.tif dan
menempatkan semuanya ke dalam matriks w. Matriks ini sekarang menjadi variabel Matlab,
jadi kita dapat melakukan berbagai matriks operasi di atasnya. Secara umum fungsi imread
membaca nilai piksel dari file gambar, dan mengembalikan matriks dari semua nilai piksel.
1. Berakhir dengan tanda titik koma; ini memiliki efek tidak menampilkan hasil dari perintah
ke layar. Sebagai hasil dari perintah khusus ini adalah matriks ukuran 256x256, atau dengan
65536 elemen, kami tidak ingin semua nilainya ditampilkan.
2. Nama wombats.tif diberikan dalam tanda kutip tunggal. Tanpa mereka, Matlab akan
berasumsi
Sekarang kita bisa menampilkan matriks ini sebagai gambar skala abu-abu:
Ini sebenarnya tiga perintah dalam satu baris. Matlab memungkinkan banyak perintah untuk
dimasukkan baris yang sama; menggunakan koma untuk memisahkan perintah yang berbeda.
Tiga perintah yang kami gunakan di sini adalah:
1. figure, yang menciptakan gambar di layar. Figur adalah jendela di mana objek grafis
dapat ditempatkan. Objek dapat termasuk gambar, atau berbagai jenis grafik.
2. imshow (g), yang menampilkan matriks g sebagai gambar.
3. pixval on, yang mengaktifkan nilai pixel di gure kita. Ini adalah tampilan nilai abu -
abu dari piksel dalam gambar. Mereka muncul di bagian bawah angka dalam bentuk
cxr=p
dimana c adalah nilai kolom dari piksel yang diberikan; r nilai barisnya, dan p
nilainya abu-abu. Sejak wombats.tif adalah gambar skala abu-abu 8-bit, nilai piksel
muncul sebagai bilangan bulat dalam kisaran 0-255
Jika tidak ada angka terbuka, maka perintah imshow, atau perintah lain yang menghasilkan
objek grafis, akan membuka gambar baru untuk menampilkan objek. Namun, itu praktik yang
baik untuk gunakan perintah angka kapan pun Anda ingin membuat angka baru.
Kita dapat menampilkan gambar ini secara langsung, tanpa menyimpan nilai abu-abu ke
matriks, dengan perintah
imshow ('wombats.tif')
Namun, lebih baik menggunakan matriks, mengingat ini ditangani dengan sangat efisien di
Matlab.
1.12 Gambar RGB
Seperti yang akan kita bahas dalam sub bab 11; kita perlu mendefinisikan warna dalam
beberapa cara standar, biasanya sebagai bagian dari sistem koordinat tiga dimensi;
seperti itu disebut model warna. Sebenarnya ada sejumlah metode berbeda untuk
menggambarkan warna, tetapi untuk tampilan dan penyimpanan gambar dari model
standar adalah RGB, yang dapat kita bayangkan semua warna duduk di dalam “kubus
warna” dari sisi 1 seperti yang ditunjukkan pada gure 1.23. Warna sepanjang diagonal
hitam-putih, ditunjukkan dalam diagram
Meskipun variabel a dan b memiliki nilai numerik yang sama, mereka memiliki tipe
data yang berbeda. Sebuah Pertimbangan penting (yang kami akan lebih lanjut) adalah
bahwa operasi aritmatika tidak diizinkan dengan tipe data int8, int16, uint8 dan uint16.
Gambar skala abu-abu dapat terdiri dari piksel yang nilainya dari tipe data uint8.
Gambar-gambar ini dengan demikian cukup efisien dalam hal ruang penyimpanan,
karena setiap piksel hanya membutuhkan satu byte. Namun, operasi aritmatika tidak
diizinkan pada tipe data ini; gambar uint8 harus dikonversi ke gandakan sebelum
aritmatika dicoba.
Kami dapat mengkonversi gambar dari satu jenis gambar ke yang lain. Tabel 1.2
mencantumkan semua fungsi Matlab untuk mengkonversi antara jenis gambar yang
berbeda. Perhatikan bahwa fungsi gray2rgb, tidak membuat sebuah
(a) Matriks cd dibagi dengan 512 (b) Matriks cd dibagi dengan 128
Gambar 1.25: Penskalaan dengan membagi matriks gambar dengan skalar
Tampilan hasil dari perintah yang outputnya adalah matriks tipe ganda dapat sangat
dipengaruhi oleh pilihan faktor penskalaan yang bagus.
Kita dapat mengonversi gambar asli menjadi dua kali lipat dengan lebih baik
menggunakan fungsi im2double. Ini menerapkan penskalaan yang benar sehingga nilai
output antara 0 dan 1. Jadi perintah
>> cd = im2double (c);
>> imshow (cd)
akan menghasilkan gambar yang benar. Penting untuk membuat perbedaan antara dua
fungsi double dan im2double: double mengubah tipe data tetapi tidak mengubah nilai
numerik; im2double mengubah tipe data numerik dan nilainya. Pengecualian tentu saja
adalah jika gambar asli adalah tipe double, dalam hal ini im2double tidak melakukan
apa-apa. Meskipun perintah ganda tidak banyak digunakan untuk tampilan gambar
langsung, ini bisa sangat berguna untuk aritmatika gambar. Kita telah melihat contoh-
contoh di atas dengan penskalaan.
Sesuai dengan fungsi ganda dan im2double adalah fungsi uint8 dan im2uint8. Jika kita
mengambil CD gambar dari tipe ganda, diskalakan dengan benar sehingga semua
elemen berada di antara 0 dan 1, kita dapat mengonversinya kembali menjadi gambar
tipe uint8 dengan dua cara:
>> c2 = uint8 (255 * cd);
>> c3 = im2uint8 (cd);
Penggunaan im2uint8 lebih disukai; dibutuhkan tipe data lain sebagai input, dan selalu
mengembalikan hasil yang benar.
Gambar biner
Ingatlah bahwa gambar biner hanya akan memiliki dua nilai: 0 dan 1. Matlab tidak
memiliki biner tipe data seperti itu, tetapi memang memiliki logika flag, di mana nilai-
nilai uint8 sebagai 0 dan 1 dapat diartikan sebagai data logis. Logika flag akan
ditentukan oleh penggunaan operasi relasional seperti as==, <or> atau operasi lain
yang memberikan jawaban ya / tidak. Sebagai contoh, misalkan kita mengambil karibu
matriks dan buat matriks baru dengan
>> cl = c> 120;
(kita akan melihat lebih banyak dari jenis operasi ini di bab 2.) Jika sekarang kita
periksa semua variabel kita dengan siapa, output akan termasuk baris:
cl 256x256 65536 array uint8 (logis)
Ini artinya perintah
>> imshow (cl)
akan menampilkan matriks sebagai gambar biner; hasilnya diperlihatkan dalam gambar
1,26.
(a) Gambar karibu berubah biner (b) Setelah konversi untuk mengetik uint8
Gambar 1.26: Membuat biner gambar
Misalkan kita menghapus logical flag dari cl; ini dapat dilakukan dengan perintah
sederhana:
>> cl = + cl;
Sekarang output dari itu akan mencakup baris:
cl 256x256 65536 array uint8
Jika sekarang kita mencoba untuk menampilkan matriks ini dengan imshow, kita
mendapatkan hasil yang ditunjukkan pada gambar 1,26 (b). gambar yang sangat
mengecewakan! Tapi ini yang diharapkan; dalam matriks tipe uint8, putih adalah 255,
0 adalah hitam, dan 1 adalah abu-abu yang sangat gelap? Indistingu
dapat berasal dari hitam. Untuk kembali ke gambar yang dapat dilihat, kita bisa
mengaktifkan kembali ag logis, dan melihat hasil:
>> imshow (logis (cl))
atau cukup konversi untuk mengetik ganda:
>> imshow (dobel (cl))
Kedua perintah ini akan menghasilkan gambar yang terlihat pada gambar 1.26.
1.17 Bit Plane
Gambar skala abu-abu dapat diubah menjadi urutan gambar biner dengan memecahnya
menjadi pesawat bit mereka. Jika kita menganggap nilai abu-abu dari setiap piksel
gambar 8-bit sebagai kata biner 8-bit, maka bidang bit ke-0 terdiri dari bit terakhir dari
setiap nilai abu-abu. Karena bit ini memiliki efek paling kecil dalam hal besarnya nilai,
itu disebut bit paling tidak signifikan, dan terdiri dari bidang dari bit-bit itu bit pesawat
paling signifikan? Demikian pula bidang bit 7 terdiri dari bit pertama di setiap nilai. Bit
ini memiliki efek terbesar dalam hal besarnya nilai, demikian sebutannya bit yang
paling signifikan, dan bidang yang terdiri dari bit-bit itu bidang bit yang paling
signifikan.
Jika kita mengambil gambar skala abu-abu, kita mulai dengan membuatnya menjadi
matriks tipe ganda; ini artinya kita bisa melakukan aritmatika pada nilai-nilai.
>> c = imread ('cameraman.tif');
>> cd = double (c);
Kami sekarang mengisolasi bidang bit dengan hanya membagi cd matriks dengan
kekuatan 2 berturut-turut, melempar pergi sisa, dan melihat apakah bit? Nal adalah 0
atau 1. Kita dapat melakukan ini dengan fungsi mod.
>> c0 = mod (cd, 2);
>> c1 = mod (floor (cd / 2), 2);
>> c2 = mod (floor (cd / 4), 2);
>> c3 = mod (floor (cd / 8), 2);
>> c4 = mod (floor (cd / 16), 2);
>> c5 = mod (floor (cd / 32), 2);
>> c6 = mod (floor (cd / 64), 2);
>> c7 = mod (floor (cd / 128), 2);
Ini semua ditunjukkan pada Gambar 1.27. Perhatikan bahwa bidang bit yang paling
tidak signifikan, c0, adalah untuk semua maksud dan tujuan array acak, dan bahwa
ketika nilai indeks dari bidang bit meningkat, lebih banyak gambar muncul. Pesawat bit
yang paling signifikan, c7, sebenarnya adalah ambang batas gambar pada level 127:
>> ct = c> 127;
>> semua (c7 (:) == ct (:))
ans =
1
Kami akan membahas ambang batas dalam bab 7.
Kami dapat memulihkan dan menampilkan gambar asli dengan
>> cc = 2 * (2 * (2 * (2 * (2 * (2 * (2 * c7 + c6) + c5) + c4) + c3) + c2) + c1) + c1) +
c0;
>> imshow (uint8 (cc))
...
Jika kita menerapkan imresize ke hasil dengan parameter 2 daripada 1/2, semua piksel
diulang untuk menghasilkan gambar dengan ukuran yang sama seperti aslinya, tetapi
dengan setengah resolusi di setiap arah:
Resolusi efektif dari gambar baru ini hanya 128x128. Kita dapat melakukan semua ini
dalam satu baris:
x2 = imresize (imresize (x, 1/2), 2);
Dengan mengubah parameter imresize, kita dapat mengubah resolusi gambar menjadi
efektif jumlah yang lebih kecil:
Untuk melihat efek dari perintah ini, misalkan kita menerapkannya pada gambar
newborn.tif:
x = imread ('newborn.tif');
Efek peningkatan blok atau pikselisasi menjadi sangat jelas ketika resolusinya
menurun;
bahkan pada 128 x 128 detail resolusi, seperti tepi jari-jari bayi, kurang jelas, dan pada
64 x 64 semua tepi sekarang cukup kuning. Di 32 x 32 gambar hampir tidak dikenali,
dan pada 16 x 16 dan 8 x 8 gambar menjadi tidak bisa dikenali.
(a) Gambar asli (b) gambar pada 128 x 128 resolution
Gambar 1.28: Mengurangi resolusi gambar