Tải bản đầy đủ (.docx) (24 trang)

NÉN ẢNH số DÙNG DCT (có code bên dướ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 (571.31 KB, 24 trang )

ĐỒ ÁN 3

NÉN ẢNH SỐ DÙNG DCT


MỤC LỤC

DANH MỤC CÁC HÌNH VẼ

HÌNH 2-1: HÌNH MINH HỌA MA TRẬN 8x8.[2]
HÌNH 2-2: SƠ ĐỒ KHỐI CỦA NÉN VÀ GIẢI NÉN JPEG DỰA VÀO DCT.
HÌNH 4-1: THIẾT KẾ GUIDE CHO NÉN ẢNH.
HÌNH 4-2: ẢNH SAU KHI ĐƯỢC NÉN.
HÌNH 4-3: BẢNG PHÂN TÍCH HÌNH ẢNH SAU KHI NÉN BẰNG DCT.


DANH MỤC CÁC TỪ VIẾT TẮT
RGB

Red Green Blue

DCT

Discrete cosine Transform

JPEG

Joint Photographic Experts Group


ĐỒ ÁN 3


Trang 4/21

CHƯƠNG 1.

TỔNG QUAN VỀ ẢNH SỐ

1.1 Ảnh số
• Điểm ảnh: là một phần tử của ảnh số tại tọa độ (x,y), với độ xám hoặc độ
màu nhất định.
• Mức xám: là kết qủa của sự mã hóa tương ứng, với một cường độ sáng của
mỗi điểm ảnh ứng với một giá trị số của quá trình lượng hóa.
• Ảnh RGB: Ảnh được dự trữ trong Matlab dưới dạng một mạng dữ liệu có
kích thước 3 chiều mxnx3, được định nghĩa với các giá trị màu Red, màu
Green và màu Blue cho mỗi điểm ảnh riêng biệt. Màu của mỗi điểm ảnh
được quyết định bởi sự kết hợp giữa các giá trị Red, Green, Blue. Được lưu
trữ trong một mặt phẳng màu tại vị trí của điểm ảnh.

Hình 1-1: Ảnh RGB.[1]

Nén Ảnh Số Dùng DCT


ĐỒ ÁN 3
Trang 5/21



Ảnh nhị phân: Trong một ảnh nhị phân, ứng mỗi điểm ảnh chỉ có thể chứa
một trong hai giá trị nhị phân 0 hoặc 1. Hai giá trị này tương ứng với bật
hoặc tắt, một ảnh nhị phân được lưu trữ dưới dạng một mảng logic của 0 và

1.

Hình 1-2: Ảnh

nhị phân.[1]

1.2 Nén Ảnh
• Nén ảnh là một công nghệ nhằm mã hóa các loại ảnh kỹ thuật số để làm giảm
số bít biểu diễn ảnh giúp làm giảm bộ nhớ và giá trị khi truyền ảnh.
• Nén dữ liệu ảnh là biến đổi dòng thông tin từ ảnh thành đoạn mã, nhằm giảm
độ dư thừa thông tin (không gian và thời gian, độ dư thừa phổ và độ dư thừa
do độ cảm thụ).
• Dung lượng thông tin bao gồm: lưu trữ và truyền (tốc độ dòng bít).
• Lượng thông tin thu được sau khi nén thường nhỏ hơn dữ liệu gốc.
• Tính hiệu quả dựa trên: chi phí về thời gian, không gian và độ phức tạp khi
tính toán.
1.3 Giới thiệu về sử dụng Matlab trong xử lý ảnh
Matlab là một ngôn ngữ rất mạnh, hỗ trợ tốt các thao tác kỹ thuật làm việc trên
ảnh. Vì vậy việc sử dụng Matlab cho ứng dụng xử lý ảnh là lựa chọn hàng đầu cho
việc thực hiện các thuật toán xử lý trên phần mềm. Một số hàm cơ bản trong Matlab
dùng cho xử lý ảnh:

Nén Ảnh Số Dùng DCT


ĐỒ ÁN 3
Trang 6/21

Nén Ảnh Số Dùng DCT



ĐỒ ÁN 3
Trang 7/21

CHƯƠNG 2.

MIÊU TẢ ĐỀ TÀI NÉN ẢNH SỐ DÙNG DCT

1.4 Giới thiệu về nén ảnh
Cùng với sự phát triển rộng khắp của mạng máy tính vì thế nhu cầu sử dụng
mạng tăng cao. Điều này dẫn tới việc dữ liệu truyền tải qua mạng cũng rất lớn, đa
phần dữ liệu được truyền tải trên mạng máy tính thuộc các loại sau: ảnh, ký tự, các
loại media…
Việc hàng ngày số lượng dữ liệu lớn được luân chuyển liên tục trên mạng tạo
nên các hoạt động truyền tải, sử dụng, tái sử dụng vì vậy rất nhiều thuật toán được
phát minh và sử dụng để nén và mã hóa ảnh một trong những dữ liệu sử dụng nhiều
nhất trên mạng máy tính. Một số phương pháp dùng để nén ảnh như:
• Phương pháp biến đổi DCT: biến đối cosin rời rạc thường được sử dụng
trong các dạng ảnh chuẩn JPEG.
• Phương pháp biến đổi DFT, biến đổi Furier khắc phục một số nhược điểm
của biến đổi ảnh sử dụng phương pháp DCT.
Tính chất chung nhất của tất cả các ảnh số đó là tương quan giữa các điểm ảnh ở
cạnh nhau lớn, điều này dẫn đến dư thừa thong tin để biểu diễn ảnh. Thông tin dư
thừa làm cho việc mã hóa không tối ưu. Do đó công việc cần làm để nén ảnh là phải
tìm được các biểu diến ảnh có sự tương quan nhỏ nhất để giảm thiểu độ dư thừa
thông tin của bức ảnh. Có hai kiểu dư thừa thông tin:
• Dư thừa trong miền không gian: Đó là sự tương quan giữa các giá trị điểm
ảnh của bức ảnh. Điều này có nghĩa rằng các điểm ảnh lân cận của ảnh có giá
trị gần giống nhau.
• Dư thừa ở trong miền tần số: Sự tương quan giữa các mặt phẳng màu hoặc

dải phổ là khác nhau. Trọng tâm các nghiên cứu về nén ảnh, là tìm cách giảm
số bit cần để biểu diễn ảnh bằng cách loại bỏ sự dư thừa, trong miền không
gian và miền tần càng nhiều càng tốt. Trong số các thuật toán biến đổi ảnh để
mã hóa hoặc nén có hai dạng: Không mất dữ liệu ảnh và mất dữ liệu ảnh.
1.5 Biến đổi cosine rời rạc DCT

Nén Ảnh Số Dùng DCT


ĐỒ ÁN 3
Trang 8/21

Biến đổi cosine rời rạc (DCT) biểu diễn ảnh dưới dạng tổng của các cosine của
các thành phần biên độ và tần số khác nhau của ảnh. Hàm dct2 tính DCT hai chiều
của một ảnh số. DCT thường được sử dụng trong các ứng dụng nén ảnh nhờ hiệu
suất làm việc tối ưu của nó đối với các ảnh có độ tương quan với các điểm ảnh lân
cận. DCT là giải thuật nén ảnh theo chuẩn quốc tế thường được biết với tên JPEG.
DCT hai chiều của ma trận A có kích thước mxn được định nghĩa :
M −1 N −1

B pq = α pα q ∑ ∑ Amn cos
m =0 n =0

0 ≤ p ≤ M −1
π (2m + 1) p
π (2n + 1) q
cos
2M
2N
với 0 ≤ q ≤ N − 1


1/ M
1/ N
p=0
q=0
αp = 
αq = 
 (2 / M ) 0 ≤ p ≤ M − 1 và
 (2 / N ) 0 ≤ q ≤ N − 1
Trong đó:

Các giá trị Bpq được gọi là các hệ số của biến đổi DCT. Nó có thể biến đổi ngược
và biến đổi ngược của nó được cho bởi công thức như sau:
M −1 N −1

Amn = ∑ ∑ α pα q B pq cos
p = 0 q =0

0 ≤ m ≤ M −1
π (2m + 1) p
π (2n + 1)q
cos
2M
2N
với 0 ≤ n ≤ N − 1

1/ M
1/ N
p=0
q=0

αp = 
αq = 
 (2 / M ) 0 ≤ p ≤ M − 1 và
 (2 / N ) 0 ≤ q ≤ N − 1
Trong đó:

Biểu thức DCT ngược có thể được xem xét khi nó coi rằng mọi ma trận A kích
thước mxn như là tổng của mn hàm có dạng :
α pα q B pq cos

π (2m + 1) p
π (2n + 1)q
cos
2M
2N

Những hàm này đựơc gọi là những hàm cơ sở của giải thuật DCT. Hệ số DCT
Bpq được xem như là trọng số cho mỗi hàm cơ sở. Với các ma trận 8x8, 64 hàm cơ
sở được minh hoạ bởi ảnh sau:

Nén Ảnh Số Dùng DCT


ĐỒ ÁN 3
Trang 9/21

Hình 2-1: Hình minh họa ma trận 8x8.[2]

2.3.2 Nguyên lý nén ảnh dựa vào DCT
Giải thuật nén có tổn hao được biết đến nhiều nhất là giải thuật dùng DCT.

chuẩn JPEG được sử dụng để mã hoá ảnh đa mức xám, ảnh màu. Tuy nó không cho
kết quả ổn định lắm với ảnh đen trắng. Chuẩn JPEG cung cấp giải thuật cho cả hai
loại nén là nén không thông tin và nén mất thông tin.
Sơ đồ khối của giải thuật nén, giải nén ảnh JPEG dựa vào DCT:

Hình 2-2: Sơ đồ khối của nén và giải nén ảnh JPEG dựa vào DCT.[3]

Nén Ảnh Số Dùng DCT


ĐỒ ÁN 3
Trang 10/21

a. Phân khối
Chuẩn nén JPEG phân ảnh ra các khối 8x8.Công đoạn biến đổi Cosin hai
chiều cho các khối 8x8 tỏ ra hiệu quả hơn. Biến đổi Cosin cho các khối có cùng
kích cỡ có thể giảm được một phần các tính toán như tính hệ số C ji. Khi n=8 chúng
ta chỉ cần tính hệ số Cji cho 3 tầng (8= 23), số các hệ số là: 4 + 2 + 1 = 7.
Nến với một ảnh 1024x1024, phép biến đổi nhanh Cosin một chiều theo
hàng ngang hoặc hàng dọc ta phải qua 10 tầng (1024 = 210). Số các hệ số Cji là: 512
+ 256 + 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 1021. Thời gian tính các hệ số C ji với
toàn bộ ảnh 1024x1024 lớn gấp 150 lần so với thời gian tính toán các hệ số này cho
các khối.
Biến đổi Cosin đối với các khối có kích thước nhỏ sẽ làm tăng độ chính xác
khi nó tính toán với số dấu phẩy tĩnh, giảm thiểu sai số do làm tròn sinh ra.
Do các điểm ảnh kề cận có độ tương quan cao, nên phép biến đổi Cosin cho
từng khối nhỏ sẽ tập trung năng lượng hơn vào số ít các hệ số biến đổi. Việc loại bớt
một số hệ số năng lượng thấp trong các khối chỉ tạo ra mất mát thông tin cục bộ
nhằm giúp nâng cao chất lượng ảnh.
Ảnh sẽ được chia làm B khối với:


 M '   N' 
×  = M B × NB
 k   l 

B=

b. Biến đổi
Biến đổi là một công đoạn lớn trong phương pháp nén sử dụng phép biến
đổi.
Nhiệm vụ của công đoạn này là biến đổi là tập trung năng lượng vào một số
ít các hệ số biến đổi.
Công thức biến đổi cho mỗi khối là:

Nén Ảnh Số Dùng DCT


ĐỒ ÁN 3
Trang 11/21

X (k1 , k 2 ) =

ε k1

ε k1ε k 2 7 7
(2n1 + 1)k 1 Π
(2n 2 + 1)k 2 Π
Cos
∑ ∑ x(n1 , n 2 )Cos
4 n1=0 n 2=0

16
16

 1

= 2
 0

khi

k1 = 0

khi

(0 < k1 < 8)

εk2

 1

= 2
 0

khi
khi

Trong đó

k2 = 0
(0 < k 2 < 8)


Thuật toán biến đổi nhanh Cosin hai chiều cho mỗi khối trong trường hợp này
gồm 16 phép biến đổi nhanh Cosin một chiều. Đầu tiên, người ta biến đổi nhanh
Cosin một chiều cho các dãy điểm ảnh trên mỗi hàng, lần lượt thực hiện cho 8 hàng.
Sau đó đem biến đổi nhanh Cosin một chiều theo từng cột của ma trận vừa thu được
sau 8 phép biến đổi trên, cũng như lần lượt thực hiện cho 8 cột. Ma trận cuối cùng
sẽ là ma trận hệ số biến đổi của khối tương ứng.
c. Lượng tử hóa
Khối lượng tử hoá trong sơ đồ nén đóng vai trò quan trọng, nó quyết định tỉ lệ
nén của chuẩn nén JPEG. Đầu vào của khối lượng tử hoá là các ma trận hệ số biến
đổi Cosin của khối điểm ảnh.
Để giảm số bộ lượng tử, ta quy các hệ số ở các khối về cùng một khoảng phân
bố. Chuẩn nén JPEG chỉ sử dụng một bộ lượng tử hoá duy nhất. Giả sử rằng các hệ
số đều có hàm tính xác suất xuất hiện như nhau. Chúng ta sẽ căn chỉnh lại hệ số y j
bằng phép gán:

yj =
Với

yj −µj

σj
µj là trung bình cộng của hệ số thứ j.

σj là độ lệch cơ bản của hệ số thứ j.
d. Nén

Nén Ảnh Số Dùng DCT



ĐỒ ÁN 3
Trang 12/21

Đầu vào của khối nén gồm có hai thành phần khác nhau: thành phần các hệ
số một chiều và các hệ số xoay chiều. Để nâng cao hiệu quả nén cho mỗi bộ hệ số
trong một khối người ta xếp lại chúng theo thứ tự ZigZag. Có thể hình dung hình
ZigZag như bảng trang sau.
0

2

3

9

10

20

21

35

1

4

8

11


19

22

34

36

5

7

12

18

23

33

37

48

6

13

17


24

32

38

47

49

14

16

25

31

39

46

50

57

15

26


30

40

45

51

56

58

27

29

41

44

52

55

59

62

28


42

43

53

54

60

61

63

Mỗi khối ZigZag này được mã hoá theo phương pháp RLE. Cuối mỗi khối
đầu ra của RLE, ta đặt dấu kết thúc khối EOB (End Of Block).
Sau đó, các khối được dồn lại và mã hoá một lần bằng phương pháp mã
Huffman. Nhờ có dấu kết thúc khối nên có thể phân biệt được hai khối cạnh nhau
khi giải mã Huffman. Hai bảng mã Huffman cho hai thành phần hệ số tất nhiên sẽ
khác nhau.

Nén Ảnh Số Dùng DCT


ĐỒ ÁN 3
Trang 13/21

CHƯƠNG 3.


XÂY DỰNG CHƯƠNG TRÌNH

1.6 Sơ đồ giải thuật

ẢNH GỐC

Phân
khố
i

ẢNH NÉN
8x8

DCT

Lượng tử hoá

Mã hoá

Bảng lượng tử

Bảng mã

8x8

......

8x8

Hình 3 - 1: sơ đồ giải thuật DCT thuận.


Hình 3-2:Sơ đồ giải thuật DCT nghịch.

1.7 Thuật toán của chương trình
1.1.1 Chọn ảnh

Nén Ảnh Số Dùng DCT


ĐỒ ÁN 3
Trang 14/21

Hình 3-3: Chọn ảnh.

• Chọn các ảnh RGB từ các file chứa ảnh.
Chọn kiểu

Đọc ảnh

ảnh

1.1.2 Nén ảnh dùng DCT

Nén Ảnh Số Dùng DCT

Hiển thị ảnh


ĐỒ ÁN 3
Trang 15/21


Hình 3-4: Nén ảnh JPEG.

Phân bố

DCT

Ảnh nén

iDCT
Hình 3-5: Giải thuật nén ảnh.

Nén Ảnh Số Dùng DCT

Lượng tử hóa

Mã Hóa


ĐỒ ÁN 3
Trang 16/21

CHƯƠNG 4.

KẾT QỦA MÔ PHỎNG

1.8 Thiết kế Guide cho chương trình

Hình 4-1: Thiết kế Guide cho nén ảnh.


1.9 Kết quả ảnh sau khi nén dùng DCT

Nén Ảnh Số Dùng DCT


ĐỒ ÁN 3
Trang 17/21

Hình 4-2: Ảnh sau khi được nén.

Nén Ảnh Số Dùng DCT


ĐỒ ÁN 3
Trang 18/21

Hình 4-3: Bảng phân tích hình ảnh sau khi nén bằng DCT.

Với từng mức độ nén khác nhau, ta được các kết quả nén cũng như độ phân giải
hình ảnh khác nhau. Ứng với độ phân giải càng cao thì tỷ lệ nén càng cao và độ
hiển thị hình ảnh càng thấp.

Nén Ảnh Số Dùng DCT


ĐỒ ÁN 3
Trang 19/21

CHƯƠNG 5.


KẾT LUẬN

1.10 Ưu và nhược điểm
Ưu điểm:
Việc phân khối sẽ làm giảm được một phần thời gian tính toán các
hệ số chung, biến đổi cosin đối với các khối nhỏ sẽ làm tăng độ chính xác
khi tính toán với dấu phẩy tĩnh, giảm thiểu sai số do làm tròn sinh ra.
Biến đổi DCT không làm mất thông tin vì DCT là một biến đổi
tuyến tính chuyển các giá trị của điểm ảnh từ miền không gian thành các
hệ số trong miền tần số.
Nén ảnh tổn hao dựa vào DCT tính toán đơn giản, chất lượng tốt
và dễ dàng thực hiện về mặt phần cứng…
Khuyết điểm:
Vì ảnh đầu vào được phân chia thành nhiều khối độc lập, các khối
này được thực hiện biến đổi DCT riêng cho nên vẫn có tương quan ở dọc
đường biên của các khối. Điều này sẽ gây ra lỗi khối khi thực hiện mã
hoá với tốc độ bit thấp.
1.11 Hướng phát triển
Nén ảnh dựa vào DCT đã được ra đời từ nhiều năm trước ,do đó cần nghiên cứu
những cải tiến để nâng cao hiệu quả nén.
Nghiên cứu thêm về các giải thuật DFT, SPIHT, EZW và các ứng dụng của chúng.

TÀI LIỆU THAM KHẢO

Nén Ảnh Số Dùng DCT


ĐỒ ÁN 3
Trang 20/21


[1].
[2] />[3]

/>
chuan-jpeg-%E2%80%93-dinh-dang-anh-jpeg-13
[4]. Ken Cabeen and Peter Gent, Image Compression and the Discrete Cosine
Transform.
[5]. MatLab và ứng dụng trong viễn thông - Tác giả: TS. Phạm Hồng Liên, Đặng
Ngọc Khoa - Trần Thanh Phương.

Nén Ảnh Số Dùng DCT


ĐỒ ÁN 3
Trang 21/21

PHỤ LỤC
[file1, pathname]=uigetfile('*.bmp;*.BMP;*.tif;*.TIF;*.jpg','Open An
image');
im = imread(file1);
subplot(1,2,1), imshow(im); title('Ori image');
S = size(im);
L=length(S);
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 98 112 100 103 99];
c = 5
F = create_mat_dct();
if(L==3)
im1=rgb2gray(im);
[hang cot]=size(im1);
im=imresize(im,[256 256]);
red = im(:,:,1);
green= im(:,:,2);
blue = im(:,:,3);
%DCT FOR RED CHANNEL
[im_1, im_2] = size(red);
for j = 1 : 8 : im_1
for i = 1 : 8 : im_2
temp_im1 = red(i:i+7, j:j+7);
dct_im1 = mydct(temp_im1, F);
quant_im1 = myDCT_quantization(dct_im1, Q, c);
q_im1(i:i+7, j:j+7) = quant_im1;
end
end
% Dequantize
dq_im1 = zeros(im_1, im_2);
for j = 1 : 8 : im_1
for i = 1 : 8 : im_2
temp_im1 = q_im1(i:i+7, j:j+7);
dequant_im1 = myDCT_dequantization(temp_im1, Q, c);
idct_im1 = myIDCT(dequant_im1, F);
dq_im1(i:i+7, j:j+7) = idct_im1;
end
end

%DCT FOR GREEN CHANNEL
[im_3, im_4] = size(green);
for j = 1 : 8 : im_3

Nén Ảnh Số Dùng DCT


ĐỒ ÁN 3
Trang 22/21

for i = 1 : 8 : im_4
temp_im2 = green(i:i+7, j:j+7);
dct_im2 = mydct(temp_im2, F);
quant_im2 = myDCT_quantization(dct_im2, Q, c);
q_im2(i:i+7, j:j+7) = quant_im2;
end

end

% Dequantize
dq_im2 = zeros(im_3, im_4);
for j = 1 : 8 : im_3
for i = 1 : 8 : im_4
temp_im2 = q_im2(i:i+7, j:j+7);
dequant_im2 = myDCT_dequantization(temp_im2, Q, c);
idct_im2 = myIDCT(dequant_im2, F);
dq_im2(i:i+7, j:j+7) = idct_im2;
end
end
%DCT FOR BLUE CHANNEL

[im_5, im_6] = size(blue);
for j = 1 : 8 : im_5
for i = 1 : 8 : im_6
temp_im3 = blue(i:i+7, j:j+7);
dct_im3 = mydct(temp_im3, F);
quant_im3 = myDCT_quantization(dct_im3, Q, c);
q_im3(i:i+7, j:j+7) = quant_im3;
end
end
% Dequantize
dq_im3 = zeros(im_5, im_6);
for j = 1 : 8 : im_5
for i = 1 : 8 : im_6
temp_im3 = q_im3(i:i+7, j:j+7);
dequant_im3 = myDCT_dequantization(temp_im3, Q, c);
idct_im3 = myIDCT(dequant_im3, F);
dq_im3(i:i+7, j:j+7) = idct_im3;
end
end
R = uint8(dq_im1);
G = uint8(dq_im2);
B = uint8(dq_im3);
final = cat(3,R,G,B);
final = imresize(final,[hang cot]);
;subplot(1,2,2), imshow(uint8(final)); title(['For c = ' num2str(c) '
compressed image'])
imwrite(uint8(final),'my_output_image.jpg');
else
[im_x, im_y] = size(im);


Nén Ảnh Số Dùng DCT


ĐỒ ÁN 3
Trang 23/21

for j = 1 : 8 : im_x
for i = 1 : 8 : im_y
temp_im = im(i:i+7, j:j+7);
dct_im = mydct(temp_im, F);
quant_im = myDCT_quantization(dct_im, Q, c);
q_im(i:i+7, j:j+7) = quant_im;
end
end
% Dequantize
dq_im = zeros(im_x, im_y);
for j = 1 : 8 : im_x
for i = 1 : 8 : im_y
temp_im = q_im(i:i+7,j:j+7);
dequant_im = myDCT_dequantization(temp_im, Q, c);
idct_im = myIDCT(dequant_im, F);
dq_im(i:i+7, j:j+7) = idct_im;
end
end
subplot(1,2,2), imshow(uint8(dq_im)); title(['For c = ' num2str(c) '
compressed image'])
imwrite(uint8(dq_im),'hinhtest.tif')
end

% fprintf('For c: %i\n', c);

% fprintf('Entropy of image: %f\n', My_entropy(uint8(dq_im)));
%fprintf('RMSE of image: %f\n\n', RMSE(im, dq_im));
% figure
% subplot(1,2,1), imshow(uint8(im)); title('Original Image');
%subplot(1,2,2), imshow(uint8(dq_im)); title(['For c = ' num2str(c) '
compressed image'])
function [ imqDCT ] = myDCT_quantization( imDCT, qm, c )
%myDCT_quantization for outputs quantized DCT image
imqDCT = ones(8,8);
for j = 1:8
for i = 1:8
imqDCT(i,j) = round(imDCT(i,j) ./ (qm(i,j) .* c));
end
end
end
function [ invdctTransformed ] = myIDCT( im, F )
%myIDCT outputs IDCT of transformed image
invdctTransformed = transpose(F)*double(im)*F;

Nén Ảnh Số Dùng DCT


ĐỒ ÁN 3
Trang 24/21

end
function [ dequantizedImage ] = myDCT_dequantization(imqDCT, qm, c)
%myDCT_dequantization de-quantizes the quantized DCT image
dequantizedImage = ones(8,8);
for j = 1:8

for i = 1:8
dequantizedImage(i,j) = round(imqDCT(i,j) .* (qm(i,j) .* c));
end
end
end
function [ dctTransformed ] = myDCT( im, F )
%myDCT outputs DCT transformed image
dctTransformed = F*double(im)*transpose(F);
end

function [ basis ] = create_mat_dct()
%create_mat_dct outputs the 8-point 2D-DCT basis function
N = 8;
basis = zeros(N, N);
r = 0;
for i = 0:7
for j = 0:7
if i == 0
r = sqrt(1/N);
else
r = sqrt(2/N);
end
basis(i+1, j+1) = r * cos((pi*(2*j+1)*i)/(2*N));
end
end
%dc = dctmtx(8);
%A = basis;
%B = dc;
%thr = 0.0000000000000001;
%assert(all(A(:) == B(:)), 'Some elements are not the same');

%assert(all(abs(A(:) - B(:)) < thr), 'Some elements are not close');
end

Nén Ảnh Số Dùng DCT



×