1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Thực hành truyền thông đa phương tiện

19 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thực Hành Truyền Thông Đa Phương Tiện
Tác giả TS. Nguyễn Tường Thành
Trường học Trường Đại Học Quy Nhơn
Chuyên ngành Điện Tử - Viễn Thông
Thể loại Tài Liệu Lưu Hành Nội Bộ
Định dạng
Số trang 19
Dung lượng 1,47 MB

Nội dung

Hiển thị ma trận thu được dưới dảng một bức ảnh.. - Nạp dữ liệu file ảnh màu parrots.jpg search bằng google vảo mảng ma trận MATLAB.. Hiển thị file ảnh màu này.. Hiển thị ba ảnh R,G,B tr

Trang 1

TRƯỜNG ĐẠI HỌC QUY NHƠN

KHOA KỸ THUẬT VÀ CÔNG NGHỆ

-  -

THỰC HÀNH TRUYỀN THÔNG ĐA PHƯƠNG TIỆN

Biên soạn: TS Nguyễn Tường Thành

Bộ môn: Điện tử - Viễn thông

Tài liệu lưu hành nội bộ

Trang 2

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

1 Đọc file ảnh từ MatLab

-Tạo một ma trận kích thước 512 x 512 gồm các số ngẫu nhiên Hiển thị ma trận thu được dưới dảng một bức ảnh

- Nạp dữ liệu file ảnh màu parrots.jpg (search bằng google) vảo mảng ma trận MATLAB Hiển thị file ảnh màu này Hiển thị ba ảnh R,G,B trên các cửa sổ MATLAB riêng biệt Vẽ histogram của 3 ảnh này (ghi kèm tên sinh viên thực hiện trong giao diện hiển thị)

- Nhập một ảnh xám Lena.jpg, kích thước 256x256 Giá trị điểm ảnh nhận được từ 0 đến

255, trong đó 0 tương ứng màu đen và 255 tương ứng màu trắng Thực hiện chuyển đổi sang ảnh âm bản bằng cách thay thế mỗi giá trị điểm ảnh bằng giá trị Hiển thị hai bức ảnh

và histogram của chúng (như hình vẽ- ghi kèm tên sinh viên thực hiện trong giao diện hiển thị)

Code:

A = imread('myAvt.jpg'); % Ham doc anh trong thu muc hien hanh

imshow(A); % Ham hien thi anh

Kết quả thu được:

Trang 3

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

subplot(331); imshow(A);

subplot(334); imshow(R); title('R'); % Anh thanh phan R

subplot(335); imshow(G); title('G'); % Anh thanh phan G

subplot(336); imshow(B); title('B'); % Anh thanh phan B

subplot(337); imhist(A(:,:,1)); % Histogram cua thanh phan R

subplot(338); imhist(A(:,:,2)); % Histogram cua thanh phan G

subplot(339); imhist(A(:,:,3)); % Histogram cua thanh phan B

Kết quả thu được:

Trang 4

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

Kết quả thu được:

Trang 5

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

Code:

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

Kết quả thu được:

Trang 6

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

Code:

A = imread('myAvt.jpg');

gray = rgb2gray(A); % Chuyen sang anh xam

amban = 255.-gray; % Chuyen sang anh am ban

subplot(121); imshow(amban); title('Anh am ban');

subplot(122); imhist(amban); title('Histogram cua anh am ban'); xlim([0 255]);

Kết quả thu được:

Trang 8

BÀI 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 n n ( , )1 2 biểu diễn các mức xám của ảnh trong miền không gian, X k k ( , )1 2 là các hệ

số sau biến đổi DCT trong miền tần số

1 2

7 7

0 0

1 2

1

 

1 2

7 7

0 0

1 2

1

 

Trong đó các hệ số ( ) 2 khi 0

1 khi 0

 



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

Tạo ma trận 8x8 ngẫu nhiên bằng lệnh:

a = randi([0 255], 8, 8);

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

a =

208 245 107 173 70 112 181 245

231 247 234 193 11 97 193 87

32 40 202 190 24 195 70 149

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

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 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.2115 -0.1689 0.0237 0.0216 0.0000 0.0154 0.0982 -0.0805 0.0367 -0.0639 -0.0473 -0.1355 0.0952 -0.0156 -0.0002 -0.0266

Thực hiện biến đổi DCT ngược bằng hàm idct2

a_idct = idct2(a_dct);

a_idct =

208.0000 245.0000 107.0000 173.0000 70.0000 112.0000 181.0000 245.0000

Trang 9

231.0000 247.0000 234.0000 193.0000 11.0000 97.0000 193.0000 87.0000 32.0000 40.0000 202.0000 190.0000 24.0000 195.0000 70.0000 149.0000 233.0000 248.0000 245.0000 100.0000 210.0000 203.0000 174.0000 57.0000 161.0000 245.0000 167.0000 167.0000 177.0000 47.0000 167.0000 192.0000 24.0000 124.0000 9.0000 43.0000 81.0000 125.0000 41.0000 65.0000 71.0000 204.0000 217.0000 180.0000 243.0000 114.0000 30.0000 129.0000 140.0000 36.0000 239.0000 8.0000 8.0000 165.0000 127.0000 178.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

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

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

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

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

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

240 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

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

Code:

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

Trang 10

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

Kết quả mô phỏng:

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ỏ

Trang 11

BÀI 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:

[y, fs] = audioread('myAudio.wav');

plot(y,'b');

title('Song du lieu');

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

Trang 12

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

fs = 4096;

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

Kết quả thu được:

Trang 13

Video

1 Bật video trong MatLab

Code:

obj = VideoReader('myVideo.avi');

vid = obj.read();

implay(vid);

Kết quả:

Trang 14

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

Kết quả mô phỏng

Trang 15

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

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

Trang 17

BÀI 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');

imYIQupsampI = imresize(imYIQsubI, 2);

imYIQupsampQ = imresize(imYIQsubQ, 2);

reconstruct_imYIQ = imYIQ;

reconstruct_imYIQ(:,:,2) = imYIQupsampI;

reconstruct_imYIQ(:,:,3) = imYIQupsampQ;

reconstruct_imRGB = uint8(256*ntsc2rgb(reconstruct_imYIQ));

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

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

Kết quả mô phỏng:

Trang 18

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

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

DCT_matrix8 = dct(eye(8));

iDCT_matrix8 = DCT_matrix8;

dct_restored = zeros(row, col);

QX = double(QX);

i = 1:8:row

Trang 19

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

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;

K=mat2gray(I2);

figure(1);imshow(I1);title('Original image');

figure(2);imshow(K);title('Restored image from DCT');

Kết quả mô phỏng:

Ngày đăng: 19/02/2024, 12:57

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w