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


ĐA PHƯƠNG TIỆN
Mã lớp thí nghiệm : 688594

Sinh viên : Lê Ngọc Toàn


MSSV : 20164105
Lớp : Điện tử 05-K61
Email : lntoan.12tt.k24@gmail.com

Hà Nội , tháng 12 năm 2019


1
MỤC LỤC

Nộ i dung
MỤC LỤC................................................................................................................. 2
PHẦN 1 : YÊU CẦU TRÊN LỚP.............................................................................3
1. MODULE 1 : CÁC THAO TÁC XỬ LÝ ẢNH TRÊN MATLAB....................3
1.1. Đọc và hiển thị hình ảnh.............................................................................3
1.2. Hiển thị 3 ảnh thành phần R, G, B và vẽ histogram của 3 thành phần này. 3
1.3. Vẽ histogram của 3 ảnh R, G, B.................................................................4
1.4. Chuyển đổi ảnh sang ảnh xám và vẽ histogram của ảnh xám.....................4
1.5.Hiển thị ảnh âm bản và histogram của ảnh âm bản......................................4
2 . MODULE 2 : BIẾN ĐỔI DCT ẢNH KHỐI TRƯỚC KHI NÉN.....................5
3 . MOUDULE 3 : TIẾP CẬN XỬ LÝ AUDIO VÀ VIDEO................................6
A . Audio...........................................................................................................6
B. Video............................................................................................................7
4. MODULE 4.......................................................................................................8
4.1. Chuyển đổi màu trong không gian..................................................................8
4.2.Chuyển đổi không gian màu từ RGB sang YUV và mã hóa JPEG ảnh YUV. .9
4.3.Chuyển đổi ảnh RGB sang YUV......................................................................9
4.4 Mã hóa JPEG ảnh YUV.................................................................................10
PHẦN 2 : YÊU CẦU VỀ NHÀ...............................................................................12
1.MODULE1: CÁC THAO TÁC XỬ LÍ ẢNH TRÊN MATLAB......................12
1.1.Đọc và hiển thị ảnh........................................................................................12
1.2. Hiển thị 3 ảnh thành phần R,G,B. Vẽ histogram:......................................12
1. 3. Chuyển đổi ảnh sang màu xám. Vẽ histogram ảnh xám..........................13
1.4. Hiển thị ảnh âm bản của bức ảnh:.............................................................13
MODULE 2: BIẾN ĐỔI DCT ẢNH KHỐI TRƯỚC KHI NÉN.........................14
MODULE 3: TIẾP CẬN XỬ LÍ AUDIO VÀ VIDEO.........................................15
AUDIO:...........................................................................................................15
VIDEO:...........................................................................................................16
MODULE 4: THIẾT KẾ BỘ MÃ HÓA-GIẢI MÃ TỰA JPEG..........................17

2
4.1. chuyển đổi không gian màu......................................................................17
4.2.Chuyển đổi không gian màu từ RGB sang YUV và mã hóa JPEG ảnh YUV18
4.3. Mã hóa JPEG ảnh YUV............................................................................19

3
PHẦN 1 : YÊU CẦU TRÊN LỚP
1. MODULE 1 : CÁC THAO TÁC XỬ LÝ ẢNH TRÊN MATLAB

1.1. Đọc và hiển thị hình ảnh


A = imread('lighthouse.jpg'); % ham doc
anh trong thu muc hien hanh
subplot(3,3,1); imshow(A); title('lighthouse'); % ham hien thi anh

1.2. Hiển thị 3 ảnh thành phần R, G, B và vẽ histogram của 3 thành phần này
R = A; % cho R,G,B la 3 ma tran cung luu tru anh A
G = A;
B = A;
R(:,:,2) = 0; R(:,:,3) = 0; % giu nguyen cac gia tri R,cac thanh phan
khac bang 0
G(:,:,3) = 0; G(:,:,1) = 0; % giu nguyen cac gia tri G,cac thanh phan
khac bang 0

B(:,:,1) = 0; B(:,:,2) = 0; % giu nguyen cac gia tri B,cac thanh phan
khac bang 0

subplot(3,3,4); imshow(R); title('R');


subplot(3,3,5); imshow(G); title('G');
subplot(3,3,6); imshow(B); title('B');

4
1.3. Vẽ histogram của 3 ảnh R, G, B.
subplot(3,3,7); imhist(A(:,:,1)); title('Histogram R');
subplot(3,3,8); imhist(A(:,:,2)); title('Histogram G');
subplot(3,3,9); imhist(A(:,:,3)); title('Histogram B');

1.4. Chuyển đổi ảnh sang ảnh xám và vẽ histogram của ảnh xám
gray = rgb2gray(A);
figure;
subplot(2,2,1); imshow(gray); title('Anh xam');
subplot(2,2,2); imhist(gray); title('Histogram anh xam');

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


amban = 255.-gray;
subplot(2,2,3); imshow(amban); title('Anh am ban ');
subplot(2,2,4); imhist(amban); title('Histogram anh am ban');

5
6
2 . MODULE 2 : BIẾN ĐỔI DCT ẢNH KHỐI TRƯỚC KHI NÉN
Tạo một bức ảnh theo yêu cầu và thực hiện biến đổi
% Buoc 1: Tao ma tran anh A nhu yeu cau
A = zeros(16); % tao ma tran A hinh vuong mau trang
B = zeros(16);
% tao ma tran A hinh vuong mau trang o giua co hinh tron ban kinh 6
A(3:14, 8:9) = 255; A(8:9, 3:14) = 255;
A(5:12, 5:12) = 255;
A(6:11, 4:13) = 255; A(4:13, 6:11) = 255;
% Hien thi anh tao ban dau
subplot(121); imshow(A); title('Anh tao ban dau');

% Buoc 2: 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 3: Thuc hien DCT tung khoi anh


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

% Buoc 4: Luong tu hoa tung khoi anh


% Ma tran 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 trong so luong tu hoa
A1_lt = A1_dct./Q; A2_lt = A2_dct./Q;
A3_lt = A3_dct./Q; A4_lt = A4_dct./Q;

% Buoc 5: 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 6: Hien thi anh sau giai ma


% 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');

7
3 . MOUDULE 3 : TIẾP CẬN XỬ LÝ AUDIO VÀ VIDEO

A . Audio
1.Xử lý file audio .wav bất kỳ

[data, sr] = wavread('NonStandard1.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); title('Dang song ban dau');
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); title('Dang song sau khi tang kich thuoc
10%');

2. Tạo vector audio

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

8
B. Video
1. Bật video trong Matlab

obj = VideoReader('pod.avi');
video = obj.read();
implay(video);

hình 1: Cửa sổ Movie Player trong Matlab

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

obj = VideoReader('pod.avi');
nFrames = obj.NumberOfFrames;
for k = 1:nFrames % Lay 10 khung anh dau tien
this_frame = read(obj, k); % Doc tung khung mot
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('pod.avi');
nFrames = obj.NumberOfFrames;
rate = obj.FrameRate;
newavi = VideoWriter('newpod.avi'); % Tao ra 1 file avi moi
newavi.FrameRate = rate;

9
open(newavi);
for k = nFrames:(-1):1
this_frame = read(obj, k); % Do tung khung mot
writeVideo(newavi, this_frame);
end
disp('Closing movie file'); % Hien thi len dong lenh chinh
close(newavi);

disp('display new video');


implay('newpod.avi');

10
4. MODULE 4

4.1. Chuyển đổi màu trong không gian


clearall, close all;
imRGB = imread('1.png');
subplot(2,3,1); imshow(imRGB); title('RGB Full Image');
imYIQ = rgb2ntsc(imRGB);

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


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

% We 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;
reconstruct_imRGB = uint8(256*ntsc2rgb(reconstruct_imYIQ));

subplot(2,3,2); 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');

hình 2: Kết quả chuyển đổi ảnh RGB sang ảnh YIQ

11
4.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
1.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

4.3.Chuyển đổi ảnh RGB sang YUV


imRGB = imread('spring.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


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));

subplot(2,3,2); 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');

12
hình 3: Kết quả chuyển đổi không gian màu từ RGB sang YUV
4.4 Mã hóa JPEG ảnh YUV
 Mã hóa JPEG thành phần Y:
clc; clear all;
I = imread('1111.bmp');
I = rgb2gray(I);
I1 = I;
[row, coln] = size(I);
I = double(I);
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);

13
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);

subplot(1,2,1); imshow(I1); title('original Y image');


subplot(1,2,2); imshow(K); title('restored Y image from DCT');

mse_Y = mean(mean(I2-K).^2);
psnr_Y = 10*log10(255^2/mse_Y);

hình 4: Ảnh thành phần Y trước và sau khi giải mã DC

14
PHẦN 2 : YÊU CẦU VỀ NHÀ
1.MODULE1: CÁC THAO TÁC XỬ LÍ ẢNH TRÊN MATLAB

1.1.Đọc và hiển thị ảnh


Code matlab:
A = imread('C:\Users\Admin\Desktop\abc.jpg'); % ham doc anh trong thu muc
hien hanh

imshow(A); % ham hien thi anh

figure:

Hình 5: ảnh abc.jpg được hiển thị bằng matlab

Nhận xét về ma trận A thu được:

Ma trận A là ma trận 3 chiều, biểu diễn ảnh ở không gian màu RGB (Red, Green,
Blue), mỗi màu được biểu diễn bởi 8 bít nghĩa là mỗi màu sẽ có dải giá trị 0 ÷
255.

1.2. Hiển thị 3 ảnh thành phần R,G,B. Vẽ histogram:


B = A; % cho B,C,D la 3 ma tran cung luu tru anh A
C = A;
D = A;
B(:,:,2)=0; B(:,:,3)=0; % giu nguyen gia tri R,cac thanh phan khac
bang 0
C(:,:,1)=0; C(:,:,3)=0; % giu nguyen gia tri G,cac thanh phan khac
bang 0
D(:,:,1)=0; D(:,:,2)=0; % giu nguyen gia tri B,cac thanh phan khac
bang 0
subplot(3,3,1); imshow(A); % chia man hinh ra lam 3 hang,3 cot va ve
anh chan dung goc vao o trong dau tien
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

15
Hình 6: ảnh R,G,B của abc.jpg

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


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

Hình 7: ảnh histogram của abc.jpg

1. 3. Chuyển đổi ảnh sang màu xám. Vẽ histogram ảnh xám


gray = rgb2gray(A);
subplot (121); imshow(gray); title ('anh xam')
subplot (122); imhist(gray); title('Histogram anh xam')

Hình 8: anh xám và histogram của abc.jpg

1.4. Hiển thị ảnh âm bản của bức ảnh:


Để vẽ ảnh âm bản: ta lấy 255 – giá trị của từng điểm ảnh xám. Sau đó vẽ histogram
amban = 255.-gray;
subplot(121); imshow(amban); title('Anh am ban abc');
subplot(122); imhist(amban); title('Histogram anh am ban abc');

16
Hình 9: ảnh âm bản và histogram ảnh âm bản của abc.jpg

Nhận xét: ảnh âm bản có biểu đồ đối xứng với ảnh xám gốc của nó qua trục tung.

MODULE 2: BIẾN ĐỔI DCT ẢNH KHỐI TRƯỚC KHI NÉN


Tạo 1 bức ảnh theo yêu cầu và thực hiện biến đổi:
A = zeros(16); %Tao ma tran 0 16x16
B = zeros(16);
A(6:11,6:11)=255; %Tao ma tran A nhu yeu cau hinh vuong mau trang
subplot(121);
imshow(A); %hien thi
title('anh tao 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 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 bang luong tu hoa
A1_lt=A1_dct./Q;
A2_lt=A2_dct./Q;
A3_lt=A3_dct./Q;
A4_lt=A4_dct./Q;
%Bien doi DCT nguoc
A1_I=idct2(A1_lt);
A2_I=idct2(A2_lt);
A3_I=idct2(A3_lt);

17
A4_I=idct2(A4_lt);
%Ghep anh lai
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); %Hien thi anh
title('anh tao sau khi nen');

Hình 10: anh tao ban đâu và sau khi nén

MODULE 3: TIẾP CẬN XỬ LÍ AUDIO VÀ VIDEO


AUDIO:
1. Nạp audio và bật audio qua loa:

Bật file audio có sẵn và vẽ dạng sóng dữ liệu:


[data, sr]= wavread('C:\Users\Admin\Downloads\audio.wav'); %tra ve
toc do lay mau(Fs) dc dung de ma hoa du lieu trong file
sound(data,sr);
subplot(2,1,1); % chon o trong de ve
plot(data);

Vẽ dạng sóng của dữ liệu và tăng kích thước sóng lên 30%
[data, sr]= wavread('C:\Users\Admin\Downloads\audio.wav');
subplot(2,1,1);
plot(data);
A=data.*30;
sound(A,sr);

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

Tạo 1 vecto 2*4096


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

VIDEO:
1.Bật video trong Matlab:
obj = VideoReader('C:\Users\Admin\Downloads\mario.avi');
video = obj.read();
implay(video);

2.Hiển thị từng khung ảnh (Frame):


file=aviinfo('C:\Users\Admin\Downloads\mario.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);% Doc tung khung 1
thisfig = figure();
image(this_frame);% hien thi 1 khung anh
title(sprintf('Frame #%d, k'));
end

19
3 .Tạo ra 1 đoạn phim mới bằng cách hoán vị các khung ảnh ban đầu:
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');

MODULE 4: THIẾT KẾ BỘ MÃ HÓA-GIẢI MÃ TỰA JPEG


4.1. chuyển đổi không gian màu
Đọc một ảnh JPG bất kỳ vào Matlab rồi chuyển đổi ảnh đótừ không gian màu RGB
sang YIQ và ngược lại, sau đó hiển thị kết quả.
clear all, close all;
imRGB = imread('C:\Users\Admin\Desktop\abc.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');

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

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

reconstruct_imRGB = uint8(256*ntsc2rgb(reconstruct_imYIQ));
figure, imshow(reconstruct_imRGB);
title('Reconstructed RGB Full Image');
figure, imshow(256*abs(imRGB(:,:,1)-reconstruct_imRGB(:,:,1)));
title('Rescontructed R Error');
figure, imshow(256*abs(imRGB(:,:,2)-reconstruct_imRGB(:,:,2)));
title('Rescontructed G Error');
figure, imshow(256*abs(imRGB(:,:,3)-reconstruct_imRGB(:,:,3)));
title('Rescontructed B Error');

20
4.2.Chuyển đổi không gian màu từ RGB sang YUV và mã hóa JPEG ảnh YUV
4.2.1.Chuyển đổi không gian màu từ RGB sang 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
1.616 -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


Code matlab:

imRGB = imread('C:\Users\Admin\Desktop\abc.jpg’);
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');

21
% We have size image so resample back up
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));

subplot(2,3,2); 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');

RGB Image Reconstruct RGB Full Image

Reconstruct R Error Reconstruct G Error Reconstruct B Error

4.3. Mã hóa JPEG ảnh YUV


 Mã hóa JPEG thành phần Y:

clc; clear all;


I = imread('C:\Users\Admin\Desktop\abc.jpg');
I = rgb2gray(I);
I1 = I;
[row, coln] = size(I);
I = double(I);
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;

22
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);

subplot(1,2,1); imshow(I1); title('original Y image');


subplot(1,2,2); imshow(K); title('restored Y image from DCT');

mse_Y = mean(mean(I2-K).^2);
psnr_Y = 10*log10(255^2/mse_Y);

23
24

You might also like