Professional Documents
Culture Documents
Filtering adalah suatu proses dimana diambil sebagian sinyal dari frekwensi
tertentu, dan membuang sinyal pada frekwensi yang lain. Filtering pada citra juga
menggunakan prinsip yang sama, yaitu mengambil fungsi citra pada frekwensi-
frekwensi tertentu dan membuang fungsi citra pada frekwensi-frekwensi tertentu.
Berdasarkan sifat transformasi fourier dari suatu citra dan format koordinat
frekwensi seperti gambar 8.1. berikut ini:
Low freq
freq
1 m2
freq
m1 High freq
Dari sifat-sifat citra pada bidang frekwensi, maka prinsip-prinsip filtering dapat
dikembangkan adalah sebagai berikut:
(1) Bila ingin mempertahankan gradiasi atau banyaknya level warna pada suatu citra,
maka yang dipertahankan adalah frekwensi rendah dan frekwensi tinggi dapat
dibuang atau dinamakan dengan Low Pass Filter. Hal ini banyak digunakan untuk
reduksi noise dan proses blur.
(2) Bila ingin mendapatkan threshold atau citra biner yang menunjukkan bentuk suatu
gambar maka frekwensi tinggi dipertahankan dan frekwensi rendah dibuang atau
dinamakan dengan High Pass Filter. Hal ini banyak digunakan untuk menentukan
garis tepi (edge) atau sketsa dari citra.
(3) Bila ingin mempertahankan gradiasi dan bentuk, dengan tetap mengurangi banyaknya
bidang frekwensi (bandwidth) dan membuang sinyal yang tidak perlu maka frekwensi
rendah dan frekwensi tinggi dipertahankan, sedangkan frekwensi tengahan dibuang
atau dinamakan dengan Band Stop Filter. Teknik yang dikembangkan dengan
menggunakan Wavelet Transform yang banyak digunakan untuk kompresi, restorasi
dan denoising.
F(t) F()
Konvolusi adalah perkalian total dari dua buah fungsi f dan f yang didefinisikan
dengan:
T
f *h f (t )h(T t )dt
0
f *h f ( x, y)h(T
0 0
x x, T y y )dxdy
……
……
Gambar 8.5. Perhitungan konvolusi secara grafis
Filter pada citra pada bidang spasial dapat dilakukan dengan menggunakan
konvolusi dari citra (I) dan fungsi filternya (H), dan dituliskan dengan:
I’ = H I
Dan dirumuskan dengan:
n m
I ' ( x, y ) h(i, j ) I ( x i, y
i n j m
j)
dimana :
m,n adalah ukuran dari fungsi filter dalam matrik
Sebagai contoh dibuat program Low Pass Filter dengan fungsi filter rata-rata
sebagai berikut:
19 1
9
1
9
H 19 1
9
1
9
19 1
9
1
9
Hasil dari program Low Pass Filter, ini untuk beberapa macam gambar adalah
sebagai berikut:
Sebagai contoh dibuat program Low Pass Filter dengan fungsi filter rata-rata
sebagai berikut:
0 1 0
H 1 4 1
0 1 0
Hasil dari program High Pass Filter, ini untuk beberapa macam gambar adalah
sebagai berikut:
Gambar 8.7 Hasil HPF untuk gambar kucing dan komputer
Dari kedua hasil di atas dapat dilihat bahwa High Pass Filter menyebabkan
gambar hanya diambil atau ditampilkan pada daerah-daerah yang berbeda
misalkan pada tepi-tepi gambar. Pada gambar kucing perbedaan yang muncul
tidak begitu jelas karena gambarnya mempunyai gradiasi yang tinggi (halus),
sedangkan pada gambar komputer tepi-tepi gambar tampak jelas karena
perbedaannya tinggi.
TUGAS PENDAHULUAN :
(4) Tuliskan apa ciri-ciri Low Pass Filter pada citra, dan bagaimana hasilnya
(5) Tuliskan apa ciri-ciri High Pass Filter pada citra, dan bagaimana hasilnya
PERCOBAAN :
Konvolusi untuk Filter pada Citra
Disain GUI ;
a)
Member Variabel :
b)
void CFilteringDlg::OnButton2()
{
int i,j,k,red,green,blue,resultr,resultg,resultb;
long int warna,mat[3][3];
float h[3][3],hr,hg,hb;
CDC* pDC = m_pic2.GetDC();//
CDC dcMem;
CRect rect;//
BITMAP bm;//
m_pic2.GetClientRect(rect);//
m_bmpBitmap.GetBitmap(&bm);//
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);
int nh=3; // Menyatakan ukuran filter
// Penentuan kernel filter
for(i=0;i<nh;i++)
for(j=0;j<nh;j++)
h[i][j]=(float)1/9;
for(j=0;j<bm.bmHeight;j++)
for(k=0;k<bm.bmWidth;k++)
{
mat[0][0]=dcMem.GetPixel(k-1,j-1);
mat[0][1]=dcMem.GetPixel(k,j-1);
mat[0][2]=dcMem.GetPixel(k+1,j-1);
mat[1][0]=dcMem.GetPixel(k-1,j);
mat[1][1]=dcMem.GetPixel(k,j);
mat[1][2]=dcMem.GetPixel(k+1,j);
mat[2][0]=dcMem.GetPixel(k-1,j+1);
mat[2][1]=dcMem.GetPixel(k,j+1);
mat[2][2]=dcMem.GetPixel(k+1,j+1);
hr=0;hg=0;hb=0;
//proses konvolusi
for(int u=0;u<nh;u++)
for(int v=0;v<nh;v++){
WarnaToRGB(mat[u][v],&red,&green,&blue);
hr+=(float)red*h[u][v];
hg+=(float)green*h[u][v];
hb+=(float)blue*h[u][v];
}
resultr=(int)hr;
resultg=(int)hg;
resultb=(int)hb;
if(resultr>255)resultr=255;
if(resultg>255)resultg=255;
if(resultb>255)resultb=255;
warna=RGBToWarna(resultr,resultg,resultb);
dcMem.SetPixel(k,j,warna);
}
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,
bm.bmWidth,bm.bmHeight,SRCCOPY);//
}
Output :
Filter Transparansi :
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem1,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
m_bmpBitmap2.GetBitmap(&bm2);//
dcMem2.CreateCompatibleDC(pDC2);
dcMem2.SelectObject(&m_bmpBitmap2);
for(j=0;j<bm.bmHeight;j++)
{
for(k=0;k<bm2.bmWidth;k++)
{
w=dcMem1.GetPixel(j,k);
WarnaToRGB(w,&r1,&g1,&b1);
w=dcMem2.GetPixel(j,k);
WarnaToRGB(w,&r2,&g2,&b2);
r=(0.5*r1)+(0.5*r2);
g=(0.5*g1)+(0.5*g2);
b=(0.5*b1)+(0.5*b2);
w=RGBToWarna(r,g,b);
dcMem1.SetPixel(j,k,w);
}
}
pDC->StretchBlt (0,0,rect.Width() ,rect.Height(),&dcMem1,0,0,
bm.bmWidth, bm.bmHeight, SRCCOPY);
Gambar 8.11. Output Filter Transparan
LAPORAN RESMI :