MODUL 2 PCD part 1
Dokumentasi praktikum Pengolahan Citra Digital (Modul 2) mengenai pembentukan citra phantom, penambahan berbagai model noise, serta teknik restorasi citra menggunakan Mean Filtering, Order Statistic Filtering, Adaptive Filtering, dan Adaptive Median Filtering.
modul2/ adapt_median.m adaptive.m Addnoise.m MeanFilter.m OrdStatFilt.m filevar1.m
1a. Membuat Citra Phantom dan Menyimpan File
Membuat citra sintetis Modified Shepp-Logan Phantom berukuran 300x300 piksel, mengonversi tipe data ke uint8, menampilkan citra asli, dan menyimpannya ke format JPEG.
%% 1a. Membuat Citra Phantom dan Menyimpan File
% Membuat citra phantom Modified Shepp-Logan ukuran 300x300
A = phantom('Modified Shepp-Logan', 300);
A = im2uint8(A); % Konversi citra double ke uint8
% Menampilkan citra phantom asli
figure('Name', 'Citra Phantom Asli');
imshow(A);
title('Citra Phantom Asli');
% Menyimpan citra ke file phantom.jpg
imwrite(A, 'phantom.jpg');
1b. Menambahkan Berbagai Jenis Noise pada Citra
Simulasi penambahan noise pada citra phantom menggunakan fungsi Addnoise.m untuk model noise Gaussian, Rayleigh, Erlang, Salt, Pepper, dan Salt & Pepper, dilanjutkan dengan menampilkan citra bernoise beserta histogramnya.
%% 1b. Menambahkan Berbagai Jenis Noise pada Citra
% Memanggil fungsi Addnoise.m dengan berbagai parameter noise
B = Addnoise(A, 'gaussian', 50, 20);
C = Addnoise(A, 'rayleigh', 20, 800);
D = Addnoise(A, 'erlang', 0.1, 2);
E = Addnoise(A, 'salt', 0.1);
F = Addnoise(A, 'pepper', 0.1);
G = Addnoise(A, 'salt&pepper', 0.1, 0.1);
% --- Gaussian Noise ---
figure('Name', 'Gaussian Noise');
subplot(1, 2, 1); imshow(B); title('Citra Gaussian Noise');
subplot(1, 2, 2); imhist(B); title('Histogram Gaussian Noise');
% --- Rayleigh Noise ---
figure('Name', 'Rayleigh Noise');
subplot(1, 2, 1); imshow(C); title('Citra Rayleigh Noise');
subplot(1, 2, 2); imhist(C); title('Histogram Rayleigh Noise');
% --- Erlang Noise ---
figure('Name', 'Erlang Noise');
subplot(1, 2, 1); imshow(D); title('Citra Erlang Noise');
subplot(1, 2, 2); imhist(D); title('Histogram Erlang Noise');
% --- Salt Noise ---
figure('Name', 'Salt Noise');
subplot(1, 2, 1); imshow(E); title('Citra Salt Noise');
subplot(1, 2, 2); imhist(E); title('Histogram Salt Noise');
% --- Pepper Noise ---
figure('Name', 'Pepper Noise');
subplot(1, 2, 1); imshow(F); title('Citra Pepper Noise');
subplot(1, 2, 2); imhist(F); title('Histogram Pepper Noise');
% --- Salt & Pepper Noise ---
figure('Name', 'Salt & Pepper Noise');
subplot(1, 2, 1); imshow(G); title('Citra Salt & Pepper Noise');
subplot(1, 2, 2); imhist(G); title('Histogram Salt & Pepper Noise');
1c. Operasi Mean Filter
Penerapan variasi pemfilteran rata-rata (Arithmetic, Geometric, Harmonic, serta Contraharmonic Mean dengan nilai $Q > 0$ dan $Q < 0$) pada citra bernoise untuk menguji efektivitas restorasi.
%% 1c. Operasi Mean Filter
% Menguji Mean Filter pada citra bernoise B (Gaussian)
B1 = MeanFilter(B, 'arithmetic', 3, 3);
B2 = MeanFilter(B, 'geometric', 3, 3);
B3 = MeanFilter(B, 'harmonic', 3, 3);
B4 = MeanFilter(B, 'contraharmonic', 3, 3, 1.5); % Q > 0
B5 = MeanFilter(B, 'contraharmonic', 3, 3, -1.5); % Q < 0
% Menampilkan hasil filter pada citra Gaussian Noise (B)
figure('Name', 'Mean Filtering pada Gaussian Noise');
subplot(2, 3, 1); imshow(B); title('Citra Noise Gaussian');
subplot(2, 3, 2); imshow(B1); title('Arithmetic Mean');
subplot(2, 3, 3); imshow(B2); title('Geometric Mean');
subplot(2, 3, 4); imshow(B3); title('Harmonic Mean');
subplot(2, 3, 5); imshow(B4); title('Contraharmonic Q=1.5');
subplot(2, 3, 6); imshow(B5); title('Contraharmonic Q=-1.5');
% Pengujian berulang untuk citra C (Rayleigh), D (Erlang), E (Salt), F (Pepper), G (Salt&Pepper)
citra_noise = {C, D, E, F, G};
nama_noise = {'Rayleigh', 'Erlang', 'Salt', 'Pepper', 'Salt & Pepper'};
for k = 1:length(citra_noise)
img = citra_noise{k};
f1 = MeanFilter(img, 'arithmetic', 3, 3);
f2 = MeanFilter(img, 'geometric', 3, 3);
f3 = MeanFilter(img, 'harmonic', 3, 3);
f4 = MeanFilter(img, 'contraharmonic', 3, 3, 1.5);
f5 = MeanFilter(img, 'contraharmonic', 3, 3, -1.5);
figure('Name', ['Mean Filtering pada Noise ', nama_noise{k}]);
subplot(2, 3, 1); imshow(img); title(['Noise ', nama_noise{k}]);
subplot(2, 3, 2); imshow(f1); title('Arithmetic');
subplot(2, 3, 3); imshow(f2); title('Geometric');
subplot(2, 3, 4); imshow(f3); title('Harmonic');
subplot(2, 3, 5); imshow(f4); title('Contraharmonic Q=1.5');
subplot(2, 3, 6); imshow(f5); title('Contraharmonic Q=-1.5');
end
1d. Operasi Order Statistic Filtering
Pengujian filter urutan statistik (Median, Max, Min, dan Alpha-Trimmed Mean) untuk mereduksi noise implulsif maupun Gaussian pada citra.
%% 1d. Operasi Order Statistic Filtering
% Menguji Order Statistic Filter pada citra bernoise B (Gaussian)
O1 = OrdStatFilt(B, 'median', 3, 3);
O2 = OrdStatFilt(B, 'max', 3, 3);
O3 = OrdStatFilt(B, 'min', 3, 3);
O4 = OrdStatFilt(B, 'alphatrimmed', 3, 3, 2);
% Menampilkan hasil filter pada citra Gaussian Noise (B)
figure('Name', 'Order Statistic Filtering pada Gaussian Noise');
subplot(2, 3, 1); imshow(B); title('Citra Noise Gaussian');
subplot(2, 3, 2); imshow(O1); title('Median Filter');
subplot(2, 3, 3); imshow(O2); title('Max Filter');
subplot(2, 3, 4); imshow(O3); title('Min Filter');
subplot(2, 3, 5); imshow(O4); title('Alpha-Trimmed (d=2)');
% Pengujian berulang untuk citra C, D, E, F, G
for k = 1:length(citra_noise)
img = citra_noise{k};
o1 = OrdStatFilt(img, 'median', 3, 3);
o2 = OrdStatFilt(img, 'max', 3, 3);
o3 = OrdStatFilt(img, 'min', 3, 3);
o4 = OrdStatFilt(img, 'alphatrimmed', 3, 3, 2);
figure('Name', ['Order Statistic Filtering pada Noise ', nama_noise{k}]);
subplot(2, 3, 1); imshow(img); title(['Noise ', nama_noise{k}]);
subplot(2, 3, 2); imshow(o1); title('Median');
subplot(2, 3, 3); imshow(o2); title('Max');
subplot(2, 3, 4); imshow(o3); title('Min');
subplot(2, 3, 5); imshow(o4); title('Alpha-Trimmed (d=2)');
end
1e. Operasi Adaptive Filtering
Perbandingan hasil restorasi citra terdegradasi noise Gaussian (varian 400) menggunakan Arithmetic Mean 7x7, Geometric Mean 7x7, dan Adaptive Filter 7x7 berbasis variansi lokal.
%% 1e. Operasi Adaptive Filtering
% 1. Membuat citra terdegradasi noise Gaussian dengan variance = 400 (std = 20)
B_gaussian = Addnoise(A, 'gaussian', 50, 20);
% 2. Menerapkan ketiga filter dengan ukuran 7x7
f_arith7 = MeanFilter(B_gaussian, 'arithmetic', 7, 7);
f_geom7 = MeanFilter(B_gaussian, 'geometric', 7, 7);
f_adapt7 = adaptive(B_gaussian, 7, 7, 400);
% 3. Menampilkan perbandingan hasil
figure('Name', 'Perbandingan Restorasi Adaptive Filtering (7x7)');
subplot(2, 2, 1); imshow(B_gaussian); title('Gaussian Noise (Var=400)');
subplot(2, 2, 2); imshow(f_arith7); title('Arithmetic Mean 7x7');
subplot(2, 2, 3); imshow(f_geom7); title('Geometric Mean 7x7');
subplot(2, 2, 4); imshow(f_adapt7); title('Adaptive Filter 7x7 (Var=400)');
1f. Operasi Adaptive Median Filtering
Perbandingan performa perbaikan citra yang terkena noise Salt & Pepper berkepadatan tinggi ($P = 0.25$) menggunakan Standard Median Filter 7x7 dan Adaptive Median Filter ($S_{max} = 7$).
%% 1f. Operasi Adaptive Median Filtering
% 1. Membuat citra terdegradasi noise Salt & Pepper dengan probabilitas = 0.25
G_sp25 = Addnoise(A, 'salt&pepper', 0.25, 0.25);
% 2. Menerapkan Median Filter 7x7 dan Adaptive Median Filter (7x7, Smax=7)
f_med7 = OrdStatFilt(G_sp25, 'median', 7, 7);
f_adapt_med7 = adapt_median(G_sp25, 7, 7, 7);
% 3. Menampilkan perbandingan hasil
figure('Name', 'Perbandingan Adaptive Median Filtering (Noise 0.25)');
subplot(1, 3, 1); imshow(G_sp25); title('Salt & Pepper Noise (P=0.25)');
subplot(1, 3, 2); imshow(f_med7); title('Standard Median 7x7');
subplot(1, 3, 3); imshow(f_adapt_med7); title('Adaptive Median (Smax=7)');