Anda di halaman 1dari 7

[digital image processing]

June 24, 2012

DIGITAL IMAGE FILTERING IN FREQUENCY DOMAIN

Penapisan (filtering) pada sebuah citra digital dapat dilakukan baik dalam kawasan (domain) spasial (ruang) dan frekuensi. Mirip dengan isyarat 1 dimensi (1-D), penapisan dilakukan baik dalam kawasan waktu maupun frekuensi dengan operasi konvolusi merupakan

landasan/dasarnya. Hal tersebut dimungkinkan karena adanya hubungan dua arah pada transformasi Fourier, yakni: ( , ) ( , ) ( , ) ( , ) ( , )( , ) ( , ) ( , ) yang artinya, konvolusi dalam kawasan waktu menjadi perkalian biasa dalam kawasan frekuensi dan sebaliknya perkalian biasa dalam kawasan waktu menjadi konvolusi dalam kawasan frekuensi. Pada artikel lain telah dijelaskan bahwa sebuah citra digital pun mengandung frekuensi sehingga kita bisa mengoperasikan penapisan dalam kawasan frekuensi. Singkatnya frekuensi dalam citra mengandung arti: Frekuensi tinggi menjelaskan tentang nilai intensitas piksel bertetangga yang berubah dengan cepat di dalam citra (contohnya OCR yang isinya teks, teksture dan lainnya). Frekuensi rendah terkait dengan perubahan yang rendah pada nilai intensitas piksel yang bertetangga, juga terkait dengan skala objek yang besar di dalam citra tersebut. Misalnya ada 1 objek yang ukurannya nyaris sama dengan ukuran citra, kemudian ada juga citra termal yang semua pikselnya merupakan informasi suhu dan lainnya. Biasanya ketika kita menapis citra dalam kawasan spasial, operasi yang digunakan adalah konvolusi. Maka, dalam kawasan frekuensi kita menggunakan perkalian terkait dengan hubungan 2 arah transformasi Fourier di atas. Untuk mempersingkat artikel ini, kita langsung membahas prosedur untuk menapis citra dalam kawasan frekuensi: Import sebuah citra I(x,y) dengan ukuran AxB, lalu tentukan parameter padding P dan Q. Jika ada dua buah fungsi spasial f(x,y) dan h(x,y) yang masing-masing memiliki ukuran AxB dan CxD maka + + 1 1

Bila ukuran kedua fungsi tersebut sama, misalkan berukuran MxN, maka

[janshendry@gmail.com]

Page 1

[digital image processing]

June 24, 2012

2 1 Tapi banyak juga yang menuliskan dengan 2 2

Dengan menggunakan parameter P dan Q tersebut, lalu dibentuk sebuah matriks baru yang disebut sebagai padded matrix (Ip(x,y)). Disebut padded matrix karena matriks ini mengandung citra asli I(x,y) yang berukuran MxN dan sisanya diisi dengan angka 0 hingga memenuhi ukuran P dan Q.

Mengalikan padded matrix dengan (-1)x+y agar transformasinya berpusat di tengah, Ic(x,y).

Lalu hitung DFT (bisa menggunakan FFT) dari Ic(x,y) yang merupakan hasil dari langkah 3, I(u,v). Sehingga didapatkan hasil transformasi fourier yang berpusat di tengah matriks.

Buat sebuah filter yang berukuran P dan Q yang juga berpusat di tengah (P/2,Q/2), H(u,v). Tapi karena Matlab dimulai dengan indeks 1, maka pusatnya menjadi ( 2 + 1,
2

+ 1). Dengan demikian filter ini menjadi simetris. Filter yang digunakan harus terlebih

dahulu di ubah ke dalam kawasan frekuensi agar bisa dioperasikan berdasar aturan hubungan dua arah pada transformasi Fourier. Contoh filter yang biasa digunakan adalah low pass filter, gaussian. Pada contoh kasus yang akan diberikan di akhir, kita menggunakan gaussian sebagai smoothing low pass filter nya.

Lalu hitung: ( , )= ( , ) ( , )

dengan menggunakan perkalian titik (dot product). Untuk itulah kita mensyaratkan agar ukuran dari matriks filter ( , ) harus sama dengan matriks yang berisi komponen frekuensi citra ( , ).

Lalu ambil nilai real dari invers DFT (IFFT) dari hasil perkalian di atas, ( , ).

[janshendry@gmail.com]

Page 2

[digital image processing]

June 24, 2012

Nilai intensitas citra pada dasarnya merupakan nilai real. Sehingga ketika hasil operasi pada kawasan frekuensi lalu diinvers, maka nilai yang dihasilkan seharusnya adalah real. Tapi yang jadi masalah timbulnya kesalahan pembulatan (floating point errors) yang mengakibatkan masih adanya nilai imajiner. Sehingga perlu kita tegaskan bahwa kita membutuhkan hanya nilai real nya saja. Dengan demikian kita tambahkan perintah real.

Bilangan real tersebut lalu dikalikan dengan (-1)x+y untuk mengembalikan lokasi piksel ke tempat semula, Ifin.

Lalu kita crop (potong) citra sesuai dengan panjang dan lebarnya. Pemotongan dilakukan karena di awal kita telah menambahkan nilai 0 sehingga terbentuk padded matrix. Setelah pemotongan, maka citra hasil filter dalam kawasan frekuensi kita dapatkan.

Program dengan menggunakan Matlab yang mengikuti langkah-langkah di atas adalah Program utama
clear all; close all; clc; % langkah 1 filename='Fig0121(b)(blown_ic_hr).tif'; I=imread(filename); figure, imshow(I); title('Citra Original'); PQ=padded(size(I)); [x,y]=size(I); % langkah 2 Ip=zeros(PQ(1),PQ(2)); Ip(1:x,1:y)=I; Ip=double(Ip); % langkah 3 Ic=zeros(PQ(1),PQ(2)); for m=1:PQ(1) for n=1:PQ(2) Ic(m,n)=((-1)^(m+n))*Ip(m,n); end end % langkah 4 If=fft2(Ic);

[janshendry@gmail.com]

Page 3

[digital image processing]

June 24, 2012

% langkah 5 sig=25; H=lpfilter('gaussian',PQ(1),PQ(2),2*sig); H=fftshift(H); % langkah 6 G=H.*If; g=real(ifft2(G)); % langkah 7 Ifin=zeros(PQ(1),PQ(2)); for m=1:PQ(1) for n=1:PQ(2) Ifin(m,n)=((-1)^(m+n))*g(m,n); end end % langkah 8 Ifin=Ifin(1:x, 1:y); Ifin=uint8(Ifin); figure, imshow(Ifin); title('Hasil Filter');

Fungsi untuk membentuk padded matrix disimpan dengan nama file padded.m
function PQ=padded(AB,CD,param) if nargin==1 PQ=2*AB; elseif nargin==2 & ~ischar(CD) PQ=AB+CD-1; PQ=2*ceil(PQ/2); elseif nargin==2 m=max(AB); P=2^nextpow2(2*m); PQ=[P,P]; elseif nargin==3 m=max([AB CD]); P=2^nextpow2(2*m); PQ=[P,P]; end

Fungsi untuk filter disimpan dengan nama file lpfilter.m


function [H,D]=lpfilter(type,M,N,D0,n) [U,V]=dftuv(M,N); D=sqrt(U.^2 + V.^2); switch type case 'ideal' H=double(D<=D0); case 'btw' if nargin==4 n=1; end H=1./(1+(D./D0).^(2*n));

[janshendry@gmail.com]

Page 4

[digital image processing]

June 24, 2012

case 'gaussian' H=exp(-(D.^2)./(2*(D0^2))); end

Fungsi untuk menghasilkan komponen frekuensi filter disimpan dengan nama file
dftuv.m function [U,V]=dftuv(M,N) u=0:(M-1); v=0:(N-1); idx=find(u>M/2); u(idx)=u(idx)-M; idy=find(v>N/2); v(idy)=v(idy)-N; [V,U]=meshgrid(v,u);

hasil eksekusi dari program di atas

[janshendry@gmail.com]

Page 5

[digital image processing]

June 24, 2012

Atau anda juga bisa menggunakan program di bawah ini bila tidak mengikuti langkah di atas
clear all; close all; clc; % import data citra filename='Fig0121(b)(blown_ic_hr).tif'; I=imread(filename); PQ=padded(size(I)); Fp=fft2(I,PQ(1),PQ(2)); sig=10; Hp=lpfilter('gaussian',PQ(1),PQ(2),2*sig); Gp=Hp.*Fp; gp=real(ifft2(Gp)); gpc=gp(1:size(I,1), 1:size(I,2)); figure, imshow(gpc,[]);

fungsi-fungsi yang digunakan untuk program di atas sama dengan fungsi-fungsi yang sudah saya berikan untuk kasus pertama. Algoritmanya saya cuplik dari buku Gonzalez.

[janshendry@gmail.com]

Page 6

[digital image processing]

June 24, 2012

Referensi: Digital Image Processing Using Matlab by Rafael C. Gonzalez, Richard E. Woods & Steven L. Eddins.

@ thanks

[janshendry@gmail.com]

Page 7

Anda mungkin juga menyukai