Anda di halaman 1dari 17

9 November 2023 – PEMROSESAN CITRA DIGITAL

LEMBAR PRAKTIKUM 8: IMAGE


FILTERING DAN KONVULASI

NIM : 2210131210018
NAMA : Taufik Raihandani

TUJUAN PRAKTIKUM:
1. Mahasiswa mampu memahami dan menerapkan Image Filtering secara manual.

AKTIVITAS PRAKTIKUM
Berikut adalah data piksel gambar yang akan digunakan:

125 71 69 77 79
168 130 69 54 76
155 162 143 68 47
142 155 155 157 80
130 140 149 161 161

Dari data piksel di atas, lakukan filtering pada data tersebut. Filter yang digunakan yaitu:
- Lowpass Filtering

1/9 1/9 1/9

1/9 1/9 1/9

1/9 1/9 1/9

- Highpass Filtering

-1 -1 -1

-1 8 -1

-1 -1 -1
- Highboost Filtering

0 -1 0

-1 4 -1

0 -1 0

- Bandpass Filtering

0 -1 0

-1 5 -1

0 -1 0

- Median Filtering
- Gaussian Blur

1/16 1/8 1/16

1/8 1/4 1/8

1/16 1/8 1/16

- Gaussian Basic

1 2 1

2 4 2

1 2 1

Buatlah function-function yang akan menerapkan tiap filter tersebut. Function dibuat dari
awal menggunakan perulangan, tanpa menggunakan fungsi filtering bawaan dari Octave.
Source code dibawah ini :
inputGambar = [125 71 69 77 79;

168 130 69 54 76;

155 162 143 68 47;

142 155 155 157 80;

130 140 149 161 161;

];

2
function [HasilHighPass, HasilLowPass, HasilboundPass,
HasilHighboost, HasilGausian, HasilG_basic, HasilMedian] =
filterGambar(Gambar)

MaskHighPass = [-1 -1 -1;

-1 8 -1;

-1 -1 -1];

MaskLowPass = ones(3, 3) / 9; #Kernel untuk low-pass filtering

boundpass = [0 -1 0;

-1 5 -1;

0 -1 0];

highboost = [0 -1 0;

-1 4 -1;

0 -1 0];

Gaussian = [1/16 1/8 1/16;

1/8 1/4 1/8;

1/16 1/8 1/16]; #Kernel untuk gaussian blur

Gbasic = [1 2 1;

2 4 2;

1 2 1]; #Kernel untuk gaussian basic

[N, M] = size(Gambar);

#7 Variabel untuk menyimpan hasil dari kernel gambar (inisiasi


dengan N dan M)

HasilHighPass = zeros(N, M);

HasilLowPass = zeros(N, M);

HasilboundPass = zeros(N, M);

HasilHighboost = zeros(N,M);

3
HasilGausian = zeros(N,M);

HasilG_basic = zeros(N,M);

HasilMedian = zeros(N, M);

for i = 2:N-1

for j = 2:M-1

hasilHighPass = sum(sum(Gambar(i-1:i+1, j-1:j+1) .*


MaskHighPass));

HasilHighPass(i, j) = max(round(hasilHighPass), 0);

hasilLowPass = sum(sum(Gambar(i-1:i+1, j-1:j+1) .*


MaskLowPass));

HasilLowPass(i, j) = round(hasilLowPass);

hasilboundPass = sum(sum(Gambar(i-1:i+1, j-1:j+1) .*


boundpass));

HasilboundPass(i,j) = min(max(round(hasilboundPass), 0),


255);

hasilHighboost = sum(sum(Gambar(i-1:i+1, j-1:j+1) .*


highboost));

HasilHighboost(i, j) = max(round(hasilHighboost), 0);

hasilGau = sum(sum(Gambar(i-1:i+1, j-1:j+1) .*


Gaussian));

HasilGausian(i, j) = round(hasilGau);

hasilG_basic = sum(sum(Gambar(i-1:i+1, j-1:j+1) .*


Gbasic));

HasilG_basic(i, j) = min(max(round(hasilG_basic),
0),255) ;

4
#Median Filter

data = [Gambar(i-1, j-1), Gambar(i-1, j), Gambar(i-1,


j+1), ...

Gambar(i, j-1), Gambar(i, j), Gambar(i, j+1),


...

Gambar(i+1, j-1), Gambar(i+1, j), Gambar(i+1,


j+1)];

#Sorting mengurutkan data dari terkecil ke terbesar


kemudian dihasilkan dengan mencari nilai tengahnya

for k = 1 : 8

for l = k + 1 : 9

if data(k) > data(l)

temp = data(k);

data(k) = data(l);

data(l) = temp;

end

end

end

#nilai median yang dihasilkan adalah mengambil nilai


tengahnya (data(5))

HasilMedian(i, j) = data(5);

end

end

end

[HasilHighPass, HasilLowPass, HasilboundPass, HasilHighboost,


HasilGausian, HasilG_basic, HasilMedian] =
filterGambar(inputGambar);

5
disp("Matrix Gambar setelah high-pass filtering:");

disp(HasilHighPass);

disp("Matrix Gambar setelah low-pass filtering:");

disp(HasilLowPass);

disp("Matrix Gambar setelah bound-pass filtering:");

disp(HasilboundPass);

disp("Matrix Gambar setelah high boost filtering:");

disp(HasilHighboost);

disp("Matrix Gambar setelah Gaussian filtering:");

disp(HasilGausian);

disp("Matrix Gambar setelah Gaussian basic filtering:");

disp(HasilG_basic)

disp("Matrix Median Filtering:");

disp(HasilMedian)

6
Lalu, berikut adalah output tampilan menggunakan disp(variabel) nya di command
window

Untuk tepinya (edging), pilih salah satu cara berikut:


- Dihitamkan (nilai piksel menjadi 0)
- Nilai tepi sama seperti awal
- Diperbesar

7
Untuk 3 cara/metode diatas, saya memilih untuk menjadikan padding/nilai tepinya
menjadi 0 (dihitamkan) pada seluruh padding
Pada hasil praktikum, jelaskan algoritma dari kode yang dibuat dan tampilkan
perbandingan tiap hasil filtering!
Berikut adalah algoritma dari kode yang dibuat yang bukan merupakan fungsi dari octave ,
kemudian disusul dengan perbandingan tiap hasil filtering
Filtering yang dimaksud merupakan :
1. Lowpass filtering
Kernel lowpass filtering pada umumnya sebelum pengoperasian / 9:

1 1 1

1 1 1

1 1 1
Hasil data piksel gambar dikalikan dengan kernel lowpass diatas,
kemudian hasilnya dijumlahkan lalu dibagi 9
Contoh sederhana nya :
Data piksel gambar 5x5:

125 71 69 77 79

168 130 69 54 76

155 162 143 68 47

142 155 155 157 80

130 140 149 161 161


Data piksel gambar yang diambil 3x3 dari matriks keseluruhan 5x5:

125 71 69

168 130 69

155 162 143

a. Dijumlahkan semua angka piksel yang ada didalam matriks 3x3


tersebut
b. Penjumlahan semua angka tersebut mendapatkan nilai = 1092
c. Setelah mendapatkan nilai dari piksel berdimensi 3x3 tersebut,
lalu kita bagikan dengan 9

8
d. Hasilnya merupakan bilangan desimal 121,3 . Karena
pembulatannya kebawah, maka kita bulatkan menjadi 121
Berikut pembuktiannya pada coding octave

e. Setelah itu, lakukan hal yang sama pada citra dimensi 3x3 bergeser
kekanan

125 71 69 77 79

168 130 69 54 76

155 162 143 68 47

142 155 155 157 80

130 140 149 161 161

71 69 77

130 69 54

162 143 68
(data piksel diatas (3x3) dijumlahkan semua lalu dibagi 9) =843/9 = 93,6 ~=
94
f. Setelah kita dapatkan nilai tersebut, geser lagi untuk mendapatkan
nilai terakhir pada baris pertama
g. Lakukan hal yang sama sedemikian rupa hingga membentuk data
piksel lowpass filtering dengan dimensi 3x3
h. Untuk metode padding yang digunakan adalah menjadikan nilai tepi
menjadi 0 semua seperti sisipan tabel dibawah ini :

0 0 0 0 0

0 121 94 76 0

0 142 121 94 0

0 148 143 125 0

0 0 0 0 0

9
Keterangan : Untuk nilai data pikesl 0 di citra / gambar merupakan
berwarna hitam Highpass filtering
(saya harap contoh tadi mewakilkan semua filtering pada
penggunaan padding 0)
2. Highpass filtering
Kernel Highpass filtering

-1 -1 -1

-1 8 -1

-1 -1 -1
Algoritma untuk menghitung secara manual dan sederhana nya adalah
ambil nilai tengah matriks lalu dikalikan dengan 8, contohnya :
Data piksel gambar yang diambil 3x3 dari matriks keseluruhan 5x5:

125 71 69

168 130 69

155 162 143


X

-1 -1 -1

-1 8 -1

-1 -1 -1
Lanjutan : Hasil dari 130 x 8 adalah 1040, maka kita simpan 1040 menjadi
patokan untuk pengurangan yang lain, berikut lanjutan spesifiknya :
= (1040) - (125+71+69+168+69+155+162+142)
= 1040 - 962
= 78

10
3. Highboost filtering
Kernel Highboost filtering

0 -1 0

-1 4 -1

0 -1 0
Algoritma filtering ini pengoperasiannya kurang lebih sama kerja
manualnya dengan high filtering tadi, namun tentu berbeda pada data piksel
kernel nya. Contohnya :
Data piksel gambar yang diambil 3x3 dari matriks keseluruhan 5x5

125 71 69

168 130 69

155 162 143

0 -1 0

-1 4 -1

0 -1 0
Lanjutan : Pada kernel ini, bedanya dengan highpass filtering tadi, kita
hanya cukup mengoperasikan perkalian pada nilai data kernel yang memiliki nilai
-1 pada kernel high pass (yang berbackground aqua). Begini pengoperasiannya :
= 130 x 4 = 520
= 520 - (71 + 168 + 69 + 162)
= 520 - 470
= 50

Lakukan yang sama demikian serupa pada baris operasi selanjutnya


(kekanan) jika sudah lanjut ke baris berikut nya (baris kedua)

11
4. Bandpass filtering
Kernel Bandpass filtering

0 -1 0

-1 5 -1

0 -1 0
Algoritma filtering Bandpass ini umumnya menyerupai sama dengan
highboost filtering tadi , namun disini nilai tengah dimensi 3x3 nya adalah
5. Kalau begini cara pengoperasiannya tetap sama seperti contoh saya
dibawah ini :

125 71 69

168 130 69

155 162 143

0 -1 0

-1 5 -1

0 -1 0
Operasinya sama dengan highpass tadi, jadi kita langsung saja ke
pengoperasiannya
= 130 x 5 = 650
= 650 - (71 + 168 + 69 + 162)
= 650 - 470
= 180

Begitu juga selanjutnya

12
5. Median filtering
Untuk algoritma Median filtering ini tidak memiliki kernel atau apapun itu,
untuk mencari nya, kita hanya perlu menggunakan sorting pada
implementasi koding octave, dan secara manualnya kita bisa urutkan
kemudian dapatkan nilai tengah nya. Begini implementasi kodingnya :

manualnya :

125 71 69 77 79

168 130 69 54 76 125 71 69


155 162 143 68 47 168 130 69
142 155 155 157 80 155 162 143
130 140 149 161 161

Nilai tengah baris 1 kolom 1 : 69, 69, 71, 125, 130, 143, 155, 162, 168

125 71 69 77 79

168 130 69 54 76 71 69 77

155 162 143 68 47 130 69 54

142 155 155 157 80 162 143 68

130 140 149 161 161

Nilai tengah baris 1 kolom 2 : 54, 68, 69, 69, 71, 77, 130, 143, 162

13
125 71 69 77 79
69 77 79
168 130 69 54 76
69 54 76
155 162 143 68 47
143 68 47
142 155 155 157 80

130 140 149 161 161

Nilai tengah baris 1 kolom 3 : 47, 54, 68, 69, 69, 76, 77, 79, 143

125 71 69 77 79

168 130 69 54 76 168 130 69

155 162 143 68 47 155 162 143

142 155 155 157 80 142 155 155

130 140 149 161 161

Nilai tengah baris 2 kolom 1 : 69,130,142,143,155,155,155,162,168

125 71 69 77 79
130 69 54
168 130 69 54 76
162 143 68
155 162 143 68 47
155 155 157
142 155 155 157 80

130 140 149 161 161

Nilai tengah baris 2 kolom 2 : 54, 68, 69, 130, 143, 155, 155, 157, 162

14
125 71 69 77 79
69 54 76
168 130 69 54 76
143 68 47
155 162 143 68 47
155 157 80
142 155 155 157 80

130 140 149 161 161

Nilai tengah baris 2 kolom 3 : 47, 54, 68, 69, 76, 80, 143, 155, 157

125 71 69 77 79
155 162 143
168 130 69 54 76
142 155 155
155 162 143 68 47
130 140 149
142 155 155 157 80

130 140 149 161 161

Nilai tengah baris 3 kolom 1 : 130 140 142 143 149 155 155 155 162

125 71 69 77 79

168 130 69 54 76 162 143 68

155 162 143 68 47 155 155 157

142 155 155 157 80 140 149 161

130 140 149 161 161

Nilai tengah baris 3 kolom 2 : 68 140 143 149 155 155 157 161 162

15
125 71 69 77 79

168 130 69 54 76 143 68 47


155 162 143 68 47 155 157 80
142 155 155 157 80 149 161 161
130 140 149 161 161

Nilai tengah baris 3 kolom 3 : 47 68 80 143 149 155 157 161 161
Hasil citra dari data piksel dengan median filtering :

0 0 0 0 0

0 130 71 69 0

0 155 143 76 0

0 149 155 149 0

0 0 0 0 0

6. Gaussian blur
Kernel Gaussian blur

1/16 1/8 1/16

1/8 8 1/8

1/16 1/8 1/16


Data piksel gambar 5x5:

125 71 69 77 79

168 130 69 54 76

155 162 143 68 47

142 155 155 157 80

130 140 149 161 161

16
Pengoperasiannya :

125 71 69

168 130 69

155 162 143

1/16 1/8 1/16

1/8 1/4 1/8

1/16 1/8 1/16

= 130 x 1/4 = 32
(Pengoperasian 1/16 terlebih dahulu)
= (125+69+155+143)/16
= 30,75 ~= 31
(Pengoperasian 1/8 )
= (71+168+69+162)/8
= 58,75 ~= 59
Setelah operasi 1/4 , 1/16 dan 1/8 selesai, lalu kita jumlahkan semuanya
menjadi (32 + 31 + 59 ) = 122

Kemudian, operasi gaussian blur ini juga beroperasi kurang lebih sama dengan
gausian basic, gaussian basic malah lebih mudah dan simpel karena bukan bilangan pecahan

17

Anda mungkin juga menyukai