Materi Sebelumnya:
Yang akan kita bahas pada materi ini adalah:
1. Operasi Piksel
Operasi piksel adalah operasi pengolahan citra yang memetakan hubungan setiap piksel yang bergantung pada piksel itu sendiri. Jika f(y, x) menyatakan nilai sebuah piksel pada citra f dan g(y, x) menyatakan piksel hasil pengolahan dari f(y, x), hubungannya dapat dinyatakan dengan
𝑔(𝑦,𝑥)= 𝑇(𝑓(𝑦,𝑥))
Dalam hal ini, T menyatakan fungsi atau macam operasi yang dikenakan terhadap piksel f(y, x). Model operasi inilah yang akan dibahas dibab ini,termasuk pembahasan pengolahan citra berbasis histogram.
2. Menggunakan Histogram Citra
Histogram citra merupakan diagram yang menggambarkan frekuensi setiap nilai intensitas yang muncul di seluruh piksel citra. Nilai yang besar menyatakan bahwa piksel-piksel yang mempunyai intensitas tersebut sangat banyak.
Pada citra berskala keabuan, jumlah aras keabuan (biasa disimbolkan dengan L) sebanyak256. Nilai aras dimulai dari 0 hingga 255. Adapun histogram untuk suatu aras dinyatakan dengan hist(k+1)dengan k menyatakan nilai aras (0 sampai dengan L-1). Jadi ,hist(k+1)menyatakan jumlah piksel yang bernilai k. Penggunaan k+1 pada hist diperlukan mengingat dalam Octavedan MATLAB tidak ada indeks nol atau hist(0). Cara menghitung hist(k+1)ditunjukkan pada algoritma berikut.
Contoh berikut menunjukkan cara membuat histogram citra innsbruck.png.
function histo(Img)
% HISTO Digunakan sebagai contoh pembuatan histogram
[jum_baris, jum_kolom] = size(Img);
Img = double(Img);
Histog = zeros(256, 1);
for baris=1 : jum_baris
for kolom=1 : jum_kolom
Histog(Img(baris, kolom)+1) = ...
Histog(Img(baris, kolom)+1) + 1;
end
end
% Tampilkan dalam bentuk diagram batang
Horis = (0:255)';
bar(Horis, Histog);
Img = imread('C:\Image\aan.png');
histo(Img);
Perlu diketahui, (0:255) untuk membentuk nilai dari 0,1,2, dan seterusnya sampai dengan 255. Dengan kata lain, (0:255) membentuk larik1 x 256. Tanda ‘ di belakang (0:255) menyatakan operasi transpos, sehingga hasilnya berupa larik berukuran 256x1. Perintah bar digunakan untuk membuat diagram batang.
Catatan:
Dengan memanggil
>> Img = imread('C:\Image\innsbruck.png');
>> histo(Img);
diperoleh hasil seperti terlihat pada Gambar dibawah ini. Perhatikan keberadaan satu garis yang cukup panjang di posisi intensitas nol, yang berasal dari bagian citra yang berwarna hitam. Adapun puncak histogram di posisi intensitas sekitar 90 menyatakan warna dominan abu-abu.Garis panjang di sisi kanan menyatakan warna putih.
Gambar citra innsbruck.png dan histogramnya
Untuk kemudahan dalam mengamati histogram, fungsi bawaan bernama imhist dapat dimanfaatkan. Contoh penggunaannya:
>> Img=imread('C:\Image\innsbruck.png');Ã
>> imhist(Img);Ã
Hasilnya ditujukan pada gambar dibawah ini :
Gambar hasil histogram dengan imhist
Untuk mengetahui nilai histogram, diperlukan perintah seperti berikut:>> [Histog, aras] = imhist(Img);
Dengan cara seperti itu, histog berupa larik yang berisi jumlah piksel setiap nilai aras dengan argumen aras. Namun, diagram tidak dibuat.
Catatan:
Pada pengolahan citra, histogram mempunyai peran yang cukup penting. Manfaat yang dapat didapatkan seperti berikut.
1. Berguna untuk mengamati penyebaran intensitas warna dan dapat dipakai untuk pengambilan keputusan misalnya dalam peningkatan kecerahan atau peregangan kontras serta sebaran warna.
2. Berguna untuk penentuan batas-batas dalam pemisahan objek dari latar belakangnya.
3. Memberikan persentase komposisi warna dan tekstur intensitas untuk kepentingan identifikasi citra.
Khusus pada citra berwarna, histogram dapat diterapkan pada gabungan komponen-komponen RGB penyusunnya ataupun per komponen. Gambar di ini menunjukkan contoh mengenai hal itu. Pada gambar tersebut, I menyatakan histogram gabungan intensitas warna, R untuk komponen warna merah, G untuk komponen warna hijau, dan B untuk komponen warna biru.
Gambar histogram pada citra berwarna secara menyeluruh (I), merah (R), hijau (G), dan biru (B)
Gambar empat buah citra a,b,c dan d, yang memiliki histogram yang sama e, tetapi mempunyai unformasi yang jauh berbeda
3. Meningkatkan Kecerahan
Operasi dasar yang sering dilakukan pada citra adalah peningkatan kecerahan (brightness). Operasi ini diperlukan dengan tujuan untuk membuat gambar menjadi lebih terang.
Secara matematis, peningkatan kecerahan dilakukan dengan cara menambahkan suatu konstanta terhadap nilai seluruh piksel. Misalkan, f(y, x) menyatakan nilai piksel pada citra berskala keabuan pada koordinat (y, x). Maka, citra baru
𝑔(𝑦,𝑥)= 𝑓(𝑦,𝑥)+ 𝛽
telah meningkat nilai kecerahan semua pikselnya sebesar 𝛽 terhadap citra asli f(y, x).Apabila β berupa bilangan negatif, kecerahan akan menurun atau menjadi lebih gelap.
Sebagai contoh, terdapat citra seperti pada Gambar dibawah ini (a).Citra tersebut dapat dicerahkan dengan memberikan perintah seperti berikut.
>> Img= imread('C:\Image\absam.png');
>> C = Img+ 60;
>> imshow(C);
Hasilnya pada gambar di bawah ini:
Gambar efek pencerahan gambar
Jika dilihat melalui histogram, peningkatan kecerahan sebenarnya berefek pada penggeseran komposisi intensitas piksel ke kanan bila β berupa bilangan positif atau ke kiri jika β berupa bilangan negatif di Persamaan 3.2. Gambar dibawah ini memperlihatkan keadaan ketika pencerahan dilakukan.
Gambar histogram pada peningkatan citra. Komposisi jumlah intensitas per aras keabuan tidak berubah
Perhatikan, warna hitam (ditandai dengan garis tunggal yang menonjol di ujung kiri histogram) ikut tergeser. Jadi, warna hitam tidak lagi menjadi hitam kalau peningkatan kecerahan dilakukan dengan cara seperti di depan.
Bagaimana kalau ingin mencerahkan pada citra berwarna? Secara prinsip, hal itu sama saja dengan pada citra berskala keabuan. Tentu saja, dalam hal ini, penambahan konstanta dilakukan pada ketiga komponen penyusun warna.
Contoh:
>> RGB = imread('c:\Image\bunga.png');
>> RGB2 = RGB + 80;
>> RGB2 = RGB + 80;
Gambar dibawah ini memperlihatkan perbedaan antara gambar pada keadaan awal dan setelah dicerahkan. Gambar (a) menyatakan citra pada RGB dan Gambar (b) menyatakan citra pada RGB2.
Gambar peningkatan kecerahan pada citra berwarna
4. Meregangkan Kontras
terdistribusi secara melebar. Kontras dapat diukur berdasarkan perbedaan antara nilai intensitas tertinggi dan nilai intensitas terendah yang menyusun piksel-piksel dalam citra.
Perlu diketahui, citra dengan kontras rendah acapkali terjadi karena kondisi pencahayaan yang jelek ataupun tidak seragam. Hal itu dapat diakibatkan oleh sensor-sensor penangkap citra yang tidak linear (Jain, 1989).
Agar distribusi intensitas piksel berubah perlu dilakukan peregangan kontras. Hal ini dilaksanakan dengan menggunakan rumus
𝑔(𝑦, 𝑥) = 𝛼 𝑓(𝑦, 𝑥)
Berdasarkan rumus di atas, kontras akan naik kalau α > 1 dan kontras akan turun kalau α < 1.
Sebelum mempraktikkan peregangan kontras, perhatikan Gambar dibawah ini Gambar tersebut sengaja dibuat ekstrem sempit agar memiliki kontras yang rendah. Hal ini dapat dilihat pada histogramnya.
Gambar contoh citra dengan kontras rendah
Sekarang akan dicoba untuk meregangkan kontras dengan cara seperti berikut
>> Img = imread('C:\Image\gembala.png');
>> K = 2.5 * Img;
Gambar dibawah ini memperlihatkan hasil peregangan kontras dan bentangan histogramnya
Gambar hasil peregangan kontras dengan = 2,5
Kalau dilihat dari histogram pada Gambar diatas (b), tampak bahwa distribusi intensitas warna menjadi melebar dan bergeser ke kanan terhadap keadaan terdahulu. Namun, karena distribusi cenderung ke aras keabuan yang tinggi, maka warna yang dihasilkan cenderung keputih-putihan.
5. Kombinasi Kecerahan dan Kontras
𝑔(𝑦, 𝑥) = 𝛼 𝑓(𝑦, 𝑥) + 𝛽 (3.4)
Namun, kalau yang dikehendaki adalah melakukan pengaturan agar aras keabuan pada citra f yang berkisar antara f1 dan f2 menjadi citra g dengan aras antara g1 dan g2, rumus yang diperlukan adalah
Mengacu histrogram pada Gambar diatas (b), rumus di atas dapat diterapkan. Pertama, distribusi histogram perlu digeser ke kiri. Selanjutnya, baru dikenakan peregangan kontras. Implementasinya seperti berikut.
>> Img = imread('C:\Image\gembala.png');
>> C = Img - 45;
>> K = C * 11;
Dengan cara seperti itu, akan dihasilkan citra yang lebih tegas, sebagaimana diperlihatkan pada Gambar dibawah ini
Gambar hasil pengaturan kecerahan dan
peregangan kontras menggunakan Persamaan 3.5
peregangan kontras menggunakan Persamaan 3.5
6. Membalik Citra
keabuan dapat dinyatakan dengan rumus:
𝑔(𝑦, 𝑥) = 255 − 𝑓(𝑦, 𝑥)
Hubungan di atas dapat digambarkan seperti secara grafis pada Gambar dibawah ini:
Gambar pembalikan citra
Gambar diatas menunjukkan bahwa kalau f(y, x) bernilai 255, g(y, x) bernilai 0. Sebaliknya, kalau f(y, x) bernilai 0, g(y, x) bernilai 255. Jika bit yang digunakan bukan 8 tetapi 4, persamaan untuk membalik citra berubah menjadi
𝑔(𝑦, 𝑥) = 15 − 𝑓(𝑦, 𝑥)
Untuk mempraktikkan Persamaan 3.7, perintah berikut dapat dicoba:
>> Img = imread('C:\Image\lena256.png');
>> R = 255 - Img;
>> R = 255 - Img;
Dengan memberikan
R = 255 - Img;
maka R berisi kebalikan dari citra di Img. Citra asli dan citra negatif yang dihasilkan diperlihatkan pada Gambar dibawah ini:
Gambar pembalikkan citra
7. Pemetaan Nonlinear
nonlinear. Sebagai contoh, dapat digunakan fungsi logaritma, yang membuat bagian yang gelap (intensitas rendah) lebih dicerahkan daripada yang berintensitas tinggi, karena memuat banyak detail yang penting. Gambar dibawah ini memperlihatkan keadaan tersebut.
Gambar pemetaan dengan fungsi logaritma
Baca juga : Penjelasan Singkat Algoritma
Gambar dibawah menunjukkan bahwa dengan menggunakan selang Δf yang sama pada f, ternyata memberikan selang yang berbeda pada g. Dengan kata lain, terjadi pengaturan atau variasi intensitas berbeda pada intensitas rendah dan intensitas tinggi. Peningkatan yang tajam dilakukan pada area yang gelap (yang
nilai intensitasnya rendah). Sifat pemetaan yang tidak seragam itulah yang dikatakan sebagai pemetaan nonlinear.
nilai intensitasnya rendah). Sifat pemetaan yang tidak seragam itulah yang dikatakan sebagai pemetaan nonlinear.
Gambar contoh hasil penggunaan pemetaan non linierKode yang digunakan untuk melakukan pemetaan di atas seperti berikut:
>> Img = imread('C:\Image\gembala.png');
>> C = log(1+double(Img));
>> C2 = im2uint8(mat2gray(C));
Penambahan angka 1 pada fungsi log dimaksudkan untuk menghindari kegagalan dalam menghitung logaritma alami untuk bilangan nol. Karena fungsi log bekerja pada area bilangan real maka penggunaan double(Img) diperlukan. Selanjutnya, mengingat hasil pada C berupa bilangan real, diperlukan konversi balik ke tipe uint8 (8 bit). Hal ini dikerjakan melalui
C2 = im2uint8(mat2gray(C));
Pertama-tama, mat2gray dipanggil agar semua nilai pada larik C berada di dalam jangkauan [0, 1]. Lalu, agar nilai berada pada jangkauan [0, 255], im2uint8 dipanggil.
8. Pemotongan Aras Keabuan
Nilai g dinolkan atau dipotong habis untuk intensitas asli dari 0 hingga f1 karena dipandang tidak mengandung informasi atau objek menarik. Demikian pula untuk nilai intensitas dari f2 ke atas, yang mungkin hanya mengadung derau. Gambar dibawah ini menyajikan diagram penggunaan rumus tersebut.
Gambar contoh pemotongan aras keabuan dengan pola
sangat tidak linear atau patah-patah
Untuk mempraktikkan rumus dalam Persamaan 3.8, kode berikut dapat digunakan.function [Hasil] = potong(berkas, f1, f2)
% POTONG Menghasilkan citra dengan level 0 s/d f1
% serta f2-255 dinolkan
Img = imread(berkas);
[tinggi, lebar] = size(Img);
Hasil = Img;
for baris=1 : tinggi
for kolom=1 : lebar
if Hasil(baris, kolom) <= f1
Hasil(baris, kolom) = 0;
end
if Hasil(baris, kolom) >= f2
Hasil(baris, kolom) = 255;
end
end
end
Akhir
Skrip di atas dapat dipanggil dengan menyertakan nama file berisi citra berskala keabuan, batas rendah dan batas tinggi untuk kepentingan pemotongan pada citra. Sebagai contoh, pemanggilan seperti berikut dapat diberikan:
>> H=potong('C:\Image\daun.png', 30, 170);
>> imshow(H);
Dengan cara seperti itu, hasil pemrosesan ditampilkan. Gambar dibawah ini menunjukkan contoh daun. png dalam keadaan asli dan hasil pemotongan pada dua tingka tambang. Pada Gambar dibawah ini (b), sedikit noktah warna latar belakang masih muncul.
Gambar efek pemotongan aras keabuan
Untuk melakukan percobaan dalam menentukan f1 dan f2, kekhasan histogram citra perlu dipertimbangkan. Gambar dibawah memperlihatkan histogram daun.png.
Gambar histogram daun.png.
9. Ekualisasi Histogram
Ekualisasi histogram merupakan suatu cara yang bertujuan untuk memperoleh histogram yang intensitasnya terdistribusi secara seragam pada citra. Namun, dalam praktik, hasilnya tidak benar-benar seragam (Jain, 1989). Pendekatan yang dilakukan adalah untuk mendapatkan aras keabuan yang lebih luas pada daerah yang memiliki banyak piksel dan mempersempit aras keabuan pada daerah yang berpiksel sedikit. Efeknya dapat digunakan untuk meningkatkan kontras secara menyeluruh. Perlu diketahui, ekualisasi histogram termasuk sebagai pemetaan nonlinear.
Misalnya, histogram untuk setiap aras keabuan dinyatakan dengan
Dalam hal ini, i bernilai 0, 1, 2, .., L-1, dengan L menyatakan jumlah aras keabuan. Akumulasi histogram untuk piksel yang memiliki aras k dinyatakan dengan
𝑐[𝑘+1]= Σℎ𝑖𝑠𝑡[𝑘+1],𝑘=0,1,2,…,𝐿−1
Selanjutnya, aras kakan diganti dengan a dengan ketentuan sebagai berikut:
𝑎𝑘=𝑟𝑜𝑢𝑛𝑑((𝐿−1) 𝑐[𝑘+1]𝑁),𝑘=0,1,2,…,𝐿−1
Dalam hal ini, N menyatakan jumlah piksel pada citra. Untuk memahami proses dalam ekualisasi histogram, lihatlah contoh pada Tabel dibawah ini
Tabel proses ekualisasi histogram
Pada contoh di atas, yang diarsir dengan warna hijau muda menyatakan keadaan awal citra. Dalam hal ini, citra mengandung N=64 piksel (8x8) dengan jumlah aras keabuan berupa 8. Selanjutnya, berdasarkan nilai hist[i]maka c[i] dihitung. Selanjutnya, a[i] dapat dihitung berdasar Persamaan 3.9. Dalam hal ini, setiap nilai
- 0 atau 1 pada citra akan diganti dengan 0;
- 3 akan diganti dengan 2;
- 4 tidak diganti (tetap);
- 5 diganti dengan 6;
- 6 dan 7 diganti dengan 7.
Gambar dibawah ini memperlihatkan keadaan sebelum dan sesudah ekualisasi histogram. Tampak bahwa di sekitar batang histogram yang paling tinggi terjadi perenggangan dan perbedaan dengan yang lebih rendah mengecil.
Gambar efek ekualisasi histoghram
Algoritma untuk melakukan penggantian nilai intensitas pada citra ditunjukkan berikut ini.
Berikut adalah contoh skrip yang digunakan untuk melakukan ekualisasi terhadap gambar gembala.png.
Img = imread('c:\Image\gembala.png');
[jum_baris, jum_kolom] = size(Img);
L = 256;
Histog = zeros(L, 1);
for baris=1 : jum_baris
for kolom=1 : jum_kolom
Histog(Img(baris, kolom)+1) = ...
Histog(Img(baris, kolom)+1) + 1;
end
end
alpha = (L-1) / (jum_baris * jum_kolom);
C(1) = alpha * Histog(1);
for i=1 : L-2
C(i+1) = C(i) + round(alpha * Histog(i+1));
end
for baris=1 : jum_baris
for kolom=1 : jum_kolom
Hasil(baris, kolom) = C(Img(baris, kolom));
end
end
Hasil = uint8(Hasil);
imshow(Hasil);
Akhir Akhir
Gambar dibawah ini menunjukkan contoh hasil citra berdasarkan pemrosesan di atas, yang memperlihatkan dengan jelas posisi peregangan dan pemadatan garis-garis histogram.
Gambar hasil ekualisasi histogram dan histogramnya
Perlu diketahui, pernyataan
Hasil = uint8(Hasil);
Pada ekualisasi.m diperlukan untuk membuat hasil bertipe uint8 mengingat
Hasil(baris, kolom) = C(Img(baris, kolom));
memberikan Hasil bertipe double. Hal itu disebabkan C memang bertipe double.
Untuk melanjutkan pada pembahasan selanjutnya klik link dibawah ini:
Baca Juga : Operasi Ketetanggaan Piksel
Tidak ada komentar:
Posting Komentar