Guided Image Filter: Teori dan Implementasi

Table of Contents
Pemfilteran citra (image filtering) adalah salah satu operasi pengolahan citra yang digunakan untuk menekan frekuensi tinggi pada citra seperti memperhalus citra (smoothing), atau menekan frekuensi rendah seperti memperjelas atau mendeteksi tepi pada citra. Tujuan utama adanya proses pemfilteran citra adalah membuat citra menjadi tampak lebih baik, atau tampak lebih jelas untuk analisis. Oleh karenanya, pemfilteran citra disebut juga penyaringan citra. Agar pemfilteran citra menghasilkan citra yang diharapkan, beragam penelitian filtering citra bermunculan, salah satunya adalah metode Guided Image Filter yang dikembangkan oleh Kaiming He sekitar tahun 2010. Sehingga metode ini relatif baru. Walau begitu, performa dari metode ini patut diperhitungkan. Guided image filter terkenal handal untuk mengatasi image enhancement (peningkatan citra), image feathering (mengaburkan tepi fitur), image flash / no-flash denoising, image smoothing, hingga haze removal (penghilangan kabut pada citra).

Lebih jauh, guided image filtering adalah teknik penyaringan gambar yang mengambil dua input, yaitu input gambar yang perlu ditingkatkan dan koefisien filter untuk pengolahan gambar. Koefisien filter dalam metode Guided Image filter bersifat tidak tetap dan ditentukan menggunakan gambar pembimbing. Dalam hal ini, gambar pembimbing merupakan gambar masukan itu sendiri (Kusuma, 2015).
Gambar 1. Ilustrasi Proses Guided Image Filter (http://kaiminghe.com/)
Guided image filter diawali dengan mendefinisikan proses filtering translation-variant linier, yang melibatkan guidance image I, citra input filtering p, dan citra output q. Baik I dan p sudah ditentukan sebelumnya sesuai dengan aplikasinya, dan keduanya boleh identik. Output filtering pada pixel i dinyatakan sebagai pembebanan rata-rata:
Persaman 1
Dimana i dan j adalah piksel indeks. Filter kernel (Wij) merupakan fungsi dari guidance image I dan independen terhadap p. filter ini linier terhadap p. Contoh dari filter ini adalah joint bilateral filter.
Guided Image filter merupakan model local linear antara guidance I dan hasil filter output q. diasumsikan q meruapakan transformasi linier dari I pada window (Wk) dengan pusat piksel k :
Persamaan 2
Dimana (a_k, b_k) merupakan koefisien linier yang diasumsikan memiliki nilai konstan pada (Wk). Window yang digunakan adalah window persegi dengan radius r. model local linear ini memastikan bahwa q memiliki tepi hanya jika I memiliki tepi, karena :
Persamaan 3
Model ini sudah diakui sangat berguna pada citra super-resolution, citra matting dan dehazing. Dalam menentukan koefisien linier (a_k, b_k), diperlukan batasan dari filter keluaran q. Keluaran q dimodelkan sebagai input p untuk mengurangi beberapa komponen n yang tidak diinginkan seperti noise/texture :
Persamaan 4
Solusi yang dipakai dengan meminimize perbedaan antara q dan p dalam penerapan model linier. Khususnya, meminimalkan cost fuction berikut pada jendela (Wk) :
Persamaan 5
Persamaan diatas adalah model linear ridge regression dan solusi dari persamaan tersebut adalah:
Persamaan 6 dan Persamaan 7
Setelah menghitung (a_k, b_k) untuk semua jendela (Wk) pada citra, kemudian kita menghitung filtering output menggunakan persamaan :
Persamaan 8
Dengan catatan bahwa 
Persamaan 9
berdasarkan bentuk semetris dari box window, maka persamaan diatas dapat ditulis menjadi :
Persamaan 10
Persamaan 6,7, dan 10 merupakan difinisi dari Guided Image filter. Pseudocode dari persamaan tersebut terdapat dalam gambar 2. Pada algoritma ini, f_mean merupakan mean filter dengan radius window r. dengan abbreviations of correlation (corr), variance (var), dan covariance (cov) mengindikasikan makna intuitive dari variabel tersebut.

Gambar 2. Algoritma Guided Image Filter  (He, 2013)

















Melalui algoritma Guided image filter pada gambar 2, maka dapat dibentuk flowchart proses guided image filter pada gambar 3.
Gambar 3 Flowchart Guided Image Filter (Kusuma, 2015)
Flowchart dari proses filter menggunakan guided image filter dapat dijelaskan sebagai berikut:
  1. Langkah pertama dalam operasi guided image filtering adalah inisialisasi parameter. Parameter meliputi parameter regularisasi, epsilon (epsilon standar = 0.1), luas citra, lebar citra dan nilai ambang yang telah ditetapkan. Nilai ambang yang telah ditetapkan adalah 0.0003 = 0,1 * 0,003. Setelah inisialisasi, citra W putih terbentuk dengan ukuran yang sama dengan citra input.
  2. Baca citra uji, kita beri nama I, citra ini akan berfungsi sebagai citra guided.
  3. Buat p=I, dimana p merupakan citra filter yang juga dalam format greyscale.
  4. Hitung nilai mean dari I, p, I*p.
  5. Hitung nilai covariance dari (I, p) menggunakan formula: cov_Ip = mean_Ip – mean_I .* mean_p;
  6. Hitung nilai mean dari (I*I) dan gunakan nilainya untuk menghitung nilai covariance menggunakan formula: var_I = mean_II – mean_I .* mean_I.
  7. Kemudian hitung nilai dari a, b yang merupakan koefisien linier.
  8. Kemudian hitung nilai mean dari a dan b.
  9. Terakhir akan diperoleh hasil dari proses filter q dengan menggunakan mean dari a dan b dengan formula: q = mean_a .* I + mean_b;
Citra output yang dihasilkan akan tetap mempertahankan diskontinuitas dan tepi pada citra.

Berdasarkan algoritma dan flowchart guided image filter pada gambar 2 dan 3 maka implementasi metode guided image filter pada MATLAB (asal source code : http://kaiminghe.com/eccv10/index.html) adalah :

function q = guidedfilter(I, p, r, eps)
%   GUIDEDFILTER   O(1) time implementation of guided filter.
%
%   - guidance image: I (should be a gray-scale/single channel image)
%   - filtering input image: p (should be a gray-scale/single channel image)
%   - local window radius: r
%   - regularization parameter: eps

[hei, wid] = size(I);
N = boxfilter(ones(hei, wid), r); % the size of each local patch; N=(2r+1)^2 except for boundary pixels.

mean_I = boxfilter(I, r) ./ N;
mean_p = boxfilter(p, r) ./ N;
mean_Ip = boxfilter(I.*p, r) ./ N;
cov_Ip = mean_Ip - mean_I .* mean_p; % this is the covariance of (I, p) in each local patch.

mean_II = boxfilter(I.*I, r) ./ N;
var_I = mean_II - mean_I .* mean_I;

a = cov_Ip ./ (var_I + eps); % Eqn. (5) in the paper;
b = mean_p - a .* mean_I; % Eqn. (6) in the paper;

mean_a = boxfilter(a, r) ./ N;
mean_b = boxfilter(b, r) ./ N;

q = mean_a .* I + mean_b; % Eqn. (8) in the paper;
end

Berikut contoh implementasi metode Guided Image Filter untuk proses image enhancement, image feathering, image flash dan image smoothing.

Implementasi Guided Image Filter untuk Image Enhancement 

Masukan : citra bunga tulip

Gambar 4 citra bunga tulip
Proses Image  Enhacement menggunakan guided image filter : 
close all;

I = double(imread('.\img_enhancement\tulips.bmp')) / 255;
p = I;

r = 16;
eps = 0.1^2;

q = zeros(size(I));

q(:, :, 1) = guidedfilter(I(:, :, 1), p(:, :, 1), r, eps);
q(:, :, 2) = guidedfilter(I(:, :, 2), p(:, :, 2), r, eps);
q(:, :, 3) = guidedfilter(I(:, :, 3), p(:, :, 3), r, eps);

I_enhanced = (I - q) * 5 + q;

figure();
imshow([I, q, I_enhanced], [0, 1]);

Keluaran proses image enhacement :

Gambar 5. Keluaran proses image enhacement menggunakan guided image filter
Implementasi Guided Image Filter untuk Image Feathering

Masukan : citra Toy (mainan)

Gambar 6. Citra toy (mainan)
Proses image feathering menggunakan Guided Image Filter  :
close all;

I = double(imread('.\img_feathering\toy.bmp')) / 255;
p = double(rgb2gray(imread('.\img_feathering\toy-mask.bmp'))) / 255;

r = 60;
eps = 10^-6;

q = guidedfilter_color(I, p, r, eps);

figure();
imshow([I, repmat(p, [1, 1, 3]), repmat(q, [1, 1, 3])], [0, 1]);

Keluaran proses image feathering :

Gambar 7. keluaran proses image feathering menggunakan guided image filter
Implementasi Guided Image Filter untuk Image Flash 

Masukan 1 : Citra Guci Flash (sebagai guided image)

Gambar 8. Citra guci flash
Masukan 2 : Citra Guci No Flash

Gambar 9. citra guci (no flash)
Proses image flash menggunakan guided image filter
close all;

I = double(imread('.\img_flash\cave-flash.bmp')) / 255;
p = double(imread('.\img_flash\cave-noflash.bmp')) / 255;

r = 8;
eps = 0.02^2;

q = zeros(size(I));

q(:, :, 1) = guidedfilter(I(:, :, 1), p(:, :, 1), r, eps);
q(:, :, 2) = guidedfilter(I(:, :, 2), p(:, :, 2), r, eps);
q(:, :, 3) = guidedfilter(I(:, :, 3), p(:, :, 3), r, eps);

figure();
imshow([I, p, q], [0, 1]);

Keluaran proses image flash
Gambar 10. hasil proses image flash menggunakan guided image filter
Implementasi Guided Image Filter untuk Image Smoothing

Masukan : Citra kucing

Gambar 11. citra kucing
Proses image smooting mengguanakan guided image filter 

close all;

I = double(imread('.\img_smoothing\cat.bmp')) / 255;
p = I;
r = 4; % try r=2, 4, or 8
eps = 0.2^2; % try eps=0.1^2, 0.2^2, 0.4^2

q = guidedfilter(I, p, r, eps);

figure();
imshow([I, q], [0, 1]);

Hasil Image smoothing menggunakan metode guided image filter

Gambar 11. keluaran image smoothing menggunakan guided image filter
Demikian penjelasan ringkas mengenai teori dan implementasi Guided image filter. Semoga bermanfaat sebagai referensi bahan penelitian.

Referensi
  • Agus Tommy Adi Prawira Kusuma. 2015. Pra Pengolahan Citra X-Ray Thorax Pada Segmentasi Paru-Paru dan Jantung Menggunakan Anisotropic Diffusion dan Guided Image Filter. Tesis, Program Magister, Program Studi Teknik Elektro, Program Pascasarjana, Universitas udayana, Denpasar
  • He, Kaiming. 2013. Guided Image Filter. IEEE TRANSACTIONS ON PATTERN ANALYSIS AND MACHINE INTELLIGENCE, VOL. 35. 
  • He, Kaiming. Guided Image Filter. http://kaiminghe.com/eccv10/index.html 

Post a Comment