1075.2.1.Giới thiệu chương trình ...107 Trang 12 DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT ASWDR: Thuật toán rút gọn hiệu wavelet với quét thích ứng Adaptively Scanned Wavelet Difference Reduct
TỔNG QUAN VỀ NÉN ẢNH SỐ
Tiêu chu n ẩ đánh giá chất lượng mã hoá ả nh
Here is the rewritten paragraph:Biệt ROI (Region of Interest) là giải pháp được đề xuất để khắc phục nhược điểm của WDR (Wide Dynamic Range) Ngoài ra, nhờ tái tổ hợp để thu thập toán ậ, WDR và ASWDR (Advanced Surveillance WDR) thể hiện phần chi tiết (phần góc của ảnh) rõ ràng, thậm chí dù nén với tỷ lệ nén rất cao.
Các thuật toán hiện tại thiếu tính linh hoạt về độ phân giải Một phương pháp mới được đề xuất là EBCOT của Taubman, mang lại sự linh hoạt cả về tỉ số SNR và độ phân giải Thuật toán này dựa trên cơ sở phân chia khối và các khối được mã hóa độc lập với nhau Nhờ đó, các vùng quan trọng riêng (ROI - Region Of Interest) có thể được giải mã mà không cần phải giải mã toàn bộ ảnh Vì lý do này, EBCOT được khuyến nghị sử dụng trong tiêu chuẩn nén ảnh mới JPEG2000.
1.3 Tiêu chuẩ đn ánh giá chất lượng mã hoá ảnh
Chất lượng mã hóa ảnh thể hiện độ chính xác của ảnh đã nén so với ảnh gốc Để đánh giá chất lượng ảnh của một sơ đồ mã hóa, người ta thường sử dụng hai tham số chính: sai số bình quân trung bình (MSE) và tỉ số tín hiệu trên nhiễu đỉnh (PSNR).
1.3.1.Sai số trung bình bình phương MSE
MSE thường được gọi là phương sai lượng tử σq 2 (Quantization Error Variance) MSE giữ ảa nh gốc và ảnh khôi phục được tính như sau:
Trong đó f[j,k] và g[j,k] là các giá trị đ ể i m ảnh tại vị trí [j,k] ứng với ảnh g c và nh khôi ph c N là t ng s i m nh trong nh ố ả ụ ổ ố đ ể ả ả
1.3.2.Tỷ số tín hiệu trên nhiễu nh đỉ
PSNR giữa hai ảnh (b bít cho mỗi đ ểi m ảnh, RMSE là căn bậc 2 của MSE) được tính theo công thức dB như sau:
Thông thường, khi PSNR đạt từ 40dB trở lên, con người gần như không thể phân biệt giữa ảnh gốc và ảnh khôi phục Ảnh khôi phục có giá trị MSE thấp sẽ tương ứng với PSNR cao, từ đó giảm thiểu sai lỗi Về mặt logic, PSNR cao cho thấy tỷ lệ tín hiệu trên tạp âm (SNR) lớn, dẫn đến chất lượng ảnh khôi phục tốt hơn.
Như vậy m t s đồ nén nh được ánh giá là đạt hi u qu cao n u em ộ ơ ả đ ệ ả ế đ lại MSE thấp và PSNR cao.
Kết luận chương 1
Chương 1 đã mang l i một cái nhìn tổng quan về kỹạ thu t nén nh s ậ ả ố Nhiều thuật toán nén ảnh đã đượ đề xuất Trong đó, những thuật toán trên cơ c sở biến đổi wavelet như EZW, SPIHT, WDR, ASWDR… thể hiện tính ưu việt không chỉ v t lề ỷ ệ nén cao mà còn phù h p v i truy n d n l y ti n và kh ợ ớ ề ẫ ũ ế ả năng chống sai lỗi đường truyền Luận văn sẽ tập trung vào phân tích m t s ộ ố thuật toán nén ảnh wavelet tiêu biểu Từ đ đ ó ánh giá ưu nhược đ ểi m cũng như ứng d ng c a chúng trong th c t ụ ủ ự ế
Chương 1 cung cấp các thông số quan trọng để đánh giá chất lượng ảnh giải nén, bao gồm sai số bình phương trung bình (MSE) và tỉ số tín hiệu trên nhiễu đỉnh (PSNR) Những thông số này là cơ sở để so sánh hiệu năng của các phương pháp nén ảnh khác nhau.
CHƯƠNG 2: CƠ Ở S BIẾN ĐỔI WAVELET RỜI RẠC
Wavelet là các hàm được hình thành từ hàm mẹ (mother wavelet) thông qua quá trình co giãn và dịch trong miền thời gian Nếu ký hiệu hàm wavelet mẹ là ψ(t), các hàm wavelet khác có thể được biểu diễn dựa trên hàm này.
Với a và b là hai tham số trong hàm wavelet, sự co dãn (dilation) và dịch chuyển (translation) tương ứng trong miền thời gian có thể được biểu diễn Biểu thức này cho thấy hàm wavelet mẹ được xác định qua các tham số này.
Với các giá tr b t k a 1 và b 0, ta có : ị ấ ỳ ≠ ≠
Trong biểu thức trên, ψ a,0 là phiên bản co dãn của hàm wavelet mẹ ψ(t) theo trục thời gian t, với hệ số co dãn a điều chỉnh biên độ Tham số a làm co lại hàm ψ(t) khi a1, do đó a được gọi là tham số co dãn.
Hàm dịch ψ a,b là kết quả của việc dịch hàm ψ a,0 sang phải một khoảng b khi b>0 và sang trái khi b= ezw_encoding_threshold)
The function `func_dominant_pass` processes the `img_wavedata` by generating a significance map based on a specified threshold When the threshold equals the initial value, it retains the original subordinate list; otherwise, it rearranges the subordinate list using the provided parameters The results are then returned for further analysis.
[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
% refinement: a string matrix containing refinement data for
% 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); for step = 1:steps,
In this process, the significance map is decoded using the function `func_decode_significancemap`, which takes the current image wave data, the significance map for the step, a threshold, and a scan as inputs Subsequently, the image wave data is refined through the `func_decode_refine` function, which also utilizes the refinement data for the step along with the threshold and scan To enhance the decoding process, the threshold is then halved for subsequent iterations.
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
% 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 else significance = [significance, ‘-’ ]; end else significance = [significance, ‘I’ ]; end else significance = [significance, ‘R’ ]; end if (complete), complete = 0;
To obtain the size of the refinement data, the next 20 bits are extracted from the stream The string length is calculated by converting these bits from binary to decimal The index is then updated to point to the next segment, and the refinement data is appended by retrieving the corresponding bits based on the calculated string length Finally, the index is adjusted again to reflect the new position in the data stream.
% 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
% - Initialization - bitctr = 0; out = 2*ones(1,max_bits); n_max = floor(log2(abs(max(max(m)'))));
% image size, number of bit plane, wavelet decomposition level should be
% written as bit stream header. out(1,[1 2 3]) = [size(m,1) n_max level]; bitctr = bitctr + 24; index = 4;
% - Initialize LIP, LSP, LIS - temp = []; bandsize = 2.^(log2(size(m, 1)) - level + 1); temp1 = 1 : bandsize; for i = 1 : bandsize temp = [temp; temp1]; end
LIS(:, 3) = zeros(length(LIP(:, 1)), 1); pstart = 1; pend = bandsize / 2; for i = 1 : bandsize / 2
LIS(pstart : pend, :) = []; pdel = pend - pstart + 1; pstart = pstart + bandsize - pdel; pend = pend + bandsize - pdel; end
% - coding - while(bitctr < max_bits)
The algorithm processes the LIPtemp matrix, initializing a counter for the output bits It iterates through each row of the matrix, checking if the bit count has reached its maximum limit If so, it removes the last output element and exits The algorithm evaluates the absolute value of a function m at specific matrix coordinates, determining if the value is positive or negative Based on this evaluation, it updates the output array and increments the bit counter and index, ultimately accumulating the total bits processed.
LIP(temp,:) = []; temp = temp - 1; else out(index) = 0; bitctr = bitctr + 1; index = index +1;
Bits_LIP = Bits_LIP + 1; end end
The algorithm initializes a list and variables to track the count of bits and indices It iterates through the list, checking conditions related to the values in specific columns If certain criteria are met, it calculates a descendant value and updates the output accordingly The process includes incrementing counters and managing the output size based on maximum bit limits Additionally, it verifies the absolute value of a specific matrix element against a threshold before concluding the operation.
The algorithm initializes the LSP with the values [LSP; 2*x-1 2*y-1] and updates the output array by setting out(index) to 1, incrementing the bit counter and index It checks the sign of m(2*x-1, 2*y-1) to determine the next output value, either setting out(index) to the sign value or to 0 if the condition is not met The process continues with the addition of values to the LIP array The algorithm monitors the bit counter to ensure it does not exceed the maximum allowed bits, removing the last output if necessary The final condition checks if the absolute value of m(2*x-1, 2*y) is greater than or equal to 2^n before concluding the operation.
The algorithm processes a sequence of inputs represented by LSP, updating the output based on the conditions evaluated It increments the bit counter and index as it assigns values to the output array, determining the sign of the function m at specified coordinates If the conditions are met, it appends to LIP and manages the output length based on the maximum bit limit The function concludes by checking the absolute value of m against a threshold, ensuring that the output adheres to predefined constraints.