imagescompressionusinghuffmanalgorithmmatlab 140225113447 phpapp01

9 215 0
imagescompressionusinghuffmanalgorithmmatlab 140225113447 phpapp01

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

Thông tin tài liệu

huffman, matlab, nén ảnh số sử dụng phương pháp huffman dùng phần mềm matlab. iết chương trình néngiả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.

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 giải thuật Huffman Lấy ví dụ với nhiều ảnh khác (ảnh chi tiết ảnh nhiều chi tiết) Xác định tỉ số nén ảnh ví dụ Bài làm: Viết hai hàm m-function để mã hóa giải mã Huffman: im2huff 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) ~= || ~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 MATLAB huffmandict để tạo bảng từ mã hàm huffmanenco để mã hóa chuỗi liệu vào Nội dung function tham khảo communications system toolbox MATLAB Trả hàm im2huff biến kiểu structure gồm 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 giá trị thang xám ảnh hist: histogram ảnh codlen: chiều dài chuỗi mã hóa ảnh code: chuỗi mã hóa Huffman ảnh lưu dạng uinteger16 Hai trường gray hist truyền giúp cho bên nhận có sở xây dựng lại bảng từ mã Để lưu trữ chuỗi mã hóa Huffman (gồm bits ‘0’ ‘1’) với kích thước bé ta chia chuỗi thành mảng 16 phần tử có thêm bits ‘0’ làm padding Để bỏ bits padding giải mã, cách đơn giản để tận dụng hàm huffmandeco có sẵn MATLAB 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 hist; chuyển code thu từ dạng mảng thập phân sang mảng nhị phân loại bỏ bits padding Dùng hàm huffmandeco để giải mã chuỗi huffman PAGE 40901817-40902371-40903123 NÉN & GIẢI NÉN ẢNH BẰNG THUẬT TOÁN HUFFMAN Thực nén giải nén với ảnh: Nén giải nén với ảnh thang xám có 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 50 100 150 200 250 PAGE 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) sử dụng để tính tỷ số nén ảnh Giải mã Huffman tính rmse (root mean square error) để kiểm tra tính khơng tổn hao thuật tốn M-functon compare (tham khảo Digital image processing using MATLAB Gonzalez) trả giá trị rmse hai ảnh PAGE 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 50 100 150 200 250 PAGE 40901817-40902371-40903123 NÉN & GIẢI NÉN ẢNH BẰNG THUẬT TỐN HUFFMAN Nhận xét: Do thuật tốn thực với điểm ảnh, độ phức tạp tăng kích thước ảnh lớn O(nlogn) Nén giải nén với ảnh thang xám có nhiều chi tiết PAGE 40901817-40902371-40903123 NÉN & GIẢI NÉN ẢNH BẰNG THUẬT TOÁN HUFFMAN 3000 2500 2000 1500 1000 500 0 50 100 150 200 250 PAGE 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 PAGE 40901817-40902371-40903123

Ngày đăng: 13/03/2018, 17:47

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan