Professional Documents
Culture Documents
Baocaodaphuongtien
Baocaodaphuongtien
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.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
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');
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');
7
3 . MOUDULE 3 : TIẾP CẬN XỬ LÝ AUDIO VÀ VIDEO
A . Audio
1.Xử lý file audio .wav bất kỳ
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);
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);
10
4. MODULE 4
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
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';
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);
mse_Y = mean(mean(I2-K).^2);
psnr_Y = 10*log10(255^2/mse_Y);
14
PHẦN 2 : YÊU CẦU VỀ NHÀ
1.MODULE1: CÁC THAO TÁC XỬ LÍ ẢNH TRÊN MATLAB
figure:
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.
15
Hình 6: ảnh R,G,B của abc.jpg
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.
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');
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);
VIDEO:
1.Bật video trong Matlab:
obj = VideoReader('C:\Users\Admin\Downloads\mario.avi');
video = obj.read();
implay(video);
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');
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
imRGB = imread('C:\Users\Admin\Desktop\abc.jpg’);
subplot(2,3,1); imshow(imRGB); title('RGB Image');
imYUV = rgb2yuv(imRGB);
21
% We have size image so resample back up
imYUVupsampU = imresize(imYUVsubU, 2);
imYUVupsampV = imresize(imYUVsubV, 2);
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');
22
72 92 95 96 112 100 103 99];
DCT_matrix8 = dct(eye(8));
iDCT_matrix8 = DCT_matrix8';
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);
mse_Y = mean(mean(I2-K).^2);
psnr_Y = 10*log10(255^2/mse_Y);
23
24