Buku Modul/Petunjuk Praktikum Tek156221 Praktikum Pengolahan Sinyal Multimedia
Buku Modul/Petunjuk Praktikum Tek156221 Praktikum Pengolahan Sinyal Multimedia
DI SUSUN OLEH:
Dr. I Made Oka Widyantara, ST, MT.
I Gst A. Komang Diafari Djuni H, ST., MT.
KATA PENGANTAR
Puji syukur penulis haturkan kehadapan Ida Hyang Widi Wasa atas rahmat-
Nya penyusunan buku manual Praktikum Pengolahan Sinyal Multimedia dapat
diselesaikan. Buku Praktikum Pengolahan Sinyal Multimedia disusunkan
berdasarkan silabus kurikulum Teknik Elektro dan Komputer tahun 2015-2020,
untuk digunakan sebagai materi modul/petunjuk kegiatan praktikum mata kuliah
TEK156221 Praktikum Pengolahan Sinyal Multimedia.
Penulis berharap materi dalam buku modul/petunjuk praktikum ini dapat
membantu pemahaman mahasiswa dalam meningkatkan kompetensi dibidang ilmu
pengolahan sinyal. Selanjutnya, penulis berhadap masukan yang konstruksi untuk
menyempurnakan materi dalam bulu modul/petunjuk praktikum ini.
DAFTAR ISI
Kata Pengantar i
Daftar Isi ii
Percobaan I : Teorema Sampling Nyquist Dan Analisis Time-Frequency 1
Percobaan II : Pengolahan Sinyal Audio 14
Percobaan III : Format Grafik, Citra Dan Video 23
Percobaan IV : Dasar-Dasar Teknik Kompresi 32
Percobaan V : Discrete Cosine Transform (Dct) Dan Kompresi Citra Jpeg 42
Percobaan VI : Estimasi Gerak Pada Pengkodean Video 50
PERCOBAAN I
TEOREMA SAMPLING NYQUIST DAN ANALISIS TIME-FREQUENCY
1.1 TUJUAN
Setelah melaksanakana percobaan ini praktikan mampu :
1. Memahami fungsi dasar teorema sampling Nyquist
2. Memahami analisis time-frequency dari audio
3. Mengaplikasikan proses Transformasi Fourier Waktu Pendek
4. Mengaplikasikan Vocoder Fasa
1.2 PERALATAN
Peralatan yang digunakan pada percobaan ini adalah:
1. Laptop atau Personal Computer
2. Software MATLAB minimal versi 2012a
proses sampling ini, jika frekuensi sinyal sample tidak sesuai dengan batas yang
ditentukan oleh Teori Shannon-Nyquist, maka akan terjadi suatu kondisi yang
disebukt aliasing. Efek Aliasing yaitu suatu efek yang akan terjadi jika kita
melakukan pencuplikan dengan frekuensi pencuplikan dibawah dari ketentuan
Nyquist. Frekuensi aliasing ini dapat dihitung dengan mengurangkan frekuensi
sample dengan frekuensi sinyal yang disampling.
………………….(1.1)
dimana x(t) adalah sinyal input dan g(t) adalah fungsi window. Adapun fungsi
windowing yang umum digunakan adalah seperti Hanning Window, Hamming
Window, Gausian Window, Balckaman dan sebagainya. Jadi inti dari transformasi
Fourier adalah perkalian sinyal x(t) dengan fungsi windownya g(t-t).
close all
clear tt_sf
samples = 22050; %jumlah sample
samp_freq = 22050; %frekuensi sample
nyq = samp_freq/2 %Batas nyquist frekuensi sample
samp_time = samples/samp_freq; %waktu sampling
freq = 22050 %frekuensi gelombang sinus
t = [0:samples-1]; %jumlah waktu sample
tt = t/10000; %Setiap titik adalah 0.1
mdetik,di plot menjadi 1 detik
size(tt);
sint = sin(tt);
radfreq = freq*(2*pi)/1;
sint2 = sin(radfreq*tt); % Frekuensi radial adalah
radfreq, sedangkan Hz adalah
radfreq/(2*pi)
plot(sint2(1:100), 'k')
title('radfreq plot')
pause(1)
disp('Doing Sampling:');
figure
plot(sint3(1:100), 'r')
p = audioplayer(sint3, nyq);
play(p, [1 tt_sf_sze]);
% function stft.m
% expect x as a row
if size(x,1) > 1
x = x';
end
s = length(x);
if length(w) == 1
if w == 0
% special case: rectangular window
win = ones(1,f);
else
if rem(w, 2) == 0 % force window to be odd-len
w = w + 1;
end
halflen = (w-1)/2;
halff = f/2; % midpoint of win
halfwin = 0.5 * ( 1 + cos( pi *
0:halflen)/halflen));
win = zeros(1, f);
acthalflen = min(halff, halflen);
win((halff+1):(halff+acthalflen)) =
halfwin(1:acthalflen);
win((halff+1):-1:(halff-acthalflen+2)) =
halfwin(1:acthalflen);
end
else
win = w;
end
w = length(win);
% now can set default hop
if h == 0
h = floor(w/2);
end
c = 1;
for b = 0:h:(s-f)
u = win.*x((b+1):(b+f));
t = fft(u);
d(:,c) = t(1:(1+f/2))';
c = c+1;
end;
% stft_spectogram.m
% Make Spectrogram
specy = abs(Y)/n;
%istft.m
function x = istft(d, ftsize, w, h)
s = size(d);
%if s(1) != (ftsize/2)+1
% error('number of rows should be fftsize/2+1')
%end
cols = s(2);
xlen = ftsize + (cols-1)*h;
x = zeros(1,xlen);
if length(w) == 1
if w == 0
% special case: rectangular window
win = ones(1,ftsize);
else
if rem(w, 2) == 0 % force window to be odd-len
w = w + 1;
end
halflen = (w-1)/2;
halff = ftsize/2;
halfwin = 0.5 * ( 1 + cos( pi * (0:halflen)/halflen));
win = zeros(1, ftsize);
acthalflen = min(halff, halflen);
win((halff+1):(halff+acthalflen)) =
halfwin(1:acthalflen);
win((halff+1):-1:(halff-acthalflen+2)) =
halfwin(1:acthalflen);
% 2009-01-06: Make stft-istft loop be identity
win = 2/3*win;
end
else
win = w;
w = length(win);
end
for b = 0:h:(h*(cols-1))
ft = d(:,1+b/h)';
ft = [ft, conj(ft([((ftsize/2)):-1:2]))];
px = real(ifft(ft));
x((b+1):(b+ftsize)) = x((b+1):(b+ftsize))+px.*win;
end;
figure(2)
imshow(255*abs(Yedit)/n)
colormap('hsv')
title('Edited Xedit Spectrogram')
% Remake sound
yedit = istft(Yedit,n,n, nhop);
sound(y,Fs)
sound(yedit,Fs)
figure(3)
plot(yedit)
title('Xedit')
figure(4)
plot(yedit(1:length(yedit)) - y(1:length(yedit))')
title('Xedit residual')
% Play residual
sound(yedit(1:length(yedit)) - y(1:length(yedit))',Fs);
figure(5)
imshow(255*abs(Yedit)/n)
colormap('hsv')
title('Edited Yedit Spectrogram')
% Remake sound
yedit = istft(Yedit,n,n, nhop);
sound(y,Fs);
sound(yedit,Fs)
figure(6)
plot(yedit)
title('Yedit')
figure(7)
plot(yedit(1:length(yedit)) - y(1:length(yedit))')
title('Yedit residual')
% Play residual
sound(yedit(1:length(yedit)) - y(1:length(yedit))', Fs);
2. Vocoder Fasa :
Buka M-file Matlab di D:Prak PSM\Percobaan1\ Fourier\ pvoc_speed.m
a) Perubahan Tempo : Ubah kecepatan audio dengan:
i. Kecepatan satu setengah lebih pelan
ii. Kecepatan satu setengah lebih cepat
iii. Tiga kali lebih cepat
iv. Tugas:
Amati dan analisis kualiatas suara ketika kecepatan audio
% Half Speed
yslow =pvoc(y,.5,1024);
% Compare original and resynthesis
sound(y,Fs);
sound(yslow,Fs);
% Twice as Fast
yfast =pvoc(y,2,1024);
% Compare original and resynthesis
sound(y,Fs);
sound(yfast,Fs);
% Pitch up a Fifth
ypvoc =pvoc(y, 0.66666);
ypitch = resample(ypvoc,2,3); % NB: 0.666 = 2/3
sound(y,Fs);
sound(ypitch, Fs);
sound(y(1:length(ypitch)) + ypitch, Fs);
% Pitch up an octave
ypvoc =pvoc(y, 0.5);
ypitch = resample(ypvoc,1,2);
sound(y,Fs);
sound(ypitch, Fs);
sound(y(1:length(ypitch)) + ypitch, Fs);
PERCOBAAN II
2.1 TUJUAN
1. Mempelajari teknik kuantisasi untuk kompresi audio
2. Memahami teknik pengkodean lossy
2.2 PERALATAN
3. Program matlab 6.1 keatas
4. Speaker aktif
Beberapa nilai dalam interval ke – I, dipetakan ke nilai tengah dalam interval, yaitu,
2.3
Pada komputer, setiap level dinyatakan oleh codeword biner. Dengan L
level kuantisasi, setiap level dapat dinyatakan dengan B = [log2(L)], seperti
diunjutkan pada Gambar 2.1
Ketika rentang sinyal R diketahui, sebuah kuantiser seragam memiliki hanya satu
parameter, yaitu: jumlah level N atau step size kuantisasi , yang keduanya
direlasikan oleh,
2.4
Jumlah level N umumnya dipilih dalam bentuk bentuk 2 . Jika sinyal memiliki
fungsi kerapatan probabilitas yang simetris, yaitu |x(n)|= Xmax, atau R = 2 Xmax,
maka,
2.5
2.6
Dimana x(n) adalah sampel-sampel yang belum dikuantisasi dan e(n) adalah error
kuantisasi atau noise. Dengan memperhatikan Gambar 2.1, jika dan B terpilih
seperti pada persamaan 2.5, maka,
2.7
2.8
Untuk sinyal dengan distribusi seragam dalam rentang R, variannya adalah . Jika
∆ ∆
sebuah noise diasumsikan amplitudanya terdistribuasi seragam pada (− , ),
maka:
2.9
2.10
2.11
2.12
Ini menunjukan bahwa setiap penambahan bit akan memperbaiki SNR sampai 6
dB.
2.13
Gambar 2.2 menunjukan kurva-kurva y(n) versus x(n) untuk nilai yang berbeda.
Sangatlah jelas bahwa persamaan 2.13 dapat meningkatkan/mempertinggi
amplitude input yang kecil. Gambar 2.3 menunjukan distribusi level-level
kuantisasi pada kasus = 40, dan N = 8. Jika = 0, persamaan 2.13 akan
menurunkan y(n) = x(n), yaitu level-level kuantisasi dipisahkan secara seragam.
Akan tetapi untuk besar, dan |x(n)| besar,
2.14
atau
2.15
2.16
Gambar 2.3 Distribusi level-level kuantisasi untuk -law 3-bit quantizer denga =
40
%figure; plot(t,x,'r:');
hold on; plot(t,xq,'b-');
axis tight; grid on;
legend('original','quantized')
% Hitung MSE
D=x-xq;
MSE=mean(D.^2);
fprintf('\n Error antara original dan quantized =
%g\n\n',MSE)
2. Simpanlah program ini di folder work pada matlab anda menggunakan nama “
uniform”
3. Pastikan terdapat file.wav di folder work
4. Jalankan program ini dengan memasukan inname.wav, outname.wav, dan
jumlah level N = 4 (2 bit).
Contoh :
>> uniform('mozart.wav','mozart_uniform_4.wav',4)
magmax=max(abs(x));
xmin=-magmax; xmax=magmax;
Q=(xmax-xmin)/N;
disp('N0,xmin,xmax,N,Q,mu');
disp([N0,xmin,xmax,N,Q,mu]);
2. Simpanlah program ini di folder work pada matlab anda menggunakan nama “
mulaw”
3. Pastikan terdapat file.wav di folder work
4. Jalankan program ini dengan memasukan inname.wav, outname.wav, jumlah
level N N > 1 dan mu-law: 1<= mu <= 255
Contoh :
>> uniform('mozart.wav','mozart_uniform_16.wav',4,
16)
PERCOBAAN III
FORMAT GRAFIK, CITRA DAN VIDEO
3.1 TUJUAN
1. Untuk mengetahui Peta warna dalam Citra 8-bit
2. Untuk mengetahui Ruang warna dalam Grafik dan Citra
3. Untuk mengetahui Chroma Subsampling
4. Untuk mengetahui Efek aliasing karena subsampling
5. Dapat menganalisa materi tersebut menggunakan MATLAB
3.2 PERALATAN
1. Laptop/PC
2. Software MATLAB
3.3.3 Dithering
Dithering sering digunakan ketika mengkonversi gambar grayscale ke bit-
map,misalnya untuk pencetakan. Strategi utama yang dilakukan adalah mengganti
nilai pixel (dari 0 sampai 255) dengan pola yang lebih besar (misalnya 4x4)
sehingga jumlah titik yang dicetak mendekati tingkat skala abu-abu dari gambar
asli.
1. Jika pixel digantikan oleh array titik 4 x 4, intensitas dapat mendekati dari 0
(tidak ada titik) ke 16 (titik penuh).
kita bisa memetakan kembali nilai pixel dari 0-255 ke range baru 0-16 dengan
cara membagi nilai dengan (256/17) (dan pembulatan ke bawah).
Pendekatan dithering secara sederhana:
1. Mengganti setiap pixel oleh titik 4x4 (pixel biner). Jika Intensitas pemetakan
kembali > masukan matrix dither, letakkan sebuah titik di posisi (set ke 1)
dinyatakan di set ke 0.
Catatan : bahwa ukuran gambar dithered mungkin jauh lebih besar. Karena
setiap pixel diganti dengan array titik 4x4, gambar menjadi 16 kali lebih besar.
2. Untuk menjaga ukuran gambar: sebuah dither harus menghasilkan output pixel
dengan nilai 1 jika tingkat intensitas pemetakan kembali hanya pada posisi
pixel lebih besar dari entri matriks yang sesuai.
colormap(map)
colormap(fig,map)
colormap(ax,map)
colormap(fig,'default')
colormap(ax,'default')
cmap = colormap
cmap = colormap(fig)
cmap = colormap(ax)
Keterangan :
colormap (fig, map) menetapkan figure colormap yang ditentukan oleh fig.
colormap (ax, map) menetapkan peta warna pada sumbu yang ditentukan oleh
ax. Setiap sumbu dalam angka dapat memiliki colormap unik. Setelah Anda
menetapkan colormap ax, mengubah angka colormap tidak mempengaruhi
sumbu.
colormap (fig, 'default') menetapkan fifur colormap yang ditentukan oleh fig ke
colormap default.
colormap (ax, 'default') menetapkan sumbu colormap yang ditentukan oleh ax
ke colormap default.
Cmap = colormap mengembalikan matriks tiga kolom triplet RGB yang
mendefinisikan figure colormap saat ini.
Cmap = colormap (fig) mengembalikan colormap untuk figur yang ditentukan
oleh fig.
Cmap = colormap (ax) mengembalikan colormap untuk sumbu yang ditentukan oleh
ax.
im = imread('lena.bmp');
di = 4*ones(4,4);
[m n] = size(im);
mat = repmat(di, m/4, n/4);
im = im / 17;
dithered = im > mat;
imshow(dithered);
% Konversi ke 8-bit
[im8bit, cmap8bit] = rgb2ind(imRGB,256);
figure, imshow(im8bit, cmap8bit), title('24-8 Bit
Image');
figure, rgbplot(cmap8bit), title('24-8 Bit Cmap');
% Konversi ke 4-bit
[im4bit, cmap4bit] = rgb2ind(imRGB, 16);
figure, imshow(im4bit, cmap4bit), title('24-4 Bit
Image');
figure, rgbplot(cmap4bit), title('24-4 Bit Cmap');
% Merubah Colourmap
figure, imshow(imGIF, cmapGIF), title('Jet Cmap');
colormap('jet');
% Contoh konversi pada ruang warna berbeda
hsv_image24 = rgb2hsv(imRGB); % 24-bit
figure, imshow(hsv_image24), title('HSV 24-bit Image');
2. Jalankan script tersebut dan simpan hasilnya untuk dianalisis lebih lanjut.
3. Bandingkan hasil gambar luaran script “colormap” dan gambar hasil pada
matlab
% Rekontruksi RGB
reconstruct_imRGB =
uint8(256*ntsc2rgb(reconstruct_imYIQ));
figure, imshow(reconstruct_imRGB); title('Reconstructed
RGB Full Image');
% Menampilkan error bidang R,G,B
figure, imshow(256*abs(imRGB(:,:,1) -
reconstruct_imRGB(:,:,1))); title('Reconstructed R
Error');
figure, imshow(256*abs(imRGB(:,:,2) -
reconstruct_imRGB(:,:,2))); title('Reconstructed G
Error');
figure, imshow(256*abs(imRGB(:,:,3) -
reconstruct_imRGB(:,:,3))); title('Reconstructed B
Error');
2. Jalankan script tersebut dan simpan hasilnya untuk dianalisis lebih lanjut.
3. Bandingkan hasil gambar luaran script “chromasubsampling_eg1” dan gambar
hasil pada matlab
% Pusat citra
nmid = n/2;
mmid= m/2;
xoff = n/(zoom*2);
yoff = m/(zoom*2);
% show images
figure(1)
imshow(im);
title('Original Image')
figure(2)
imshow(newim);
title('Original Image Cropped')
figure(3)
imshow(newimzoom);
title('Zoomed Image (Aliasing Artifacts)')
2. Jalankan script tersebut dan simpan hasilnya untuk dianalisis lebih lanjut.
3. Bandingkan hasil gambar luaran script “zoom_alias” dan gambar hasil pada matlab
PERCOBAAN IV
DASAR-DASAR TEKNIK KOMPRESI
4.1 TUJUAN
Setelah mencoba percobaan ini diharapkan praktikan dapat lebih memahami
tentang:
1. Metode coding entropy
2. Algoritma Kompreis LZW/GIF
3. Pengkodean Transformasi dasar untuk citra
4.2 PERALATAN
1. Pesonal Computer
2. Software MATLAB 6.1 Keatas
ilmu ini adalah berdasarkan beberapa pertanyaan tentang apa itu informasi,
termasuk bagaimana cara penyimpanan dan pengiriman pesan (informasi).
(4.1)
Dimana, pi adalah probabilitas simbol si yang akan terjadi.
function H = ent(X)
X = X(:);
P = probs(X);
2. Buatlah sebuah script pada konsul editor Matlab dan simpan dengan nama
“probs.m”
function H = ent(X)
X = X(:);
P = probs(X);
figure(1); clf;
plot(q, H);
xlabel('Coin bias, q');
ylabel('Entropy (H), bits');
6. Jalankan sript tersebut, dan simpan hasil plot yang diperoleh. Berdasarkan hasil
plot tersebut, jelaskan karakteristik pengkodean entropy.
7. Buka M-file matlab di D:Percobaan4/Kompresi/huffman.m.
global CODE
CODE = cell(length(p), 1);
if length(p) > 1
p = p / sum(p);
s = reduce(p);
makecode(s, []);
else
CODE = {'1'};
end;
for i = 1:numel(CODE)
c = CODE{i};
t = c; c(c=='1') = '0'; c(t=='0') = '1';
CODE{i} = c;
end
%----------------------------------------------------------%
function s = reduce(p);
s = cell(length(p), 1);
for i = 1:length(p)
s{i} = i;
end
s = s(i);
s{2} = {s{1}, s{2}};
s(1) = [];
end
%----------------------------------------------------------%
function makecode(sc, codeword)
global CODE
if isa(sc, 'cell')
makecode(sc{1}, [codeword 0]);
makecode(sc{2}, [codeword 1]);
else
if numel(P) == 1
codes = {''};
return;
end
L = p(1:pivot);
R = p(pivot+1:end);
codesL = shannon_fano(L);
codesR = shannon_fano(R);
for i = 1:pivot
codes{i} = ['0' codesL{i}];
end
for i = pivot+1:numel(p)
codes{i} = ['1' codesR{i-pivot}];
end
C = cell(size(codes));
for i = 1:numel(idxp)
C(idxp(i)) = codes(i);
end
codes = C;
len = 1000000;
seq = randsrc(1, len, [1:numel(freq); probs]);
code = arithenco(seq, freq);
sa = numel(code);
ca = sa/len;
sh = -sum(probs .* log2(probs));
fprintf('Shannon''s limit: %f binary digits per sybmol\n\n',
sh);
fprintf('With arithmetic coding:\n');
codes = huffman(probs);
lenh = 0;
for i = 1:numel(codes)
lenh = lenh + len * probs(i) * numel(codes{i});
end
11. Jalankan sript ini, dan jelaskan hasil panjang kode dan rasio kompresi yang
dihasilkan pengkodean Huffman dan Shannon-Fano
%LZW DEMO
% string to compress
% str = '^WED^WE^WEE^WEB^WET';
str = 'BANANA_BANDANA';
% str = 'AAAAAAAAAAAAAAAA';
fprintf('String: %s\n')
fprintf('\n\n');
% pack it
[packed,table, alphabet]=norm2lzw(uint8(str));
fprintf('\n\n');
fprintf('Output code is:\n'), packed
fprintf('\n\n');
fprintf('Output Table (New Elements):\n');
% print table
[m n] = size(table);
for i = numel(alphabet)+1:n
fprintf('%d : %s\n', i, char(table{i}));
end
% return;
fprintf('\n\n');
fprintf('DECODING\n');
X = im(:);
len = numel(X);
lenh = len_huffman(X);
lena = len_arith(X);
fprintf('Naively:\n');
X0 = double(im(1:2:end, 1:2:end));
X1 = double(im(2:2:end, 1:2:end)) - X0;
X2 = double(im(1:2:end, 2:2:end)) - X0;
X3 = double(im(2:2:end, 2:2:end)) - X0;
X = X0(:);
D = [X1(:); X2(:); X3(:)];
lenhX = len_huffman(X);
lenhD = len_huffman(D);
lenh = lenhX + lenhD;
lenaX = len_arith(X);
lenaD = len_arith(D);
lena = lenaX + lenaD;
fprintf('\n\nAfter transform:\n');
fprintf('Original: %d,\n Huffman: %d (Ratio: %f),\n
Arithmetic: %d (Ratio: %f)\n', ...
len*8, lenh, lenh/(len*8), lena, lena/(len*8));
lenh = len_huffman(X);
lena = len_arith(X);
fprintf('Naively:\n');
fprintf('Original: %d,\n Huffman: %d (Ratio: %f),\n
Arithmetic: %d (Ratio: %f)\n', ...
len*8, lenh, lenh/(len*8), lena, lena/(len*8));
% Quantise
X1 = round(X1 ./ Q);
X2 = round(X2 ./ Q);
X3 = round(X3 ./ Q);
X = X0(:);
D = [X1(:); X2(:); X3(:)];
lenhX = len_huffman(X);
lenhD = len_huffman(D);
lenh = lenhX + lenhD;
lenaX = len_arith(X);
lenaD = len_arith(D);
lena = lenaX + lenaD;
fprintf('\n\nAfter transform:\n');
fprintf('Original: %d,\n Huffman: %d (Ratio: %f),\n
Arithmetic: %d (Ratio: %f)\n', ...
len*8, lenh, lenh/(len*8), lena, lena/(len*8));
% ReKonstruksi Citra
imrec = zeros(size(im));
imrec(1:2:end, 1:2:end) = X0;
imrec(2:2:end, 1:2:end) = X0 + X1*Q;
imrec(1:2:end, 2:2:end) = X0 + X2*Q;
imrec(2:2:end, 2:2:end) = X0 + X3*Q;
im = double(im);
out = [im imrec];
diff = abs(im - imrec);
figure(1); clf; sc(out);
figure(2); clf; sc(diff);
4. Amati hasil yang diperoleh dan jelaskan bagaimana kinerja codec (coder dan
decoder) kompresi sebelum dan sesudah menggunakan kuantisasi
PERCOBAAN V
DISCRETE COSINE TRANSFORM (DCT) DAN KOMPRESI CITRA
JPEG
5.1 TUJUAN
Adapun tujuan dari percobaan ini adalah:
1. Untuk mengetahui konsep penerapan transformasi untuk mendekorelasi
intensitas piksel citra
2. Untuk mengetahui konsep Discrete Cosine Transform (DCT)
3. Untuk mengetahui Proses kompresi JPEG.
5.2 PERALATAN
Peralatan yang digunakan pada percobaan ini adalah:
1. Laptop atau Personal Computer
2. Software MATLAB minimal versi 2012a
……………..(5.1)
Setiap element dari hasil transformasi S(u) merupakan hasil dot product atau
inner product dari masukan s(x) dan basis vektor. Faktor konstanta dipilih
sedemikian rupa sehingga basis vektornya orthogonal dan ternormalisasi. DCT juga
dapat diperoleh dari produk vektor (masukan) dan n x n matriks orthogonal yang
setiap barisnya merupakan basis vektor. Delapan basis vektor untuk n = 8 dapat
dilihat pada Gambar 5.1. Setiap basis vektor berkorespondensi dengan kurva
sinusoid frekuensi tertentu.
Barisan s(x) dapat diperoleh lagi dari hasil transformasinya S(u) dengan
menggunakan invers discrete cosine transform (IDCT), yang dirumuskan sebagai
berikut :
……….……..(5.2)
close all
clear all
figure(1) % plot f
stem(f);
% perhitungan DCT
D = dct(f);
figure(2) % plot D
stem(D);
D1 = bases*f';
figure % plot D1
stem(D1);
2. Pada script diatas, set f(i) = 100%, yang berarti seluruh vektor 1-dimensi
berukuran 8 bernilai sama. Jalankan program dan amati hasil luaran DCT 1-D .
3. Dengan cara yang sama, ganti f(i), dengan 5%, 70% dan 80%. Selanjutnya
jelaskan dan analisis:
a. Konsep dasar dari DCT didasarkan pada plot yang dikeluarkan oleh
DCT (figure 1 dan figure 2)
b. Bagaimanakah konsep pembangkitan fungsi basis pada DCT
c. Bagaimanakah hasil konstruksi DCT setelah dikalikan dengan fungsi
basis. Bandingkan hasil plot figure 2 dan figure 11.
N = 8;
A = dctmtx(8);
A = A';
offset = 5;
basisim = ones(N*(N+offset))*0.5;
B=zeros(N,N,N,N);
for i=1:N
for j=1:N
B(:,:,i,j)=A(:,i)*A(:,j)';
end;
end;
for i=1:N
for j=1:N
minb = min(min(B(:,:,i,j)));
maxb = max(max(B(:,:,i,j)));
rangeb = maxb - minb;
if rangeb == 0
minb =0;
rangeb = maxb;
end;
imb = B(:,:,i,j) - minb;
imb = imb/rangeb;
figure(1)
imshow(basisim)
figure(2)
dispbasisim = imresize(basisim, 4, 'bilinear');
imshow(dispbasisim);
% dct2manual.m
close all;
im = im2double(rgb2gray(imread('lenna.png')));
im = imresize(im, 1/16);
[h w] = size(im);
D1 = dctmtx(h);
D2 = zeros(h*h, h*h);
idx = 1;
for i = 1:h
for j = 1:h
outer = D1(:, j) * D1(:, i)';
D2(:, idx) = outer(:);
idx = idx + 1;
end
end
% Manual dct2
F = D2 * im(:);
F = reshape(F, h, h)
% Proper dct2
Fmatlab = dct2(im)
% Inverse:
frec = D2' * F(:);
frec = reshape(frec, h, h);
3. Pada konsul matlab amati luaran hasil perhitungan manual (F) dan fungsi dari
matlab (Fmatlab). Berikan penjelasan terhadap nilai yang diperoleh
close all;
RGB = imread('autumn.tif');
I = rgb2gray(RGB);
figure(1); imshow(I);
J = dct2(I);
% Truncate
f = 40;
if 1
JT = zeros(size(J));
JT(1:f, 1:f) = J(1:f, 1:f);
J = JT;
end
figure(2);
J(0 == J) = 1e-10;
E = log(abs(J));
imagesc(E);
figure(3);
imagesc(idct2(J)); colormap gray;
3. Rubahlah koefision DCT, dan amati dan jelaskan perubahan kualitas citra
rekonstruksi dan nilai perbedaannya dengan citras asli (MSE)
PERCOBAAN 6
ESTIMASI GERAK PADA PENGKODEAN VIDEO
6.1 TUJUAN
Mempelajari teknik estimasi gerak pada pengkodean video prediktif
Mempelajari teknik pencarian gerak menggunakan teknik Exhaustive Block
Matching Algorithm (EBMA)
6.2 PERALATAN
Program matlab 6.1 keatas
Percobaan ini difokuskan pada simulasi estimasi gerak 2-D antara dua frame
yang diketahui sebagai ψ(x,y,t1) dan ψ(x,y,t2). Vektor gerak (MV) di x antara waktu
t1 dan t2 dinyatakan sebagai perpindahan titik ini dari t1 ke t2. Selanjutnya, frame di
waktu t1 bdisebut sebagai anchor frame dan waktu t2 disebut sebagai tracked frame.
Bergantung pada penerapannya, anchor frame dapat berada sebelum atau sesudah
waktu tracked frame. Seperti ditunjukkan pada Gambar 6.2, persoalan disebut
sebagai forward motion estimation, ketika t1 < t2, dan disebut sebagai backward
motion estimation, ketika t1 > t2. Untuk menyederhanakan notasi, maka sebutlah
ψ1(x) dan ψ2(x) masing-masing untuk anchor frame dan tracked frame. Secara
umum, medan gerak dinyatakan sebagai d(x;a), dimana a = [a1, a2,…..,aL]T adalah
sebuah vector yang mengandung seluruh parameter gerak. Maka fungsi pemetaan
dapat dinyatakan sebagai w(x;a) = x + d(x;a). Permasalahan estimasi gerak adalah
mengestimasi vektor parameter gerak a.
EDFD a 2 w x; a 1 x
p
(6.1)
x
dimana, ٨ adalah domain seluruh piksel dalam ψ1, dan p adalah bilangan positif.
Jika p = 1, error disebut dengan mean absolute difference (MAD), dan ketika p =
2, error disebut dengan mean square error (MSE). Error frame, e(x;a) = ψ2(w(x;a))
- ψ1(x) disebut dengan displaced frame difference (DFD).
Kondisi yang diperlukan untuk meminimalkan EDFD adalah menghilangkan
gradientnya. Untuk kasus p = 2, gradiennya adalah:
EDFD d x
a x
2 2 w x; a 1 x
a
2 w x; a (6.2)
dimana
d x d x d x
T
........
d a1 a2 aL
a d y d y d y
........
a1 a2 aL
B m , Bm Bn 0,
mn (6.3)
mM
Secara teoritis, sebuah blok dapat berbentuk polygon atau triangular. Dalam
prakteknya bentuk kotak banyak digunakan oleh sebagian besar codec video
standar. Untuk kasus paling sederhana, pergerakan dalam setiap blok diasumsikan
konstan yaitu seluruh blok memiliki translasi yang sama. Skema ini disebut dengan
block-wise translational model. Pada percobaan ini, hanya mempertimbangkan
kasus yang sederhana dimana permasalahan estimasi gerak adalah untuk
mendapatkan motion vector (MV) tunggal untuk setiap blok. Tipe algoritma ini
secara kolektif dinyatakan sebagai Block Matching Algorithm (BMA).
E d m , m M x d x
p
2 m 1 (6.4)
mM xBm
Untuk estimasi MV pada blok individu, error pada sebuah blok dinyatakan
dengan:
Em d m x d x
p
2 m 1 (6.5)
xBm
Satu cara untuk menghitung dm yang mampu meminumkan persamaan error diatas
adalah dengan menggunakan exhaustive search dan metode ini dikenal dengan
exhaustive block matching algorithm (EBMA). Seperti diilustrasikan pada Gambar
6.3, EBMA menentukan optimal dm untuk sebuah blok dalam anchor frame ψ1
adalah dengan membandingkannya dengan seluruh kandidat blok B’m dalam
tracked frame ψ2 dalam area pencarian yang telah ditetapkan dan mendapatkan satu
dengan error minimal. Perpindahan antara dua blok adalah MV yang telah
diestimasi.
(6.6)
frame1=fread(fopen('foreman66.y'),[dx,dy]);
frame2=fread(fopen('foreman69.y'),[dx,dy]);
c. Simpan perubahan yang telah dilakukan, dan proses seluruh frame dan
catat/print screen running time, PSNR serta properties data di workspace
matlab
>>EBMA_main
>>pimg1=pimg;
2. Analisis kualitas visual frame prediksi (menggunakan mtode mean opinion skor
(MOS)), PSNR dan running time.
b. Simpan perubahan yang telah dilakukan, dan proses seluruh frame dan
catat/print screen running time, PSNR serta properties data di workspace
matlab
>>EBMA_main
>>pimg2=pimg;
2. Analisis kualitas visual frame prediksi (menggunakan mtode mean opinion skor
(MOS)), PSNR dan running time
3. Bandingkan hasil yang diperoleh dengan hasil ketika menggunakan fungsi
EBMA_integer(), metode manakah yang lebih akurat (diukur dari nilai
PSNR dan running time.
b. Simpan perubahan yang telah dilakukan, dan proses seluruh frame dan
catat/print screen running time, PSNR serta properties data di workspace
matlab
>>EBMA_main
>>pimg3=pimg;