Pengenalan Dasar Citra STMIK PPKIA Pradnya Praramita Sigit Setyowibowo, ST., MMSI
Representasi Citra Digital Citra digital dibentuk oleh kumpulan titik yang dinamakan piksel (pixel atau “picture element”). Setiap piksel digambarkan sebagai satu kotak kecil. Setiap piksel mempunyai koordinat posisi
Citra dan nilai penyusun piksel
Notasi piksel dalam citra
Kuantisasi Citra Citra digital sesungguhnya dibentuk melalui pendekatan yang dinamakan kuantisasi. Kuantisasi adalah prosedur yang dipakai untuk membuat suatu isyarat yang bersifat kontinu ke dalam bentuk diskret Perbandingan isyarat analog dan isyarat diskret
Digitalisasi citra biner 8x8 piksel untuk memperlihatkan bentuk piksel ideal warna hitam (0) dan putih (1)
Jangkauan nilai pada citra keabuan Komponen warna Bit per Piksel Jangkauan Penggunaan 1 0-1 Citra biner: dokumen faksimili 8 0-255 Umum: foto dan hasil pemindai 12 0-4095 Kualitas tinggi: foto dan hasil pemindai 14 0-16383 Kualitas profesional: foto dan hasil pemindai 16 0-65535 Kualitas tertinggi: citra kedokteran dan astronomi
Jangkauan nilai pada citra berwarna Komponen Warna Bit per Piksel Jangkauan Penggunaan 3 24 0-1 RGB umum 36 0-4095 RGB kualitas tinggi 42 0-16383 RGB kualitas profesional 4 32 0-255 CMYK (cetakan digital)
Kuantisasi citra dengan menggunakan berbagai bit
Kualitas Citra Di samping cacah intensitas kecerahan, jumlah piksel yang digunakan untuk menyusun suatu citra mempengaruhi kualitas citra. Istilah resolusi citra biasa dinyatakan jumlah piksel pada arah lebar dan tinggi. Resolusi piksel biasa dinyatakan dengan notasi m x n, dengan m menyatakan tinggi dan n menyatakan lebar dalam jumlah piksel
Efek resolusi berdasar jumlah piksel pada citra ketika gambar disajikan dengan ukuran yang sama
Membaca Citra Bentuk pemanggilannya: Img = imread(nama_file_citra) Dalam hal ini, nama_file_citra menyatakan nama file citra yang hendak dibaca dan Img menyatakan larik (array) yang menampung data citra yang dibaca
Daftar format file gambar yang bisa dibaca oleh imread Format Gambar Ekstensi Keterangan TIFF .tif, .tiff Tagged Image File Format merupakan format citra yang mula-mula dibuat boleh Aldus. Kemudian, dikembangkan oleh Microsoft dan terakhir oleh Adobe. JPEG .jpg, .jpeg Joint Photographics Expert Group adalah format citra yang dirancang agar bisa memampatkan data dengan rasio 1:16. GIF .gif Graphics Interface Format merupakan format yang memungkinkan pemampatan data hingga 50%. Cocok untuk citra yang memiliki area yang cukup besar dengan warna yang sama. BMP .bmp Windows Bitmap merupakan format bitmap pada Windows. PNG .png Portable Network Graphics biasa dibaca ‘ping’. Asal mulanya dikembangkan sebagai pengganti format GIF karena adanya penerapan lisensi GIF. Mendukung pemampatan data tanpa menghilangkan informasi aslinya. XWD .xwd XWindow Dump
Contoh berikut digunakan untuk membaca file citra bernama mandrill Contoh berikut digunakan untuk membaca file citra bernama mandrill.png yang terdapat pada folder C:\Image. >> Img = imread(’C:\Image\mandrill.tif’); >>
Mengetahui Ukuran Citra Secara umum, ukuran matriks Img adalah M x N. Untuk mengetahui nilai M dan N yang sesungguhnya, dapat digunakan fungsi pada Octave yang bernama size. Contoh untuk mengetahui dimensi pada matriks Img: >> Ukuran = size(Img) Ukuran = 512 512 >> Dengan cara seperti itu, terlihat bahwa Img berisi 512 baris dan 512 kolom piksel.
Untuk mendapatkan jumlah baris dan jumlah kolom secara tersendiri, perlu diberikan perintah seperti berikut: >> jum_baris = Ukuran(1); >> jum_kolom = Ukuran(2); >> Angka 1 dan 2 pada ukuran menyatakan indeks. Dengan cara seperti itu, jum_baris berisi jumlah baris pada larik Img dan jum_kolom berisi jumlah kolom pada larik Img. Sebagai alternatif, dapat ditulis perintah seperti berikut: >> [jum_baris, jum_kolom] = size(Img); Dengan cara seperti itu, jum_baris berisi jumlah baris pada larik Img dan jum_kolom berisi jumlah kolom pada larik Img
Menampilkan Citra Citra dapat ditampilkan dengan mudah melalui fungsi imshow. Contoh berikut digunakan untuk menampilkan citra yang terdapat di Img: >> imshow(Img); >> Hasilnya berupa jendela yang menampilkan citra pada Img
Apabila dikehendaki untuk menampilkan dua citra di dua jendela masing-masing, fungsi figure perlu dipanggil terlebih dulu sebelum memanggil imshow. Contoh: >> Sungai = imread('C:\Image\innsbruck.tif'); >> Bangunan = imread('C:\Image\altstadt.png'); >> figure(1); imshow(Sungai); >> figure(2); imshow(Bangunan); Hasilnya, gambar sungai ditampilkan di jendela 1 dan gambar bangunan diletakkan di jendela 2. Gambar berikut memperlihatkan keadaan pada kedua jendela, yaitu kebetulan sebagian jendela 2 menutup jendela 1
Menampilkan dua citra di jendela masing-masing
Octave menyediakan fasilitas yang memungkinkan dua buah citra diletakkan dalam satu jendela. Berdasarkan larik Sungai dan Bangunan di depan, dapat dicoba untuk memberikan perintah berikut: >> close all; >> subplot(1,2,1); imshow(Sungai); >> subplot(1,2,2); imshow(Bangunan);
Contoh pemakaian subplot
Mengenal Jenis Citra Ada tiga jenis citra yang umum digunakan dalam pemrosesan citra. Ketiga jenis citra tersebut yaitu citra berwarna, citra berskala keabuan, dan citra biner
Citra Berwarna Citra berwarna, atau biasa dinamakan citra RGB, merupakan jenis citra yang menyajikan warna dalam bentuk komponen R (merah), G (hijau), dan B (biru). Setiap komponen warna menggunakan 8 bit (nilainya berkisar antara 0 sampai dengan 255). Dengan demikian, kemungkinan warna yang bisa disajikan mencapai 255 x 255 x 255 atau 16.581.375 warna
Warna dan nilai penyusun warna G B Merah 255 Hijau Biru Hitam Putih Kuning
Warna RGB dalam ruang berdimensi tiga
Citra berwarna dan representasi warnanya Citra berwarna dan representasi warnanya. Setiap piksel dinyatakan dengan nilai R, G, dan B Catatan Perlu diketahui, sebuah warna tidak hanya dinyatakan dengan komposisi R, G, dan B tunggal. Pada Tabel 2.4 terlihat bahwa warna merah mempunyai R=255, G=0, dan B=0. Namun, komposisi R=254, G=1, B=1 juga berwarna merah.
Citra berwarna pun dibaca melalui imread. Contoh: >> Kota = imread('C:\Image\innsbruckcity.png'); Nah, sekarang dapat dicoba untuk mengenakan size pada Kota: >> size(Kota) ans = 747 500 3
Hasil pembacaan citra berwarna Dimensi ketiga menyatakan komponen R, G, B. Indeks pertama menyatakan komponen R, indeks kedua menyatakan komponen G, dan indeks ketiga menyatakan komponen B
Berikut adalah cara untuk mendapatkan komponen R, G, dan B pada larik Kota di depan: >> R = Kota(:,:,1); >> G = Kota(:,:,2); >> B = Kota(:,:,3); Untuk menampilkan gambar berwarna, imshow bisa digunakan seperti kalau mau menampilkan gambar berskala keabuan. Contoh: >> figure(1); >> imshow(Kota);
Citra Berskala Keabuan Sesuai dengan nama yang melekat, citra jenis ini menangani gradasi warna hitam dan putih, yang tentu saja menghasilkan efek warna abu-abu. Pada jenis gambar ini, warna dinyatakan dengan intensitas. Dalam hal ini, intensitas berkisar antara 0 sampai dengan 255. Nilai 0 menyatakan hitam dan nilai 255 menyatakan putih.
Citra Biner Citra biner adalah citra dengan setiap piksel hanya dinyatakan dengan sebuah nilai dari dua buah kemungkinan (yaitu nilai 0 dan 1). Nilai 0 menyatakan warna hitam dan nilai 1 menyatakan warna putih.
Contoh berikut menunjukkan cara membaca dan menampilkan citra biner. >> Img = imread('c:\Image\daun_bin.tif'); >> imshow(Img); >> Tampilan citra biner
Mengonversi Jenis Citra Dalam praktik, seringkali diperlukan utuk mengonversi citra berwarna ke dalam bentuk citra berskala keabuan mengingat banyak pemrosesan citra yang bekerja pada skala keabuan. Namun, terkadang citra berskala keabuan pun perlu dikonversikan ke citra biner, mengingat beberapa operasi dalam pemrosesan citra berjalan pada citra biner. Bagaimana cara mengubah citra berwarna ke dalam citra berskala keabuan?
Secara umum citra berwarna dapat dikonversikan ke citra berskala keabuan melalui rumus: 𝐼=𝑎 𝑥 𝑅+𝑏 𝑥 𝐺+𝑐 𝑥 𝐵, 𝑎+𝑏+𝑐=1 dengan R menyatakan nilai komponen merah, G menyatakan nilai komponen hijau, dan B menyatakan nilai komponen biru
Misalnya, sebuah piksel mempunyai komponen R, G, B sebagai berikut: R = 50 G = 70 B = 61 Jika a, b, dan c dibuat sama, akan diperoleh hasil seperti berikut: I = (50 + 70 + 60) / 3 = 60 Salah satu contoh rumus yang biasa dipakai untuk mengubah ke skala keabuan yaitu: 𝐼=0,2989 𝑥 𝑅+0,5870 𝑥 𝐺+0,1141 𝑥 𝐵
>> Img = imread('C:\Image\innsbruckcity.png'); Contoh berikut menunjukkan cara melakukan konversi dari citra berwarna ke citra biner. >> Img = imread('C:\Image\innsbruckcity.png'); >> Abu = uint8(0.2989 * double(Img(:,:,1)) + ... 0.5870*double(Img(:,:,2)) + ... 0.1141 * double(Img(:,:,3))); >> imshow(Abu); Catatan Tanda … menyatakan bahwa perintah pada baris tersebut masih mempunyai lanjutan pada baris berikutnya. Tanda : berarti semua nilai. double dipakai untuk melakukan konversi dari tipe bilangan bulat 8 bit (uint8) ke tipe double (yang memungkinkan pemrosesan bilangan real berpresisi ganda). uint8 berguna untuk mengonversi dari tipe double ke uint8 (tipe bilangan bulat 8 bit).
Hasil konversi citra berwarna ke citra berskala keabuan
Bagaimana halnya kalau dikehendaki untuk mengonversikan citra berskala keabuan ke citra biner? Strategi yang dipakai yaitu dengan menerapkan suatu nilai yang dikenal sebagai nilai ambang (threshold). Nilai tersebut dipakai untuk menentukan suatu intensitas akan dikonversikan menjadi 0 atau menjadi 1. Secara matematis, konversi dinyatakan dengan rumus: 𝑏 𝑖 = 0, &𝑖≥𝑎 1, &𝑖<𝑎
% KEBINER Digunakan untuk mengonversi file % daun_gray % KEBINER Digunakan untuk mengonversi file % daun_gray.png ke citra biner Img = imread('c:\Image\daun.tif'); [tinggi, lebar] = size(Img); ambang = 160; % Nilai ini bisa diubah-ubah biner = zeros(tinggi, lebar); for baris=1 : tinggi for kolom=1 : lebar if Img(baris, kolom) >= ambang Biner(baris, kolom) = 0; else Biner(baris, kolom) = 1; end imshow(Biner);
Untuk menjalankan program di depan, berikan perintah >> kebiner; Hasil konversi daun.tif ke bentuk biner
Hasil konversi ke citra biner dengan berbagai nilai ambang
Fungsi yang disediakan Octave untuk kepentingan konversi ke aras keabuan Kegunaan im2bw(I, level) im2bw(RGB, level) Berguna untuk mengonversikan citra berskala keabuan (I) ataupun berwarna (RGB) ke dalam citra biner dengan menggunakan level sebagai ambang konversi. Di MATLAB, jika argumen kedua (yaitu level) tidak disertakan, nilai 0,5 secara bawaan digunakan sebagai ambang konversi. Pada Octave, argumen kedua harus disertakan. Nilai balik fungsi ini berupa citra biner rgb2gray(RGB) Berguna untuk mengonversi citra berwarna (RGB) ke citra berskala keabuan. Nilai balik fungsi ini berupa citra berskala keabuan
Agar terbiasa dengan kedua fungsi tersebut, berikut disajikan contoh penggunaannya. Contoh pertama: >> Img = imread('C:\Image\daun.tif'); >> BW = im2bw(Img, 0.6); >> imshow(BW); Hasilnya seperti berikut:
Hasil pembentukan citra biner melalui im2bw
>> RGB = imread('C:\Image\innsbruckcity.png'); Adapun contoh pemakaian rgb2gray: >> RGB = imread('C:\Image\innsbruckcity.png'); >> Abu = rgb2gray(RGB); >> imshow(Abu); Hasilnya seperti berikut.
Hasil pembentukan citra berskala keabuan melalui rgb2gray
Menyimpan Citra Untuk kepentingan menyimpan citra ke dalam file, fungsi imwrite pada Octave dapat digunakan. Pemakaiannya: imwrite(A, nama_file) A dapat berupa larik dua dimensi (citra berskala keabuan) ataupun larik berdimensi tiga (citra RGB). Contoh: >> Img = imread('C:\Image\daun.tif'); >> X = 255 – Img; >> imwrite(X, ’negatif_daun.png’);
Hasil penyimpanan citra negatif_daun.png
Latihan: Jelaskan mengenai koordinat citra. Apa yang dimaksud dengan kuantisasi citra? Jelaskan hubungan jumlah bit dalam kuantisasi citra dengan kompresi data. Jelaskan makna kualitas citra. Jelaskan pengertian : citra berwarna citra berskala keabuan citra biner Jelaskan mekanisme untuk mengubah citra berwarna ke dalam citra berskala keabuan.
Bagaimana prinsip untuk mengubah citra berskala keabuan ke citra biner? Ubahlah innsbruckcity.png ke citra berskala keabuan dan kemudian simpan dengan nama inns_gray.png. Buatlah program untuk memproses citra daun_gray.png agar diperoleh hasil seperti berikut. Gunakanlah fungsi im2bw untuk mengonversikan citra innsbruckcity.png ke dalam bentuk citra biner dengan menggunakan level sebesar 0,7, 0,5, dan 0,3. Bagaimana kesan Anda mengenai hasil-hasil yang diperoleh? Buatlah program untuk menguantisasi citra daun_gray.png dengan 2 bit. Tampilkan hasilnya. Apakah hasilnya masih terlihat seperti aslinya? Bila tidak, dengan menggunakan berapa bit agar gambar tersebut terlihat sesuai dengan aslinya?