Konvolusi pada Citra
Konvolusi citra adalah teknik untuk menghaluskan suatu citra atau memperjelas citra dengan menggantikan nilai piksel dengan sejumlah nilai piksel yang sesuai atau berdekatan dengan piksel aslinya. Tetapi dengan adanya konvolusi, ukuran dari citra tetap sama, tidak berubah.
Proses Konvolusi
Pada pengolahan citra digital proses konvolusi merupakan perkalian konvolusi antara matrik citra asal dengan matrik tapis atau tapis atau mask.
Operasi konvolusi
sebagai fungsi diskrit 2 dimensi dapat didefinisikan dengan persamaan berikut
ini.
Konvolusi 2D inilah
yang banyak digunakan pengolahan citra digital, sayangnya rumus diatas sangat
sulit diimplementasikan menggunakan komputer, karena pada dasarnya komputer
hanya bisa melakukan perhitungan pada data yang diskrit sehingga tidak dapat
digunakan untuk menghitung intregral di atas.
Konvolusi pada fungsi diskrit f(n,m) dan h(n,m) didefinisikan dengan:
Ilustrasi Proses Konvolusi
Ilustrasi proses
konvolusi dari Persamaan di atas ditunjukkan pada gambar di bawah :
Operasi konvolusi
dilakukan dengan menggeser mask konvolusi pixel per pixel mulai dari posisi
kiri atas sampai posisi kanan bawah yang sering disebut dengan sliding window.
Hasil dari proses konvolusi disimpan pada matrik yang baru dengan posisi
koordinat yang sama.
Manfaat dan
Tujuan Konvolusi pada Citra
Perbaikan kualitas
citra (image enhancment)
Menghilangkan derau
(noise)
Mengurangi kerutan
(mencong/serong)
Penghalusan /
pembulatan citra
Jenis-Jenis Filter dalam Konvolusi Citra
A. Filter
Median
Dalam
merancang filter median, ada beberapa hal yang harus dipersiapkan terlebih
dahulu.
-
Siapkan matriks yang akan diolah.
Bila matriks berisi citra, maka jadikan citra tersebut menjadi citra grayscale atau abu-abu agar yang didapat
hanya 1 matriks intensitas saja.
-
Siapkan matriks yang NOL yang
ukurannya sama persis dengan citra yang akan diolah. Matriks ini nantinya akan
berisi nilai-nilai intensitas dari citra asli yang sudah diolah terlebih
dahulu.
Langkah
selanjutnya akan ditunjukkan pada pembahasan contoh berikut ini.
|
3 |
5 |
7 |
1 |
3 |
9 |
5 |
3 |
2 |
6 |
8 |
|
9 |
4 |
8 |
1 |
6 |
8 |
3 |
4 |
2 |
0 |
6 |
|
8 |
1 |
7 |
7 |
8 |
9 |
5 |
4 |
7 |
6 |
3 |
|
6 |
2 |
5 |
1 |
2 |
6 |
4 |
9 |
6 |
5 |
5 |
|
8 |
3 |
9 |
7 |
9 |
8 |
4 |
5 |
3 |
1 |
6 |
|
7 |
4 |
7 |
9 |
4 |
5 |
3 |
7 |
6 |
1 |
7 |
|
4 |
5 |
0 |
8 |
5 |
6 |
7 |
3 |
1 |
2 |
8 |
|
3 |
6 |
2 |
6 |
7 |
9 |
0 |
0 |
5 |
4 |
2 |
|
2 |
3 |
1 |
7 |
0 |
5 |
4 |
3 |
7 |
1 |
8 |
Table 1 Matriks Original
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Table 2 Matriks NOL
Langkah-langkahnya
adalah sebagai berikut:
- Misalkan ukuran jendela filter median yang akan digunakan berukuran 3x3. Operasi
filter
akan dimulai dari piksel kiri-atas.
Figure 1 Matriks NOL sebagai hasil
filter
Tampak
bahwa matriks nol akan berubah elemen nya menjadi nilai median dari matriks
original sesuai
dengan ukuran dari bagian matriks original yang
tercakupi dengan jendela filter. Ada yang sedikit membingungkan memang, mengapa
elemen-elemen paling tepi dari matriks nol sama dengan elemen-elemen paling
tepi dari matriks original. Karena kita tidak akan memproses bagian pinggir
tersebut, jelas tidak mungkin untuk diproses.
Perlu diingat bahwa proses filter
itu diperlakukan untuk semua piksel. Jadi ketika proses filter pertama di atas
selesai, maka proses berikutnya berlangsung pada piksel yang tepat
disebelahnya. Bila filter telah mencapai kolom terakhir dalam satu baris, maka
filter akan turun satu piksel dan dimulai dari sebelah kiri. Demikianlah semua
proses tersebut terjadi hingga semua nilai 0 pada matriks NOL berubah menjadi
nilai median atau titik tengah dari matriks original yang sesuai dengan ukuran
dari jendela filter.
Setelah
beberapa iterasi, maka akan dihasilkan bentuk akhir dari matriks hasil filter
seperti di bawah ini:
|
3 |
5 |
7 |
1 |
3 |
9 |
5 |
3 |
2 |
6 |
8 |
|
9 |
7 |
5 |
7 |
7 |
6 |
5 |
4 |
4 |
6 |
6 |
|
8 |
6 |
4 |
6 |
6 |
6 |
5 |
4 |
5 |
5 |
3 |
|
6 |
6 |
5 |
7 |
7 |
6 |
5 |
5 |
5 |
5 |
5 |
|
8 |
6 |
5 |
7 |
6 |
4 |
5 |
5 |
5 |
5 |
6 |
|
7 |
5 |
7 |
7 |
7 |
5 |
5 |
4 |
3 |
3 |
7 |
|
4 |
4 |
6 |
6 |
6 |
5 |
5 |
3 |
3 |
4 |
8 |
|
3 |
3 |
5 |
5 |
6 |
5 |
4 |
3 |
3 |
4 |
2 |
|
2 |
3 |
1 |
7 |
0 |
5 |
4 |
3 |
7 |
1 |
8 |
B. Filter
Mean
Sesuai dengan namanya, filter ini akan mengganti
sebuah piksel dengan reratanya. Langkah-langkahnya sama persis dengan filter
median, hanya saja pada filter ini operasi yang digunakan adalah rerata bukan
median.
Anda bisa mencoba sendiri untuk menghitungnya, untuk perbandingan maka
hasil dari operasi rerata atau mean terhadap matriks original yang telah
disebutkan sebelumnya adalah:
|
3 |
5 |
7 |
1 |
3 |
9 |
5 |
3 |
2 |
6 |
8 |
|
9 |
6 |
5 |
5 |
6 |
6 |
6 |
4 |
4 |
4 |
6 |
|
8 |
6 |
4 |
5 |
5 |
6 |
6 |
5 |
5 |
4 |
3 |
|
6 |
5 |
5 |
6 |
6 |
6 |
6 |
5 |
5 |
5 |
5 |
|
8 |
6 |
5 |
6 |
6 |
5 |
6 |
5 |
5 |
4 |
6 |
|
7 |
5 |
6 |
6 |
7 |
6 |
5 |
4 |
3 |
4 |
7 |
|
4 |
4 |
5 |
5 |
7 |
5 |
4 |
4 |
3 |
4 |
8 |
|
3 |
3 |
4 |
4 |
6 |
5 |
4 |
3 |
3 |
4 |
2 |
|
2 |
3 |
1 |
7 |
0 |
5 |
4 |
3 |
7 |
1 |
8 |
C. Filter
Max
Filter max berarti menggantikan piksel dengan nilai
tertinggi dari suatu deret yang terbentuk dari matriks yang sesuai dengan
ukuran dari jendela filter. Langkah-langkah lainnya sama dengan filter median.
Untuk perbandingan buat anda, maka hasil dari filter pada matriks
original yang telah disebutkan sebelumnya adalah:
|
3 |
5 |
7 |
1 |
3 |
9 |
5 |
3 |
2 |
6 |
8 |
|
9 |
9 |
8 |
8 |
9 |
9 |
9 |
7 |
7 |
8 |
6 |
|
8 |
9 |
8 |
8 |
9 |
9 |
9 |
9 |
9 |
7 |
3 |
|
6 |
9 |
9 |
9 |
9 |
9 |
9 |
9 |
9 |
7 |
5 |
|
8 |
9 |
9 |
9 |
9 |
9 |
9 |
9 |
9 |
7 |
6 |
|
7 |
9 |
9 |
9 |
9 |
9 |
8 |
7 |
7 |
8 |
7 |
|
4 |
7 |
9 |
9 |
9 |
9 |
9 |
7 |
7 |
8 |
8 |
|
3 |
6 |
8 |
8 |
9 |
9 |
9 |
7 |
7 |
8 |
2 |
|
2 |
3 |
1 |
7 |
0 |
5 |
4 |
3 |
7 |
1 |
8 |
D. Filter
Min
Filter ini merupakan kebalikan dari filter max.
Artinya bahwa piksel akan digantikan dengan nilai min (minimal) dari sebuah
deret dari matriks yang berukuran sesuai dengan jendela matriks filter.
Untuk lebih jelas, perhatikan contoh berikut sebagai perbandingan.
Perhatikan bahwa matriks originalnya masih sama dengan matriks yang tersebut
sebelumnya.
|
3 |
5 |
7 |
1 |
3 |
9 |
5 |
3 |
2 |
6 |
8 |
|
9 |
1 |
1 |
1 |
1 |
3 |
3 |
2 |
0 |
0 |
6 |
|
8 |
1 |
1 |
1 |
1 |
2 |
3 |
2 |
0 |
0 |
3 |
|
6 |
1 |
1 |
1 |
1 |
2 |
4 |
3 |
1 |
1 |
5 |
|
8 |
2 |
1 |
1 |
1 |
2 |
3 |
3 |
1 |
1 |
6 |
|
7 |
0 |
0 |
0 |
4 |
3 |
3 |
1 |
1 |
1 |
7 |
|
4 |
0 |
0 |
0 |
4 |
0 |
0 |
0 |
0 |
1 |
8 |
|
3 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
2 |
|
2 |
3 |
1 |
7 |
0 |
5 |
4 |
3 |
7 |
1 |
8 |
Implementasi filter pada citra digital
Filter-filter tersebut dapat diimplementasikan
dalam citra digital. Tujuannya tentu sangat beragam. Penggunaannya memang untuk
tujuan-tujuan tertentu tergantung dengan permasalahan yang sedang ditangani.
Misalnya bila ingin menghaluskan citra atau biasa disebut sebagai image smoothing dan untuk menghapus derau atau noise eliminating.
Dalam program ini, kita akan mencoba untuk mengolah
citra digital menggunakan filter. Hasilnya bisa berupa penghalusan dan bisa
juga berupa penghilangan derau.
Untuk contoh berikut ini adalah proses untuk
menghaluskan citra. Langkah-langkah dalam membuat program matlab untuk mengolah
citra digital menggunakan filter-filter di atas adalah:
PS: this program originally developed by me.
Membaca data dari citra digital.
I=imread('sepatuku','jpg');
imshow(I); title('Citra Asli');
Menjadikan citra menjadi grayscale lalu mengubahnya ke dalam double
precision.
I=rgb2gray(I);
I=double(I);
Membuat matriks dummy atau buffer atau
matriks nol.
[x,y]=size(I);
dummy=zeros(x,y);
Membuat matriks filter dalam hal ini jendelanya berukuran 3x3, anda bisa
mengubahnya.
m=3; n=3;
a=ones(m,n);
Melakukan operasi penapisan atau filter terhadap
matriks original.
Gantilah perintah MEDIAN menjadi MEAN, MAX, MIN sesuai dengan keinginan
anda. Khusus untuk MEAN, pakailah pembulatan ROUND.
for ii=1:x-(m-1) for jj=1:y-(n-1)
aa=a.*I(ii:m+ii-1,jj:n+jj-1);
b=reshape(aa,1,m*n); b=sort(b);
b=median(b);
dummy(ii+1,jj+1)=b;
end
end
Menyusun kembali matriks akhir setelah di filter.
for ii=2:x-1
for jj=1:y
if
jj==1
n=I(ii,jj);
elseif
jj==y
n=I(ii,jj);
else
n=0;
end
mmed(ii-1,jj)=n;
end
end
mmed=[I(1,:);mmed;I(x,:)];
mmed=mmed+dummy;
Menampilkan citra hasil filter smoothing.
figure,
imshow(mmed,[0 255]); title('Citra Hasil Filter');
Hasil eksekusi program untuk ke empat filter tersebut adalah:
*** min
Perlu diketahui untuk filter min, maka bisa saja
terjadi pada citra hasil tapis akan timbul warna gelap yang berbentuk
blok-blok, sedangkan untuk filter max akan menyebabkan warna terang yang
berbentuk blok-blok. Lokasi nya juga acak.
Sebagai contoh
aplikasi dari filter
median untuk menapis
citra yang terkena
derau salt and
pepper.
Perhatikan code berikut ini:
% membaca citra
I=imread('sepatuku','jpg');
imshow(I); title('Citra Asli');
I=imnoise(I,'salt & pepper',0.02);
figure, imshow(I); title('Citra Dengan Noise S&P'); I=rgb2gray(I);
%%
%% membuat matriks dummy
I=double(I);
[x,y]=size(I);
dummy=zeros(x,y);
m=3; n=3;
a=ones(m,n);
%%
%%
filter
for ii=1:x-(m-1)
for jj=1:y-(n-1)
aa=a.*I(ii:m+ii-1,jj:n+jj-1);
b=reshape(aa,1,m*n);
b=sort(b);
b=min(b);
dummy(ii+1,jj+1)=b;
end
end
%%
%% matriks akhir setelah di filter for ii=2:x-1
for jj=1:y
if jj==1
n=I(ii,jj);
elseif jj==y
n=I(ii,jj);
else
n=0;
end
mmed(ii-1,jj)=n;
end
end
mmed=[I(1,:);mmed;I(x,:)];
mmed=mmed+dummy;
%%
%% menampilkan citra grayscale dengan range 0-255
figure,
imshow(mmed,[0 255]); title('Citra Hasil Filter');
%%
Hasil
eksekusinya adalah:
*** citra
kena derau salt and pepper
*** citra
hasil tapis median terhadap citra berderau
Sumber:
https://schistro.wordpress.com/2016/10/24/pengertian-konvolusi-pada-citra/
https://hwsmartsolution.com/blog/2015/07/23/macam-macam-filter-imagecitra-pada-matlab/









Komentar
Posting Komentar