SlideShare a Scribd company logo
NÉN & GIẢI NÉN
ẢNH BẰNG THUẬT
TOÁN HUFFMAN
1/14/14

Bài tập lớn Xử lý ảnh
Đề tài 4:

Viết chương trình nén/giải nén ảnh không tổn hao dựa trên giải thuật
Huffman. Lấy ví dụ với nhiều ảnh khác nhau (ảnh ít chi tiết và ảnh nhiều chi tiết). Xác
định tỉ số nén của các ảnh ví dụ trên.
Bài làm:
Viết hai hàm m-function để mã hóa và giải mã Huffman: im2huff và huff2im
function y = im2huff(x)
%IM2HUFF Huffman encodes a image matrix.
%
Y = IM2HUFF(X) Huffman encodes image matrix X using symbol
%
probabilities in unit-width histogram bins.
%
Y:
%
Y.size
The size of X
%
Y.gray
The gray levels contain in X
%
Y.hist
The histogram of X
%
Y.codlen
The Huffman code length
%
Y.code
The Huffman-encoded values of X, stored in
%
a uint16 vector.
%
%
Check input argument
if ndims(x) ~= 2 || ~isreal(x) || (~isnumeric(x)&& ~islogical(x))
error('X must be a 2-D real numeric or logical matrix.');
end
% Store the image dimesion for decopressing
y.size = size(x);
% Compute the probabilities of each gray level
[p,gray]=imhist(x);
% Get rid of the gray levels whose probabilities is zero
indices = find(p);
y.gray = gray(indices);
p = p(indices);
% Normalize the gray level probability
p = p/sum(p);
y.hist = p;
% Construct Huffman codeword using available MATLAB m-function
dict = huffmandict(y.gray,y.hist);
% Reshape image matrix to image vector and encode it
hcode = huffmanenco(reshape(x,1,(y.size(1))*(y.size(2))),dict);
y.codlen = length(hcode);
% Huffman code length
ysize = ceil(y.codlen/16);
% Compute encode size
hx16 = zeros(1, ysize*16);
% Pre-allocate modulo-16 vector
hx16(1:y.codlen) = hcode;
% Make hx modulo-16 in length
hx16 = reshape(hx16, 16, ysize);
% Reshape to 16-character words
hx16 = hx16';
% Convert binary string to decimal
twos = pow2(15:-1:0);
y.code = (uint16(hx16*twos'));
end

Hàm im2huff sử dụng m-function có sẵn của MATLAB huffmandict để tạo bảng từ mã
và hàm huffmanenco để mã hóa chuỗi dữ liệu vào. Nội dung của 2 function này có thể
tham khảo trong communications system toolbox MATLAB. Trả về của hàm im2huff
là một biến kiểu structure gồm các trường
NÉN & GIẢI NÉN ẢNH BẰNG THUẬT TOÁN HUFFMAN







size: chứa kích thước ma trận ảnh cần mã hóa
gray: chứa các giá trị thang xám trong ảnh
hist: histogram của ảnh
codlen: chiều dài chuỗi mã hóa của ảnh
code: chuỗi mã hóa Huffman của ảnh được lưu dưới dạng uinteger16

Hai trường gray và hist được truyền đi giúp cho bên nhận có cơ sở xây dựng lại bảng từ
mã. Để lưu trữ chuỗi mã hóa Huffman (gồm các bits ‘0’ và ‘1’) với kích thước bé ta chia
chuỗi này thành các mảng 16 phần tử và có thêm các bits ‘0’ làm padding. Để bỏ các bits
padding này khi giải mã, cách đơn giản nhất và cũng để tận dụng hàm huffmandeco có
sẵn của MATLAB là ta truyền thêm giá trị codlen (code length).
function x = huff2im(y)
%
HUFF2MAT decodes a Huffman encoded matrix.
%
X = HUFF2MAT(Y) decodes a Huffman encoded structure Y with uint16
%
fields:
%
Y:
%
Y.size
The size of original image
%
Y.gray
The gray levels contain in original image
%
Y.hist
The histogram of image
%
Y.codlen
The Huffman code length
%
Y.code
The Huffman-encoded values, stored in
%
a uint16 vector.
%
if ~isstruct(y) || ~isfield(y, 'size') || ~isfield(y, 'gray') || ...
~isfield(y, 'hist')|| ~isfield(y, 'codlen')|| ~isfield(y,
'code')
error('The input must be a sructure as returned by IM2HUFF.');
end
% Convert decimal array to binary array for decoding process
hcode = de2bi(y.code,16,'left-msb');
hcode = hcode';
hcode = reshape(hcode,1,[]);
hcode = hcode(1:y.codlen);
hcode = double(hcode);
% Reconstruct Huffman codewords database
dict = huffmandict(y.gray,y.hist);
% Decode the hcode using huffmandeco MATLAB function
dhsig = huffmandeco(hcode,dict);
x = reshape(dhsig,y.size(1),y.size(2));
x = uint8(x);
end

Ở phía thu ta xây dựng lại bảng từ mã từ hai trường gray và hist; chuyển code thu được
từ dạng mảng thập phân sang mảng nhị phân và loại bỏ các bits padding. Dùng hàm
huffmandeco để giải mã chuỗi huffman.

PAGE 1

40901817-40902371-40903123
NÉN & GIẢI NÉN ẢNH BẰNG THUẬT TOÁN HUFFMAN

Thực hiện nén và giải nén với các ảnh:
1. Nén và giải nén với ảnh thang xám có ít chi tiết (chênh lệch xác suất mức thang
xám lớn)

4500
4000
3500
3000
2500
2000
1500
1000
500
0
0

50

100

150

200

250

PAGE 2

40901817-40902371-40903123
NÉN & GIẢI NÉN ẢNH BẰNG THUẬT TOÁN HUFFMAN

Hàm imratio (tham khảo Digital image processing using MATLAB Gonzalez) được sử
dụng để tính tỷ số nén ảnh.
Giải mã Huffman và tính rmse (root mean square error) để kiểm tra tính không tổn hao
của thuật toán. M-functon compare (tham khảo Digital image processing using
MATLAB Gonzalez) trả về giá trị rmse của hai ảnh.

PAGE 3

40901817-40902371-40903123
NÉN & GIẢI NÉN ẢNH BẰNG THUẬT TOÁN HUFFMAN

16000
14000
12000
10000
8000
6000
4000
2000
0
0

50

100

150

200

250

PAGE 4

40901817-40902371-40903123
NÉN & GIẢI NÉN ẢNH BẰNG THUẬT TOÁN HUFFMAN

Nhận xét: Do thuật toán thực hiện với điểm ảnh, độ phức tạp càng tăng khi kích thước
ảnh càng lớn O(nlogn).
2. Nén và giải nén với ảnh thang xám có nhiều chi tiết.

PAGE 5

40901817-40902371-40903123
NÉN & GIẢI NÉN ẢNH BẰNG THUẬT TOÁN HUFFMAN

3000

2500

2000

1500

1000

500

0
0

50

100

150

200

250

PAGE 6

40901817-40902371-40903123
NÉN & GIẢI NÉN ẢNH BẰNG THUẬT TOÁN HUFFMAN

Nhận xét: Với ảnh có nhiều chi tiết nén Huffman không có hiệu quả.

PAGE 7

40901817-40902371-40903123

More Related Content

What's hot

Giải bài tập Phương pháp tính
Giải bài tập Phương pháp tínhGiải bài tập Phương pháp tính
Giải bài tập Phương pháp tính
dinhtrongtran39
 
Thiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựThiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sự
leemindinh
 
Bai03 he thong tap tin fat
Bai03   he thong tap tin fatBai03   he thong tap tin fat
Bai03 he thong tap tin fatVũ Sang
 
Tong hop cau hoi trac nghiem hdh
Tong hop cau hoi trac nghiem hdhTong hop cau hoi trac nghiem hdh
Tong hop cau hoi trac nghiem hdhHoat Thai Van
 
đồ áN phân tích thiết kế hệ thống quản lý bán hàng siêu thị
đồ áN phân tích thiết kế hệ thống quản lý bán hàng siêu thịđồ áN phân tích thiết kế hệ thống quản lý bán hàng siêu thị
đồ áN phân tích thiết kế hệ thống quản lý bán hàng siêu thị
Thanh Hoa
 
Xử lý tín hiệu số
Xử lý tín hiệu sốXử lý tín hiệu số
Xử lý tín hiệu số
Khôi Nguyễn Đăng
 
2015 phuong phap tinh chuong 2
2015 phuong phap tinh   chuong 22015 phuong phap tinh   chuong 2
2015 phuong phap tinh chuong 2
Son La College
 
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại viĐề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại viĐỗ Đức Hùng
 
Bo de toan roi rac (on thi cao hoc khmt)
Bo de toan roi rac (on thi cao hoc khmt)Bo de toan roi rac (on thi cao hoc khmt)
Bo de toan roi rac (on thi cao hoc khmt)lieu_lamlam
 
[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử lí[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử lí
Hong Phuoc Nguyen
 
[Báo cáo] Bài tập lớn Kỹ thuật phần mềm ứng dụng: Thiết kế hệ thống quản lý p...
[Báo cáo] Bài tập lớn Kỹ thuật phần mềm ứng dụng: Thiết kế hệ thống quản lý p...[Báo cáo] Bài tập lớn Kỹ thuật phần mềm ứng dụng: Thiết kế hệ thống quản lý p...
[Báo cáo] Bài tập lớn Kỹ thuật phần mềm ứng dụng: Thiết kế hệ thống quản lý p...
The Nguyen Manh
 
Bài Tập Xử Lí Tín Hiệu Số
Bài Tập Xử Lí Tín Hiệu SốBài Tập Xử Lí Tín Hiệu Số
Bài Tập Xử Lí Tín Hiệu Số
viethung094
 
Hệ phương trình vi phân tuyến tính
Hệ phương trình vi phân tuyến tínhHệ phương trình vi phân tuyến tính
Hệ phương trình vi phân tuyến tínhThế Giới Tinh Hoa
 
Báo cáo bài tập lớn phân tích thiết kế hệ thống
Báo cáo bài tập lớn phân tích thiết kế hệ thốngBáo cáo bài tập lớn phân tích thiết kế hệ thống
Báo cáo bài tập lớn phân tích thiết kế hệ thốngJojo Kim
 
Ứng dụng mô hình CSDL phân tán giải quyết bài toán quản lý bán hàng
Ứng dụng mô hình CSDL phân tán giải quyết bài toán quản lý bán hàngỨng dụng mô hình CSDL phân tán giải quyết bài toán quản lý bán hàng
Ứng dụng mô hình CSDL phân tán giải quyết bài toán quản lý bán hàng
nataliej4
 
Hệ điều hành (chương 5)
Hệ điều hành (chương 5)Hệ điều hành (chương 5)
Hệ điều hành (chương 5)realpotter
 
Xu lý tín hiệu số
Xu lý tín hiệu sốXu lý tín hiệu số
Xu lý tín hiệu sốHao Truong
 
Chuong 04 mach logic
Chuong 04 mach logicChuong 04 mach logic
Chuong 04 mach logic
Anh Ngoc Phan
 
Kiến trúc máy tính và hợp ngữ bài 02
Kiến trúc máy tính và hợp ngữ bài 02Kiến trúc máy tính và hợp ngữ bài 02
Kiến trúc máy tính và hợp ngữ bài 02
Nhóc Nhóc
 

What's hot (20)

Giải bài tập Phương pháp tính
Giải bài tập Phương pháp tínhGiải bài tập Phương pháp tính
Giải bài tập Phương pháp tính
 
Lttt b11
Lttt b11Lttt b11
Lttt b11
 
Thiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựThiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sự
 
Bai03 he thong tap tin fat
Bai03   he thong tap tin fatBai03   he thong tap tin fat
Bai03 he thong tap tin fat
 
Tong hop cau hoi trac nghiem hdh
Tong hop cau hoi trac nghiem hdhTong hop cau hoi trac nghiem hdh
Tong hop cau hoi trac nghiem hdh
 
đồ áN phân tích thiết kế hệ thống quản lý bán hàng siêu thị
đồ áN phân tích thiết kế hệ thống quản lý bán hàng siêu thịđồ áN phân tích thiết kế hệ thống quản lý bán hàng siêu thị
đồ áN phân tích thiết kế hệ thống quản lý bán hàng siêu thị
 
Xử lý tín hiệu số
Xử lý tín hiệu sốXử lý tín hiệu số
Xử lý tín hiệu số
 
2015 phuong phap tinh chuong 2
2015 phuong phap tinh   chuong 22015 phuong phap tinh   chuong 2
2015 phuong phap tinh chuong 2
 
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại viĐề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
 
Bo de toan roi rac (on thi cao hoc khmt)
Bo de toan roi rac (on thi cao hoc khmt)Bo de toan roi rac (on thi cao hoc khmt)
Bo de toan roi rac (on thi cao hoc khmt)
 
[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử lí[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử lí
 
[Báo cáo] Bài tập lớn Kỹ thuật phần mềm ứng dụng: Thiết kế hệ thống quản lý p...
[Báo cáo] Bài tập lớn Kỹ thuật phần mềm ứng dụng: Thiết kế hệ thống quản lý p...[Báo cáo] Bài tập lớn Kỹ thuật phần mềm ứng dụng: Thiết kế hệ thống quản lý p...
[Báo cáo] Bài tập lớn Kỹ thuật phần mềm ứng dụng: Thiết kế hệ thống quản lý p...
 
Bài Tập Xử Lí Tín Hiệu Số
Bài Tập Xử Lí Tín Hiệu SốBài Tập Xử Lí Tín Hiệu Số
Bài Tập Xử Lí Tín Hiệu Số
 
Hệ phương trình vi phân tuyến tính
Hệ phương trình vi phân tuyến tínhHệ phương trình vi phân tuyến tính
Hệ phương trình vi phân tuyến tính
 
Báo cáo bài tập lớn phân tích thiết kế hệ thống
Báo cáo bài tập lớn phân tích thiết kế hệ thốngBáo cáo bài tập lớn phân tích thiết kế hệ thống
Báo cáo bài tập lớn phân tích thiết kế hệ thống
 
Ứng dụng mô hình CSDL phân tán giải quyết bài toán quản lý bán hàng
Ứng dụng mô hình CSDL phân tán giải quyết bài toán quản lý bán hàngỨng dụng mô hình CSDL phân tán giải quyết bài toán quản lý bán hàng
Ứng dụng mô hình CSDL phân tán giải quyết bài toán quản lý bán hàng
 
Hệ điều hành (chương 5)
Hệ điều hành (chương 5)Hệ điều hành (chương 5)
Hệ điều hành (chương 5)
 
Xu lý tín hiệu số
Xu lý tín hiệu sốXu lý tín hiệu số
Xu lý tín hiệu số
 
Chuong 04 mach logic
Chuong 04 mach logicChuong 04 mach logic
Chuong 04 mach logic
 
Kiến trúc máy tính và hợp ngữ bài 02
Kiến trúc máy tính và hợp ngữ bài 02Kiến trúc máy tính và hợp ngữ bài 02
Kiến trúc máy tính và hợp ngữ bài 02
 

Viewers also liked

Chg4 tham lam
Chg4 tham lamChg4 tham lam
Chg4 tham lam
hoangnguyentien
 
H.264 video standard
H.264 video standardH.264 video standard
H.264 video standard
Sajan Sahu
 
Cac lenh trong matlab
Cac lenh trong matlabCac lenh trong matlab
Cac lenh trong matlab
AnhTuấn Nguyễn
 
Sound analysis and processing with MATLAB
Sound analysis and processing with MATLABSound analysis and processing with MATLAB
Sound analysis and processing with MATLAB
Tan Hoang Luu
 
Cac chuan nen ITU
Cac chuan nen ITUCac chuan nen ITU
Cac chuan nen ITU
Trung Vi
 
Quy hoạch động
Quy hoạch độngQuy hoạch động
Quy hoạch độnghana_dt
 
hệ điều hành
hệ điều hànhhệ điều hành
hệ điều hànhVinh Perfect
 
H264 video compression explained
H264 video compression explainedH264 video compression explained
H264 video compression explained
cnssources
 
Phương pháp tham lam giải bài toán lập lịch công việc
Phương pháp tham lam giải bài toán lập lịch công việcPhương pháp tham lam giải bài toán lập lịch công việc
Phương pháp tham lam giải bài toán lập lịch công việc
Nguyễn Danh Thanh
 
Phương pháp nhánh cận
Phương pháp nhánh cậnPhương pháp nhánh cận
Phương pháp nhánh cận
Diên Vĩ
 
Introduction to H.264 Advanced Video Compression
Introduction to H.264 Advanced Video CompressionIntroduction to H.264 Advanced Video Compression
Introduction to H.264 Advanced Video Compression
Iain Richardson
 
Xử lý ảnh theo phương pháp âm bản, nhị phân, hàm số mũ
Xử lý ảnh theo phương pháp âm bản, nhị phân, hàm số mũXử lý ảnh theo phương pháp âm bản, nhị phân, hàm số mũ
Xử lý ảnh theo phương pháp âm bản, nhị phân, hàm số mũ
Phan Khanh Toan
 
MPEG4 vs H.264
MPEG4 vs H.264MPEG4 vs H.264
MPEG4 vs H.264
Utsav Dholakia
 
H.263 Video Codec
H.263 Video CodecH.263 Video Codec
H.263 Video Codec
Kavisha Miyan
 
Lttt matlab chuong 5
Lttt matlab chuong 5Lttt matlab chuong 5
Lttt matlab chuong 5Hoa Cỏ May
 
Cac chuan nen va ung dung truyen video tren mang internet
Cac chuan nen va ung dung truyen video tren mang internetCac chuan nen va ung dung truyen video tren mang internet
Cac chuan nen va ung dung truyen video tren mang internet
No Name
 

Viewers also liked (20)

Chg4 tham lam
Chg4 tham lamChg4 tham lam
Chg4 tham lam
 
H.264 video standard
H.264 video standardH.264 video standard
H.264 video standard
 
Cac lenh trong matlab
Cac lenh trong matlabCac lenh trong matlab
Cac lenh trong matlab
 
Sound analysis and processing with MATLAB
Sound analysis and processing with MATLABSound analysis and processing with MATLAB
Sound analysis and processing with MATLAB
 
Bai tap mpeg2
Bai tap mpeg2 Bai tap mpeg2
Bai tap mpeg2
 
Cac chuan nen ITU
Cac chuan nen ITUCac chuan nen ITU
Cac chuan nen ITU
 
Quy hoạch động
Quy hoạch độngQuy hoạch động
Quy hoạch động
 
hệ điều hành
hệ điều hànhhệ điều hành
hệ điều hành
 
Phương pháp tham lam
Phương pháp tham lamPhương pháp tham lam
Phương pháp tham lam
 
H264 video compression explained
H264 video compression explainedH264 video compression explained
H264 video compression explained
 
Phương pháp tham lam giải bài toán lập lịch công việc
Phương pháp tham lam giải bài toán lập lịch công việcPhương pháp tham lam giải bài toán lập lịch công việc
Phương pháp tham lam giải bài toán lập lịch công việc
 
Phương pháp nhánh cận
Phương pháp nhánh cậnPhương pháp nhánh cận
Phương pháp nhánh cận
 
Introduction to H.264 Advanced Video Compression
Introduction to H.264 Advanced Video CompressionIntroduction to H.264 Advanced Video Compression
Introduction to H.264 Advanced Video Compression
 
Chương iii
Chương iiiChương iii
Chương iii
 
Xử lý ảnh theo phương pháp âm bản, nhị phân, hàm số mũ
Xử lý ảnh theo phương pháp âm bản, nhị phân, hàm số mũXử lý ảnh theo phương pháp âm bản, nhị phân, hàm số mũ
Xử lý ảnh theo phương pháp âm bản, nhị phân, hàm số mũ
 
MPEG4 vs H.264
MPEG4 vs H.264MPEG4 vs H.264
MPEG4 vs H.264
 
Đệ Quy, Quay Lui, Nhánh Cận
Đệ Quy, Quay Lui, Nhánh CậnĐệ Quy, Quay Lui, Nhánh Cận
Đệ Quy, Quay Lui, Nhánh Cận
 
H.263 Video Codec
H.263 Video CodecH.263 Video Codec
H.263 Video Codec
 
Lttt matlab chuong 5
Lttt matlab chuong 5Lttt matlab chuong 5
Lttt matlab chuong 5
 
Cac chuan nen va ung dung truyen video tren mang internet
Cac chuan nen va ung dung truyen video tren mang internetCac chuan nen va ung dung truyen video tren mang internet
Cac chuan nen va ung dung truyen video tren mang internet
 

Similar to Images compression using huffman algorithm matlab

Hàm và Chuỗi
Hàm và ChuỗiHàm và Chuỗi
Hàm và Chuỗi
pnanhvn
 
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433Muoivy Wm
 
Oop 4
Oop 4Oop 4

Similar to Images compression using huffman algorithm matlab (6)

Hàm và Chuỗi
Hàm và ChuỗiHàm và Chuỗi
Hàm và Chuỗi
 
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
 
Oop 4
Oop 4Oop 4
Oop 4
 
Chapter03 function
Chapter03 functionChapter03 function
Chapter03 function
 
Hambam
HambamHambam
Hambam
 
Chuong 1
Chuong 1Chuong 1
Chuong 1
 

Images compression using huffman algorithm matlab

  • 1. NÉN & GIẢI NÉN ẢNH BẰNG THUẬT TOÁN HUFFMAN 1/14/14 Bài tập lớn Xử lý ảnh
  • 2. Đề tài 4: Viết chương trình nén/giải nén ảnh không tổn hao dựa trên giải thuật Huffman. Lấy ví dụ với nhiều ảnh khác nhau (ảnh ít chi tiết và ảnh nhiều chi tiết). Xác định tỉ số nén của các ảnh ví dụ trên. Bài làm: Viết hai hàm m-function để mã hóa và giải mã Huffman: im2huff và huff2im function y = im2huff(x) %IM2HUFF Huffman encodes a image matrix. % Y = IM2HUFF(X) Huffman encodes image matrix X using symbol % probabilities in unit-width histogram bins. % Y: % Y.size The size of X % Y.gray The gray levels contain in X % Y.hist The histogram of X % Y.codlen The Huffman code length % Y.code The Huffman-encoded values of X, stored in % a uint16 vector. % % Check input argument if ndims(x) ~= 2 || ~isreal(x) || (~isnumeric(x)&& ~islogical(x)) error('X must be a 2-D real numeric or logical matrix.'); end % Store the image dimesion for decopressing y.size = size(x); % Compute the probabilities of each gray level [p,gray]=imhist(x); % Get rid of the gray levels whose probabilities is zero indices = find(p); y.gray = gray(indices); p = p(indices); % Normalize the gray level probability p = p/sum(p); y.hist = p; % Construct Huffman codeword using available MATLAB m-function dict = huffmandict(y.gray,y.hist); % Reshape image matrix to image vector and encode it hcode = huffmanenco(reshape(x,1,(y.size(1))*(y.size(2))),dict); y.codlen = length(hcode); % Huffman code length ysize = ceil(y.codlen/16); % Compute encode size hx16 = zeros(1, ysize*16); % Pre-allocate modulo-16 vector hx16(1:y.codlen) = hcode; % Make hx modulo-16 in length hx16 = reshape(hx16, 16, ysize); % Reshape to 16-character words hx16 = hx16'; % Convert binary string to decimal twos = pow2(15:-1:0); y.code = (uint16(hx16*twos')); end Hàm im2huff sử dụng m-function có sẵn của MATLAB huffmandict để tạo bảng từ mã và hàm huffmanenco để mã hóa chuỗi dữ liệu vào. Nội dung của 2 function này có thể tham khảo trong communications system toolbox MATLAB. Trả về của hàm im2huff là một biến kiểu structure gồm các trường
  • 3. NÉN & GIẢI NÉN ẢNH BẰNG THUẬT TOÁN HUFFMAN      size: chứa kích thước ma trận ảnh cần mã hóa gray: chứa các giá trị thang xám trong ảnh hist: histogram của ảnh codlen: chiều dài chuỗi mã hóa của ảnh code: chuỗi mã hóa Huffman của ảnh được lưu dưới dạng uinteger16 Hai trường gray và hist được truyền đi giúp cho bên nhận có cơ sở xây dựng lại bảng từ mã. Để lưu trữ chuỗi mã hóa Huffman (gồm các bits ‘0’ và ‘1’) với kích thước bé ta chia chuỗi này thành các mảng 16 phần tử và có thêm các bits ‘0’ làm padding. Để bỏ các bits padding này khi giải mã, cách đơn giản nhất và cũng để tận dụng hàm huffmandeco có sẵn của MATLAB là ta truyền thêm giá trị codlen (code length). function x = huff2im(y) % HUFF2MAT decodes a Huffman encoded matrix. % X = HUFF2MAT(Y) decodes a Huffman encoded structure Y with uint16 % fields: % Y: % Y.size The size of original image % Y.gray The gray levels contain in original image % Y.hist The histogram of image % Y.codlen The Huffman code length % Y.code The Huffman-encoded values, stored in % a uint16 vector. % if ~isstruct(y) || ~isfield(y, 'size') || ~isfield(y, 'gray') || ... ~isfield(y, 'hist')|| ~isfield(y, 'codlen')|| ~isfield(y, 'code') error('The input must be a sructure as returned by IM2HUFF.'); end % Convert decimal array to binary array for decoding process hcode = de2bi(y.code,16,'left-msb'); hcode = hcode'; hcode = reshape(hcode,1,[]); hcode = hcode(1:y.codlen); hcode = double(hcode); % Reconstruct Huffman codewords database dict = huffmandict(y.gray,y.hist); % Decode the hcode using huffmandeco MATLAB function dhsig = huffmandeco(hcode,dict); x = reshape(dhsig,y.size(1),y.size(2)); x = uint8(x); end Ở phía thu ta xây dựng lại bảng từ mã từ hai trường gray và hist; chuyển code thu được từ dạng mảng thập phân sang mảng nhị phân và loại bỏ các bits padding. Dùng hàm huffmandeco để giải mã chuỗi huffman. PAGE 1 40901817-40902371-40903123
  • 4. NÉN & GIẢI NÉN ẢNH BẰNG THUẬT TOÁN HUFFMAN Thực hiện nén và giải nén với các ảnh: 1. Nén và giải nén với ảnh thang xám có ít chi tiết (chênh lệch xác suất mức thang xám lớn) 4500 4000 3500 3000 2500 2000 1500 1000 500 0 0 50 100 150 200 250 PAGE 2 40901817-40902371-40903123
  • 5. NÉN & GIẢI NÉN ẢNH BẰNG THUẬT TOÁN HUFFMAN Hàm imratio (tham khảo Digital image processing using MATLAB Gonzalez) được sử dụng để tính tỷ số nén ảnh. Giải mã Huffman và tính rmse (root mean square error) để kiểm tra tính không tổn hao của thuật toán. M-functon compare (tham khảo Digital image processing using MATLAB Gonzalez) trả về giá trị rmse của hai ảnh. PAGE 3 40901817-40902371-40903123
  • 6. NÉN & GIẢI NÉN ẢNH BẰNG THUẬT TOÁN HUFFMAN 16000 14000 12000 10000 8000 6000 4000 2000 0 0 50 100 150 200 250 PAGE 4 40901817-40902371-40903123
  • 7. NÉN & GIẢI NÉN ẢNH BẰNG THUẬT TOÁN HUFFMAN Nhận xét: Do thuật toán thực hiện với điểm ảnh, độ phức tạp càng tăng khi kích thước ảnh càng lớn O(nlogn). 2. Nén và giải nén với ảnh thang xám có nhiều chi tiết. PAGE 5 40901817-40902371-40903123
  • 8. NÉN & GIẢI NÉN ẢNH BẰNG THUẬT TOÁN HUFFMAN 3000 2500 2000 1500 1000 500 0 0 50 100 150 200 250 PAGE 6 40901817-40902371-40903123
  • 9. NÉN & GIẢI NÉN ẢNH BẰNG THUẬT TOÁN HUFFMAN Nhận xét: Với ảnh có nhiều chi tiết nén Huffman không có hiệu quả. PAGE 7 40901817-40902371-40903123