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

DCT trong nén ảnh sử dụng phần mềm MATLAB

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 (2.15 MB, 78 trang )

BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP HỒ CHÍ MINH
KHOA CÔNG NGHỆ ĐIỆN TỬ


KHÓA LUẬN TỐT NGHIỆP
Đề tài :

DCT TRONG NÉN ẢNH SỬ DỤNG
PHẦN MỀM MATLAB
GVHD

:

SVTH

:

Chuyên ngành

: Điện Tử Viễn Thông

Hệ đào tạo

: Chính Quy

Khóa đào tạo

: 2015 - 2019.

TP. Hồ Chí Minh, tháng 06 năm 2019


BỘ CÔNG THƯƠNG
TRƯỜNG ĐH CÔNG NGHIỆP
THÀNH PHỐ HỒ CHÍ MINH

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do – Hạnh phúc


Báo Cáo Tốt Nghiệp

KHOA CÔNG NGHỆ ĐIỆN TỬ
NHIỆM VỤ BÁO CÁO TỐT NGHIỆP
Họ và tên sinh viên :

Chuyên ngành:

Điện Tử Viễn Thông

Hệ đào tạo:

Chính Quy

Niên Khóa:

2015 - 2019

Tên đề tài:

DCT TRONG NÉN ẢNH SỬ DỤNG
PHẦN MỀM MATLAB


I. Giáo viên hướng dẫn :
II. Ngày giao nhiệm vụ :
III.

Ngày hoàn thành nhiệm vụ :
TP.HCM, Ngày … tháng … năm 2018

GIÁO VIÊN HƯỚNG DẪN

BM.ĐIỆN TỬ VIỄN THÔNG

LỜI CẢM ƠN

Đề hoàn thành được cuốn khóa luận với đề tài “DCT trong nén ảnh sử dụng phần mềm
MATLAB”, bên cạnh sự nỗ lực của bản thân đã vận dụng những kiến thức tiếp thu được,
tìm tòi học hỏi cũng như thu thập tài liệu có liên quan đến đề tài, chúng em luôn nhận
được sự giúp đỡ tận tình của các thầy cô, bạn bè.


Báo Cáo Tốt Nghiệp

Chúng em xin gửi lời cảm ơn đến thầy cô Khoa Công nghệ Điện tử và Bộ môn Điện tử
Viễn thông đã giúp đỡ cũng như cung cấp những kiến thức sâu rộng để chúng em có nền
tảng kiến thức để nghiên cứu đề tài. Đặc biệt chúng em xin chân thành cảm ơn thầy
Th.s Mạc Đức Dũng, người đã tận tình hướng dẫn nghiên cứu đề tài này.
Các bạn sinh viên và tập thể lớp đã có những giúp đỡ thiết thực, cung cấp các tài liệu liên
quan cũng như động viên trong quá trình thực hiện đề tài.
Và xin chân thành gửi lời cảm ơn sâu sắc đến gia đình và người thân đã hỗ trợ tất cả mọi
điều kiện để đề tài được hoàn thành tốt đẹp.

Trong quá trình thực hiện đề tài và quá trình làm báo cáo thực tập của chúng em không
thể không tránh khỏi các thiếu sót. Kính mong các thầy cô thông cảm và chân thành góp
ý kiến giúp chúng em có kiến thức vững vàng hơn để làm hành trang thật tốt sau khi ra
trường.
Chúng em xin chân thành cảm ơn !
TP Hồ Chí Minh, Ngày… tháng …năm …

MỤC LỤC


Báo Cáo Tốt Nghiệp

DANH MỤC HÌNH ẢNH

DANH MỤC BẢNG VÀ BIỂU MẪU

4


Báo Cáo Tốt Nghiệp

MỘT SỐ KÝ HIỆU VÀ CHỮ VIẾT TẮT
DCT
JPEG
Matlab
GUI
RLE
DWT
PKZIP
LHA

ARJ
RAM
RGB
YUV
NTSC
PNG
MSE
PSNR
GIF

Discrete Cosine Transform
Joint Photographic Experts Group
Matrix Laboratory
Graphic User Interface
Run-length encoding
Discrete Wavelet Transform
Phil Katz ZIP
A compression program developed by Haruyasu Yoshizaki
Archived by Robert Jung
Random Access Memory
Red Green Blue
A color model: Y is the luminance (brightness).
U and V are the chrominance (color) components.
National Television System Committee
Portable Network Graphic
Mean Squared Error
Peak Signal-To-Noise Ratio
Graphics Interchange Format

5



Báo Cáo Tốt Nghiệp

LỜI NÓI ĐẦU
Thời đại công nghệ 4.0 đã mang đến những sự thay đổi về mặt kinh tế, kỹ thuật, …
Nghành điện tử đã và đang có những bước phát triển vượt bậc. Các sản phẩm công nghệ
đang được phát triển rất nhanh với tốc độ chóng mặt và công nghệ truyền thông cũng
không ngoại lệ.
Nhu cầu chụp ảnh, quay video, để lưu lại các khoảnh khắc đặc biệt là điều thiết yếu trong
cuộc sống. Những tấm hình, những đoạn băng đã được số hóa để có thể được lưu nhiều
hơn và chia sẻ nhanh hơn. Qua đó đã thúc đẩy được sự phát triển của các phần mềm liên
quan đến vấn đề về xử lí hình ảnh và video. Nén ảnh là một kỹ thuật mã hóa các ảnh số
nhằm giảm số lượng bit dữ liệu bằng cách loại bỏ các thông tin dư thừa trong ảnh như dư
thừa về thông tin, không gian, cấp xám hay về thời gian. Mục đích là giảm đi những chi
phí trong việc lưu trữ ảnh và chi phí thời gian để truyền bức ảnh đi xa trong truyền thông
nhưng vẫn đảm bảo được chất lượng yêu cầu.
Theo đó, Matlab là một ngôn ngữ lập trình bậc cao được sử dụng để giải các bài toán về
kỹ thuật. Matlab được tích hợp sẵn các toolbox cũng như thư viện để thực hiện tính toán,
thể hiện kết quả, cho phép lập trình, giao diện làm việc rất dễ dàng cho người sử
dụng.Với phần mềm đồ họa cực mạnh cho phép mô phỏng các mô hình thực tế và lập
trình các ứng dụng.
Xuất phát từ nhu cầu thực tế và xu hướng nghiên cứu của thế giới, chúng tôi thực hiện đề
tài “DCT trong nén ảnh sử dụng phần mềm Matlab”.

6


Báo Cáo Tốt Nghiệp


TÓM TẮT
Nén ảnh là một trong những đề tài nghiên cứu thông dụng nhất hiện nay, dùng trong rất
nhiều ứng dụng và trở thành phần không thể thiếu trong cuộc sống hiện đại, từ các ứng
dụng điện thoại, đến chương trình chuyên môn. Việc chuyển định dạng thông tin sử dụng
ít bit hơn cách thể hiện ở dữ liệu gốc, xác định các thông tin không cần thiết và loại bỏ
chúng, cần thiết vì giảm được nguồn tài nguyên cũng như dung lượng lưu trữ hay băng
thông đường truyền.
Vậy nên đề tài chia làm 5 chương:
Chương 1: Tổng quan về đề tài.
Nêu lên mục tiêu, nhiệm vụ nghiên cứu và phương pháp nghiên cứu đề tài.
Chương 2: Cơ sở lý thuyết.
Sơ lược về xử lý ảnh, nén ảnh jpeg, lý thuyết về mã DCT trong nén ảnh, ứng dụng Matlab
cơ bản và hướng dẫn sử dụng Guide trong Matlab.
Chương 3: Thiết kế và lập trình.
Trình bày giao diện và code nén ảnh DCT và giải thích code.
Chương 4: Kết quả thực nghiệm
Trình bày kết quả đạt được, hình ảnh gốc và hình ảnh đã nén dùng phương pháp DCT và
bảng so sánh hệ số DCT.
Chương 5: Kết luận
Kết luận và hướng phát triển đề tài.

7


Báo Cáo Tốt Nghiệp

CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI
1.1 Lý do chọn đề tài
Nén ảnh là một trong những đề tài nghiên cứu thông dụng nhất hiện nay, dùng trong rất
nhiều ứng dụng và trở thành phần không thể thiếu trong cuộc sống hiện đại, từ các ứng

dụng điện thoại, đến chương trình chuyên môn. Việc chuyển định dạng thông tin sử dụng
ít bit hơn cách thể hiện ở dữ liệu gốc, xác định các thông tin không cần thiết và loại bỏ
chúng, cần thiết vì giảm được nguồn tài nguyên cũng như dung lượng lưu trữ hay băng
thông đường truyền.
Trong thời hiện đại, mỗi người có nhu cầu lưu trữ hình ảnh nhiều hơn, vậy nên phương
pháp nén ảnh DCT sẽ giúp người dùng lưu trữ được nhiều hình ảnh mà không cần phải
tốn quá nhiều dung lượng bộ nhớ trên thiết bị, lưu lại chất lượng hình ảnh tốt nhất.

1.2 Mục tiêu nhiệm vụ nghiên cứu
1.2.1 Nhiệm vụ
-

Đưa ra cơ sở lý thuyết.
Tiến hành nghiên cứu thuật toán của các loại mã DCT.
Đưa ra nguyên tắc mã hóa và bài toán mã hóa.
Thiết kế giao diện và chạy thử.
Đánh giá ưu điểm và nhược điểm của phương pháp.
Nghiên cứu và phát triển thuật toán tối ưu nhất.
Nắm được kiến thức cơ bản của phương pháp nén ảnh từ đó thiết kế và lập trình ra
giao diện nén ảnh bằng mã DCT trên giao diện GUI trong Matlab.

1.2.2 Mục tiêu
-

Vận dụng kiến thức đã học để lập trình code nén ảnh bằng mã DCT.
Thiết kế giao diện nén ảnh như yêu cầu của đề tài.
Thiết kế giao diện trên Matlab đẹp và dễ sử dụng.

1.3 Phương pháp nghiên cứu
Các phương pháp nghiên cứu chính:

-

Phương pháp phân tích và tổng hợp lý thuyết.
Phương pháp phân tích loại hệ thống hóa lý thuyết.
Phương pháp thực nghiệm: từ những cơ sở lý thuyết, xây dựng chương trình và
kiểm nghiệm một cách thực tế nhất.

8


Báo Cáo Tốt Nghiệp

1.4 Kế hoạch nghiên cứu
ST
T

Nội dung công việc

1

Tìm hiểu và thu thập tài liệu
theo từng phần đã phần đã
thiết kế và lý thuyết liên
quan đến đề tài: Lý thuyết
ảnh JPEG, nén dữ liệu, lý
thuyết mã hóa DCT trong
nén ảnh.

2


Tìm hiểu tài liệu về giao
diện GUIDE trong Matlab

3

Xử lý tài liệu đã thu thập

4

Thực hiện và thiết kế phần
code giao diện giới thiệu,
giao diện nén ảnh DCT

5

Nhập code nén ảnh DCT và
phân tích hàm.

6

Cân chỉnh giao diện và code

7
8

Viết báo cáo
Làm PowerPoint
Thực hiện kiểm tra và hoàn
chỉnh giao diện, code, báo
cáo và PowerPoint.


9

Thời gian
thực hiện

Mục đích

Tham khảo tài liệu để
hiểu rõ hơn về đề tài và
đưa ra phương hướng
nghiên cứu hợp lý.
Có nguồn tài liệu tham
khảo đển viết báo cáo.
Hiểu và thành thạo cơ
bản về Matlab
Phân tích, tổng hợp và
phân loại khái quát các
tài liệu đã thu thập được.
Thực hiện nghiên cứu sơ
đồ giải thuật của mã DCT
và nghiên cứu các tạo
giao diện Guide sử dụng
phần mềm Matlab.
Hoàn thành giao diện giới
thiệu và giao diện nén.
Thực hiện được nén ảnh
và hiểu hàm sử dụng
trong code.
Tạo ra giao diện đẹp, gọn

gàng và dễ sử dụng.

Bảng 1.1 Kế hoạch nghiên cứu

9

Ghi chú
Các
nguồn
thu thập:
-Sách
-Các
diễn đàn
điện tử,
code,…
-Website


Báo Cáo Tốt Nghiệp

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
2.1 Sơ lược về nén ảnh
2.1.1 Tổng quan về nén ảnh jpeg
JPEG ( Joint Photographic Experts Group) là một phương pháp nén ảnh hiệu quả, cho
phép làm việc với ảnh có nhiều màu và kích cỡ lớn, tỷ lệ nén ảnh đạt mức so sánh tới vài
chục lần.
Phương pháp nén ảnh theo chuẩn JPEG có thể cho hệ số nén tới 80:1 hay lớn hơn, nhưng
phải chịu mất thông tin (ảnh sau khi giải nén khác với ảnh ban đầu), lượng thông tin mất
mát tăng dần theo hệ số nén. JPEG tiến hành sửa đổi thông tin ảnh khi nén sao cho ảnh
mới gần giống như ảnh cũ.

Có nhiều cách để nén ảnh, dựa vào yếu tố bảo toàn thông tin có thể chia thành 2 phương
pháp nén ảnh tĩnh:

10


Báo Cáo Tốt Nghiệp

-

-

Nén ảnh không tổn hao( Lossless compression) : Ảnh khôi phục giống hoàn toàn
so với ảnh gốc. Tuy nhiên nếu không tổn hao chỉ đạt được hiệu quả nén rất nhỏ.Sử
dụng các phương pháp mã hóa dữ liệu.
Nén ảnh có tổn hao( Lossy compression): Có thể đạt được hiệu quả nén cao hơn
rất nhiều mà ở điều kiện bằng mắt thường không cảm nhận được và vì vậy nên vẫn
đảm bảo chất lượng ảnh. Kiểu nén này luôn có sự mất mát thông tin vì phương
pháp này đã loại bỏ những thông tin dư thừa không cần thiết..Phương pháp nén
ảnh dựa trên phép biến đổi ảnh.

Các phương pháp mã hóa dữ liệu:
-

Mã hàng loạt( RLE): Dùng số đếm để thay thế các đặc điểm giống nhau lặp lại.
Mã Shannon-Fano: Dùng các cụm bit có độ dài thay đổi để mã hóa.
Mã Huffman: Sử dụng các đặc điểm mã hóa của Shannon-Fano với ý tưởng kí
hiệu có khả năng xuất hiệu nhiều có từ mã ngắn.
Mã Lemple-Ziv: Dựa trên việc xây dựng và tra từ điển.
Mã dự đoán: Dựa trên quá trình tạo điểm tuần tự và luật dự đoán.


Các phép biến đổ áp dụng trong nén ảnh:
-

-

Phép biến đổi Cosin rời rạc( DCT): Biểu diễn các giá trị điểm ảnh trên miền tần
số, tập trung năng lượng vào một số hệ số. DCT sử dụng trong các chuẩn JPEG và
MPEG.
Phép biến đổi Wavelet rời rạc(DWT): sử dụng các bộ lọc thông dài xử lý phân tích
đa phân trong phép DWT.
Phép biến đổi Fractal: Sử dụng các phép biến đổi hình học. [1]

2.1.1.1 Mục đích của việc nén tín hiệu
Nén tín hiệu có hai mục đích chính:
-

Giảm dung lượng lưu trữ.
Giảm băng thông (bandwidth) truyền dẫn.

2.1.1.2 Bản chất của việc nén tín hiệu
Thông tin của một tín hiệu gồm hai phần:
-

Phần lượng tin (entropy), hay độ bất định (uncertainty)
Phần dư thừa (redundancy): Thông tin không phù hợp (irrelenvancy), thông tin cốt
lõi của entropy.

2.1.2 Các kỹ thuật nén ảnh
2.1.2.1 Các nguyên tắc của nén ảnh

11


Báo Cáo Tốt Nghiệp

Một số tính chất chung nhất của tất cả các ảnh số đó là tương quan giữa các pixel ở cạnh
nhau lớn, điều này dẫn đến dư thừa thông tin để biểu diễn ảnh. Dư thừa thông tin sẽ 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 với tương quan nhỏ nhất để giảm thiểu độ dư thừa thông tin của ảnh.
Có hai kiểu dư thừa thông tin được phân loại như sau:
-

-

Dư thừa trong miền không gian: tương quan giữa các giá trị pixel của ảnh, điều
này có nghĩa rằng các pixel lân cận của ảnh có giá trị gần giống nhau (trừ những
pixel ở giáp đường biên ảnh).
Dư thừa trong miền tần số: tương quan giữa các mặt phẳng màu hoặc dải phổ khác
nhau.

Trọng tâm của 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 việc loại bỏ dư thừa trong miền không gian và miền tần số càng nhiều càng tốt. [2]

2.1.2.2 Tốc độ và tỉ lệ nén
Ngay cả khi tất cả các chương trình nén file đều dùng chung một thuật toán thì hoạt động
của chúng cũng khác nhau. Mỗi hãng sẽ triển khai thuật toán một kiểu để dung hòa hai
vấn đề sau: thời gian và tỷ lệ nén. Chương trình PKZIP thường trội hơn các chương trình
nén khác về mặt tốc độ, mặt tỷ lệ nén, nhiều khi nó cũng khá hơn. Tính ổn định của các
chương trình nén cũng là điều cần quan tâm. Các file nén nói chung rất ít khi bị hỏng.
Lưu ý các loại file nén không tương thích với nhau, tức là nếu gửi file nén cho người

khác thì người đó cần phải có chương trình thích hợp mới giải nén ra được. Tuy nhiên để
giải quyết vấn đề này, cả 3 chương trình ARC + PLUS, LHA và PKZIP đều cho phép tạo
file nén tự bung, file nén ở dạng chương trình thực hiện, khi chạy sẽ tự động bung ra, trên
thị trường cũng bắt đầu xuất hiện chương trình chuyển đổi từ dạng file nén này sang dạng
file nén khác (ví dụ chương trình D'Compress for Windows chuyển các file PKZIP, ARC,
LHA sang dạng ARJ).
Các chương trình nén giá không cao (PKZIP: 47USD, LHA miễn phí) nên được dùng
rộng rãi. Hạn chế hiện nay của chúng là giao diện người dùng không thuận tiện, thường
phải gõ lệnh với nhiều tham số ở dấu nhắc của DOS để thực hiện một công việc nào đó.
Cải tiến theo hướng này đang được thực hiện: ARC + PLUS có giao diện kiểu menu,
PKZIP cũng đã có phần bổ sung là PKZIP menu.
Thư mục nén rời sau đó lại phải bung ra để dùng của các chương trình nén file khá rườm
rà, vì lý do này mà các chương trình nén đĩa như Stacker hoặc Super Store được sử dụng
tương đối rộng rãi. Các chương trình nén đĩa cũng hoạt động trên nguyên tắc giống như
12


Báo Cáo Tốt Nghiệp

nén file, khác biệt là chúng tự động nén và bung mà người dùng không phải quan tâm
đến. Thời gian và tỷ lệ nén của các chương trình nén loại này khác nhau. Để bung 3,5 Mb
dữ liệu, chương trình này hết 12 giây, chương trình khác 40 giây. Tỷ số nén đối với file
văn bản cũng khác: từ 2:1 đến 3:1. Tóm lại khi dùng chương trình nén đĩa, người dùng
yên tâm là dung lượng trống của ổ cứng tăng khoảng 2 lần.
Việc bung và nén khi làm việc với file sẽ làm công việc chậm lại một chút. Đối với các
file dữ liệu lớn, điều này thể hiện khá rõ. Khi chạy, các chương trình nén đĩa hoạt động ở
dạng thường trú, bởi thế một mặt nó chiếm dụng bộ nhớ RAM, một mặt có thể gây xung
đột với các chương trình thường trú khác. Các chương trình nén file khi có sự cố hỏng
một vài file, còn chương trình nén đĩa làm hỏng cả ổ đĩa. Tuy nhiên điều này rất ít khi
xảy ra nhưng nó cũng làm cho nhiều người e ngại không dám sử dụng.

Để cài đặt chương trình nén đĩa cần phân chia lại ổ cứng vì máy tính cần được khởi động
bằng đĩa nén trước khi chương trình nén hoạt động. Nếu sử dụng Windows thì phần
không nén cần khá lớn (thông thường cần dành 10 Mb cho vùng không nén, chỉ nén vùng
đĩa còn lại).
Một điều có thể làm người dùng đau đầu là phải quyết định tỷ lệ nén là bao nhiêu. Với tỷ
lệ nén 10:1 chẳng hạn, chương trình nén sẽ dành nhiều "con trỏ" để trỏ đến các dữ liệu,
mỗi con trỏ chiếm 2 byte, khi đó dễ xảy ra trường hợp không đủ con trỏ, chương trình
báo đĩa đầy mà thực ra không phải như vậy.
Cuối cùng, việc loại bỏ chương trình nén đĩa khi đã cài đặt cũng là một vấn đề hơi phiền
toái. Nhiều chương trình - chẳng hạn Double Density có chức năng loại bỏ. Đối với các
chương trình khác cần tóm các file ẩn của chương trình nén và xóa bỏ chúng đi. Có khi
phải format lại ổ cứng.
Tóm lại, dù một số hạn chế, nén dữ liệu là cách thức kinh tế nhất để mở rộng dung lượng
ổ cứng. Ngoài ra còn tiết kiệm được khá nhiều thời gian và kinh phí khi nén dữ liệu trước
khi truyền đi
Tỷ lệ nén là một trong các đặc trưng quan trọng nhất của mọi phương pháp nén. Tuy
nhiên, về cách đánh giá và các kết quả công bố trong các tài liệu cũng cần được quan tầm
xem xét. Nhìn chung, người ta định nghĩa tỷ lệ nén như sau :
Tỷ lệ nén : t = x %
Với r là tỷ số nén được định nghĩa : r = kích thước dữ liệu gốc / kích thước dữ liệu thu
được sau nén. Như vậy hiệu suất của nén là: h = ( 1 - tỷ lệ nén) x %
13


Báo Cáo Tốt Nghiệp

Trong các trình bày sau khi nói đến kết quả nén, chúng ta dùng tỷ số nén, thí dụ như 10
trên 1 có nghĩa là dữ liệu gốc là 10 sau khi nén chỉ có 1 phần.
Tuy nhiên, cũng phải thấy rằng những số đo của một phương pháp nén chỉ có giá trị với
chính sự nén đó, vì rằng hiệu quả của nén còn phụ thuộc vào kiểu dữ liệu định nén. nhiều

khi tỷ lệ nén cao cũng chưa thể nói rằng phương pháp đó là hiệu quả hơn các phương
pháp khác, vì còn các chi phí khác như thời gian, không gian và thậm chí cả độ phức tạp
tính toán nữa. Thí dụ như nén phục vị trong truyền dữ liệu : vấn đề đặt ra là hiệu quả nén
có tương hợp với đường truyền không. [3]

2.1.2.3 Ưu nhược điểm của phương pháp nén ảnh JPEG
a. Ưu điểm:
JPEG cho phép nén ảnh với tỉ số nén lên đến 80:1 hoặc cao hơn, hiển thị các hình ảnh
đầy đủ màu hơn (full-colour) cho định dạng di động mà kích thước file lại nhỏ hơn. JPEG
cũng được sử dụng rất nhiều trên Web. Lợi ích chính của chúng là chúng có thể hiển thị
các hình ảnh với màu chính xác true-colour (chúng có thể lên đến 16 triệu màu), điều đó
cho phép chúng được sử dụng tốt nhất cho các hình ảnh chụp và hình ảnh minh họa có số
lượng màu lớn.
b. Nhược điểm:
Nhược điểm chính của định dạng JPEG là chúng được nén bằng thuật toán lossy (mất dữ
liệu). Điều này có nghĩa rằng hình ảnh của bạn sẽ bị mất một số chi tiết khi chuyển sang
định dạng JPEG. Đường bao giữa các khối màu có thể xuất hiện nhiều điểm mờ, và các
vùng sẽ mất sự rõ nét, tỉ số nén càng cao thì sự mất mát thông tin trên ảnh JPEG càng
lớn. Nói một cách khác, định dạng JPEG thực hiện bảo quản tất cả thông tin màu trong
hình ảnh đó, tuy nhiên với các hình ảnh chất lượng màu cao high-colour như hình ảnh
chụp thì điều này sẽ không hề hấn gì.
Các ảnh JPEG không thể làm trong suốt hoặc chuyển động - trong trường hợp này bạn sẽ
sử dụng định dạng GIF (hoặc định dạng PNG để tạo trong suốt).

2.1.2.4 Độ dư thừa (redundancy)
a) Entropy của nguồn tin
Độ dư thừa các pixel/ ảnh (hay nhiều ảnh liên tiếp) có độ tương quan cao với nhau – Độ
dư thừa giữa các pixels:
-


Độ dư thừa giữa các pixel trong 1 frame: Độ dư thừa không gian (spatial
redundancy) dư thừa trong khung (intraframe redundancy).
14


Báo Cáo Tốt Nghiệp

-

Độ dư thừa giữa các pixels trong các frame liên tiếp: Dư thừa thời gian (temporal
redundancy), hoặc độ dư thừa giữa các frame (interframe redundancy).
b) Độ dư thừa giữa các pixels (ảnh tĩnh)
- Bỏ bớt các thông tin về màu so với thông tin chói (mắt người nhạy cảm với thông
tin chói hơn).
- Bỏ bớt các thành phần tần số không gian quá cao (nằm ngoài vùng nhìn thấy của
mắt).
- Giảm độ phân giải không gian của ảnh.
- Cắt bớt ảnh.
- Bỏ bớt các thông tin ít quan trọng (số lượng màu biểu diễn ảnh (ảnh màu 24 bit có
16,7 triệu màu, ảnh màu 15bit, ảnh màu 8bit có 256 màu), ảnh đen trắng, ảnh nhị
phân): Giảm độ phân giải màu và chói.
- Bỏ bớt độ dư thừa không gian (spatial redundancy): các pixels lân cận trong không
gian có độ tương quan cao.
- Độ dư thừa phổ (spectral redundancy): Các thành phần màu (biểu diễn từng pixel)
có độ tương quan cao.
- Độ dư thừa thống kê (statistical redundancy) các ký hiệu (symbol) xuất hiện trong
dòng bit với xác suất xuất hiện không đồng đều.
- Độ dư thừa tâm lý thị giác (psychovisual redundancy): Các thông tin không phù
hợp với thị giác. Giảm thành phần tần số không gian cao (giảm độ nét).
- Giảm độ phân giải không gian (giảm số lượng pixels trên ảnh => giảm kích thước

ảnh).
- Giảm bớt độ phân giải màu: giảm số bit biểu diễn màu (giảm số thành phần màu
biểu diễn 1 pixel => màu sắc kém trung thực).
c) Nén số tạo ra sái dạng nhân tạo (artifact)
- Tạo hiệu ứng khối (các ô lưới vuông trên ảnh)
- Tạo đường xiên răng cưa.
- Tạo nhiễu.
- Tạo lệch vị trí giáp nối các phần ảnh trong 1 ảnh (do có các chuyển động nhanh
của các đối tượng).
d) Nén video phụ thuộc vào nội dung:
- Nén video tốc độ bit không đổi: Chất lượng không đổi theo nội dung.
- Nén video chất lượng thay đổi: Tốc độ bit thay đổi theo nội dụng.

2.2 Mã DCT
2.2.1 Giới thiệu thuật toán DCT
DCT (biến đổi cosine rời rạc) chủ yếu được sử dụng cho hình ảnh nén từ nhiều năm qua.
Lựa chọn làm tiêu chuẩn cho JPEG là đáng kể vào lý do phổ biến cho sự phổ biến. DCT
có thể thực hiện trong một số ứng dụng không phân tích như tín hiệu xử lý & xử lý hình
ảnh các ứng dụng DSP như video hội nghị. DCT có thể được sử dụng trong chuyển đổi
15


Báo Cáo Tốt Nghiệp

dữ liệu nén. DCT là một biến đổi thực tế có một bộ cơ bản cố định chức năng. DCT được
sử dụng để ánh xạ không gian hình ảnh theo tần số. [10]
Vì ảnh gốc có kích thước rất lớn cho nên trước khi đưa vào biến đổi DCT, ảnh được phân
chia thành các khối vuông, mỗi khối này thường có kích thước 8 x 8 pixel và biểu diễn
các mức xám của 64 điểm ảnh, các mức xám này là các số nguyên dương có giá trị từ 0
đến 255. Việc phân khối này sẽ làm giảm được một phần thời gian tính toán các hệ số

chung, mặt khác 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 là một công đoạn chính trong các phương pháp nén sử dụng biến đổi.
Công thức dưới đây minh họa cho hai phép biến đổi DCT thuận nghịch đối với mỗi khối
ảnh có kích thước 8 x 8. Giá trị x(n 1,n2) biểu diễn các mức xám của ảnh trong miền không
gian, K(k1,k2) là các hệ số sau biến đổi DCT trong miền tần số.

Công thức (1)
Công thức (2)
Với và
Entropy của thông điệp S:

Với là xác suất xuất hiện của ký hiệu Si trong S.

2.2.2 Giải thuật DCT

16


Báo Cáo Tốt Nghiệp

Sơ đồ 2.1 Sơ đồ nén ảnh DCT
-

Phân tích sơ đồ nén ảnh DCT:
o Đầu tiên phân ảnh ra các khối 8x8.
o Biến đổi DCT: là khối biến đổi cosin rời rạc, biến đổi thông tin ảnh từ miền
không gian sang miền tần số.
o Lượng tử hóa: là quá trình làm giảm số lượng bit cần để lưu trữ các hệ số
(quá trình mất mát thông tin).

o Mã hóa: quá trình này sẽ tách biệt việc xử lý hai thành phần DC các hệ số
một chiều đặc trưng cho phần lớn tín hiệu của ảnh và thành phần AC các hệ
số xoay chiều đặc trưng cho các thông tin chi tiết của ảnh.
o Bảng lượng tử hóa: là ma trận 8x8 được sử dụng cho việc biến đổi dữ liệu
từ số thực sang số nguyên.
o Bảng mã hóa: là luật mã hóa các dữ liệu số nguyên sau lượng tử hóa thành
các từ mã. [9]

Sơ đồ 2.2 Sơ đồ giải nén
-

Quá trình giải nén ngược lại với quá trình nén ảnh.

Phương pháp nén ảnh JPEG dựa trên nguyên lý sau: ảnh màu trong không gian của 3 màu
RGB (red Green Blue) được biến đổi về hệ YUV (hay YCBCr) (điều này không phải là
nhất thiết, nhưng nếu thực hiện thì cho kết quả nén cao hơn) theo công thức :
YUV. = 0.615R − 0.515G − 0.100B
Y= 0.299R + 0.587G + 0.114B
U= 0.492(B − Y)= = − 0.147R − 0.289G + 0.436B
V= 0.877(R − Y)
17


Báo Cáo Tốt Nghiệp

Hệ YUV là kết quả nghiên cứu của các nhà sản xuất vô tuyến truyền hình hệ Pal, Secam
và NTSC, nhận thấy tín hiệu video có thể phân ra 3 thành phần Y, U, V (cũng như phân
theo màu chuẩn đỏ, xanh lá cây và xanh da trời). Và một điều thú vị là hệ nhãn thị của
con người rất nhạy cảm với thành phần Y và kém nhạy cảm với hai loại U và V. Phương
pháp JPEG đã nắm bắt phát hiện này để tách những thông tin thừa của ảnh. Hệ thống nén

thành phần Y của ảnh với mức độ ít hơn so với U, V, bởi người ta ít nhận thấy sự thay đổi
của U và V so với Y.
Giai đoạn tiếp theo là biến đổi những vùng thể hiện dùng biến đổi cosin rời rạc
(thông thường là những vùng 8x8 pixel). Khi đó thông tin về 64 pixel ban đầu sẽ biến đổi
thành ma trận có 64 hệ số thể hiện "thực trạng" các pixel. Điều quan trọng là ở đây hệ số
đầu tiên có khả năng thể hiện "thực trạng" cao nhất, khả năng đó giảm rất nhanh với các
hệ số khác. Nói cách khác thì lượng thông tin của 64 pixel tập trung chủ yếu ở một số hệ
số ma trận theo biến đổi trên. Trong giai đoạn này có sự mất mát thông tin, bởi không có
biến đổi ngược chính xác. Nhưng lượng thông tin bị mất này chưa đáng kể so với giai
đoạn tiếp theo. Ma trận nhận được sau biến đổi cosin rời rạc được lược bớt sự khác nhau
giữa các hệ số. Đây chính là lúc mất nhiều thông tin vì người ta sẽ vứt bỏ những thay đổi
nhỏ của các hệ số. Như thế khi bung ảnh đã nén bạn sẽ có được những tham số khác của
các pixel. Các biến đổi trên áp dụng cho thành phần U và V của ảnh với mực độ cao hơn
so với Y (mất nhiều thông tin của U và V hơn).

DCT

Các giá trị mức xám của 1 khối 64 điểm ảnh

18


Báo Cáo Tốt Nghiệp

Hình 2.1 Các bước của quá trình mã hóa biến đổi DCT đối với 1 khối

2.2.3 Lượng tử và giải lượng tử
Sau khi thực hiện biến đổi DCT, 64 hệ số sẽ được lượng tử hóa dựa trên một bảng lượng
tử gồm 64 phần tử Q(u,v) với 0 ≤ u, v ≤ 7. Bảng này được định nghĩa bởi từng ứng dụng
cụ thể. Các phần tử trong bảng lượng tử có giá trị 1Các

đếnhệ255
đượcđổi
gọiDCT
là các
bước nhảy
số biến
thuận
Các hệ số sau lượng tử hóa
cho các hệ số DCT. Quá trình này sau đó sẽ được làm tròn xuống số nguyên gần nhất.
Công thức 3 thể hiện lượng tử với F(u,v) là các hệ số DCT, F Q(u,v) là các hệ số sau lượng
tử, các hệ số này sẽ được đưa vào bộ mã hóa Entropy.

Công thức (3)
Mục đích của việc lượng tử hóa là giảm số lượng bit cần để lưu trữ các hệ số biến đổi
bằng việc giảm độ chính xác của các hệ số này cho nên lượng tử là quá trình xử lý có mất
thông tin.
Quá trình giải lượng tử ở phía bộ giải mã được thực hiện ngược lại. Các hệ số sau bộ giải
mã entropy sẽ nhân với các bước nhảy trong bảng lượng tử (bảng lượng tử được đặt trong
phần header của ảnh JPEG). Kết quả này sau đó được đưa vào biến đổi DCT ngược.
Các bước đầu tiên của quá trình này là khôi phục các bảng Huffman từ hình ảnh & giải
nén. Ở phần tiếp theo, giá trị DCT của mỗi khối sẽ giải nén một khối. JPEG sẽ giúp giải
nén 63 giá trị còn lại trong mỗi khối bằng cách điền vào số 0 yêu cầu. Ở bước cuối cùng,
thứ tự zigzag kết hợp sẽ được giải mã và các khối có kích thước 8x8 được hình thành.
[10]

2.2.4 Khái niệm về Matlab
Matlab (MATrix LABoratory) là một ngôn ngữ lập trình thực hành bậc cao sử dụng để
giải các bài toán kỹ thuật. Matlab tích hợp được việc tính toán, thể hiện hiểu quả, cho
phép lập trình, giao diện làm việc dễ dàng cho người sử dụng. Dữ liệu cùng với thư viện
được lập trình sẵn cho phép người sử dụng có thể sử dụng được những ứng dụng sau đây:

-

Sử dụng các hàm có sẵn trong thư viện, các phép tính toán học thông thường.
Cho phép lập trình tạo ra ứng dụng mới.
Cho phép mô phỏng các mô hình thực tế.
Phân tích, khảo sát, hiển thị dữ liệu.
Với phần mềm đồ họa mạnh.
19


Báo Cáo Tốt Nghiệp

-

Cho phép phát triển, giao tiếp với một số phần mềm như C++, Fortran. [9]

2.2.5 Cấu trúc dữ liệu của Matlab và các ứng dụng
Matlab là một hệ thống tương giao, các phần tử dữ liệu là một mảng (không đòi hỏi kích
thước). Chúng cho phép giải quyết vấn đề liên quan đến lập trình bằng máy tính, đặc biệt
sử dụng các phép tính về ma trận, vector và có thể sử dụng ngôn ngữ C hoặc Fortran lập
trình, thực hiện ứng dụng lập trình đó bằng các câu lệnh từ Matlab.
Matrix laboratory tức là thư viện về ma trận, từ đó phần mềm Matlab được viết nhằm
cung cấp cho việc truy cập vào phần mềm ma trận dễ dàng, phần mềm ma trận này còn
được phát triển bởi các công trình Linpack và Eispack. Hiện nay, Matlab được phát triển
bởi Lapack và Artpack tạo nên một nghệ thuật phần mềm cho ma trận.

2.2.5.1 Dữ liệu trong Matlab
Dữ liệu trong Matlab được thể hiện dưới dạng ma trận và có các kiểu dữ liệu được liệt kê
sau đây:
-


Kiểu đơn single: kiểu này có lợi cho bộ nhớ dữ liệu vì nó đòi hỏi ít byte nhớ hơn.
Không được sử dụng trong các phép tính toán học, độ chính xác kém.
Kiểu double: kiểu này là kiểu thông dụng nhất trong các biến của Matlab.
Kiểu Sparse
Kiểu uint 8, uint 16 …
Kiểu char
Kiểu cell
Kiểu Structure

Trong Matlab kiểu dữ liệu double là kiểu mặc định sử dụng trong các phép tính toán học.

2.2.5.2 Ứng dụng
-

Các khóa học về toán học.
Các kỹ sư, các nhà nghiên cứu khoa học.
Dùng Matlab để tính toán, nghiên cứu tạo ra các sản phẩm tốt nhất trong sản xuất.

2.2.5.3 Các hàm chuyển đổi kiểu ảnh
Với các thao tác nhất định, thuận tiện khi chuyển đổi ảnh từ dạng này sang dạng khác.
Nếu ta muốn lọc một ảnh màu được lưu trữ dưới dạng ảnh số, ta phải chuyển đổi nó
thành dạng ảnh RGB. Khi áp dụng phép lọc tới ảnh RGB, Matlab sẽ lọc giá trị cường độ
tương ứng trong ảnh. Nếu Lọc ảnh số Matlab đơn giản chỉ áp đặt phép lọc tới ma trận ảnh
số.
Các hàm được sử dụng trong chuyển đổi ảnh:
20


Báo Cáo Tốt Nghiệp


-

dither: Tạo một ảnh nhị phân từ một ảnh cường độ đen trắng bằng cách trộn, tạo
một ảnh từ một ảnh RGB.
gray2id: Tạo một ảnh chỉ số từ một ảnh cường độ đen trắng.
grayslice: Tạo một ảnh từ một ảnh cường độ đen trắng bằng cách đặt ngưỡng.
im2bw: Tạo một ảnh nhị phân tử từ một một ảnh cường độ, ảnh chỉ số hay ảnh
RGB trên cơ cở ngưỡng ánh sáng.
ind2gray: Tạo một ảnh cường độ đen trắng từ một ảnh chỉ số.
ind2rgb: Tạo một ảnh RGB từ một ảnh chỉ số.
mat2gray: Tạo một ảnh cường độ đen trắng từ dữ liệu trong một ma trận bằng
cách lấy tỉ lệ dữ liệu.
rgb2gray: Tạo một ảnh cường độ đen trắng từ ảnh RGB.
rgb2ind: Tạo một ảnh chỉ số từ ảnh RGB. [9]

2.3 Cơ sở lý thuyết GUI
2.3.1 Sơ lược về lập trình giao diện người dùng GUIDE trong MATLAB
2.3.1.1 Khái niệm GUI
Để thuận tiện cho việc sử dụng các ứng dụng hay chương trình mà ta đã viết chúng ta có
thể tạo ra giao diện đồ họa GUI (Graphic User Interface) giữa ngưới dùng và Matlab.
Trong giao diện này ta có thể xuất dữ liệu dưới hai dạng văn bản và đồ họa. Mỗi một GUI
có thể có một hay nhiều giao diện. Việc tạo GUI tạo nên một công cụ nhập xuất dữ liệu
một cách trực quan, nhanh chóng và rất thuận tiện. Ngoài ra có thể dùng GUI để giám sát
các quá trình, hiển thị các đối tượng.
Ứng dụng của Matlab lập trình giao diện rất mạnh và dễ thực hiện, nó có thể tạo ra giao
diện người dùng tương tự VBB, C++.
GUI bao gồm đầy đủ các chương trình hỗ trợ như thực hiện phép toán LOGIC, mô phỏng
không gian 2D, 3D, đọc hiển thị dữ liệu... Giao tiếp với người dùng thông qua hình ảnh,
các nút nhấn thực thi.

Hầu hết GUI chỉ thực hiện (trả lời) lệnh người dùng thông qua các tác động của người
dùng lên giao diện, người sử dụng không cần biết cấu trúc chương trình vẫn có thể thực
hiện được. GUI được thực hiện thông qua các hàm CALLBACK, khi người dùng tác
động lên giao diện bằng các cách khác nhau, hàm CALLBACK sẽ được gọi để thực thi. [5]

2.3.1.2 Bắt đầu với GUI
Có 2 phương pháp để lập trình GUI:
-

Cách đơn giản nhất là sử dụng công cụ có sẵn trong GUI Matlab để lập trình. Ưu
điểm của cách này là dễ thực hiện và các hàm FUNCTION được GUI tự tạo sẵn.
Cách khác được lập trình từ siêu tệp Mfile bằng các hàm FUNCTION do người
lập trình tự viết, nó có ưu điểm là tùy biến cao. Tuy nhiên cách này khó hơn và đòi
hỏi người lập trình phải có hiểu biết sâu và trình độ. [8]
21


Báo Cáo Tốt Nghiệp

2.3.1.3 Các bước thực hiện
- Trước tiên để bắt đầu lập trình ta cần phải xác định mục đích của chương trình là gì?
- Sau đó tiến hành xác định các bước thực hiện để mô phỏng giao diện người dùng sao
cho hợp lí và chính xác.
- Bước cuối cùng là viết chương trình và thực thi.
- Khi bắt đầu với GUI, GUI tự động tạo ra các mã tập tin được thực thi bởi hàm Callback
function. GUI thao tác trên những kí tự mà người dùng nhập vào và chuyển sang dạng số
học, nói cách khác, giao diện GUI tương tự như những lệnh thực thi trong Comment
Windowns.
- Tất cả các hàm callback thực thi những lệnh chứa trong nó.
- Chúng ta nên sử dụng chức năng HELP của Matlab để tìm hiểu thêm tất cả cách hàm

thực thi trong GUI, cách tạo và thao tác với GUI [8].

2.3.2 Thao tác với GUI
2.3.2.1 Cách tạo giao diện GUI
Trên đây ta đã xem xét cách tạo GUI bằng phương pháp thủ công. Ta có thể tạo GUI
trong Matlab bằng những cách dưới đây :
Cách 1: Gõ lệnh guide trong cửa sổ Command Window

Hình 2.2 Tạo giao diện GUI
Cách 2: Click chuột vào New -> App -> Click double chuột vào GUIDE

22


Báo Cáo Tốt Nghiệp

Hình 2.3 Tạo giao diện GUI
Sau khi gõ lệnh guide, ta sẽ nhận được cửa sổ GUIDE Quick Start

Hình 2.4 Tạo giao diện GUI
23


Báo Cáo Tốt Nghiệp

 Create New GUI: Tạo giao diện GUI mới.
 Open Existing GUI: Mở những giao diện đã có sẵn.
 Blank GUI (Default): Giao diện trống, dễ dàng thuận tiện trong việc tạo giao diện
theo mong muốn.
 GUI with Uicontrols: Hộp thoại GUI với một vài uicontrol như button, …

Chương trình có thể chạy ngay.
 GUI with Axes and Menu: Hộp thoại GUI với một uicontrol axes và button, các
menu để hiển thị đồ thị.
 Modal Question Dialog: Hộp thoại đặt câu hỏi Yes, No. [13]

Hình 2.5 Tạo giao diện GUI
Chúng ta chọn Create New GUI sau đó chọn Blank GUI (Default) để tạo GUI trống và
thiết lập các thông số theo mong muốn. Kết quả cho ra một layout trắng như hình sau:

24


Báo Cáo Tốt Nghiệp

Hình 2.6 Tạo giao diện GUI
Tại giao diện , ta sẽ có những Tool sử dụng để thiết kế giao diện.

Hình 2.7 Tạo giao diện GUI
25


×