You are on page 1of 24

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN

ĐIỆN TỬ - VIỄN THÔNG

***

BÁO CÁO THÍ NGHIỆM

MÔN ĐA PHƯƠNG TIỆN


Nhóm biên soạn: TS. Vương Hoàng Nam

ThS. Ngọ Thị Phượng

Phòng thí nghiệm: 309B Nhà C9

Họ tên sinh viên: Đỗ Mỹ Linh

Mã lớp TN: 688595

Mã số SV: 20162389

Lớp: Điện tử 02

Hà Nội 2019
MỤC LỤC

CHƯƠNG 1: CÁC THAO TÁC XỬ LÝ ẢNH TRÊN MATLAB..........................1

1.1 Thực hành trên lớp.....................................................................................1

1.1.1 Đọc hình ảnh bằng matlab và hiển thị hình ảnh..................................1

1.1.2 Hiển thị 3 ảnh thành phần R, G, B. Vẽ histogram của 3 thành phần
này...............................................................................................................1

1.1.3 Chuyển đổi ảnh sang màu xám. Vẽ histogram của ảnh xám...............2

1.1.4 Hiển thị ảnh âm bản của bức ảnh........................................................3

1.2 Yêu cầu về nhà...........................................................................................4

1.2.1 Đọc hình ảnh bằng Matlab..................................................................4

1.2.2 Hiển thị 3 ảnh thành phần R, G, B. Vẽ histogram của 3 thành phần
này:..............................................................................................................4

1.2.3 Chuyển đổi ảnh sang ảnh xám. Vẽ histogram của ảnh xám................5

1.2.4 Hiển thị ảnh âm bản và histogram của ảnh âm bản.............................6

1.3 Nhận xét.....................................................................................................7

CHƯƠNG 2: BIẾN ĐỔI DCT ẢNH KHỐI TRƯỚC KHI NÉN............................8

2.1 Thực hành trên lớp.....................................................................................8

2.2 Yêu cầu về nhà...........................................................................................9

2.2.1 Thực hiện biến đổi DCT cho ma trận sau:...........................................9

2.2.2 Tạo 1 bức ảnh xám và thực hiện mô phỏng.........................................9

2.3 Nhận xét...................................................................................................10

CHƯƠNG 3: TIẾP CẬN XỬ LÝ AUDIO VÀ VIDEO........................................11

3.1 Thực hành trên lớp...................................................................................11

3.1.1 Audio................................................................................................11
3.1.2 Video.................................................................................................12

3.2 Yêu cầu về nhà.........................................................................................13

3.2.1 Audio................................................................................................13

3.2.2 Video..............................................................................................14

3.3 Nhận xét...................................................................................................17

CHƯƠNG 4: THIẾT KẾ BỘ MÃ HÓA-GIẢI MÃ TỰA JPEG...........................17

4.1 Thực hành trên lớp...................................................................................17

4.1.1 Chuyển đổi không gian màu..............................................................17

4.1.2 Chuyển đổi không gian màu từ RGB sang YUV và mã hóa JPEG ảnh
YUV..........................................................................................................18

4.1.3 Mã hóa JPEG ảnh YUV....................................................................19

4.3 Nhận xét...................................................................................................21


CHƯƠNG 1: CÁC THAO TÁC XỬ LÝ ẢNH TRÊN
MATLAB

1.1 Thực hành trên lớp

1.1.1 Đọc hình ảnh bằng matlab và hiển thị hình ảnh
A = imread('abc.jpg'); % ham doc anh trong thu muc hien hanh
imshow(A); % ham hien thi anh

1.1.2 Hiển thị 3 ảnh thành phần R, G, B. Vẽ histogram của 3 thành phần này
B= A; % cho R,G,B la 3 ma tran cung luu tru anh A
C= A;
D= A;
B(:,:,2) = 0; R(:,:,3) = 0; % giu nguyen gia tri R,cac thanh phan khac bang
0
C(:,:,1) = 0; G(:,:,3) = 0; % giu nguyen gia tri G,cac thanh phan khac bang
0
D(:,:,1) = 0; B(:,:,2) = 0; % giu nguyen gia tri B,cac thanh phan khac bang
0
subplot(3,3,4); imshow(B); title('R'); %ve R vao o trong thu 4
subplot(3,3,5); imshow(C); title('G'); %ve G vao o trong thu 5
subplot(3,3,6); imshow(D); title('B'); %ve B vao o trong thu 6

1
R G B

subplot(234); imhist(A(:,:,1)); title('Histogram R');


subplot(235); imhist(A(:,:,2)); title('Histogram G');
subplot(236); imhist(A(:,:,3)); title('Histogram B');

Histogram R Histogram G Histogram B


1500 2000

1000 1500
1000
1000
500 500
500

0 0 0
0 100 200 0 100 200 0 100 200

1.1.3 Chuyển đổi ảnh sang màu xám. Vẽ histogram của ảnh xám
gray = rgb2gray(A);
subplot(121); imshow(gray); title('Anh xam');
subplot(122); imhist(gray); title('Histogram anh xam');

2
Histogram anh xam
1500

Anh xam
1000

500

0 50 100 150 200 250

1.1.4 Hiển thị ảnh âm bản của bức ảnh


amban = 255.-gray;
subplot(121); imshow(amban); title('Anh am ban');
subplot(122); imhist(amban); title('Histogram anh am ban');
Histogram anh am ban
1500

Anh am ban
1000

500

0 50 100 150 200 250

3
1.2 Yêu cầu về nhà

1.2.1 Đọc hình ảnh bằng Matlab


A = imread('ABC.jpg'); % ham doc anh trong thu muc hien hanh
imshow(A); % ham hien thi anh

1.2.2 Hiển thị 3 ảnh thành phần R, G, B. Vẽ histogram của 3 thành phần này:
B= A; % cho R,G,B la 3 ma tran cung luu tru anh A
C= A;
D= A;
B(:,:,2) = 0; R(:,:,3) = 0; % giu nguyen gia tri R,cac thanh phan khac bang
0
C(:,:,1) = 0; G(:,:,3) = 0; % giu nguyen gia tri G,cac thanh phan khac bang
0
D(:,:,1) = 0; B(:,:,2) = 0; % giu nguyen gia tri B,cac thanh phan khac bang
0
subplot(3,3,4); imshow(B); title('R'); %ve R vao o trong thu 4

4
subplot(3,3,5); imshow(C); title('G'); %ve G vao o trong thu 5
subplot(3,3,6); imshow(D); title('B'); %ve B vao o trong thu 6

R G B

subplot(234); imhist(A(:,:,1)); title('Histogram R');


subplot(235); imhist(A(:,:,2)); title('Histogram G');
subplot(236); imhist(A(:,:,3)); title('Histogram B');

Histogram R Histogram G Histogram B


4000
3000
3000
3000

2000 2000
2000

1000 1000
1000

0 0 0

0 100 200 0 100 200 0 100 200

1.2.3 Chuyển đổi ảnh sang ảnh xám. Vẽ histogram của ảnh xám
A= imread('xyz.jpg');
gray = rgb2gray(A);
subplot(121); imshow(gray); title('Anh xam');
subplot(122); imhist(gray); title('Histogram anh xam');

5
Histogram anh xam

3500

3000
Anh xam

2500

2000

1500

1000

500

0 50 100 150 200 250

1.2.4 Hiển thị ảnh âm bản và histogram của ảnh âm bản


amban = 255.-gray;
subplot(121); imshow(amban); title('Anh am ban');
subplot(122); imhist(amban); title('Histogram anh am ban');

Histogram anh am ban

3500

3000
Anh am ban

2500

2000

1500

1000

500

0 50 100 150 200 250

6
1.3 Nhận xét
- Hàm imread() dùng để đọc hình ảnh và imshow() trong matlab dùng để hiện
thị hình ảnh
- Ảnh xám là ảnh cường độ
- Ảnh âm bản đối xứng với ảnh xám qua gốc trục tung

7
CHƯƠNG 2: BIẾN ĐỔI DCT ẢNH KHỐI TRƯỚC KHI
NÉN

2.1 Thực hành trên lớp


% Buoc 1
A = zeros(16); B = zeros(16); % tao ma tran 0 16x16

% Buoc 2
A(4:13,7:10)=255;
A(5:12,5:12)=255;
A(7:10,4:13)=255; % Hien thi anh tao ban dau subplot(121);
imshow(A); title('Anh tao ban dau');

% Buoc 3: Chia anh A thanh 4 khoi 8x8


A1 = A(1:8, 1:8); A2 = A(1:8, 9:16);
A3 = A(9:16, 1:8); A4 = A(9:16, 9:16);

% Buoc 4: Thuc hien DCT tung khoi anh


A1_dct = dct2(A1); A2_dct = dct2(A2);
A3_dct = dct2(A3); A4_dct = dct2(A4);

% Buoc 5 bang trong so luong tu hoa


Q = [ 16 11 10 16 24 40 51 61;
12 12 14 19 26 58 60 55;
14 13 16 24 40 57 69 56;
14 17 22 29 51 87 80 62;
18 22 37 56 68 109 103 77;
24 35 55 64 81 104 113 92;
49 64 78 87 103 121 120 101;
72 92 95 96 112 100 103 99];

%Buoc 6 chia cho bang luong tu hoa


A1_lt = A1_dct./Q; A2_lt = A2_dct./Q;
A3_lt = A3_dct./Q; A4_lt = A4_dct./Q;

% Buoc 7 bien doi DCT nguoc


A1_I = idct2(A1_lt);
A2_I = idct2(A2_lt);
A3_I = idct2(A3_lt);
A4_I = idct2(A4_lt);

% Buoc 8 ghep lai anh


B(1:8, 1:8) = A1_I; B(1:8, 9:16) = A2_I;
B(9:16, 1:8) = A3_I; B(9:16, 9:16) = A4_I;

% Hien thi anh B


subplot(122); imshow(B); title('Anh tao sau khi nen');

8
Anh tao ban dau Anh tao sau khi nen

2.2 Yêu cầu về nhà

2.2.1 Thực hiện biến đổi DCT cho ma trận sau:

A=[ 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20
40 40 40 40 40 40 40 40
40 40 40 40 40 40 40 40
40 40 40 40 40 40 40 40
40 40 40 40 40 40 40 40]
dctA =
[ 240.0000 0 0 0 0 0 0 0
-72.4902 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
25.4552 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
-17.0086 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
14.4192 0 0 0 0 0 0 0]

2.2.2 Tạo 1 bức ảnh xám và thực hiện mô phỏng


% Buoc 1
A = zeros(16); B = zeros(16); % tao ma tran 0 16x16

% Buoc 2
A(6:11,6:11)=255; % Hien
thi anh tao ban dau
subplot(121); imshow(A); title('Anh tao ban dau');

% Buoc 3: Chia anh A thanh 4 khoi 8x8


A1 = A(1:8, 1:8); A2 = A(1:8, 9:16);
A3 = A(9:16, 1:8); A4 = A(9:16, 9:16);

% Buoc 4: Thuc hien DCT tung khoi anh

9
A1_dct = dct2(A1); A2_dct = dct2(A2);
A3_dct = dct2(A3); A4_dct = dct2(A4);

% Buoc 5 bang trong so luong tu hoa


Q = [ 16 11 10 16 24 40 51 61;
12 12 14 19 26 58 60 55;
14 13 16 24 40 57 69 56;
14 17 22 29 51 87 80 62;
18 22 37 56 68 109 103 77;
24 35 55 64 81 104 113 92;
49 64 78 87 103 121 120 101;
72 92 95 96 112 100 103 99];

%Buoc 6 chia cho bang luong tu hoa


A1_lt = A1_dct./Q; A2_lt = A2_dct./Q;
A3_lt = A3_dct./Q; A4_lt = A4_dct./Q;

% Buoc 7 bien doi DCT nguoc


A1_I = idct2(A1_lt); A2_I = idct2(A2_lt);
A3_I = idct2(A3_lt); A4_I = idct2(A4_lt);

% Buoc 8 ghep lai anh


B(1:8, 1:8) = A1_I; B(1:8, 9:16) = A2_I;
B(9:16, 1:8) = A3_I; B(9:16, 9:16) = A4_I;

% Hien thi anh B


subplot(122); imshow(B); title('Anh tao sau khi nen');

2.3 Nhận xét


- Ảnh sau khi nén khác ảnh tạo ban đầu

10
CHƯƠNG 3: TIẾP CẬN XỬ LÝ AUDIO VÀ VIDEO

3.1 Thực hành trên lớp

3.1.1 Audio
1. Xử lý audio.wav bất kỳ
[data, sr] = audioread('popeyes.wav'); % Doc file .wav
sound(data, sr); % Bat file audio qua loa hoac headphone
% Ve dang song cua du lieu audio
subplot(2, 1, 1); plot(data);
A = data.*1.1; % Tang kich thuoc dang song len 10%
sound(A, sr); % Phat song da tang kich thuoc qua loa hoac headphone
% Ve dang song sau khi tang kich thuoc
subplot(2, 1, 2); plot(A);

0.5

-0.5

-1
0 1 2 3 4 5 6
5
10

-1

-2
0 1 2 3 4 5 6
5
10

2. Tạo vector 2*8192


r=rand(1,2*8192);
sound(r);
plot(r);

11
1

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

0
0 2000 4000 6000 8000 10000 12000 14000 16000 18000

3.1.2 Video
1. Bật video trong Matlab
obj = VideoReader('321.avi');
video = obj.read();
implay(video);

12
2. Hiển thị từng khung ảnh
file=aviinfo('321.avi'); %load thong tin file
nFrames=file.NumFrames; %tong so khung trong video Rate=file.AudioRate;
for k =1:10 %lay 10 khung dau tien
this_frame=read(obj, k);
thisfig=figure();
image(this_frame); %hien thi 1 khung anh
title(sprintf('Frame #%d', k));
end

3. Tạo ra một đoạn phim mới bằng cách hoán vị các khung ảnh ban đầu
obj = VideoReader('321.avi'); video = obj.read();
newavi=VideoWriter('newvideo.avi'); %tao ra 1 file avi moi
newavi.FrameRate=Rate;
open(newavi);
for k=200:(-1):1 %tao 200 khung anh
this_frame = read(obj, k); %doc tung khung mot
writeVideo(newavi, this_frame);
end
disp('Closing movie file') %hien thi len dong lenh chinh
close(newavi);
disp('display newvideo');
implay('newvideo.avi');

3.2 Yêu cầu về nhà

3.2.1 Audio
1. Xử lý file audio .wav bất kỳ
[data, sr] = wavread('BeAsOne.wav'); % Doc file .wav
sound(data, sr); % Bat file audio qua loa hoac headphone
% Ve dang song cua du lieu audio
subplot(2, 1, 1); plot(data);
A = data.*1.3; % Tang kich thuoc dang song len 30%
sound(A, sr); % Phat song da tang kich thuoc qua loa hoac headphone
% Ve dang song sau khi tang kich thuoc

13
subplot(2, 1, 2); plot(A);

2. Tạo vector audio


r = rand(1, 2*4096);
sound(r);
plot(r);

3.2.2 Video
1. Bật video trong Matlab
obj = VideoReader('UEFA Champions League 2018-19 Intro HD.avi');
video = obj.read();
implay(video);

14
2. Tìm hiểu các hàm sau:

+ getframe - Capture axes or figure as movie frame

+ im2frame - Convert image to movie frame

+ frame2im - Return image data associated with movie frame

+ movie - Play recorded movie frames

+ mmfileinfo - Information about multimedia file

+ VideoReader Create a multimedia reader object

+ avifile Create a new AVI file

+ aviread - Read Audio/Video Interleaved (AVI) file

3. Hiển thị từng khung ảnh


file=aviinfo('UEFA Champions League 2018-19 Intro HD.avi'); %load thong tin
file
nFrames=file.NumFrames; %tong so khung trong video

15
Rate=file.AudioRate;
for k =1:10 %lay 10 khung dau tien
this_frame=read(obj, k);
thisfig=figure();
image(this_frame); %hien thi 1 khung anh
title(sprintf('Frame #%d', k));
end

4. Tạo ra một đoạn phim mới bằng cách hoán vị các khung ảnh ban đầu
obj = VideoReader('UEFA Champions League 2018-19 Intro HD.avi');
video = obj.read();

newavi=VideoWriter('newvideo.avi'); %tao ra 1 file avi moi


newavi.FrameRate=Rate; open(newavi);
for k=200:(-1):1 %tao 200 khung anh
this_frame = read(obj, k); %doc tung khung mot
writeVideo(newavi, this_frame);
end
disp('Closing movie file') %hien thi len dong lenh chinh
close(newavi);
disp('display newvideo');
implay('newvideo.avi');

16
3.3 Nhận xét
- Dùng hàm sound() để phát âm thanh qua loa
- Sound(y, Fs) để gửi tín hiệu audio y tới speaker với tốc độ lấy mẫu Fs -
Có thể tạo âm thanh từ 1 ma trận ngẫu nhiên
- Có thể mở video qua matlab nhưng số frame không được quá lớn - Video
được chia thành các frame ghép lại với nhau
- Ta có thể dùng matlab hoán đổi các frame để tạo ra 1 đoạn video mới

CHƯƠNG 4: THIẾT KẾ BỘ MÃ HÓA-GIẢI MÃ TỰA


JPEG

4.1 Thực hành trên lớp

4.1.1 Chuyển đổi không gian màu


clear all, close all;
imRGB = imread('xyz.jpg');
figure, imshow(imRGB), title('RGB Full Image');
imYIQ = rgb2ntsc(imRGB);

%Subsample the I and Q Channels 4:2:0


imYIQsubI = imresize(imYIQ(:,:,2), 0.5,'bilinear');
imYIQsubQ = imresize(imYIQ(:,:,3), 0.5,'bilinear');

%We have have size image so resample back up


imYIQupsampI = imresize(imYIQsubI, 2);
imYIQupsampQ = imresize(imYIQsubQ, 2);

reconstruct_imYIQ = imYIQ; %Copy YIQ keep Y


reconstruct_imYIQ(:,:,2) = imYIQupsampI;
reconstruct_imYIQ(:,:,3) = imYIQupsampQ;

%Remake RGB and show


reconstruct_imRGB = uint8(256*ntsc2rgb(reconstruct_imYIQ));
figure, imshow(reconstruct_imRGB); title('Reconstructed RGB Full Image');
%show R, G, B plane errors
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');

17
Reconstructed RGB Full Image
RGB Full Image

Reconstructed G Error Reconstructed B Error


Reconstructed R Error

4.1.2 Chuyển đổi không gian màu từ RGB sang YUV và mã hóa JPEG ảnh YUV
 Viết hàm rgb2yuv:
function O = rgb2yuv(I)
[i, j, k] = size(I);
CONVERTER = [0.299 0.587 0.114
-0.14713 -0.28886 0.436
0.615 -0.51498 -0.10001];
for row = 1:i
for col = 1:j
RGB = [I(row, col, 1) I(row, col, 2)
I(row, col, 3)];
YUV = CONVERTER * double(RGB);
O(row, col, :) = uint8(YUV);
end
end
return

 Chuyển đổi ảnh RGB sang YUV


imRGB = imread('ABC.png');
subplot(2,3,1); imshow(imRGB); title('RGB Image');
imYUV = rgb2yuv(imRGB);
% Subsample the I and Q Channels 4:2:0 Type Subsampling
imYUVsubU = imresize(imYUV(:,:,2), 0.5, 'bilinear');
imYUVsubV = imresize(imYUV(:,:,3), 0.5, 'bilinear');
% We have size image so resample back up

18
imYUVupsampU = imresize(imYUVsubU, 2);
imYUVupsampV = imresize(imYUVsubV, 2);

reconstruct_imYUV = imYUV; % Copy YUV keep Y


reconstruct_imYUV(:,:,2) = imYUVupsampU;
reconstruct_imYUV(:,:,3) = imYUVupsampV;
reconstruct_imRGB = uint8(256*ntsc2rgb(reconstruct_imYUV));

figure, imshow(reconstruct_imRGB); title('Reconstruct RGB Full Image');


subplot(2,3,4);
imshow(256*abs(imRGB(:,:,1) - reconstruct_imRGB(:,:,1)));
title('Reconstruct R Error');
subplot(2,3,5);
imshow(256*abs(imRGB(:,:,2) - reconstruct_imRGB(:,:,2)));
title('Reconstruct G Error');
subplot(2,3,6);
imshow(256*abs(imRGB(:,:,3) - reconstruct_imRGB(:,:,3)));
title('Reconstruct B Error');

4.1.3 Mã hóa JPEG ảnh YUV


Mã hóa JPEG thành phần Y:
clc; clear all;
I = imread('heaven.jpg');
I = rgb2gray(I);
I1 = I;
[row, coln] = size(I);
I = double(I);

19
I = I - (128*ones(256));
QX = [16 11 10 16 24 40 51 61;
12 12 14 19 26 58 60 55;
14 13 16 24 40 57 69 56;
14 17 22 29 51 87 80 62;
18 22 37 56 68 109 103 77;
24 35 55 64 81 104 113 92;
49 64 78 87 103 121 120 101;
72 92 95 96 112 100 103 99];

DCT_matrix8 = dct(eye(8)); iDCT_matrix8


= DCT_matrix8';

dct_restored = zeros(row, coln);


QX = double(QX); for i1 = [1:8:row]
for i2 = [1:8:coln] zBLOCK = I(i1:i1+7,
i2:i2+7); win1 =
DCT_matrix8*zBLOCK*iDCT_matrix8;
dct_domain(i1:i1+7, i2:i2+7) = win1; end
end for i1 = [1:8:row] for i2 =
[1:8:coln] win1 = dct_domain(i1:i1+7,
i2:i2+7); win2 = round(win1./QX);
dct_quantized(i1:i1+7, i2:i2+7) = win2;
end end for i1 = [1:8:row] for i2 =
[1:8:coln] win2 = dct_quantized(i1:i1+7,
i2:i2+7); win3 = win2.*QX;
dct_dequantized(i1:i1+7, i2:i2+7) =
win3; end end for i1 = 1:8:row for i2
= 1:8:coln win3 =
dct_dequantized(i1:i1+7, i2:i2+7); win4
= iDCT_matrix8*win3*DCT_matrix8;
dct_restored(i1:i1+7, i2:i2+7) = win4;
end end

I2 = dct_restored;
K = mat2gray(I2);

figure(1); imshow(I1); title('original image'); figure(2);


imshow(K); title('restored image from DCT');

mse_Y = mean(mean(I2-K).^2); psnr_Y


= 10*log10(255^2/mse);

20
4.3 Nhận xét
- Nguyên lý của phương pháp nén JPEG là: cắt ảnh thành từng khối nhỏ, phân
tích tất cả dữ liệu về màu sắc, độ sang bằng các phương trình ma trận. Ảnh
màu trong không gian RGB được chuyển đổi qua hệ YCbCr
- Dùng phép biến đổi Cosin rời rạc sau đó lượng tử hóa và mã hóa thành
phương pháp Huffman
- Khi giải nén ảnh, ta làm ngược lại quá trình trên
- Kết quả thu được ảnh sau khi giải nén giống hệt ảnh ban đầu

21

You might also like