Tải bản đầy đủ (.pdf) (21 trang)

Báo cáo thí nghiệm môn đa phương tiện đại học bách khoa hà nội

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.58 MB, 21 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THƠNG

an

co

ng

.c

om

----

cu

u

du

on

g

th

BÁO CÁO THÍ NGHIỆM
MƠN: ĐA PHƯƠNG TIỆN

Họ tên sinh viên



: Lương Văn Minh

Mã lớp TN

: 671035

MSSV

: 20152445

Lớp

: Điện tử 06 – K60

Email

:

Hà Nội, 2018

CuuDuongThanCong.com

/>

MỤC LỤC
MODULE 1: CÁC THAO TÁC XỬ LÝ ẢNH TRÊN MATLAB ............................2
MODULE 2: BIẾN ĐỔI DCT ẢNH KHỐI TRƯỚC KHI NÉN ..............................7
MODULE 3: TIẾP CẬN XỬ LÝ AUDIO VÀ VIDEO ...........................................11


cu

u

du

on

g

th

an

co

ng

.c

om

MODULE 4. THIẾT KẾ BỘ MÃ HÓA – GIẢI MÃ TỰA JPEG ...........................17

CuuDuongThanCong.com

/>

MODULE 1: CÁC THAO TÁC XỬ LÝ ẢNH
TRÊN MATLAB

1. Đọc file ảnh từ MatLab
Code:
A = imread('myAvt.jpg'); % Ham doc anh trong thu muc hien hanh
imshow(A); % Ham hien thi anh

cu

u

du

on

g

th

an

co

ng

.c

om

Kết quả thu được:

Nhận xét:

Ma trận ảnh A thu được là một mảng dữ liệu 3 chiều kích thước 256x256x3 định
nghĩa các giá trị màu red, green, blue (giá trị 0 – 255) cho mỗi pixel riêng biệt.
2. Hiển thị 3 ảnh thành phần của ảnh RGB của ảnh và vẽ histogram của 3 ảnh
thành phần này
Code:
A = imread('myAvt.jpg'); % Ham doc anh trong thu muc hien hanh
R = A; G = A; B = A;
R(:, :, 2) = 0; R(:, :, 3) = 0; % Giu nguyen thanh phan R
G(:, :, 1) = 0; G(:, :, 3) = 0; % Giu nguyen thanh phan G
B(:, :, 1) = 0; B(:, :, 2) = 0; % Giu nguyen thanh phan B

2

CuuDuongThanCong.com

/>

subplot(331);
subplot(334);
subplot(335);
subplot(336);
subplot(337);
subplot(338);
subplot(339);

imshow(A);
imshow(R); title('R'); % Anh thanh phan
imshow(G); title('G'); % Anh thanh phan
imshow(B); title('B'); % Anh thanh phan
imhist(A(:,:,1)); % Histogram cua thanh

imhist(A(:,:,2)); % Histogram cua thanh
imhist(A(:,:,3)); % Histogram cua thanh

R
G
B
phan R
phan G
phan B

cu

u

du

on

g

th

an

co

ng

.c


om

Kết quả thu được:

3. Chuyển đổi sang ảnh xám. Vẽ histogram của ảnh này.
Code:
A = imread('myAvt.jpg');
gray = rgb2gray(A); % Chuyen sang anh xam
subplot(121); imshow(gray); title('Anh xam');
subplot(122); imhist(gray); title('Histrogram cua anh xam');

3

CuuDuongThanCong.com

/>

on

g

th

an

co

ng

.c


om

Kết quả thu được:

u

Code:

du

Tăng độ tương phản của hình ảnh đầu ra

cu

A = imread('myAvt.jpg');
gray = rgb2gray(A); % Chuyen sang anh xam
subplot(121); imshow(gray); title('Anh xam');
A_adjust = imadjust(gray, [0.35 0.65]); % Dieu chinh do tuong phan
subplot(122); imshow(A_adjust); title('Anh chinh do tuong phan');

4

CuuDuongThanCong.com

/>

on

g


th

an

co

ng

.c

om

Kết quả thu được:

u

Code:

du

5. Hiển thị ảnh âm bản

cu

A = imread('myAvt.jpg');
gray = rgb2gray(A); % Chuyen
amban = 255.-gray; % Chuyen
subplot(121); imshow(amban);
subplot(122); imhist(amban);

xlim([0 255]);

sang anh xam
sang anh am ban
title('Anh am ban');
title('Histogram cua anh am ban');

5

CuuDuongThanCong.com

/>

cu

u

du

on

g

th

an

co

ng


.c

om

Kết quả thu được:

6

CuuDuongThanCong.com

/>

MODULE 2: BIẾN ĐỔI DCT ẢNH KHỐI
TRƯỚC KHI NÉN
1. Công thức biến đổi cosine rời rạc thuận và ngược của một ma trận 2 chiều
8x8.
Giá trị x(n1 , n2 ) biểu diễn các mức xám của ảnh trong miền không gian, X (k1 , k2 ) là
các hệ số sau biến đổi DCT trong miền tần số.

khi   0
khi   0

co

 2
Trong đó các hệ số C ( )  
1

.c


7
7
1
 2k  1

 2k  1

X (k1 , k2 ) cos  1 n1  cos  2 n2 


4C (n1 )C (n2 ) k1 0 k2 0
 16

 16


ng

x(n1 , n2 ) 

7
7
1
 2n  1

 2n  1

x(n1 , n2 ) cos  1 k1  cos  2 k2 



4C (k1 )C (k2 ) n1 0 n2 0
 16

 16


om

X (k1 , k2 ) 

an

Sử dụng MatLab thực hiện biến đổi DCT thuận và ngược cho một ma trận 8x8
ngẫu nhiên. Nhận xét.

th

Tạo ma trận 8x8 ngẫu nhiên bằng lệnh:
a = randi([0 255], 8, 8);

on

g

Ta có được một ma trận 8x8 như sau:
a =
245

107


173

70

112

181

245

231

247

234

193

11

97

193

87

190

24


195

70

149

u

202

cu

du

208

233

248

245

100

210

203

174


57

161

245

167

167

177

47

167

192

24

124

9

43

81

125


41

65

71

204

217

180

243

114

30

129

140

36

239

8

8


165

127

178

32

40

Thực hiện biến đổi DCT bằng hàm dct2
a_dct = dct2(a);
a_dct =
1.0e+03 *
1.1162

0.1028

0.0457

-0.0996

-0.0963

-0.0243

0.0392

-0.0266


7

CuuDuongThanCong.com

/>

0.1351

0.0586

0.0802

-0.0210

-0.0102

0.1090

-0.0724

-0.0872

-0.0178 -0.0309

0.0996

-0.0579

0.0032


0.0533

0.0650

-0.0315

-0.0210

0.0098

0.0440

0.0221

0.0903

-0.1055

-0.1898

-0.0457

0.1425

0.0024

0.1366

0.0348


0.0010

0.0056

-0.0165

0.0807

0.0601 -0.0002 -0.1129

0.0433

0.0301

-0.1022

0.0077

0.0042

0.0216

0.0000

0.0154

0.0982

-0.0805


-0.0473 -0.1355

0.0952

-0.0156

-0.0002

-0.0266

-0.2115 -0.1689

0.0237

0.0367 -0.0639

Thực hiện biến đổi DCT ngược bằng hàm idct2
a_idct = idct2(a_dct);
a_idct =
70.0000 112.0000 181.0000 245.0000

231.0000 247.0000 234.0000 193.0000

11.0000

40.0000 202.0000 190.0000

97.0000 193.0000


24.0000 195.0000

.c

32.0000

om

208.0000 245.0000 107.0000 173.0000

70.0000 149.0000

233.0000 248.0000 245.0000 100.0000 210.0000 203.0000 174.0000
9.0000

43.0000

81.0000 125.0000

71.0000 204.0000 217.0000 180.0000 243.0000 114.0000
36.0000 239.0000

8.0000

41.0000

65.0000

30.0000 129.0000


8.0000 165.0000 127.0000 178.0000

th

an

140.0000

57.0000

47.0000 167.0000 192.0000

co

24.0000 124.0000

ng

161.0000 245.0000 167.0000 167.0000 177.0000

87.0000

Nhận xét: kết quả biến đổi DCT ngược cho kết quả giống với ma trận ban đầu.

on

g

2. Thực hiện phép biến đổi DCT (Tính tay) cho ma trận
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

20

20

20

20

20


u

cu

20

20

du

20

Biến đổi DCT theo từng hàng ta được:
56.5685

0

0

0

0

0

0

0


56.5685

0

0

0

0

0

0

0

56.5685

0

0

0

0

0

0


0

56.5685

0

0

0

0

0

0

0

113.1371

0

0

0

0

0


0

0

8

CuuDuongThanCong.com

/>

113.1371

0

0

0

0

0

0

0

113.1371

0


0

0

0

0

0

0

113.1371

0

0

0

0

0

0

0

0


0

0

0

0

0

0

-72.4903 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


ng

3. Thực hiện mô phỏng

.c

240

om

Biến đổi DCT theo từng cột ta được:

co

Code:

cu

u

du

on

g

th

an


A = zeros(16); B = zeros(16); % Tao ma tran 0 16x16
A(6:11,6:11) = 255; % Tao ma tran A nhu yeu cau
subplot(121); imshow(A); title('Anh tao ban dau'); % Hien thi anh ban dau
% 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);
% Thuc hien bien doi DCT cac khoi anh
A1_dct = dct2(A1); A2_dct = dct2(A2);
A3_dct = dct2(A3); A4_dct = dct2(A4);
% 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];
% 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;
% Thuc hien bien doi IDCT
A1_I = idct2(A1_lt); A2_I = idct2(A2_lt);
A3_I = idct2(A3_lt); A4_I = idct2(A4_lt);
% Ghep 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;
subplot(122); imshow(B); title('Anh tao sau khi nen'); % Hien thi anh B

9


CuuDuongThanCong.com

/>

on

g

th

an

co

ng

.c

om

Kết quả mô phỏng:

cu

u

du

Nhận xét: Ảnh tạo ban đầu và ảnh tạo sau khi nén gần giống nhau, chỉ có sự sai khác

rất nhỏ

10

CuuDuongThanCong.com

/>

MODULE 3: TIẾP CẬN XỬ LÝ AUDIO VÀ VIDEO
Audio
1. Nạp 1 file audio vào MatLab và bật qua loa máy tính
[y, fs] = audioread('myAudio.wav');
sound(y,fs);

Vẽ dạng sóng dữ liệu trong cửa sổ MatLab
Code:

om

[y, fs] = audioread('myAudio.wav');
plot(y,'b');
title('Song du lieu');

cu

u

du

on


g

th

an

co

ng

.c

Kết quả thu được:

Tăng kích thước dạng sóng lên 30%
Code:
[y, fs] = audioread('myAudio.wav');
y = y.*(1.3);
sound(y,fs);
plot(y,'b');
title('Song du lieu sau khi tang len 30%');

11

CuuDuongThanCong.com

/>

on


g

th

an

co

ng

.c

om

Kết quả thu được:

du

2. Tạo 1 vector 2*4096 giá trị ngẫu nhiên. Đặt tần số lấy mẫu Fs = 4096.
aud = rand(1, 2*4096);

u

fs = 4096;

cu

Bật vector như 1 âm thanh qua loa máy tính và vẽ dạng sóng
Code:


aud = rand(1, 2*4096);
fs = 4096;
sound(aud, fs);
plot(aud,'b');
title('Song du lieu');

12

CuuDuongThanCong.com

/>

ng

.c

om

Kết quả thu được:

co

Video
1. Bật video trong MatLab

an

Code:


g

th

obj = VideoReader('myVideo.avi');
vid = obj.read();
implay(vid);

cu

u

du

on

Kết quả:

13

CuuDuongThanCong.com

/>

2. Hiển thị từng khung ảnh (frame)
Code:
file = aviinfo('myVideo.avi'); % Lay thong tin file
nFrames = file.NumFrames;
% So frame trong video
Rate=file.AudioRate;

for k = 1:10
% Lay 10 frame dau tien
this_frame = read(M, k); % Doc tung frame
thisfig = figure();
image(this_frame); % Hien thi 1 frame
title(sprintf('Frame #%d', k));
end

cu

u

du

on

g

th

an

co

ng

.c

om


Kết quả mô phỏng

14

CuuDuongThanCong.com

/>

om
.c
ng
co
an
th
g
on
du
u
cu
3. Tạo ra một đoạn phim mới bằng cách hoán vị ngẫu nhiên các frame ảnh gốc
ban đầu
Code:
file = VideoReader('myVideo.avi'); % Lay thong tin file video
newavi = VideoWriter('newvideo.avi'); % Tao ra 1 file avi moi
newavi.FrameRate = 30;
open(newavi);

15

CuuDuongThanCong.com


/>

pos = randi([1 150],1,150); % Hoan vi ngau nhien vi tri cac frame
for k = 1:150
this_frame = read(file, pos(k)); % Doc tung frame
writeVideo(newavi,this_frame);
end
disp('Closing movie file'); % Dong video goc
close(newavi);
disp('Display new video'); % Chay video moi
implay('newvideo.avi');

cu

u

du

on

g

th

an

co

ng


.c

om

Kết quả mô phỏng:

16

CuuDuongThanCong.com

/>

MODULE 4. THIẾT KẾ BỘ MÃ HÓA – GIẢI MÃ TỰA JPEG
1. Mã hóa
Code:
clear all, close all;
imRGB = imread('myAvt.jpg');
figure, imshow(imRGB), title('RGB Full Image');
imYIQ = rgb2ntsc(imRGB);
imYIQsubI = imresize(imYIQ(:,:,2), 0.5, 'bilinear');
imYIQsubQ = imresize(imYIQ(:,:,3), 0.5, 'bilinear');

.c

ng

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


om

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

co

reconstruct_imRGB = uint8(256*ntsc2rgb(reconstruct_imYIQ));
figure, imshow(reconstruct_imRGB), title('Recontructor RGB Full Image');

cu

u

du

on

Kết quả mô phỏng:

g

th

an

figure, imshow(256*abs(imRGB(:,:,1)-reconstruct_imRGB(:,:,1)));
title('Recontructor R error');
figure, imshow(256*abs(imRGB(:,:,2)-reconstruct_imRGB(:,:,2)));

title('Recontructor G error');
figure, imshow(256*abs(imRGB(:,:,3)-reconstruct_imRGB(:,:,3)));
title('Recontructor B error');

17

CuuDuongThanCong.com

/>

om
.c
ng
co
an
th
g
on
du
u
cu

18

CuuDuongThanCong.com

/>

2. Giải mã
Code:

I = imread('myAvt.jpg');
I1 = I;
I2 = double(I);
[row col] = size(I);
I = double(I);
I = I - (128*ones(256));

.c

om

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 98 112 100 103 99];

co

dct_restored = zeros(row, col);
QX = double(QX);

ng

DCT_matrix8 = dct(eye(8));
iDCT_matrix8 = DCT_matrix8;


on

g

th

an

for i = 1:8:row
for j = 1:8:col
zBLOCK = I(i:i+7, j:j+7);
win1 = DCT_matrix8*zBLOCK*iDCT_matrix8;
dct_domain(i:i+7, j:j+7) = win1;
end
end

cu

u

du

for i = 1:8:row
for j = 1:8:col
win1 = dct_domain(i:i+7,j:j+7);
win2=round(win1./QX);
dct_quantized(i:i+7,j:j+7)=win2;
end
end
for i = 1:8:row

for j = 1:8:col
win2 = dct_quantized(i:i+7,j:j+7);
win3 = win2.*QX;
dct_dequantized(i:i+7,j:j+7)=win3;
end
end
for i=[1:8:row]
for j=[1:8:col]
win3 = dct_dequantized(i:i+7,j:j+7);
win4=iDCT_matrix8*win3*DCT_matrix8;
dct_restored(i:i+7,j:j+7)=win4;
end
end
I2=dct_restored;

19

CuuDuongThanCong.com

/>

K=mat2gray(I2);
figure(1);imshow(I1);title('Original image');
figure(2);imshow(K);title('Restored image from DCT');

cu

u

du


on

g

th

an

co

ng

.c

om

Kết quả mô phỏng:

20

CuuDuongThanCong.com

/>


×