32
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

Laporan pcd 01

Embed Size (px)

Citation preview

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

1. Pengantar Pemrosesan Citra DigitalCitra 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 Pixel21 0,1 1 bit22 0 sampai 3 2 bit23 0 sampai 15 4 bit24 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 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 CitraSebelum 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:\Fun\Totoro.jpg');

Untuk melihat ukuran dimensi baris dan kolom dari file citra tersebut dapat digunakan perintah

>> 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 CitraMenampilkan citra pada MATLAB yang telah dibaca dapat dilakukan

dengan perintahimshow(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 :

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 :

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”

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 CitraUntuk 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.

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'

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.

5. Classes

Nama Deskripsidouble

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 CitraUntuk menkonversi citra dari suatu kelas ke kelas lain akan digunakan fungsi-fungsi berikut :

Nama Mengkonversi ke: Berlaku untuk kelasim2uint8 uint8 logical, uint8, uint16,

int16, single, dan doubleim2uint16 uint16 logical, uint8, uint16,

int16, single, dan doubleim2double Double logical, uint8, uint16,

int16, single, dan doubleim2single single logical, uint8, uint16,

int16, single, dan doublemat2gray 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 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 Indexing7.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:

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.

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 matricesPada 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 :

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 :

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):

7.3 Indexing dengan tanda titik duaTanda 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:

7.4 Logical indexingBentuk 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

7.5 Linear indexingKategori 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 :

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 = 9Maka linier indexing untuk koordinat (1,3) adalah 9.Untuk koordinat (2,4)M.(c-1)+r 4.(4-1)+2 = 14Maka linier indexing untuk koordinat (1,3) adalah 14.Untuk koordinat (4,3)M.(c-1)+r 4.(3-1)+4 = 12Maka 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:

Contoh operasi gambar dengan menggunakan array indexing :

Citra yang asli

Memutar citra :>> fp=b(end:-1:1,:);

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,:)

7.6 Memilih dimensi arrayBentuk 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 MatricesKetika 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

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 :

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 :

9.