3. Operasi Piksel (Pixel Operation) dan Histogram Pada Citra
3. Operasi Piksel (Pixel Operation) dan Histogram Pada Citra

Daftar Isi:

  • Operasi piksel
  • Menggunakan histogram citra
  • Meningkatkan kecerahan
  • Meregangkan kontras
  • Kombinasi kecerahan dan kontras
  • Membalik citra
  • Pemetaan nonlinear
  • Pemotongan aras keabuan
  • Ekualisasi histogram

Operasi Piksel

Pada pengolahan citra digital terdapat istilah operasi piksel atau kadang disebut operasi piksel-ke-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 jenis operasi yang dikenakan terhadap piksel f(y, x). Model operasi inilah yang akan dibahas di bab ini, termasuk pembahasan pengolahan citra berbasis histogram.


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 berjumlah sangat banyak.

Pada citra berskala keabuan, jumlah aras keabuan (biasa disimbolkan dengan L) sebanyak 256. 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 Matlab/Octave tidak ada indeks nol atau hist(0).

Contoh grafik histogram (kanan) dari suatu gambar

Fungsi histogram pada Matlab/Octave berdasarkan algoritma 3.1:

.

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


.

Perlu diketahui, (0:255) untuk membentuk nilai dari 0,1,2, dan seterusnya sampai dengan 255. Dengan kata lain, (0:255) membentuk larik 1 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:

diperoleh hasil seperti terlihat pada Gambar di bawah 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.

Untuk kemudahan dalam mengamati histogram, fungsi bawaan bernama imhist dapat dimanfaatkan. Contoh penggunaannya:

.

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. Pada gambar di bawah ini, I menyatakan histogram gabungan intensitas warna, R untuk komponen warna merah, G untuk komponen warna hijau, dan B untuk komponen warna biru.

.

Histogram tidak mencerminkan susunan posisi warna piksel di dalam citra. Oleh karena itu, histogram tidak dapat dipakai untuk menebak bentuk objek yang terkandung di dalam citra. Gambar 3.4 memperlihatkan empat buah citra yang memiliki histogram yang sama, tetapi bentuk masing-masing jauh berbeda. Dengan demikian, histogram tidak memberikan petunjuk apapun tentang bentuk yang terkandung dalam keempat citra tersebut.


Meningkatkan Kecerahan

Operasi dasar yang sering dilakukan pada citra adalah peningkatan kecerahan (brightness). Operasi dasar yang sering dilakukan pada citra adalah peningkatan kecerahan (brightness). 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 barutelah 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 di bawah ini. Citra tersebut dapat dicerahkan dengan memberikan perintah seperti berikut:

Citra Asal (Kiri) dan Citra Hasil (Kanan)

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

Perhatikan, intensitas warna hitam yang awalnya bernilai 0 (ditandai dengan garis tunggal yang menonjol di ujung kiri histogram) ikut tergeser. Jadi, warna hitam tidak lagi menjadi hitam (sekarang menjadi = 20) jika peningkatan kecerahan dilakukan dengan cara seperti di atas.

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.

.


Meregangkan Kontras

Kontras  dalam  suatu  citra  menyatakan  distribusi  warna terang  dan  warna gelap. Suatu  citra  berskala  keabuan  dikatakan  memiliki  kontras  rendah  apabila distribusi  warna  cenderung  pada  jangkauan  aras  keabuan  yang  sempit. Sebaliknya, citra mempunyai kontras tinggi  apabila jangkauan  aras  keabuan lebih 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  sering  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 jika α > 1 dan kontras akan turun jika α < 1. Sebelum  mempraktikkan  peregangan  kontras,  perhatikan  Gambar  di bawah ini. Gambar  tersebut  sengaja  dibuat  ekstrem  sempit  agar  memiliki  kontras  yang rendah.

Sekarang akan dicoba untuk meregangkan kontras dengan cara seperti berikut:

Kalau dilihat dari histogram pada Gambar di atas, 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.


Kombinasi Kecerahan dan Kontras

Operasi  peningkatan  kecerahan  dan  peregangan  kontras  dapat  dilakukan sekaligus  untuk  kepentingan  memperbaiki  citra

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 pada sub bab sebelumnya, rumus di atas dapat diterapkan. Pertama, distribusi histogram perlu digeser ke kiri. Selanjutnya, baru dikenakan peregangan kontras. Adapun implementasinya seperti berikut:

Gambar dan histogram input:

Gambar dan histogram output:


Membalik Citra

Apabila  anda pernah  melihat  film  hasil  kamera  analog,  gambar  yang  terekam  dalam film  tersebut  berkebalikan  dengan  foto  saat  dicetak,  yang  dikenal  sebagai  film negatif. Citra  seperti  ini  biasa  digunakan  pada  rekam  medis;  misalnya  hasil fotografi  rontgen. Hubungan  antara  citra  dan  negatifnya  untuk  yang  beraras keabuan dapat dinyatakan dengan rumus:

Hubungan di atas dapat digambarkan seperti secara grafis.

Grafik di atas menunjukkan bahwa jika f(y, x) bernilai 255, maka g(y, x) bernilai 0. Sebaliknya, jika f(y, x) bernilai 0, maka g(y, x) bernilai 255. Jika bit yang digunakan bukan 8 tetapi 4, persamaan untuk membalik citra berubah menjadi:

Contoh Program membalik citra:

Citra asli (kiri) dan citra negatif (kanan)

Pemetaan Nonlinear

Dalam pengolahan citra, terkadang diperlukan pemetaan intensitas piksel yang tidak menggunakan cara linear seperti yang telah dibahas, melainkan menggunakan pendekatan nonlinear. Kalau suatu citra berisi bagian yang cerah dan bagian yang gelap yang cukup ekstrem, akan lebih baik kalau digunakan cara 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. 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.

Program Pemetaan Nonlinear:

Penjelasan program:

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

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.


Pemotongan Aras Keabuan

Efek pemotongan (clipping) diperoleh bila dilakukan operasi seperti berikut:

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.

Berikut ini Fungsi Potong aras keabuan:

.

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

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:

Dengan cara seperti itu, hasil pemrosesan ditampilkan. Gambar di bawah ini menunjukkan contoh daun.png dalam keadaan asli dan hasil pemotongan pada dua tingkat ambang. Pada Gambar (b), sedikit noktah warna latar belakang masih muncul.

.

Histogram gambar di atas

.

Untuk melakukan percobaan dalam menentukan f1 dan f2, kekhasan histogram citra perlu dipertimbangkan. Nilai intensitas yang berposisi sebagai lembah dalam histogram pada Gambar di atas (sekitar 40 untuk f1 dan 160 untuk f2) berpotensi menjadi nilai ambang.


Ekualisasi Histogram

Ekualisasi Histogram --> Bertujuan untuk memperoleh histogram yang intensitasnya terdistribusi secara seragam pada citra. Namun pada praktiknya, 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 memiliki sedikit piksel.

Efeknya dapat digunakan untuk meningkatkan kontras secara menyeluruh. Perlu diketahui, ekualisasi histogram termasuk sebagai pemetaan nonlinear. Misalnya, histogram untuk setiap aras keabuan:

Dalam hal ini, i bernilai 0, 1, 2, 3 … , L-1, dengan L menyatakan jumlah aras keabuan. Akumulasi histogram untuk piksel yang mempunyai aras k dinyatakan dengan:

Selanjutnya, arus k akan diganti dengan a dengan ketentuan sbb: (N = Jumlah piksel pada citra).

Untuk memahami proses dalam ekualisasi histogram, lihatlah contoh pada Tabel berikut:

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 sampai 2 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 di bawah 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.

.

Algoritma untuk melakukan penggantian nilai intensitas pada citra ditunjukkan berikut ini.

Berikut adalah contoh skrip yang digunakan untuk melakukan ekualisasi terhadap gambar gembala.png.

.

% EKUALISASI Contoh untuk melakukan ekualisasi histogram

Img = imread('C:\Image\gembala.tif');
[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);
 

Gambar di bawah ini menunjukkan contoh hasil citra berdasarkan pemrosesan di atas, yang memperlihatkan dengan jelas posisi peregangan dan pemadatan garis-garis histogram.

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.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *