1. Tugas Individu
Pemrosesan Citra Digital
LAPORAN PEMROSESAN
CITRA DIGITAL
Oleh :
NURKAMILA JAFAR H 121 12 014
PROGRAM STUDI STATISTIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS HASANUDDIN
2015
2. 1. Pengantar Pemrosesan Citra Digital
Citra atau image adalah kemiripan atau representasi suatu objek tertentu.
Citra merupakan keluaran dari rekaman berupa foto, video, dan lain-lain. Citra
terbagi dua, yaitu :
- Citra analog, yaitu citra yang belum diolah oleh komputer (citra masih
asli).
- Citra digital, yaitu citra yang sudah diolah oleh komputer.
Citra digital adalah citra f(x,y) yang telah dilakukan digitalisasi baik
koordinat area maupun brightness level. Nilai f di koordinat (x,y) menunjukkan
brightness atau grayness level dari citra pada titik tersebut. Pada citra digital
terdapat istilah resolusi citra, yaitu merupakan tingkat detailnya suatu citra.
Semakin tinggi resolusinya maka semakin tinggi pula tingkat detail dari citra
tersebut. Terdapat 2 jenis resolusi citra, yaitu :
- Resolusi spasial, yaitu merupakan ukuran halus/kasarnya pembagian
kisi-kisi baris dan kolom pada saat sampling. Resolusi ini digunakan
untuk menentukan jumlah pixel per satuan panjang (dpi = dot per inchi).
- Resolusi kecemerlangan (intenstas/brightness), adalah ukuran halus/
kasarnya pembagian tingkat graasi warna saat dilakukan kuantisasi.
Disebut juga dengan kedalaman bit/kedalaman warna (Bit Depth). Bit
Depth menentukan berapa banyaj informasi warna yang tersedia untuk
ditampilkan dalam setiap piksel. Semakin besar nilainya, semakin bagus
kualitas gambar yang dihasilkan dan semakin besar ukurannya.
Supaya citra digital dapat diolah computer, maka citra digital harus
mempunyai format tertentu. Format citra digital yang dipakai adalah citra skala
keabuan (Gray Scale). Pada umumnya warna yang digunakan pada grayscale
adalah warna hitam sebagai warna minimal (0), dan warna putih (255) sebagai
warna maksimal, sehingga warna antaranya adalah abu-abu. Skala keabuan
(grayscale = G) dibagi menjadi sejumlah level, memiliki nilai bilangan bulat dan
merupakan hasil perpangkatan dari dua.
Skala Keabuan Skala (0,1) Kedalaman Pixel
21 0,1 1 bit
22 0 sampai 3 2 bit
23 0 sampai 15 4 bit
24 0 smapai 255 8 bit
Setiap piksel mempunyai warna yang spesifik yang merupakan kombinasi 3
warna dasar yaitu, Red (R), Green (G), dan Blue (B), yang sering disebut sebagai
3. citra RGB. Setiap komponan warna mempunyai intensitas sendiri dengan nilai 0-
255. Jadi setiap piksel membutuhkan 3 byte, dengan format penyimpanan warna
true color. Jumalh kombinasi warna dari citra RGB ini adalah 224 = 16 juta warna.
Pada citra digital, adapula citra biner (monokrom) yang setiap titiknya
bernilai 0 atau 1, yang mana 0 untuk warna hitam dan 1 untuk warna putih. Setiap
titik membutuhkan 1 bit, 1 bit dapat menampung 8 titik.
2. Membaca Citra
Sebelum memulai bekerja dengan MATLAB, sebaiknya diatur dulu current
directotynya yang akan dijadikan direktori yang aktif, dimana dalam direktori ini
berisi file-file yang akan diproses pada MATLAB. Pada laporan ini, harddisk C:/
dijadikan direktori yang aktif.
Perintah yang digunakan untuk membaca file citra pada MATLAB adalah
perintah imread yang berarti image read, perintah dasarnya yaitu
imread(‘namafile’)
Sebagai contoh, akan dibaca file citra Totoro.jpg dengan menambahkan jenis
ekstensinya, dalam contoh ini menggunakan ekstensi .jpg dari file JPEG).
Dituliskan perintah (dimana file yang dibaca disimpan dalam variabel “a” dalam
bentuk matriks penyusun citra)
>> a=imread('Totoro.jpg');
Diatas adalah contoh perintah jika file citra yang akan dibaca berada di
Current Directory. Sedangkan untuk membaca file citra yang berada di luar
Current Directory, maka dituliskan perintah
>> a=imread('D:FunTotoro.jpg');
Untuk melihat ukuran dimensi baris dan kolom dari file citra tersebut dapat
digunakan perintah
4. >> size(a)
Dari outputnya dapat diketahui bahwa dimensi baris citra tersebut adalah 334 dan
dimensi kolomnya 236.
Pada MATLAB, terdapat pula fungsi whos yang berfungsi untuk
menampilkan informasi tambahan seperti ukuran, besar muatan, dan class :
>> whos a
3. Menampilkan Citra
Menampilkan citra pada MATLAB yang telah dibaca dapat dilakukan
dengan perintah
imshow(a)
dimana “a” adalah matriks penyusun citra.
Ketika diketik perintah
>> imshow(a)
Maka file citra akan ditampilkan dengan nama Figure 1 seperti gambar di bawah
ini :
5. Pada MATLAB jika terdapat file citra sedang ditampilkan dan akan
ditampilkan file citra baru, MATLAB akan mengganti citra yang sedang
ditampilkan dengan file citra baru. Maka untuk tetap menampilkan output kedua
citra tersebut digunakan perintah sebagai berikut :
>> imshow(a), figure, imshow(b)
dimana sebelumnya telah dibaca file citra dengan nama Ghibli.jpg yang disimpan
dalam variabel “b” dalam bentuk matriks penyusun citra.
Outputnya seperti gambar dibawah ini, dengan tampilan a pada Figure 1 dan
tampilan b pada Figure 2 :
6. Untuk menampilkan informasi lebih detail seperti melihat nilai pixel, jarak
pengukuran, dan operasi-operasi lainnya digunakan Image Tool. Untuk
menggunakannya digunakan fungsi imtool seperti berikut :
>> imtool(a) untuk file yang disimpan dalam variabel “a”
>> imtool(b) untuk file citrayang disimpan dalam variabel “b”
7. Dari kedua file citra diatas dapat dilihat pebedaan gambar berwarna dengan
gambar hitam putih, dari kotak pixel region, dimana pada file citra berwarna yang
disimpan dengan variabel “a” yang nilai-nilai pixel RGBnya berbeda. Sedangkan
pada file citra hitam putih yang disimpan dengan variabel “b” nilai-nilai RGBnya
sama pada satu titik pixel.
4. Menulis Citra
Untuk menulis citra pada direktori yang aktif digunakan fungsi imwrite
dengan perintah dasar :
imwrite(a, ‘namafile’)
sebagai contoh :
>> imwrite(a,'Totoro','jpg')
Fungsi imwrite bisa dituliskan dengan parameter lain, seperti syntax berikut :
>> imwrite(a,'namafile','quality',0)
Dimana q adalah bilangan bulat antara 0 dan 100.
Sebagai contoh :
>> imwrite(a,'Totoro','jpg','quality',25)
>> imwrite(a,'Totoro.tif')
Imwrite dapat juga digunakan untuk membuat duplikat gambar dengan mengubah
ekstensi yang diinginkan seperti yang terlihat diatas pada kolom sebelah kiri
terdapat 2 gambar yang sama tapi berekstensi berbeda, yang satu jpg dan yang satu
tif.
8. Untuk mendapatkan informasi dari file citra, dignakan fungsi imfinfo, yang mana
sytaxnya :
imfinfo namafile
dimana namafile ini adalah nama file yang ada pada direktori yang aktif.
Sebagai contoh,
>> imfinfo Totoro.jpg
Output dari informasi file ini adalah :
Filename : 'Totoro.jpg'
FileModDate : '20-Feb-2015 21:24:03'
FileSize : 12682
Format : 'jpg'
FormatVersion : ''
Width : 236
Height : 334
BitDepth : 24
ColorType : 'truecolor'
FormatSignature : ''
NumberOfSamples : 3
CodingMethod : 'Huffman'
CodingProcess : 'Progressive'
Comment : {}
DateTime : '2010:06:14 21:23:38 '
>> imfinfo Ghibli.jpg
Output dari informasi file ini adalah :
Filename : 'Ghibli.jpg'
9. FileModDate : '22-Feb-2015 18:53:34'
FileSize : 15542
Format : 'jpg'
FormatVersion : ''
Width : 300
Height : 239
BitDepth : 8
ColorType : 'grayscale'
FormatSignature : ''
NumberOfSamples : 1
CodingMethod : 'Huffman'
CodingProcess : 'Sequential'
Comment : {}
Dari kedua file citra diatas, terlihat perbedaan tipe warnanya, file citra yang
tersimpan dalam variabel “a” bertipe truecolor dan file citra yang tersimpan dalam
variabel “b” bertipe grayscale.
Untuk melihat rasio kompresinya pada MATLAB digunakan fungsi-fungsi
seperti ini :
Dimana hasilnya didapat dengan mengalikan width,height,dan bitdepth lalu
membagi hasilnya dengan 8. Kemudian hasilnya dibagi dengan FileSize, maka
didapat rasio kompresinya adalah 18.6463.
10. 5. Classes
Nama Deskripsi
double
single
uint8
uint16
uint32
int8
int16
int32
char
logical
Double-precision, angka floating-point di perkiraan berkisar ± 10308
(8 byte per elemen).
single-precision, Floating-point dengan nilai-nilai dalam kisaran
perkiraan ± 1038 (4 byte per elemen).
Unsigned8-bit integer dalam rentang [0, 255] (1 byte per elemen).
Unsigned16-bit bilangan bulat dalam rentang [0, 65535] (2 byte per
elemen).
Unsigned integer 32-bit dalam rentang [0, 4294967295] (4 byte per
elemen).
Bilangan bulat 8-bit dalam rentang [-128, 127] (1 byte per elemen).
16-bit bilangan bulat dalam rentang [- 32768, 32767] (2 byte per
elemen).
Bilangan bulat 32-bit dalam rentang [- 2147483648, 2147483647]
(4 byte per elemen).
Karakter (2 byte per elemen).
Nilai adalah 0 atau 1 (1 byte per elemen).
6. Mengkonversi Antar Citra
Untuk menkonversi citra dari suatu kelas ke kelas lain akan digunakan fungsi-
fungsi berikut :
Nama Mengkonversi ke: Berlaku untuk kelas
im2uint8 uint8 logical, uint8, uint16,
int16, single, dan double
im2uint16 uint16 logical, uint8, uint16,
int16, single, dan double
im2double Double logical, uint8, uint16,
int16, single, dan double
im2single single logical, uint8, uint16,
int16, single, dan double
11. mat2gray double dalam rentang [0,1] logical, uint8, int8, uint16,
int16, uint32, uint32,
single, dan double
im2bw Logical logical, uint16, int16,
single, dan double
Sebagai contoh, diambil file citra f dari class double yang akan dikonversi
ke jenis class lain.
- Mengkonver ke uint8
Dari hasilnya dapat telihat dengan fungsi uint8, bilangan-bilangan yang
ada pada file citra f dikonversi menjadi bilangan bulat dengan jumlah
skala 28 atau dalam rentang 0-255, dimana bilangan terkecil dari file f
yaitu -0.5 menjadi 0 dan bilangan terbesar dari file f yaitu 1.5 menjadi
255.
- Mengkonversi ke uint16
Dari hasilnya dapat telihat dengan fungsi uint16, bilangan-bilangan yang
ada pada file citra f dikonversi menjadi bilangan bulat dengan jumlah
12. skala 216 atau dalam rentang 0-65535, dimana bilangan terkecil dari file
f yaitu -0.5 menjadi 0 dan bilangan terbesar dari file f yaitu 1.5 menjadi
65535.
- Mengkonversi ke double dalam rentang [0,1]
Dari hasilnya dapat telihat dengan fungsi mat2gray, bilangan-bilangan
yang ada pada file citra f dikonversi menjadi bilangan bulat dalam
rentang [0,1], dimana bilangan terkecil dari file f yaitu -0.5 menjadi 0
dan bilangan terbesar dari file f yaitu 1.5 menjadi 1.
- Mengkonversi ke logical
Dari hasilnya dapat telihat dengan fungsi im2bw, bilangan-bilangan
yang ada pada file citra f dikonversi menjadi bilangan bulat 0 atau 1.
7. Array Indexing
7.1 Indexing vectors
Sebagaimana yang diketahui, array dimensi 1 x N disebut vektor baris.
Elemen-elemen dari vektor tersebut dapat diakses menggunakan nilai indeks
tunggal atau disebut dengan subscript. Dengan demikian, v(1) adalah elemen
pertama dari vektor v, v(2) adalah elemen kedua, dan seterusnya. Vektor dapat
dibentuk di MATLAB dengan menampilkan elemen yang dipisahkan oleh
spasi atau koma, dalam tanda kurung siku. Sebagai contoh:
13. Sebuah vektor baris dikonversi menjadi vektor kolom (dan sebaliknya)
dengan menggunakan transpos operator ('.):
Untuk mengakses blok elemen digunakan tanda titik du(:) pada MATLAB.
Sebagai contoh untuk mengakses tiga elemen pertama v, dituliskan:
Demikian pula, untuk mengakses elemen-elemen yang dimulai dari elemen
kedua dari empat elemen pertama:
Atau semua elemen seperti dari 3 elemen terakhir:
Di mana end menandakan elemen terakhir dalam vektor. Notasi 1: 2: end
menyatakan untuk memulai pada elemen pertama , mengambil elemen kedua
dari elemen sebelumnya, dan berhenti ketika mencapai elemen terakhir.
14. Langkah-langkah negatif, yang menyatakan dimulai dari elemen terakhir, dan
mundur 2 langkah dari elemen terakhir, sampai pada elemen pertama.
Dapat pula memilih elemen pertama, keempat, dan kelima v dengan
menggunakan perintah:
7.2 Indexing matrices
Pada MATLAB, matriks dapat dibuat dengan menuliskan elemen-
elemen matriks per baris (vektor baris) dalam tanda kurung siku dan tanda
titik koma untuk tiap vektor baris. Sebagai contoh, dibuat matriks A berukuran
3x3 :
Memanggil sebuah elemen yang berada pada baris kedua kolom ketiga :
15. Membuat sebuah submatrik dari matrik yang telah dibuat, dimana elemen-
elemen submatriknya adalah elemen-elemen baris 1 dan 2 dengan kolom
1,2,dan 3 dari matriks yang telah dibuat (matriks A) :
Karena pernyataan 1:k menyatakan nilai-nilai vektor dari 1 sampai k, maka
submatrik dapat pula dibuat dengan cara:
Tetapi jika vektor tersebut tidak berdekatan atau terbalik ([3 2] ≠ [2 3]),
maka dibuat dengan cara :
Digunakan tanda titik dua untuk memanggil satu vektor, misal yang akan
dipanggil hanya kolom ketiga :
16. atau hanya memanggil satu baris yaitu baris kedua :
Membuat matriks B dengan menyalin matriks A, dimana elemen-elemen
kolom ketiga adalah 0 :
Kata end digunakan ketika index yang akan dipanggil berada pada kolom
terakhir atau baris terakhir, sebagai contoh akan dipanggila elemen yang
berada pada baris terakhir dan kolom terakhir :
Dengan end, dapat pula dilakukan sebuah operasi, seperti akan dipanggil
elemen yang berada baris terakhir dan kolom terakhir ketiga (kolom kedua
dari kolom terakhir):
17. 7.3 Indexing dengan tanda titik dua
Tanda titik dua(:) digunakan untuk memanggil semua elemen yang
disatukan dalam satu kolom vektor, sebagai contoh akan dipanggil matriks T2
yang ada pada bagian sebelumnya :
Penggunaan titik dua ini bermanfaat ketika misalnya akan dicari jumlah dari
seluruh elemen pada sebuah matriks. Untuk mencari jumlah dari seluruh
elemen pada sebuah matriks dilakukan dua langkah yaitu pertama, jumlahkan
seluruh elemen per kolom atau per baris
kemudian jumlahkan lagi seluruh hasilnya
Dengan menggunakan tanda titik dua, didapat cara yang lebih mudah yaitu:
18. 7.4 Logical indexing
Bentuk lain dari indexing yaitu logical indexing, sebuah pernyataan
logical indexing yang memiliki bentuk A(D), dimana A adalah sebuah array
dan D adalah logical indexing yang memiliki ukuran sama dengan matriks A.
pernyataan A(D) akan memanggil semua elemen matriks A yang bernilai 1
pada D. Contohnya :
Elemen yang berada di nilai 1 pada D dapat diubah
dengan nilai yang sama
19. 7.5 Linear indexing
Kategori terakhir dari indexing adalah linear indexing. Pernyataan
linear indexing adalah salah satu penggunaan subscript single untuk indeks
matriks atau array berdimensi tinggi. Untuk ilustrasi digunakan matriks
Hilbert 4x4, sebagai contoh :
Contoh pernyataan Linear Indexing
Untuk melihat cara bekerja dari indexing, berikut pemberian nomor untuk
elemen-elemen pada H dari pertama sampai kolom terakhir :
Dalam pengolahan citra, linear indexing berguna untuk mengekstaksi satu set
nilai-nilai pixel dari lokasi yang berubah-ubah. Sebagai contoh, akan diekstrak
nilai-nilai dari H pada koordinat baris kolom (1,3),(2,4), dan (4,3):
Pernyataan H(r,c) tidak menampilkan apa yang diinginkan, maka koordinat
baris kolom akan dikonver ke nilai linear index, dengan cara :
20. Cara diatas berdasarkan perhitungan mengalikan jumlah baris H dengan nilai
koordinat kolom kurang satu, kemudian ditambah dengan nilai koordinat
baris. Seperti akan dicari linear index untuk koordinat (1,3),(2,4), dan (4,3) :
Untuk koordinat (1,3)
M.(c-1)+r
4.(3-1)+1 = 9
Maka linier indexing untuk koordinat (1,3) adalah 9.
Untuk koordinat (2,4)
M.(c-1)+r
4.(4-1)+2 = 14
Maka linier indexing untuk koordinat (1,3) adalah 14.
Untuk koordinat (4,3)
M.(c-1)+r
4.(3-1)+4 = 12
Maka linier indexing untuk koordinat (1,3) adalah 12.
Fungsi MATLAB sub2ind dan ind2sub mengkonver kembali dan seterusnya
antara subscript baris kolom dan linear indices. Sebagai contoh:
21. Contoh operasi gambar dengan menggunakan array indexing :
Citra yang asli
Memutar citra :
>> fp=b(end:-1:1,:);
22. Memotong citra :
>> fc=b(100:239,100:237);
Subsampel citra :
>> fs=f(1:2:end,1:2:end);
Garis horizontal yang melewati tengah-tengah citra :
>> plot(b(120,:)
23. 7.6 Memilih dimensi array
Bentuk operasinya adalah
Operation(A, dim)
Dimana operation menandakan operasi pada MATLAB, A adalah sebuah
array, dan dim adalah scalar. Sebagi contoh, A adalah array berdimensi 2
(2-D) :
>> k=size(A,1);
memperlihatkan ukuran A sepanjang dimensi pertama, begitu pula dengan
dimensi kedua dengan bentuk array horizontal, jadi pernyataannya size(A,2)
memperlihatkan ukuran kolom A. Dengan menggunakan konsep ini,
dituliskan pernyataan :
>> plot(a(size(a,1)/2,:))
7.7 Sparse Matrices
Ketika suatu matriks mempunyai banyak 0’, hal ini berguna untuk
pernyataan dalam sparse untuk mengurangi penyimpanan. Fungsi sparse
mengkonver matriks menjadi bentuk sparse yang mengeluarkan semua
elemen 0. Syntax dasar untuk fungsi ini adalah
S = sparse(B)
Sebagai contoh, jika
24. Maka
Dari hasil di atas dapat dilihat bahwa sparse hanya menampilkan
(baris,kolom) lokasi dari elemen-elemen yang tak nol. Untuk menampilkan
kembali matriks asli, digunakan fungsi full :
Suatu syntax digunakan pada suatu waktu dengan fungsi sparse yang memiliki
lima inputan :
S = sparse(r, c, s, m, n)
Dimana r dan c berisi koordinat (baris, kolom) matriks yang elemennya tak
nol , parameter s berisi nilai-nilai yang sama (r, c), serta m dan n adalah
dimensi dari matriks. Sebagai contoh :
25. 8. Beberapa Array Dasar yang Penting
- zeros(M,N) menghasilkan matriks MxN untuk 0’ dari kelas double.
- ones(M,N) menghasilkan matriks MxN untuk 1’ dari kelas double.
- true(M,N) menghasilkan matriks logical untuk 1’.
- false(M,N) menghasilkan matriks logical untuk 0’.
- magic(M) menghasil “magic square” MxM, dalam hal ini jumlah seluruh
baris, seluruh kolom, atau seluruh diagonal utama adalah sama.
- eye(M) menghasilkan matriks identitas MxM.
- rand(M,N) menghasilkan matriks MxN yang berisi angka-angka acak yang
telah didistribusi seragam dalam interval [0,1].
- randn(M,N) menghasilkan matriks MxN yang berisi angka-angka acak yang
telah didistribusi normal dengan rata-rata 0 dan variansi 1.
Sebagai contoh :