Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 139 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
139
Dung lượng
18,38 MB
Nội dung
bộ giáo dục đào tạo trờng đại học bách khoa hà nội *************************** luận văn thạc sĩ khoa học NGÀNH : KỸ THUẬT ĐIỆN TỬ KỸ THUẬT NÉN ẢNH S VN PHC Hà Nội 2008 giáo dục đào tạo trờng đại học bách khoa hà nội ************************* LUẬN VĂN THẠC SỸ KHOA HỌC KỸ THUẬT NÉN ẢNH SỐ NGÀNH: KỸ THUẬT ĐIỆN TỬ Mã số: ĐỖ VĂN PHÚC Người hướng dẫn khoa học: TS NGUYỄN VŨ SƠN Hà Nội 11-2008 THÔNG TIN CÁ NHÂN HỌC VIÊN Họ tên: ĐỖ VĂN PHÚC Lớp: Cao học Điện tử - Viễn Thơng khóa 2006-2008 Năm sinh: Ngày 09 tháng 12 năm 1982 Điện thoại: 0914.664664 Cơ quan: 0422144856 Phịng Truyền dẫn – Phát sóng, Trung tâm Kỹ thuật Truyền hình Cáp Việt Nam, 43 Nguyễn Chí Thanh –Ba Đình – Hà Nội ABSTRACTION Digital image compression in particular and multimedia data compression in general is a very essential part in this epoch of global communication The more meaningful information ones transmit, the better! But the prerequisite is this sort of information doesn’t require so much bandwith as well as large storage drives In the last few years, so many effective compression algorithms have been researched and recommended Compared with classical compression technique, such as JPEG using discrete cosine transform (DCT), wavelet based image compression methods have so many advantages Some of them we can count here are high compression ratio, robust fault-tolerance and progressive transmission capability From this reality, the objective of my thesis is to take a deep research on some typical wavelet based algorithms of still image compression They are: EZW (Embedded Zero Tree), SPIHT (Set Partitioning in Hierarchical Trees), WDR (Wavelet Diffrence Reduction) and ASWDR (Adaptively Scanned Wavelet Difference Deduction) In addtion to that, the thesis also take a close look at JPEG2000 standard compression JPEG2000 (based on DWT) has many advantages over JPEG (based on DCT) In the near future, JPEG will be inevitably replaced by JPEG2000 Based on theoretic analysis, the thesis also comprise an experiment part to evaluate the performance of two main algorithm, which are SPIHT and EZW The experiments are carried out in Matlab 7.6 environment From those experiments, we prove again that wavelet based compression algorithms have high compression ratio and don’t make much quality degradation TÓM TẮT LUẬN VĂN Nén ảnh số nói riêng nén liệu đa phương tiện nói chung lĩnh vực cấp thiết thời đại trao đổi thông tin toàn cầu Yêu cầu đặt truyền tải nhiều thông tin yêu cầu băng thông dung lượng lưu trữ nhỏ tốt Trong năm qua, có nhiều thuật tốn nén hiệu cao nghiên cứu đề xuất So với kỹ thuật nén ảnh truyền thống kỹ thuật nén ảnh sử dụng phép biến đổi cosine rời rạc (DCT), nén ảnh dựa biến đổi Wavelet (DWT) có nhiều ưu điểm tỷ lệ nén cao, khả chống lỗi tốt, phù hợp với truyền dẫn lũy tiến… Xuất phát từ nhu cầu đó, mục đích luận văn nghiên cứu số kỹ thuật nén ảnh tĩnh sử dụng biến đổi Wavelet tiêu biểu: mã hóa wavelet zero EZW (Embedded Zero Tree), phân chia tập hợp cấu trúc phân cấp SPIHT (Set Partitioning in Hierarchical Trees), rút gọn hiệu wavelet WDR (Wavelet Diffrence Reduction) rút gọn hiệu wavelet với quét thích ứng ASWDR (Adaptively Scanned Wavelet Difference Deduction) Bên cạnh đó, luận văn nghiên cứu tiêu chuẩn nén ảnh tĩnh JPEG2000 JPEG2000 (dựa phép biến đổi DWT) có nhiều tính vượt trội thay tiêu chuẩn JPEG (dựa phép biến đổi DCT) Từ phân tích lý thuyết, luận văn xây dựng phần đánh giá thực nghiệm cho thuật toán EZW SPIHT phần mềm Matlab 7.6 Từ cho thấy hiệu nén cao thuật toán nén wavelet đảm bảo chất lượng suy giảm không nhiều Từ khóa: wavelet, EZW, SPIHT, WDR, JPEG2000 Luận văn cao học: Kỹ thuật nén ảnh số LỜI CẢM ƠN! Luận văn Kỹ thuật nén ảnh số hoàn thành với nội dung dự kiến ban đầu Tuy nhiên, trình độ thời gian có hạn, luận văn chắn khơng tránh khỏi sai sót Kính mong thầy giáo bạn đọc đóng góp ý kiến chỉnh sửa định hướng nội dung cho hướng phát triển Em xin bày tỏ lòng biết ơn chân thành Tiến sĩ Nguyễn Vũ Sơn, khoa Điện tử - Viễn thông, Trường Đại học Bách Khoa Hà Nội, người thầy tận tình hướng dẫn em trình học tập, nghiên cứu để hoàn thành luận văn Em xin chân thành cảm ơn ủng hộ mặt thầy cô khoa Điện tử - Viễn thông, Trường Đại học Bách Khoa Hà Nội, tạo điều kiện giúp đỡ em hoàn thành nhiệm vụ học tập Cuối xin chân thành cảm ơn cha mẹ, cảm ơn bạn lớp cao học niên khóa 2006-2008 người thân gia đình giúp đỡ, động viên suốt thời gian học tập vừa qua Học viên Đỗ Văn Phúc Luận văn cao học: Kỹ thuật nén ảnh số LỜI CAM ĐOAN Tôi xin cam đoan tất nội dung luận văn kết trình nghiên cứu tìm hiểu thân tơi, bảo giáo viên hướng dẫn Các kết thực nghiệm kết riêng cá nhân tôi, không chép từ tài liệu Học viên Đỗ Văn Phúc Luận văn cao học: Kỹ thuật nén ảnh số Trang MỤC LỤC MỤC LỤC .1 DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT .5 DANH MỤC HÌNH VẼ DANH MỤC BẢNG .12 DANH MỤC BẢNG .12 LỜI GIỚI THIỆU 13 U CHƯƠNG 1: TỔNG QUAN VỀ NÉN ẢNH SỐ 15 1.1.Giới thiệu chung nén ảnh số 15 1.2.Các kỹ thuật nén ảnh 16 1.2.1.Tiêu chuẩn nén ảnh JPEG sở 16 1.2.2.Nén ảnh sử dụng biến đổi wavelet 17 1.3 Tiêu chuẩn đánh giá chất lượng mã hoá ảnh 19 1.3.1.Sai số trung bình bình phương MSE .19 1.3.2.Tỷ số tín hiệu nhiễu đỉnh 20 1.4.Kết luận chương 20 CHƯƠNG 2: CƠ SỞ BIẾN ĐỔI WAVELET RỜI RẠC 21 2.1.Phép biến đổi wavelet 21 2.1.1.Biến đổi wavelet rời rạc 23 2.1.2.Khái niệm phân tích đa phân giải 25 Luận văn cao học: Kỹ thuật nén ảnh số Trang 2.1.3.Sử dụng lọc thuật tốn hình chóp 28 2.2.Biến đổi wavelet hai chiều 31 2.2.1.Nguyên tắc biến đổi .31 2.2.2.Ví dụ minh họa 33 2.3.Kết luận chương 35 CHƯƠNG : CÁC THUẬT TOÁN NÉN ẢNH CƠ SỞ WAVELET 36 3.1.Nguyên tắc nén 36 3.2.Thuật toán EZW 37 3.2.1.Mã hóa mặt phẳng bit 38 3.2.2.Cấu trúc zero .40 3.2.3.Thuật tốn mã hóa 43 3.3.Thuật toán SPIHT 46 3.3.1.Thủ tục xếp phân chia tập hợp 46 3.3.2.Cấu trúc hướng không gian 47 3.3.3.Thuật tốn mã hóa 49 3.4.Thuật toán WDR 54 3.4.1.Ưu điểm WDR 54 3.4.2.Thuật toán mã hóa 55 3.4.Thuật toán ASWDR 59 3.4.1.Nguyên tắc dự đoán giá trị quan trọng 59 3.4.2.Nội dung thuật toán 61 Luận văn cao học: Kỹ thuật nén ảnh số Trang 3.4.Ứng dụng thuật toán nén wavelet 64 3.5.Kết luận chương 65 CHƯƠNG 4: TIÊU CHUẨN NÉN ẢNH TĨNH JPEG2000 69 4.1 Lịch sử đời phát triển chuẩn JPEG2000 69 4.2 Các tính JPEG2000 69 4.3 Các bước thực nén ảnh JPEG2000 71 4.3.1.Tiền xử lý ảnh 71 4.3.2 Nén ảnh 74 4.3.3.Mã hóa lớp tổ chức luồng bit 82 4.4.Thuật tốn mã hóa JPEG 2000 82 4.4.1.Mã hóa lớp 82 4.4.2.Mã hóa lớp tổ chức luồng bit 90 4.5.Kết luận chương 99 CHƯƠNG 5: ĐÁNH GIÁ THỰC NGHIỆM CÁC THUẬT TỐN 100 5.1.Thuật tốn EZW 100 5.1.1.Giới thiệu chương trình 100 5.1.2.Kết tính tốn 102 5.1.3.Nhận xét 107 5.2.Thuật toán SPIHT 107 5.2.1.Giới thiệu chương trình 107 2.2.Kết tính tốn 109 Luận văn cao học: Kỹ thuật nén ảnh số Trang 118 TÀI LIỆU THAM KHẢO Tiếng Việt: Nguyễn Kim Sách - “Xử lý ảnh video số” - NXB KHKT, Trang 12-38, 1997 Tiếng Anh: A.Said and W.A Pearlman - “Image compression using the spatialorientation tree” - IEEE Int Symp on Circuits and Systems, Chicago, IL, trang 279–282, May, 1993 J Shapiro - “Smart Compression Using the Embedded Zerotree Wavelet (EZW) Algorithm” - Proc Asilomar Conf Sig., Syst and Comp., IEEE, trang 486-490, 1993 4.Pankaj N Topiwala – “Wavelet Image and Video Compression” –Kluwer Acamdemic Publishers, trang 158-165, 2002 S.Mallat - “A Theory for Multiresolution Signal Decomposition: The Wavelet Representation” - IEEE Trans on Pattern Analysis and Machine Intelligence, Vol 11, No 7, trang 674-693, July 1989 S Mallat – “A Wavelet Tour of Signal Processing” - Academic Press, New York, trang 52- 58, 1998 Tinku Acharya – “JPEG2000 – Standard for Image Compression” – Kluwer Academic Publisher, trang 140-157, 2005 Luận văn cao học: Kỹ thuật nén ảnh số PHỤ LỤC Dưới mã nguồn số hàm sử dụng chương trình Một số hàm phụ tác giả khơng trình bày q dài Hàm function_DWT: function [I_W , S] = function_DWT(I, level, Lo_D, Hi_D); % Wavelet decomposition % % input: I : input image % level : wavelet decomposition level % Lo_D : low-pass decomposition filter % Hi_D : high-pass decomposition filter % % output: I_W : decomposed image vector % S : corresponding bookkeeping matrix % [C,S] = func_Mywavedec2(I,level,Lo_D,Hi_D); S(:,3) = S(:,1).*S(:,2); % dim of detail coef nmatrices L = length(S); I_W = zeros(S(L,1),S(L,2)); % approx part I_W( 1:S(1,1) , 1:S(1,2) ) = reshape(C(1:S(1,3)),S(1,1:2)); for k = : L-1 rows = [sum(S(1:k-1,1))+1:sum(S(1:k,1))]; columns = [sum(S(1:k-1,2))+1:sum(S(1:k,2))]; % horizontal part c_start = S(1,3) + 3*sum(S(2:k-1,3)) + 1; c_stop = S(1,3) + 3*sum(S(2:k-1,3)) + S(k,3); I_W( 1:S(k,1) , columns ) = reshape( C(c_start:c_stop) , S(k,1:2) ); % vertical part c_start = S(1,3) + 3*sum(S(2:k-1,3)) + S(k,3) + 1; c_stop = S(1,3) + 3*sum(S(2:k-1,3)) + 2*S(k,3); I_W( rows , 1:S(k,2) ) = reshape( C(c_start:c_stop) , S(k,1:2) ); % diagonal part c_start = S(1,3) + 3*sum(S(2:k-1,3)) + 2*S(k,3) + 1; c_stop = S(1,3) + 3*sum(S(2:k,3)); I_W( rows , columns ) = reshape( C(c_start:c_stop) , S(k,1:2) ); End Hàm function_InvDWT function im_rec = function_InvDWT(I_W, S, Lo_R, Hi_R, level); % input: I_W : decomposed image vector % S : corresponding bookkeeping matrix % Lo_D : low-pass decomposition filter % Hi_D : high-pass decomposition filter % level : wavelet decomposition level % % output: im_rec : reconstruted image Luận văn cao học: Kỹ thuật nén ảnh số L = length(S); m = I_W; C1 = zeros(1,S(1,3)+3*sum(S(2:L-1,3))); % approx part C1(1:S(1,3)) = reshape( m( 1:S(1,1) , 1:S(1,2) ), , S(1,3) ); for k = 2:L-1 rows = [sum(S(1:k-1,1))+1:sum(S(1:k,1))]; columns = [sum(S(1:k-1,2))+1:sum(S(1:k,2))]; % horizontal part c_start = S(1,3) + 3*sum(S(2:k-1,3)) + 1; c_stop = S(1,3) + 3*sum(S(2:k-1,3)) + S(k,3); C1(c_start:c_stop) = reshape( m( 1:S(k,1) , columns ) , 1, c_stopc_start+1); % vertical part c_start = S(1,3) + 3*sum(S(2:k-1,3)) + S(k,3) + 1; c_stop = S(1,3) + 3*sum(S(2:k-1,3)) + 2*S(k,3); C1(c_start:c_stop) = reshape( m( rows , 1:S(k,2) ) , , c_stopc_start+1 ); % diagonal part c_start = S(1,3) + 3*sum(S(2:k-1,3)) + 2*S(k,3) + 1; c_stop = S(1,3) + 3*sum(S(2:k,3)); C1(c_start:c_stop) = reshape( m( rows , columns ) , , c_stopc_start+1); end if (( L - 2) > level) %set those coef in higher scale to temp = zeros(1, length(C1) - (S(1,3)+3*sum(S(2:(level+1),3)))); C1(S((level+2),3)+1 : length(C1)) = temp; end S(:,3) = []; im_rec = func_Mywaverec2(C1,S, Lo_R, Hi_R); PHẦN THUẬT TOÁN EZW: Hàm function_ezw_encode: function [significance_map, refinement] = function_ezw_encode(img_wavedata,ezw_encoding_threshold); % img_wavedata: wavelet coefficients % ezw_encoding_threshold: determine where to stop encoding % significance_map: a string matrix containing significance data for different passes (‘+’,’-’,’I’,’R’) % refinement: a strubg matrix containing refinement data for different passes ('0' or '1' subordinate_list = []; Luận văn cao học: Kỹ thuật nén ảnh số refinement = []; significance_map = []; img_wavedata_save = img_wavedata; % calculate Morton scan order n = size(img_wavedata,1); scan = func_morton([0:(n*n)-1],n); % calculate initial threshold init_threshold = pow2(floor(log2(max(max(abs(img_wavedata)))))); threshold = init_threshold; while (threshold >= ezw_encoding_threshold) [str, list, img_wavedata] = func_dominant_pass(img_wavedata, threshold, scan); significance_map = strvcat(significance_map, char(str)); if(threshold == init_threshold), subordinate_list = list; else subordinate_list = func_rearrange_list(subordinate_list, list, scan, img_wavedata_save); end [encoded, subordinate_list] = func_subordinate_pass(subordinate_list, threshold); refinement = strvcat(refinement, strrep(num2str(encoded), ' ', '')); threshold = threshold / 2; end Hàm function_ezw_decode: function img_wavedata_dec = function_ezw_decode(dim, threshold, significance_map, refinement); % dim: dimension of the wavelet matrix to reconstruct % threshold: initial threshold used while encoding % significance_map: a string matrix containing significance data for % different scanning passes (‘+’,’-’,’I’,’R’ % % refinement: a string matrix containing refinement data for % different scanning passes ('0' or '1') % % img_wavedata_dec: reconstructed wavelet coefficients % img_wavedata_dec = zeros(dim,dim); % calculate Morton scan order scan = func_morton([0:(dim*dim)-1],dim); % number of steps significance map (and refinement data) steps = size(significance_map,1); Luận văn cao học: Kỹ thuật nén ảnh số for step = 1:steps, % decode significancemap for this step img_wavedata_dec = func_decode_significancemap(img_wavedata_dec, significance_map(step,:), threshold, scan); img_wavedata_dec = func_decode_refine(img_wavedata_dec, refinement(step,:), threshold, scan); threshold = threshold/2; end Hàm function_huffman_encode: function img_ezw_stream_bit = function_huffman_encode(significance_map, refinement); % significance map: a string array containing significace map data (‘+’,’-’,’I’ and ‘R’) % refinement: a string array containing refinement data ('0' and '1') % % img_ezw_stream_bit: resulting bitstream ('0' and '1') % img_ezw_stream_bit = []; strings = size(significance_map,1); for i = 1:strings, % insert significance map using Huffman index = 1; while(index =bit_limit) break; end % get bit bit = img_ezw_stream_bit(index); index = index + 1; if(bit == '1'), % get next bit bit = img_ezw_stream_bit(index); index = index + 1; if(bit == '1'), % get next bit bit = img_ezw_stream_bit(index); index = index + 1; if(bit == '1'), % get next bit bit = img_ezw_stream_bit(index); index = index + 1; if(bit == '1'), % seperator detected complete = 1; else significance = [significance, ‘+’]; end Luận văn cao học: Kỹ thuật nén ảnh số else significance = [significance, ‘-’]; end else significance = [significance, ‘I’]; end else significance = [significance, ‘R’]; end if(complete), complete = 0; % get size of refinement data (next 20 bits) stringlength = bin2dec(img_ezw_stream_bit(1,index:index+19)); index = index + 20; refine = [refine img_ezw_stream_bit(1,index:index+stringlength1)]; index = index + stringlength; % update significance map and refinement data significance_map = strvcat(significance_map, significance); refinement = strvcat(refinement, refine); significance = []; refine = []; end % check for end of stream ('11111') bits = img_ezw_stream_bit(1,index:index+4); if(strcmp(bits, '11111')), decode = 0; end end PHẦN THUẬT TOÁN SPIHT: function out = function_SPIHT_Encode(m, max_bits, block_size, level) % input: m : input image in wavelet domain % max_bits : maximum bits can be used % block_size : image size % level : wavelet decomposition level % % output: out : bit stream % Initialization bitctr = 0; out = 2*ones(1,max_bits); n_max = floor(log2(abs(max(max(m)')))); Bits_Header = 0; Bits_LSP = 0; Bits_LIP = 0; Bits_LIS = 0; % output bit stream header -% image size, number of bit plane, wavelet decomposition level should be % written as bit stream header out(1,[1 3]) = [size(m,1) n_max level]; bitctr = bitctr + 24; Luận văn cao học: Kỹ thuật nén ảnh số index = 4; Bits_Header = Bits_Header + 24; % Initialize LIP, LSP, LIS -temp = []; bandsize = 2.^(log2(size(m, 1)) - level + 1); temp1 = : bandsize; for i = : bandsize temp = [temp; temp1]; end LIP(:, 1) = temp(:); temp = temp'; LIP(:, 2) = temp(:); LIS(:, 1) = LIP(:, 1); LIS(:, 2) = LIP(:, 2); LIS(:, 3) = zeros(length(LIP(:, 1)), 1); pstart = 1; pend = bandsize / 2; for i = : bandsize / LIS(pstart : pend, :) = []; pdel = pend - pstart + 1; pstart = pstart + bandsize - pdel; pend = pend + bandsize - pdel; end LSP = []; n = n_max; % coding -while(bitctr < max_bits) % Sorting Pass LIPtemp = LIP; temp = 0; for i = 1:size(LIPtemp,1) temp = temp+1; if (bitctr + 1) >= max_bits if (bitctr < max_bits) out(length(out))=[]; end return end if abs(m(LIPtemp(i,1),LIPtemp(i,2))) >= 2^n % 1: positive; 0: negative out(index) = 1; bitctr = bitctr + 1; index = index +1; Bits_LIP = Bits_LIP + 1; sgn = m(LIPtemp(i,1),LIPtemp(i,2))>=0; out(index) = sgn; bitctr = bitctr + 1; index = index +1; Bits_LIP = Bits_LIP + 1; LSP = [LSP; LIPtemp(i,:)]; LIP(temp,:) = []; temp = temp - 1; else out(index) = 0; bitctr = bitctr + 1; index = index +1; Bits_LIP = Bits_LIP + 1; end end Luận văn cao học: Kỹ thuật nén ảnh số LIStemp = LIS; temp = 0; i = 1; while ( i = max_bits return end max_d = func_MyDescendant(LIStemp(i,1),LIStemp(i,2),LIStemp(i,3),m); if max_d >= 2^n out(index) = 1; bitctr = bitctr + 1; index = index +1; Bits_LIS = Bits_LIS + 1; x = LIStemp(i,1); y = LIStemp(i,2); if (bitctr + 1) >= max_bits if (bitctr < max_bits) out(length(out))=[]; end return end if abs(m(2*x-1,2*y-1)) >= 2^n LSP = [LSP; 2*x-1 2*y-1]; out(index) = 1; bitctr = bitctr + 1; index = index +1; Bits_LIS = Bits_LIS + 1; sgn = m(2*x-1,2*y-1)>=0; out(index) = sgn; bitctr = bitctr + 1; index = index +1; Bits_LIS = Bits_LIS + 1; else out(index) = 0; bitctr = bitctr + 1; index = index +1; Bits_LIS = Bits_LIS + 1; LIP = [LIP; 2*x-1 2*y-1]; end if (bitctr + 1) >= max_bits if (bitctr < max_bits) out(length(out))=[]; end return end if abs(m(2*x-1,2*y)) >= 2^n LSP = [LSP; 2*x-1 2*y]; out(index) = 1; bitctr = bitctr + 1; index = index +1; Bits_LIS = Bits_LIS + 1; sgn = m(2*x-1,2*y)>=0; out(index) = sgn; bitctr = bitctr + 1; index = index +1; Bits_LIS = Bits_LIS + 1; else out(index) = 0; bitctr = bitctr + 1; index = index +1; Bits_LIS = Bits_LIS + 1; LIP = [LIP; 2*x-1 2*y]; end if (bitctr + 1) >= max_bits if (bitctr < max_bits) out(length(out))=[]; Luận văn cao học: Kỹ thuật nén ảnh số end return end if abs(m(2*x,2*y-1)) >= 2^n LSP = [LSP; 2*x 2*y-1]; out(index) = 1; bitctr = bitctr + 1; index = index +1; Bits_LIS = Bits_LIS + 1; sgn = m(2*x,2*y-1)>=0; out(index) = sgn; bitctr = bitctr + 1; index = index +1; Bits_LIS = Bits_LIS + 1; else out(index) = 0; bitctr = bitctr + 1; index = index +1; Bits_LIS = Bits_LIS + 1; LIP = [LIP; 2*x 2*y-1]; end if (bitctr + 1) >= max_bits if (bitctr < max_bits) out(length(out))=[]; end return end if abs(m(2*x,2*y)) >= 2^n LSP = [LSP; 2*x 2*y]; out(index) = 1; bitctr = bitctr + 1; index = index +1; Bits_LIS = Bits_LIS + 1; sgn = m(2*x,2*y)>=0; out(index) = sgn; bitctr = bitctr + 1; index = index +1; Bits_LIS = Bits_LIS + 1; else out(index) = 0; bitctr = bitctr + 1; index = index +1; Bits_LIS = Bits_LIS + 1; LIP = [LIP; 2*x 2*y]; end if ((2*(2*x)-1) < size(m) & (2*(2*y)-1) < size(m)) LIS = [LIS; LIStemp(i,1) LIStemp(i,2) 1]; LIStemp = [LIStemp; LIStemp(i,1) LIStemp(i,2) 1]; end LIS(temp,:) = []; temp = temp-1; else out(index) = 0; bitctr = bitctr + 1; index = index +1; Bits_LIS = Bits_LIS + 1; end else if bitctr >= max_bits return end max_d = func_MyDescendant(LIStemp(i,1),LIStemp(i,2),LIStemp(i,3),m); if max_d >= 2^n out(index) = 1; bitctr = bitctr + 1; index = index +1; x = LIStemp(i,1); y = LIStemp(i,2); LIS = [LIS; 2*x-1 2*y-1 0; 2*x-1 2*y 0; 2*x 2*y-1 0; 2*x 2*y 0]; Luận văn cao học: Kỹ thuật nén ảnh số LIStemp = [LIStemp; 2*x-1 2*y-1 0; 2*x-1 2*y 0; 2*x 2*y-1 0; 2*x 2*y 0]; LIS(temp,:) = []; temp = temp - 1; else out(index) = 0; bitctr = bitctr + 1; index = index +1; Bits_LIS = Bits_LIS + 1; end end i = i+1; end % Refinement Pass temp = 1; value = floor(abs(2^(n_max-n+1)*m(LSP(temp,1),LSP(temp,2)))); while (value >= 2^(n_max+2) & (temp = max_bits return end s = bitget(value,n_max+2); out(index) = s; bitctr = bitctr + 1; index = index +1; Bits_LSP = Bits_LSP + 1; temp = temp + 1; if temp