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

Báo cáo và CODE nén ảnh JPEG

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 (791.62 KB, 27 trang )

ĐẠI HỌC KỸ THUẬT – HẬU CẦN CAND

ĐẠI HỌC KỸ THUẬT – HẬU CẦN CAND
KHOA ĐIỆN TỬ VIỄN THÔNG

ĐA PHƯƠNG TIỆN
ĐỀ TÀI: TÌM HIỂU VỀ GIAO THỨC NÉN ẢNH JPEG
Lớp:
Nhóm sinh viên thực hiện:

B7/D4
Phạm Thanh Tú
Trần Minh Hoàng
Nguyễn Đình Tuân
Nguyễn Đình Tiến
Nguyễn Châu Thanh
Bắc Ninh, ngày 06 tháng 10 năm 2016

BÁO CÁO


TRƯỜNG ĐẠI HỌC KỸ THUẬT - HẬU CẦN CAND
KHOA KỸ THUẬT ĐIỆN TỬ - TRUYỀN THÔNG
***

BÀI TẬP LỚN ĐA PHƯƠNG TIỆN

TÌM HIỂU VỀ CHUẨN NÉN JPEG


MỤC LỤC



LỜI NÓI ĐẦU
Ngày nay truyền thông đa phơng tiện - multimedia đang đợc ứng dụng và
nhanh chóng mở rộng ra trong nhiều dịch vụ thông tin và phát triển thêm nhiều
dịch vụ thông tin mới, là những thành phần thông tin quan trọng không thể thiếu
của các xa lộ thông tin.
Trong thế giới thông tin đa phơng tiện gần nh hầu hết là hoạt động ở chế
độ hội nghị truyền hình tơng tác có hình ảnh động và cho phép nhiều ngừơi
tham dự ở chế độ thời gian thực, thông qua các môi trờng mạng nh LAN,
WAN, Internet, xDSL, ISDN, (Intergrated serviceDigital Network), ATM,
PSTN (Public Switched Telephone Network). Trong đồ án này, chúng tôi thực
hiện tiếp cận, nghiên cứu, tìm hiểu những vấn đề cơ bản sau của công nghệ
truyền thông đa phơng tiện:
-

Những vấn đề cơ sở của truyền thông đa phơng tiện tơng tác.
Họ giao thức H32x
Hội nghị đa phơng tiện
Những yêu cầu về giải thông đối với mạng đa phơng tiện
Các tiêu chuẩn truyền dẫn của mạng truyền thông đa phơng tiện
Các phơng tiện truyền dẫn và phần cứng của mạng thông tin đa phơng
tiện
- Các giải pháp mạng sử dụng mạng LAN cho thông tin đa phơng tiện
Trong khuôn khổ của đề tài, nhóm đã tập trung vào một số điểm chủ chốt
nh loại hình Điểm - Điểm, chỉ có hai kết nối thực hiện Video Conferencing với
nhau để từ đó tìm hiểu và khảo sát một số giải pháp công nghệ, lựa chọn các
chuẩn phù hợp, các thiết bị phần cứng phần mền hội nghị truyền hình của một số
công ty, hãng nỗi tiếng trên thế giới nh: CISCO, POLYCOM, SONY, VCON,
PICTURETEL, ZYDACRON.


3


1. Giới thiệu về Matlab
1.1. Khái niệm về Matlab
Matlab là một ngôn ngữ lập trình thực hành bậc cao được sử dụng để giải các
bài toán về kỹ thuật. Matlab tích hợp được việc 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. 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ể có đượ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 những ứ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 và hiển thị dữ liệu.
• Với phần mềm đồ hoạ cực mạnh.
• Cho phép phát triển, giao tiếp với một số phần mềm khác như C++, Fortran.
1.2. Tổng quan về cấu trúc dữ liệu của Matlab, 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 (mảng này
không đòi hỏi về kích thước). Chúng cho phép giải quyết các 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 hay vector và có thể sử
dụng ngôn ngữ C hoặc Fortran lập trình rồi thực hiện ứng dụng lập trình đó bằng các
câu lệnh gọi từ Matlab. Matlab được viết tắt từ chữ “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 một cách dễ dàng, phần mềm ma trận này được phát triển bởi
các công trình Linpack và Eispack. Ngày 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.

1.2.1.

Dữ liệu


Dữ liệu của MATLAB thể hiện dưới dạng ma trận (hoặc mảng–tổng quát), 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 về bộ nhớ dữ liệu vì nó đòi hỏi ít byte nhớ
hơn, kiểu dữ liệu này không được sử dụng trong các phép tính toán học, độ
chính xác kém hơn.

• Kiểu double kiểu này là kiểu thông dụng nhất của các biến trong Matlab.
4


• Kiểu Sparse.
• Kiểu uint8, uint16. . .
• Kiểu char ví dụ ‘Hello’
• 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
số học.

1.2.2.

Ứng dụng

MATLAB tạo điều kiện thuận lợi cho:

• Các khoá 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.


1.2.3.

Toolbox là một công cụ quan trọng trong Matlab

Công cụ này được MATLAB cung cấp cho phép bạn ứng dụng các kỹ thuật để
phân tích, thiết kế, mô phỏng các mô hình.
Ta có thể tìm thấy toolbox ở trong mô trường làm việc của.

• Mạng nơron.
• Logic mờ.
• Simulink.
1.3. Hệ thống MATLAB
Hệ thống giao diện của MATLAB được chia thành 5 phần:
• Môi trường phát triển.
Đây là nơi đặt các thanh công cụ, các phương tiện giúp chúng ta sử dụng các lệnh và
các file, ta có thể liệt kê một số như sau.
+ Desktop.
+ Command Window.

5


+ Command History.
+ Browsers for viewinghelp.
• Thư viện, các hàm toán học bao gồm các cấu trúc như tính tổng, sin cosin, atan,
atan2 etc..., các phép tính đơn giản đến các phép tính phức tạp như tính ma trận nghịch
đảo, trị riêng, chuyển đổi fourier, laplace, symbolic library.
• Ngôn ngữ MATLAB. Đó là các ngôn ngữ cao về ma trận và mảng, với các dòng
lệnh, các hàm, cấu trúc dữ liệu vào, có thể lập trình hướng đối tượng.

• Đồ họa trong MATLAB. Bao gồm các câu lệnh thể hiện đồ hạo trong môi trường
2D và 3D, tạo các hình ảnh chuyển động, cung cấp các giao diện tương tác giữa người
sử dụng và máy tính.
• Giao tiếp với các ngôn ngữ khác. MATLAB cho phép tương tác với các ngôn ngữ
khác như C, Fortran …

6


2. Lý thuyết tổng quan nén ảnh JPEG:
2.1. Lý thuyết chung về chuẩn JPEG.
JPEG (Joint Photographic Expert Group) là tên của một tổ chức nghiên cứu
về các chuẩn nén ảnh (trước đây là ISO) được thành lập vào năm 1982. Năm
1986, JPEG chính thức được thiết lập nhờ sự kết hợp giữa nhóm ISO/IEC và
ITV. Tiêu chuẩn này có thể được ứng dụng trong nhiều lĩnh vực: lưu trữ ảnh,
Fax màu, truyền ảnh báo chí, ảnh cho y học, camera số…
Tiêu chuẩn JPEG (Joint Photographic Experts Group) được định ra cho nén
ảnh tĩnh đơn sắc và màu. Công nghệ nén ảnh JPEG là một trong những công
nghệ nén ảnh hiệu quả, cho phép làm việc với các ảnh có nhiều màu và kích cỡ
lớn. Tỷ lệ nén ảnh đạt mức vài chục lần. Thông thường các ảnh hiện nay dùng 8
bit (1 byte) hay 256 mức cường độ tương ứng của các màu đỏ, xanh lá cây và
xanh da trời. Mỗi điểm của ảnh cần 3 byte để lưu mã màu, và lượng byte một
ảnh màu này chiếm gấp 24 lần ảnh trắng đen cùng cỡ. Với những ảnh này các
phương pháp nén ảnh không mất mát thông tin chỉ đạt tỉ lệ 2:1 hay 3:1. Nó
không đáp ứng được yêu cầu với một số ứng dụng. Ưu điểm cao của phương
pháp này là ảnh đã nén sau khi giải nén sẽ trùng khớp với ảnh ban đầu. Một số
phương pháp nén khác không để mất thông tin như của Lempel - Ziv and Welch
(LZW) có thể cho hệ số nén tới 6:1. Nhưng như thế cũng chưa thật đáp ứng yêu
cầu đòi hỏi thực tế. Phương pháp nén ảnh theo thuẩn JPEG có thể cho hệ số nén
tới 80:1 hay lớn hơn, nhưng ta phải chịu mất thông tin (ảnh sau khi bung 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. Tuy
nhiên sự mất mát thông tin này không bị làm một cách cẩu thả. 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ũ, khiến phần
đông mọi người không nhận thấy sự khác biệt. Và ta hoàn toàn có thể quản lý sự
mất mát này bằng cách hạn chế hệ số nén. Như thế người dùng có thể cân nhắc
giữa cái lợi của việc tiết kiệm bộ nhớ và mức độ mất thông tin của ảnh, để chọn
phương án thích hợp.
2.2. Nguyên lý nén chuẩn JPEG:
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
7


hơn). 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 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. Tỉ số nén thành phần Y của ảnh nhỏ 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. JPEG cũng được
sử dụng cho nhiều ứng dụng với ảnh động bởi vì nó cho chất lượng ảnh khôi
phục khá tốt và ít tính toán hơn so với nén MPEG. JPEG nén hình ảnh được sử
dụng rộng rãi trong việc phát triển trang web so với bitmap (phần mở rộng
.bmp). Những ảnh JPEG chiếm không gian ít hơn và do đó có thể được tải về
nhanh chóng khi chúng ta truy cập một trang web. Nén JPEG có thể thực hiện
bởi bốn phương mã hóa đó là:
Mã tuần tự (sequential DCT-based): ảnh được mã hóa theo kiểu quét từ trái
qua phải, từ trên xuống dưới dựa trên khối DCT.
Mã hóa lũy tiến (progressive DCT-based): ảnh được mã hóa bằng kiểu quét

phức hợp theo chế độ phân giải không gian cho các ứng dụng trên kiểu băng hẹp
và do đó thời gian truyền dẫn có dài.
Mã hóa không tổn thất (lossless): ảnh được đảm bảo khôi phục chính xác
cho mỗi giá trị mẫu của nguồn. Thông tin không cần thiết sẽ mới cắt bỏ cho nên
hiệu quả nén thấp hơn so với phương pháp có tổn thất.
Mã hóa phân cấp (hierarchical): ảnh được mã hóa ở chế độ phân giải không
gian phức hợp, để cho những ảnh có độ phân giải thấp có thểđược truy xuất và
hiển thị mà không cần giải nén như những ảnh có độ phân giải trong không gian
cao hơn.
Nén ảnh là quá trình làm giảm thông tin dư thừa trong dữ liệu.
Nén JPEG (Joint Photographic Expert Group) là một chuẩn nén ảnh được
ứng dụng trong nhiều lĩnh vực: lưu trữ ảnh, Fax màu, truyền ảnh báo chí, ảnh
cho y học, camera số…
Tiêu chuẩn JPEG được định ra cho nén ảnh tĩnh đơn sắc và màu. Tuy nhiên
nó cũng được sử dụng cho nhiều ứng dụng ảnh động vì nó cho chất lượng ảnh
khôi phục tốt.
8


9


Hình 1.1 Sơ đồ nén JPEG
Trong đó:
2.2.1. Chuyển ảnh quét thành khối 8x8:
MB (Marco Block): 4 block tín hiệu chói Y và 2, 4 hoặc 8 block tín hiệu
hiệu màu.
Block là một ma trận điểm ảnh 8x8 pixel
Mục đích: tính toán DCT cho từng vùng dư thừa dữ liệu khác nhau
Tất cả các block có cùng kích thước và mỗi block là một ma trận điểm ảnh

8×8 pixel được lấy từ một ảnh màn hình theo chiều từ trái sang phải, từ trên
xuống dưới. Kích thước block là 8×8 được chọn bởi hai lý do sau:
Thứ nhất, qua việc nghiên cứu cho thấy hàm tương quan suy giảm rất nhanh
khi khoảng cách giữa các pixel vượt quá 8.

10


Thứ hai, là sự tiện lợi cho việc tính toán và thiết kế phần cứng. Nói chung,
độ phức tạp về tính toán sẽ tăng nếu kích thước block tăng.
Dung lượng lưu trữ ảnh cũng phụ thuộc vào loại ảnh quét. Nếu quét liên tục
thì các block bao gồm các mẫu từ các dòng liên tục (lúc này nén ảnh theoframe). Ngược lại, trong trường hợp quét cách dòng, trong một block chỉ có các
mẫu của một nửa ảnh. Tóm lại, việc chia hình ảnh thành các ảnh con (block) sẽ
thực sự có ý nghĩa cho bước chuyển vị tiếp theo.
2.2.2. Chuyển mức điểm ảnh:
Dịch mức tín hiệu chói Y xuống dưới bằng cách trừ từng giá trị pixel trong
khối cho 128.
Mục đích: dịch khoảng cực đại của tín hiệu Y xuống bằng với tín hiệu hiệu
màu để đơn giản hóa việc thiết kế bộ mã hóa DCT.
2.2.3. Biến đổi cosine rời rạc DCT:
DCT (Discrete Cosine Transform): biến đổi dữ liệu dưới dạng biên độ thành
dữ liệu dưới dạng tần số.
Mục đích: loại bỏ sự dư thừa dữ liệu trong không gian
DCT chia thành 2 loại:
• DCT một chiều.
• DCT hai chiều.
2.2.4.

DCT một chiều:
X(k) = C(k)


+
+
+
+
+

X(k)- chuỗi kết quả
x(m)- giá trị của mẫu m
k- chỉ số của hệ số khai triển
m- chỉ số của mẫu
N- số mẫu có trong tín hiệu
C(k) =

2.2.5.

DCT hai chiều

11


F(u,v)- các hệ số của khối DCT 8x8
f(j,k)- các mẫu gốc trong khối 8x8 pixel
C(u), C(v) =
Hệ số thứ nhất:

Hình 1.2 Biến đổi DCT

2.2.6. Biến đổi Cosin rời rạc ngược IDCT
Phép biến đổi DCT hai chiều là biến đổi đối xứng và biến đổi nghịch có thể

tạo lại các mẫu f(j, k) trên cơ sở các hệ số F(u,v) theo công thức sau:

F(u,v)- các hệ số của khối DCT 8x8
f(j,k)- các mẫu gốc trong khối 8x8 pixel
12


C(u), C(v) =
2.2.7. Lượng tử hóa
Chức năng cơ bản: chia các hệ số F(u,v) cho các hệ số ở vị trí tương ứng
trong bảng lượng tử Q(u,v) để biểu diễn số lần nhỏ hơn các giá trị cho phép của
hệ số DCT.

Fq(u, v) =

Hình 1.3 Lượng tử hóa
2.2.8. Máy quét zigzac
Mục đích: biến đổi mảng hai chiều các hệ số Fq(u,v) thành chuỗi số một
chiều.

13


Hình 1.4 Zig Zag
14


2.2.9. Mã hóa Entropy
Mục đích: Làm giảm độ dư thừa thống kê trong các phần tử được mã hóa để
truyền.

Mã hóa entropy sử dụng mã hóa VLC và mã hóa RLC
RLC (Run Length Code): mã hóa độ dài chạy thực hiện mã hóa một hệ số
khác 0 sau giá trị DC bằng một từ mã bao gồm 2 thông số:
Số lượng 0 chạy trước nó.
Mức của nó sau khi lượng tử hóa.
End of Block (EOB) được dùng để cho biết tất cả các hệ số tiếp theo trong
khối bằng 0.
VLC (Variable Length Code): Mã hóa độ dài biến đổi được thực thi bằng
cách đặt các từ mã ngắn cho các mức có xác suất xuất hiện cao và các từ mã dài
cho các mức có xác suất xuất hiện thấp.

15


Hình 1.5 Mã hóa Entropy

16


Hình 1.6 Quá trình nén
3. Kết quả mô phỏng
3.1. Giao diện chương trình mô phỏng và các nút
3.1.1.

Giao diện chương trình:

17


3.1.2. Nút bấm

Nút bấm « ChonAnh » đưa đến giao diện « chon mot anh bat ky »

3.2. Mô hình nén :
Ảnh con 8x8
Bảng lượng tử hóa

Ảnh con 8x8
Ảnh Gốc

Lượng tử hóa

Ảnh con 8x8


DCT

Mã hóa

Ảnh con 8x8
Ảnh nén
Hình 2.7 Mô hình nén
hoạt động (Bao gồm cả giao diện)
function varargout = untitled(varargin)
% UNTITLED MATLAB code for untitled.fig
18

3.3. C
o
d
e



%

UNTITLED, by itself, creates a new UNTITLED or raises the existing

%

singleton*.

%
%

H = UNTITLED returns the handle to a new UNTITLED or the handle

%

the existing singleton*.

to

%
%
local

UNTITLED('CALLBACK',hObject,eventData,handles,...) calls the

%
function named CALLBACK in UNTITLED.M with the given input
arguments.

%
%

UNTITLED('Property','Value',...) creates a new UNTITLED or raises

the
%

existing singleton*. Starting from the left, property value pairs are

%

applied to the GUI before untitled_OpeningFcn gets called. An

%
application
%

unrecognized property name or invalid value makes property

stop. All inputs are passed to untitled_OpeningFcn via varargin.

%
%
only one
%

*See GUI Options on GUIDE's Tools menu. Choose "GUI allows
instance to run (singleton)".


%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help untitled
19


% Last Modified by GUIDE v2.5 28-Nov-2016 18:42:57

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',

mfilename, ...

'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @untitled_OpeningFcn, ...
'gui_OutputFcn', @untitled_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before untitled is made visible.
function untitled_OpeningFcn(hObject, eventdata, handles, varargin)
20


% This function has no output args, see OutputFcn.
% hObject

handle to figure

% eventdata reserved - to be defined in a future version of MATLAB
% handles

structure with handles and user data (see GUIDATA)

% varargin command line arguments to untitled (see VARARGIN)

% Choose default command line output for untitled
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes untitled wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.
function varargout = untitled_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);

% hObject

handle to figure

% eventdata reserved - to be defined in a future version of MATLAB
% handles

structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;
21


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% anh kich thuoc: 128x128
[filename,pathname]=uigetfile({'*.tif;*.bmp;*.gif;*.jpg'},'Chon mot anh bat
ky');
X=imread([pathname,filename]);
axes(handles.anh1);
imshow(X);
title('Anh goc');
size(X)
%Hệ số chất lượng lượng tử hóa
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];

factor=1;
Q=factor*Q;
% Bước biến đổi zig zag
22


Order=[ 0 1 5 6 14 15 27 28;
2 4 7 13 16 26 29 42;
3 8 12 17 25 30 41 43;
9 11 18 24 31 40 44 53;
10 19 23 32 39 45 52 54;
20 22 33 38 46 51 55 60;
21 34 37 47 50 56 59 61;
35 36 48 49 57 58 62 63];
count=0;
for i=1:16
for j=1:16
count=count+1;
P(1:8,1:8,count)=X((i-1)*8+1:i*8,(j-1)*8+1:j*8);
end
end
% bien doi DCT 2-D
% Hệ số lượng tử hóa của DCT
for m=1:256
F(:,:,m)=round(dct2(P(:,:,m)));
FF(:,:,m)=round(F(:,:,m) ./Q);

end
% khoi phuc he so the DCT 2-D
% khoi phuc anh 8x8
for m=1:256
FC(:,:,m)=FF(:,:,m) .*Q;
23


PP(:,:,m)=round(idct2(FC(:,:,m)));
err(:,:,m)=single(PP(:,:,m))-single(P(:,:,m)); % vector luong tu hoa
end
count=0;
for i=1:16
for j=1:16
count=count+1;
XX((i-1)*8+1:i*8,(j-1)*8+1:j*8)=PP(1:8,1:8,count); % khoi phuc anh
end
end
% bac dieu chinh
XX=uint8(XX);
axes(handles.anh2);
imshow(XX);
imwrite(XX,'Anhdanen.jpg','jpg');
title('Anh nen JPEG');

3.4. Kết quả mô phỏng
Sau 1 lần nén :

24



Hình 2.8 Nén lần 1
Sau 2 lần nén :

Hình 2.9 Nén lần 2

4. Nhận xét kết quả
- Ảnh nén với hệ số nén cao.
- Chất lượng ảnh thấp, giảm dần sau mỗi lần nén.
25


×