ABSTRAK
Pada prakteknya saluran komunikasi tidak terbebas dari gangguan. Gangguan pada saluran komunikasi dapat menyebabkan data citra yang diterima menjadi rusak atau ada yang hilang. Hal ini menyebabkan kualitas citra menjadi berkurang.
Salah satu cara untuk mengatasi error pada citra adalah dengan error concealment atau penyembunyian error. Dalam laporan Tugas Akhir ini telah
direalisasikan suatu metode penyembunyian error dengan menggunakan informasi spasial di sekitar blok yang rusak, sehingga sebuah objek pada citra yang rusak dapat dikenali. Metode penyembunyian error yang digunakan dalam Tugas Akhir ini adalah metode Multi Directional Interpolation (MDI).
Metode Multi Directional Interpolation (MDI) ini menyembunyikan error dengan menggunakan informasi spasial dari blok tetangga. Interpolasi dilakukan berdasarkan pemilihan arah tepi yang sesuai. Dalam Tugas Akhir ini dipilih maksimal tiga arah tepi.
ABSTRACT
In practice, communication channels are not noise-free. Noise in the communication channels can cause damages or loss in image data, and ultimately it will reduce the quality of the images.
One way to ameliorate the error damage on images is by error concealment. In this final project, it has been simulated one of the error concealment methods that uses spatial information around the damaged block, so that an object in damages images could recoqnized. Error concealment method that was used in this final project is Multi Directional Interpolation(MDI).
This method, conceal the error by using the spatial information from the neighborhood. The interpolation was done by choosing the appropriate edges. In this final project there were maximal three edges that has been choosed to do the interpolation.
DAFTAR ISI
Halaman LEMBAR PENGESAHAN
SURAT PERNYATAAN
ABSTRAK i
ABSTRACT ii
KATA PENGANTAR iii
DAFTAR ISI v
DAFTAR TABEL vii
DAFTAR GAMBAR viii
BAB I PENDAHULUAN 1
I.1 Latar Belakang 2
I.2 Identifikasi Masalah 2
I.3 Tujuan 2
I.4 Pembatasan Masalah 2
I.5 Sistematika Penulisan 2
BAB II LANDASAN TEORI 3
II.1 Umum 3
II.2 Multi-directional Interpolation 3
II.2.1 Pendeteksian Tepi 5
II.2.2 Klasifikasi Voting Gradien 8
II.2.3 Interpolasi Spasial 8
II.2.4 Penggabungan Citra 10
II.2.5 Kualitas Citra 11
BAB III
PERANCANGAN SISTEM 12
III.1 Pencarian Blok Error 13
III.2 Klasifikasi arah menggunakan Voting Gradien 13
III.2.1 Pendeteksian Tepi 14
III.2.2 Deteksi Tepi yang Melewati Blok Rusak 15
III.2.3 Tiga Nilai Tepi Terbesar 16
III.3 Interpolasi Spasial 17
III.3.1 Interpolasi 17
III.4 Pencampuran Citra 18
III.4.1 Klasifikasi 19
III.4.2 Penggabungan Citra 20
BAB IV SIMULASI DAN ANALISA DATA 22
IV.1 Karakteristik Citra Input 22
IV.2 Klasifikasi Voting Gradien 22
IV.3 Interpolasi Spasial 32
IV.4 Pencampuran 33
IV.5 Analisa 34
BAB V KESIMPULAN DAN SARAN 36
V.1 Kesimpulan 36
V.2 Saran 36
DAFTAR PUSTAKA 37
LAMPIRAN A
DAFTAR TABEL
Halaman
Tabel IV.1 Indeks arah interpolasi 24
Tabel IV.2 Perbandingan Nilai PSNR untuk citra ukuran 256 x 256 piksel 34 Tabel IV.3 Perbandingan Nilai PSNR untuk citra ukuran 512 x 512 piksel 35
DAFTAR GAMBAR
Halaman
Gambar II.1 Blok proses penyembunyian error 4
Gambar II.2 Proses penyembunyian error dengan MDI 4
Gambar II.3 Titik – titik yang dilibatkan dalam penghitunan gradien 6
Gambar II.4 (a) Original image 7
(b) Tepi (edge) image 7
Gambar II.5 Arah tepi 8
Gambar II.6 Satu paket arah interpolasi satu dimensi 9
Gambar II.7 Array satu dimensi 9
Gambar II.8 Operator MAX, MIN, AVG 10
Gambar III.1 Diagram blok perancangan sistem 12
Gambar III.2 Diagram alir sistem penyembunyian error 12
Gambar III.3 Diagram alir proses pemeriksaan blok error 13
Gambar III.4 Diagram alir proses klasifikasi voting gradien 14
Gambar III.5 Diagram alir pendeteksian tepi 15
Gambar III.6 Diagram alir deteksi tepi yang melewati blok rusak 16
Gambar III.7 Diagram alir pemilihan tiga nilai terbesar 17
Gambar III.8 Diagram alir interpolasi spasial 17
Gambar III.9 Diagram alir interpolasi 18
Gambar III.10 Diagram alir pencampuran citra 19
Gambar III.11 Diagram alir klasifikasi 20
Gambar III.12 Diagram alir penggabungan citra 21
Gambar IV.1 Citra tanpa error ’foreman.jpg’ 22
Gambar IV.2 Contoh nilai magnituda 23
Gambar IV.3 Contoh arah tepi. 23
Gambar IV.4 Contoh indeks 24
Gambar IV.5 Citra yang rusak 32
Gambar IV.7 Contoh hasil pencampuran. 33
Gambar IV.8 Citra hasil perbaikan 34
function[gbr_satu]=interpolasi_1a()
jar1=jar1+(1/((jrk*(n-u))^2.5));
arah_bawah_satu(m,n)=arah_bawah_satu(m,n)./jar1; end;
while (t<=brs & u>=1)
for n=1:klm
end;
arah_atas_satu(m,n)=arah_atas_satu(m,n)+(arah_atas_satu(r,n))/(((r-m)*jrk)^2.5);
jar=jar+(1/((jrk*((s-n)/1))^2.5));
end;
arah_bawah_dua(m,n)=arah_bawah_dua(m,n)./jar1; end;
if arah_atas_tiga(m,n)==0
arah_atas_tiga(m,n)=arah_atas_tiga(m,n)+(arah_atas_tiga(r,s))/(((s-n)*jrk)^2.5);
if arah_atas_tiga(m,n)==0
end;
u=u-1;
arah_atas_tiga(m,n)=arah_atas_tiga(m,n)+(arah_atas_tiga(r,s))/((((s-n)/2)*jrk)^2.5);
r=r+1; s=s+2; end;
arah_atas_tiga(m,n)=arah_atas_tiga(m,n)./jar; end;
end; end;
clear m n
for m=1:brs for n=1:klm
if(arah_bawah_tiga(m,n)==0) t=m-1;
u=n-2;
jrk=sqrt(((n-u)^2)+((m-t)^2)); jar1=0;
while (t>=1 & u>=1)
jar1=jar1+(1/((jrk*((m-t)/1))^2.5));
arah_bawah_tiga(m,n)=arah_bawah_tiga(m,n)+(arah_bawah_tiga(t,u))/((((n-u)/2)*jrk)^2.5);
t=t-1; u=u-2; end;
arah_bawah_tiga(m,n)=arah_bawah_tiga(m,n)./jar1; end;
end; end;
gbr_tiga(9:16,9:16)=(arah_atas_tiga(9:16,9:16)+arah_bawah_tiga(9:16,9:16))./2;
clear; close all; clc;
global matrik_interpolasi global indeks
% Baca input yang tanpa error masukan_sehat=imread('boat.jpg');
end;%baris
Dk_gab_tiga_terbesar=sort_S(1,(panjang-2):panjang); end;
ax=find(Dk_gab_tiga_terbesar==0); cx=length(ax);
bx=find(Dk_gab_tiga_terbesar~=0); [dx,ex]=size(Dk_gab_tiga_terbesar); for loop=1:ex
if Dk_gab_tiga_terbesar(loop)==0
Dk_gab_tiga_terbesar_akhir=Dk_gab_tiga_terbesar(1,cx+1:ex); elseif Dk_gab_tiga_terbesar(loop)~=0
ukur=length(Dk_gab_tiga_terbesar_akhir); if ukur<=3
Dk_gab_tiga_terbesar_akhir=Dk_gab_tiga_terbesar_akhir; elseif ukur>3
Dk_gab_tiga_terbesar_akhir=Dk_gab_tiga_terbesar_akhir(1,(ukur-2):ukur);
end;
[fg,hj]=size(Dk_gab_tiga_terbesar_akhir); if hj==1
if Dk_gab_tiga_terbesar_akhir==Dk_nol indeks(1,1)=0;
elseif Dk_gab_tiga_terbesar_akhir==Dk_satu indeks(1,1)=1;
elseif Dk_gab_tiga_terbesar_akhir==Dk_dua indeks(1,1)=2;
elseif Dk_gab_tiga_terbesar_akhir==Dk_tiga indeks(1,1)=3;
elseif Dk_gab_tiga_terbesar_akhir ==Dk_empat indeks(1,1)=4;
elseif Dk_gab_tiga_terbesar_akhir ==Dk_lima indeks(1,1)=5;
elseif Dk_gab_tiga_terbesar_akhir ==Dk_enam indeks(1,1)=6;
elseif Dk_gab_tiga_terbesar_akhir ==Dk_tujuh indeks(1,1)=7;
end;
elseif hj==2 for apa=1:2
indeks(1,apa)=0;
elseif Dk_gab_tiga_terbesar_akhir(1,apa)==Dk_satu indeks(1,apa)=1;
elseif Dk_gab_tiga_terbesar_akhir(1,apa)==Dk_dua indeks(1,apa)=2;
elseif Dk_gab_tiga_terbesar_akhir(1,apa)==Dk_tiga indeks(1,apa)=3;
elseif Dk_gab_tiga_terbesar_akhir(1,apa)==Dk_empat indeks(1,apa)=4;
elseif Dk_gab_tiga_terbesar_akhir(1,apa)==Dk_lima indeks(1,apa)=5;
elseif Dk_gab_tiga_terbesar_akhir(1,apa)==Dk_enam indeks(1,apa)=6;
elseif Dk_gab_tiga_terbesar_akhir(1,apa)==Dk_tujuh indeks(1,apa)=7;
if Dk_gab_tiga_terbesar_akhir(1,sapa)==Dk_nol indeks(1,sapa)=0;
elseif Dk_gab_tiga_terbesar_akhir(1,sapa)==Dk_satu indeks(1,sapa)=1;
elseif Dk_gab_tiga_terbesar_akhir(1,sapa)==Dk_dua indeks(1,sapa)=2;
elseif Dk_gab_tiga_terbesar_akhir(1,sapa)==Dk_tiga indeks(1,sapa)=3;
elseif Dk_gab_tiga_terbesar_akhir(1,sapa)==Dk_empat indeks(1,sapa)=4;
elseif Dk_gab_tiga_terbesar_akhir(1,sapa)==Dk_lima indeks(1,sapa)=5;
elseif Dk_gab_tiga_terbesar_akhir(1,sapa)==Dk_enam indeks(1,sapa)=6;
elseif Dk_gab_tiga_terbesar_akhir(1,sapa)==Dk_tujuh indeks(1,sapa)=7;
elseif
gbr_satu=interpolasi_1a; gbr_dua=interpolasi_2a;
for aa=9:16 for bb=9:16
rata(aa,bb)=(gbr_satu(aa,bb)+gbr_dua(aa,bb))/2;
std(aa,bb)=sqrt(((gbr_satu(aa,bb)-rata(aa,bb)).^2)+((gbr_dua(aa,bb)-rata(aa,bb)).^2));
end; end;
M_tamp=[];
gbr_satu=interpolasi_1a;
gbr_dua=interpolasi_2a;
gbr_tiga=interpolasi_3a;
for cc=9:16 for dd=9:16
rata(cc,dd)=(gbr_satu(cc,dd)+gbr_dua(cc,dd)+gbr_tiga(cc,dd))./3; std(cc,dd)=sqrt((((gbr_satu(cc,dd)-rata(cc,dd)).^2)+((gbr_dua(cc,dd)-rata(cc,dd)).^2)+...
end;
gbr_tiga(ee,ff)>(rata(ee,ff)+std(ee,ff))&gbr_dua(ee,ff)<(rata(ee,ff)-std(ee,ff))&gbr_satu(ee,ff)>(rata(ee,ff)+std(ee,ff))|...
gbr_tiga(ee,ff)<(rata(ee,ff)-std(ee,ff))&gbr_dua(ee,ff)>(rata(ee,ff)+std(ee,ff))&gbr_satu(ee,ff)>(rata(ee,ff)+st d(ee,ff))
hasil_inter(ee,ff)=((gbr_satu(ee,ff)+gbr_dua(ee,ff)+gbr_tiga(ee,ff))./3);
elseif
gbr_tiga(ee,ff)<=(rata(ee,ff)+std(ee,ff))&gbr_tiga(ee,ff)>=(rata(ee,ff)-std(ee,ff))&gbr_dua(ee,ff)>(rata(ee,ff)+std(ee,ff))&...
gbr_satu(ee,ff)<=(rata(ee,ff)+std(ee,ff))& gbr_satu(ee,ff)>=(rata(ee,ff)-std(ee,ff))|gbr_tiga(ee,ff)<=(rata(ee,ff)+std(ee,ff))&...
hasil_inter(ee,ff)=((gbr_satu(ee,ff)+gbr_dua(ee,ff)+gbr_tiga(ee,ff))./3); end;%end switch
gbr_satu(ee,ff)<=(rata(ee,ff)+std(ee,ff))&gbr_satu(ee,ff)>=(rata(ee,ff)-std(ee,ff))|gbr_tiga(ee,ff)<=(rata(ee,ff)+std(ee,ff))&...
gbr_tiga(ee,ff)>=(rata(ee,ff)- std(ee,ff))&gbr_dua(ee,ff)<=(rata(ee,ff)+std(ee,ff))&gbr_dua(ee,ff)>=(rata(ee,ff)-std(ee,ff))&...
gbr_satu(ee,ff)<(rata(ee,ff)-std(ee,ff))|gbr_tiga(ee,ff)<(rata(ee,ff)-std(ee,ff))&gbr_dua(ee,ff)<=(rata(ee,ff)+std(ee,ff))&...
gbr_tiga(ee,ff)>(rata(ee,ff)+std(ee,ff))&gbr_dua(ee,ff)<(rata(ee,ff)-std(ee,ff))&gbr_satu(ee,ff)<(rata(ee,ff)-std(ee,ff))
hasil_inter_2(ee,ff)=((gbr_satu(ee,ff)+gbr_dua(ee,ff)+gbr_tiga(ee,ff))./3);
elseif
gbr_tiga(ee,ff)<(rata(ee,ff)- std(ee,ff))&gbr_dua(ee,ff)<=(rata(ee,ff)+std(ee,ff))&gbr_dua(ee,ff)>=(rata(ee,ff)-std(ee,ff))&...
gbr_satu(ee,ff)<(rata(ee,ff)-std(ee,ff))|gbr_tiga(ee,ff)<(rata(ee,ff)-std(ee,ff))&gbr_dua(ee,ff)<(rata(ee,ff)-std(ee,ff))&...
gbr_satu(ee,ff)<=(rata(ee,ff)+std(ee,ff))&gbr_satu(ee,ff)>=(rata(ee,ff)-std(ee,ff))|gbr_tiga(ee,ff)<=(rata(ee,ff)+std(ee,ff))&...
gbr_tiga(ee,ff)>=(rata(ee,ff)-std(ee,ff))&gbr_dua(ee,ff)<(rata(ee,ff)-std(ee,ff))&gbr_satu(ee,ff)<(rata(ee,ff)-std(ee,ff))
hasil_inter(ee,ff)=min(M_tam);
elseif gbr_tiga(ee,ff)<(rata(ee,ff)-std(ee,ff))&gbr_satu(ee,ff)<(rata(ee,ff)-std(ee,ff))&gbr_dua(ee,ff)<(rata(ee,ff)-std(ee,ff))
gbr_satu(ee,ff)<=(rata(ee,ff)+std(ee,ff))&gbr_satu(ee,ff)>=(rata(ee,ff)-std(ee,ff))|gbr_tiga(ee,ff)<(rata(ee,ff)-std(ee,ff))&...
gbr_dua(ee,ff)<=(rata(ee,ff)+std(ee,ff))&gbr_dua(ee,ff)>=(rata(ee,ff)-std(ee,ff))&gbr_satu(ee,ff)>(rata(ee,ff)+std(ee,ff))|...
hasil_inter(ee,ff)=((gbr_satu(ee,ff)+gbr_dua(ee,ff)+gbr_tiga(ee,ff))./3);
imshow(x_input),title('citra yang rusak'); figure(3);
x_hasil=uint8(B);
imshow(x_hasil),title('citra perbaikan');
% --- % Perhitungan SNR awal sebelum rekonstruksi % --- masukan_sehat=double(masukan_sehat);
masukan_sehat=reshape(masukan_sehat,1,bariss*kolomm); % ---
% Perhitungan SNR akhir sesudah rekonstruksi % --- masukan_sehat=double(masukan_sehat); sdh_rekonstruksi=reshape(B,1,bariss*kolomm);
MSE_rekonstruksi=sum((masukan_sehat-sdh_rekonstruksi).^2);
PSNR_rekonstruksi=10.*log10((255.^2)./(MSE_rekonstruksi/(bariss*kolomm))); disp(['Nilai SNR akhir sesudah rekonstruksi = ',num2str(PSNR_rekonstruksi),' dB']);
disp(' '); x_sakit=double(x_input);
x_sakit=reshape(x_sakit,1,bariss*kolomm); MSE_sakit=sum((masukan_sehat-x_sakit).^2);
PSNR_sakit=10.*log10((255.^2)./(MSE_sakit/(bariss*kolomm)));
disp(['Nilai SNR awal sebelum rekonstruksi = ',num2str(PSNR_sakit),' dB']); disp(' ');
kenaikan_PSNR=PSNR_rekonstruksi-PSNR_sakit;
disp(['Perbaikan SNR sebesar ',num2str(kenaikan_PSNR),' dB']); disp(' ');
if PSNR_sakit <= PSNR_rekonstruksi disp('Rekonstruksi telah berhasil'); else
disp('Rekonstruksi gagal'); end;
Gambar B.1 (a) citra rusak ’foreman.jpg (512 x 512)’
Gambar B.2 (a) citra tanpa error ’taman.jpg (512 x 512 piksel)’
Gambar B.2 (c) citra hasil perbaikan ’taman.jpg (512 x 512 piksel)’
Gambar B.2 (e) citra rusak ’taman.jpg (256 x 256 piksel)’
Gambar B.3 (a)citra tanpa error’lena.tif (512 x 512 piksel)’
Gambar B.3(c) citra hasil perbaikan’lena.tif (512 x 512 piksel)’
Gambar B.3 (e) citra rusak’lena.tif (256 x 256 piksel)’
Gambar B.4 (a) citra tanpa error ’baboon.tif (512 x 512 piksel)’
Gambar B.4 (c) citra hasil penyembunyian error ’baboon.tif (512 x 512 piksel)’
Gambar B.4 (e) citra rusak ’baboon.tif (256 x 256 piksel)’
BAB I
PENDAHULUAN
I.1 Latar Belakang.
Untuk mentransmisikan sebuah citra, citra terbagi-bagi menjadi beberapa paket data. Noise pada jaringan menyebabkan paket data yang dikirim mengalami penundaan, error, sehingga data yang diterima tidak lengkap. Jika ada citra yang rusak pada saat pengiriman, maka perlu dilakukan retransmisi. Retransmisi yang dilakukan akan membutuhkan waktu. Untuk mengatasinya, dekoder dapat mengganti data informasi yang hilang dengan bit-bit yang sudah ada dengan teknik penyembunyian error.
Ada beberapa metode penyembunyian error yang digunakan seperti Pixel Domain Interpolation (PDI), Multi Directional Interpolation (MDI), Projection
Onto Convex Sets (POCS), Multiple description coding (MDC) dan Maximally
Smooth Recovery (MSR). Untuk dapat memahami proses penyembunyian error
pada citra yang rusak, maka dalam Tugas Akhir ini dibuat simulasi dan analisanya dengan menggunakan metode Multi-Directional Interpolation(MDI).
I.2 Identifikasi Masalah.
Bagaimana kinerja proses penyembunyian error pada perbaikan citra dengan metode Multi-Directional Interpolation(MDI)?
I.3 Tujuan.
Merealisasikan dan menganalisa proses penyembunyian error pada citra dengan metode Multi-Directional Interpolation(MDI).
I.4 Pembatasan Masalah.
1.Metode yang digunakan dalam proses penyembunyian error menggunakan metode Multi-Directional Interpolation(MDI).
2
b.512 x 512 piksel 3.Format citra : .jpg, .tif 4.Grayscale : [0-255]
5.Simulasi menggunakan Matlab 6.5.
6.Jenis error yang digunakan adalah blok dengan ukuran 8 x 8 pixel yang terdistribusi secara teratur seperti papan catur.
I.5 Sistematika Penulisan.
Laporan Tugas Akhir ini terdiri dari menjadi lima bab. Adapun sistematika laporan ini adalah sebagai berikut :
1. BAB I PENDAHULUAN
Bab ini akan menjelaskan mengenai apa saja yang melatarbelakangi penulisan laporan Tugas Akhir, mengidentifikasi masalah yang akan diselesaikan dalam Tugas Akhir dan apa saja yang menjadi tujuan penyusunan laporan Tugas Akhir, pembatasan masalah sehingga ruang lingkup permasalahan yang akan diselesaikan menjadi lebih fokus, dan sistematika penulisan laporan Tugas Akhir ini.
2. BAB II DASAR TEORI
Bab ini memberikan penjelasan singkat tentang teori citra dan mengenai penyembunyian error dengan menggunakan metode Multi-directional Interpolation.
BAB III PERANCANGAN
Pada bab ini akan dibahas mengenai perancangan tiap-tiap modul dari program penyembunyian error yang akan dibuat.
3. BAB IV SIMULASI DAN ANALISA
Bab ini akan menampilkan dan menganalisa hasil pengujian terhadap program penyembunyian error yang telah dirancang.
4. BAB V KESIMPULAN DAN SARAN
BAB V
KESIMPULAN DAN SARAN
V.1 Kesimpulan.
1.
Secara keseluruhan, tepi - tepi pada citra keluaran terlihat berkesinambungan,
sehingga tampilan objek pada citra terlihat jelas.
V.2 Saran.
DAFTAR PUSTAKA
1. D.Agrafiotis,D.R.Bull,Nishan Canagarajah,Spatial Error Concealment With Edge Related Perceptual Considerations,Signal Processing; Image
communication 21 (2005).
2. G.J.Awcock,R.Thomas,AppliedImageProcessing,McGraw_Hill,Inc,Singap ore,1996.
3. J.-W.Suh,Y,-S.Ho,Error Concealment Based on Directional Interpolation,IEEE Trans.Consumer Electron.43(3)(August 1997).
4. Louis J Galbiati,Jr,Machine Vision and Digital Image Processing,Prentice-Hall,Inc,Englewood Clifft,1990.
5. Munir, Rinaldi, Pengolahan Citra Digital dengan Pendekatan Algoritmik, Informatika, Agustus 2004.
6. W.Kwok,II.Sun,Multi-directional Interpolation for Spatial Error Concealment,IEEE trans.Consumer Electron.39(3)(Agustus 1993) 455