Nén ảnh dựa trên phép biến đổi wavelet rời rạc và tiêu chuẩn JPEG2000

23 646 2
Nén ảnh dựa trên phép biến đổi wavelet rời rạc và tiêu chuẩn JPEG2000

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG - - Báo cáo Bài tập lớn môn: Xử lí liệu đa phương tiện Đề Tài 10: Nén ảnh dựa phép biến đổi Wavelet rời rạc chuẩn JPEG2000 Giảng viên hướng dẫn: PGS.TS Nguyễn Thị Hoàng Lan Sinh viên thực hiện: Ngô Quang Anh Nguyễn Huy Hoàng Nguyễn Hiển Tường MSSV: 20121209 20121749 20122776 Hà Nội – 05/2016 Lớp: CNTT-TT 1.01 K57 CNTT-TT 1.01 K57 CNTT-TT 1.01 K57 Mục lục Tổng quan JPEG-2000 I Lịch sử đời phát triển chuẩn JPEG2000 JPEG viết tắt Joint Photographic Experts Group nhóm cộng tác hai tổ chức: ISO ( the International Origanization for Standardization) ITUT ( International Telecommunication Union Standardization Sector ) sang lập chuẩn JPEG Sự đời JPEG mạng lại nhiều lợi ích to lớn nhiều mặt JPEG giảm kích thước ảnh, giảm thời gian truyền làm giảm chi phí xử lý ảnh chất lượng ảnh tốt Tuy nhiên nay, người ta ứng dụng dạng nén có tổn thất thông tin JPEG mã hóa không tổn thất JPEG phức tạp Để việc nén ảnh có hiệu hơn, ủy ban JPEG đưa chuẩn nén ảnh tĩnh JPEG2000 JPEG2000 sử dụng biến đổi Wavelet số phương pháp mã hóa đặc biệt để có ảnh nén ưu việt hẳn JPEG JPEG2000 tiếp tục nghiên cứu phát triển, tổ chức ISO công nhận chuẩn nén ảnh quốc tế áp dụng cho ảnh tĩnh Chuẩn nén ảnh JPEG2000 mà xương sống biến đổi Wavalet với tính vượt trội so với JPEG chắn dung cho server nội dung để chuyển đổi định dạng ảnh mạng di động Các tính JPEG2000 JPEG2000 nhiều chức đặc biệt chuẩn nén ảnh tĩnh khác JPEG hay GIF Dưới chức ưu việt JPEG2000 so với chuẩn nén ảnh tĩnh khác : • • • • • • • Cho chất lượng ảnh tốt áp dụng nén ảnh tĩnh có tổn thất Sử dụng với truyền dẫn hiển thị lũy tiến chất lượng, độ phan giải, thành phần màu có tính định vị không gian Sử dụng chế nến ảnh cho hai dạng thức nén Truy nhập giải nén thời điểm nhận liệu Giải nén vùng ảnh mà không cần giải nén toàn ảnh Có khả mã hóa với tỷ lệ nén theo vùng khác Nén lần giải nén với nhiều cấp chất lượng khác tùy theo yêu cầu người sử dụng Hiện tại, ISO ủy ban JPEG đưa khuyến nghị thay JPEG JPEG2000 3 Các bước thực nén ảnh theo chuẩn JPEG2000 3.1 Xử lý trước biến đổi ( preprocessing) Do biến sử dụng đổi Wavalet, JPEG2000 cần có liệu ảnh đầu vào dạng đối xứng qua 0, ví dụ ảnh grayscale, giá trị pixel phải nằm miền từ [-128, 128] Xử ly trước biến đổi giai đoạn đảm bảo liệu đưa vào nén ảnh có dạng Ở phía giải mã, giai đoạn xử lý sau biến đổi trả lại giá trị gốc ban đầu cho liệu ảnh 3.2 Biến đổi liên transform) thành phần (Intercomponent Giai đoạn loại bỏ tính tương quan thành phần ảnh JPEG2000 sử dụng hai loại biến đổi liên thành phần biến đổi thận ngịch ( Reverrsible Color Transform – RCT) biến đổi màu không thuận ngịch (Irrerrsible Color Transform – ICT) biến đổi thuận ngịch làm việc với giá trị nguyên ICT RCT chuyển liệu ảnh từ không gian màu RGB sang YCrCb RCT áp dụng cho nén có tổn thất Việc áp dụng biến đổi màu trước nén ảnh không nằm mục đích làm tăng hiệu nén Các thành phần Cr, Cb có ảnh hưởng tới cảm nhận hình ảnh mắt thành phần độ chói Y có ảnh hướng lớn tớt ảnh Ví dụ hình minh họa Sau phương trình biến đổi hai không gian màu Phương trình biến đổi từ YCbCr sang RGB: Phương trình biến đổi từ RGB sang YCbCr 3.3 Biến đổi riêng thành phần (Intracomponent transform) – biến đổi Wavalet Biến đổi riêng thành phần áp dụng JPEG2000 việc biến đổi Wavalet Để đảm bảo tính toàn vẹn thông tin cần phải áp dụng phép biến đổi thuận ngịch không thuận ngịch Do phép biến đổi Wavalet phép biến đổi trực giao biến đổi DCT mà phép biến đổi băng nên thành phần chia thành băng tần số khác băng mã hóa riêng rẽ DWT phan tách ảnh thành nhiều dải tần số gọi subband Mỗi mức DWT tác động lần : lần duyệt theo chiều ngang lần duyệt theo chiều dọc ta thu bốn dải : 1) 2) 3) 4) Horizontally and vertically lowpass (LL) Horizontally lowpass and vertically highpass (LH) Horizontally highpass and vertically lowpass (HL) Horizontally and vertically highpass (HH) Chúng ta xem xét tín hiệu ảnh đầu vào ( tín hiệu tile – component ảnh lớn) Giả sử với phân tách wavelet mức R-1 tương ứng với mức phân giải thứ R, đánh số từ tới R-1 tương ứng với mức phân giải (coarsest resolution) R-1 tương ứng với mức phân giải tốt (finest resolution) Mỗi dải lần phân tách xác định hướng (orientation) ( ví dụ LL, LH, HL, HH) mức phân giải tương ứng ( ví dụ 0,1,…, R-1) Tại mức phân giải ( ngoại trừ mức thấp nhất), dải LL dải bị phân tách nhỏ Giả dụ, dải LLR-1 dải bị phân tách thành dải LLR-2, HLR-2, LHR-2 HHR-2 Sau đó, mức dải LLR-2 bị phân tách Quá trình lặp lặp lại ta thu dải LL0(kết hiển thị hình b trên) Nếu không thực biến đổi (R=0) có dải LL0 JPEG2000 áp dụng biến đổi Wavalet nguyên thuận nghịch 5/3 (the reversible integer-tointeger) (IWT) biến đổi không thuận nghịch (the irreversible real-to-real) Daubechies 9/7 Việc tính toán biến đổi JPEG2000 thực theo phương pháp Lifting Sơ đồ phương pháp Lifting 1D áp dụng JPEG2000 hình Việc tính toán biến đổi Wavalet 1D 2D suy từ biến đổi Wavalet 1D theo phương pháp giải ảnh tùy chọn Trong JPEG2000, có ba phương pháp giải ảnh phương pháp sử dụng nhiều phương pháp kim tự tháp Do biến đổi Wavalet 5/3 biến đổi thuận ngịch nên áp dụng cho nén ảnh theo phương pháp, có tổn thất không tổn thất Trong biến đổi 9/7 áp dụng cho nén ảnh theo phương pháp có tổn thất thông tin 3.4 Lượng tử hóa Các hệ số phép biến đổi tiến hành lượng tử hóa Quá trình lượng tử hóa (quantization) cho phép đạt tỉ lệ nén cao cách thể giá trị biến đổi với độ xác tương ứng cần thiết với mức chi tiết ảnh cần nén Các hệ số biến đổi lượng tử hóa theo phép lượng tử hóa vô hướng Các hàm lượng tử hóa khác áp dụng cho băng khác thực theo biểu thức: Trong dạng biến đổi nguyên, đặt bước lượng tử Với dạng biến đổi thực bước lượng tử chọn tương ứng cho băng riêng rẽ Bước lượng tử băng phải có dòng bit truyền để phía thu giải lượng tử cho ảnh 3.5 Mã hóa tầng thứ (Tier-1 encoder) Đến đây, dải chia thành hình chữ nhật có độ dài không chồng lên Ba hình chữ nhật tương ứng với dải HL, LH, HH mức phân giải gộp lại gói (packet) Mỗi packet cung cấp thông tin không gian có chứa thông tin cần cho việc giải mã hóa ảnh vùng không gian mức phân giải Các gói chia nhỏ thành khối mã ( codeblock) hình chữ nhật không chồng lên nhau, thực thể việc mã hóa entropy Một codeblock phải có chiều dài rộng lũy thừa sản phẩm nó, kích thước định danh – đối số tự – không vượt 4096 Trong JPEG2000, kích cỡ mặc định codeblock 64x64 Sau đó, codeblock mã hóa cách độc lập cách dung mã hóa theo bit-plane ( bit-plane coder) có hai đặc điểm riêng, không phụ thuộc vào dải bên ba pass coding (ví dụ pass cleanup, refinement significance) bit – plane thay hai pass coding Đặc điểm thứ đảm bảo code block chứa hoàn toàn dải đơn code block mã hóa hoàn toàn độc lập với code block khác: mà có khả phục hồi lỗi Đặc điểm thứ làm giảm lượng thông tin liên két với pass coding, làm cho việc điều khiển tỉ lệ tốt Mỗi pass số quét mẫu (sample) codeblock dạng stripes theo chiều dọc ( stripes có chiều cao định dang mẫu) Thứ tự quét từ xuống stripe cột quét từ trái sang phải Trong cột, mẫu quyets từ xuống Pass cleanup bắt buộc đòi hỏi mã hóa toán học (arithmetic coding) pass khác đòi hỏi việc mã hóa thô (raw coding) Đối với khả phục hồi lỗi, quy trình mã hóa toán học, mã hóa thô đảm bảo cho mẫu bit bị cấm đầu Mã hóa bit-plane đưa chuỗi kí hiệu cho coding pass, số tất kí hiệu mã hóa etropy thông qua mã hóa toán học nhị phân tương hợp dựa vào ngữ cảnh ( context_based adaptive binary arithmetic coder) Đối với việc chọn ngữ cảnh, thông tin trạng thái cho láng giềng-4 láng giềng-8 đặt tài khoản Ngữ cảnh phụ thuộc vào bit mã hóa phân loại bit tín hiệu (signs) thành lớp khác cần cho phân bổ xác suất đồng dạng độc lập Cho số lớp N có ni lớp I, với xác suất bit, để lấy giá trị “1”, pi entropy (H) mảng bit theo thuyết thông tin Shannon tính : Mã hóa entropy biến đổi cặp bit ngữ cảnh thành dòng bit nén với độ dài gần đạt tới lý tưởng, ví dụ giới hạn Shannon, hoàn toàn Có nhiều mã hóa (coder) JPEG2000 sử dụng mã hóa coder theo chuẩn JBIG2, ví dụ MQ[10] 3.6 Mã hóa tầng thứ (Tier-2 encoder) Trong bước này, thông tin coding pass đóng gói lại đơn vị liệu gọi packets trình packetization, trình buộc cách tổ chức riêng biệt thành liệu coding pass dòng mã đầu (output code stream) thuận lợi để đạt đặc tính mã hóa mong muốn gồm có: thay đổi tỉ lệ ( rate scalability) phục hồi lũy tiến với độ xác độ net Header packet cho biết chứa coding pass nào, phân thân chứa liệu coding pass thực Đối với việc thay đổi tỉ lệ (rate scalability) cho tile tổ chức thành nhiều tầng, đánh số từ đến l-1, với l số tầng Các tầng thấp chứa coding pass có liệu quan trọng nhất, tầng có coding pass chưa chi tiết nên cho phép giải mã xây dựng lại hình ảnh với chất lượng cải thiện với số gia Việc nén mát thông tin cần loại bỏ số coding pass loại bỏ lớp (layer) nén không mát thông tin không loại bỏ coding pass Các code block từ mã hóa tier-& nhóm lại gọi precincts Đối với kết hợp thành phần – mức phân giải – lớp – khu (component-resolution-layer-precinct combination), gói tạo ran gay không truyền thông tin cả: gói rỗng Một phân khu precinct cho dải lấy từ phân khu dải LL cha Mỗi mức phân giải có kích thước precinct định dang riêng phải lũy thừa không vượt 215 Kích thước precinct nhỏ giảm lượng liệu chứa gói thực tế liệu coding pass precinct khác mã hóa gói riêng biệt Do với liệu gói dẫn tới mát thông tin hơn, khả phục hồi lỗi tốt với chi phí cho hiệu suất mã hóa mật độ gói tăng lên II - Thuật toán nén ảnh JPEG-2000 (Thuật toán EZW Embeded Zerotree Wavelet) Cây tứ phân: Như trình bày phần kĩ thuật thực Wavelet, sau thực phép biến đổi ta thu nhận hệ số băng tần khác xếp lại cách khái quát hình trên, liệu (hình ảnh) gốc chia làm bốn phần tương ứng với băng tần LL, HL, LH, HH Đặc điểm hệ số giá trị lớn tập trung băng tần thấp (LL), băng tần lại chứa hệ số có giá trị thấp hơn, đặc biệt HH giá trị nhỏ gần - Cây không (zerotree): Phương pháp xây dựng dựa nhận xét: coi cấu trúc băng tần sau biến đổi Wavelet có dạng hình mô tả hình vẽ nút cha có giá trị không đáng kể nút có giá trị không đáng kể; nút cha nút hầu hết 0, nghĩa không tạo khác biệt lớn lưu hay lưu chi tiết Vì vậy, đem quét tập giá trị hệ số Wavelet theo cách để xây dựng rừng mô tả có toàn số không, gọi không (zerotree) hay giá trị không đáng kể Những hoàn toàn thay kí tự nhất, kết tập hệ số nén lại nhiều Nguyên lý hoạt động thuật toán: Thuật toán mã hóa hệ số theo thứ tự giảm dần Chúng ta dùng giá trị gọi ngưỡng sử dụng ngưỡng để tiến hành mã hóa hệ số biến đổi hệ số mã hóa theo thứ tự từ vùng tần số thấp đến vùng tần số cao Và hệ số có giá trị tuyệt đối lớn ngưỡng dc mã hóa Tiếp theo giảm ngưỡng tiếp tục làm ngưỡng đạt tới giá trị nhỏ giá trị hệ số nhỏ Các giảm giá trị ngưỡng thực tương đối đặc biệt, giá trị ngưỡng giảm xuống nửa so với trước Bộ giải mã phải biết mức ngưỡng giải mã ảnh thành công Ngưỡng tính theo công thức: Với ngưỡng đó, đưa hệ số qua hai vòng kiểm soát (pass), cụ thể: • Significant pass: Các hệ số xác định tính đáng kể sau mã hóa thành kí tự ‘p’, ‘n’, ‘t’, ‘z’, đó: o ‘p’ – positive significant: giá trị tuyệt đối hệ số dương lớn ngưỡng xét ‘n’ – negative significant: giá trị tuyệt đối hệ số âm lớn ngưỡng xét o ‘z’ – insignificant with significant descendants: giá trị tuyệt đối hệ số nhỏ ngưỡng xét, có hệ số có trị tuyệt đối lớn hơn, tức có đáng kể o ‘t’ – zerotree root: gốc không, tức trị tuyệt đối giá trị hệ số không đáng kể Refinement pass: Các hệ số mã hóa ‘p’ hay ‘n’ xét giá trị cụ thể cho ‘0’ ‘1’ o • Sử dụng thuật toán quét (scan) giá trị hệ số bảo đảm yêu cầu: hệ số mức thực Wavelet cao quét trước, mức Wavelet thấp quét sau; hệ số băng tần thấp quét trước tới hệ số băng tần cao Thông thường áp dụng Morton Scan hình chữ Z: Ví dụ a Mã Bước 1: Cmax= 57 EZW hóa To = 2^5 = 32 Xét giá trị theo Morton Scan A3 = 57 > 32 => A3= P H3 = -35 |-35| > 32 => H3= N V3 = -29 |-29| < 32 có V1 có giá trị 47 > 32 => V3= Z D3 = 25 < 32 giá trị D2 D1 > 32 => D3 = T ⇒ [A3, H3, V3, D3] = PNZT Tiếp tục theo Morton Scan ta xét đến vùng H2, V2, D2 tro đến zerotree Tương tự ta có H2 = PTTT, V2 = TZTT D2 không cần mã hóa D3 zero Tiếp tục mã hóa bước ta dãy: PNZT PTTT TZTT TTTT TPTT Tiếp theo ta mã hóa giá trị P N, ta lấy dọc theo bit thứ giá trị Sau hoàn thành ta thu Bước 2: Bước thứ ta giảm ngưỡng xuống nửa 16 Tiếp tục theo Morton Scan Ta thu P2 = ZTNPTTTTTTTT Các giá trị vượt ngưỡng : 57 35 52 47 29 25, giá trị bước ghi sau giá trị bước Mã hóa giá trị lần lấy dọc bit thứ ta dc S2 = 100111 Cứ tiếp tục đến ngưỡng đạt giá trị thấp ta Sau ta dùng mã Huffman để dòng liệu nhị phân b Giải Mã P nhận giá trị Tn, N nhận giá trị -Tn Z T không nhận giá trị Cứ lần cộng thêm S, giá trị Tn giảm nửa nhận giá trị Tn, j Thứ tự xét theo Morton Scan Bước 1: Xét P1, giá trị P = To = 32, N = -To = -32, Z = T = Các giá trị điền theo mô hình Morton Scan mã hóa Xét S1, giá trị 1,0,1,0 cộng vào giá trị P N tương ứng P1 = 1/2To = 16, Thêm 16 P – 16 N Các giá trị không thêm Bước 2: Ngưỡng P2 16 Ngưỡng S2 giảm nửa lại Cứ tiếp tục đến ta giải mã xong Về giải mã thực ngược lại mã hóa III Xây dựng, cài đặt thử nghiệm thuật toán nén ảnh JPEG2000 Chuẩn bị - Phần mềm Matlab R2015b Ảnh nguồn: lena256.bmp với kích thước 256x256 pixel Kịch tiến hành thử nghiệm - - Kịch bản: o Tiến hành cài đặt thuật toán cần thiết matlab o Chạy thuật toán với thông số khác o Đo thông số output để so sánh Các thông số cần đo o PSNR – Tỉ số tín hiệu cực đại nhiễu: : tỉ lệ giá trị lượng tối đa tín hiệu gốc lượng nhiễu (các lỗi nén có mát liệu) o PSNR tính thông qua MSE:dung cho ảnh kích thước mxn I ảnh gốc, K ảnh khôi phục: Khi đó: MAXI giá trị tối đa pixel ảnh tín hiệu biểu diễn B bits đơn vị lấy mẫu, MAXI = 2^B−1 Với ảnh màu RGB, MSE tổng giá trị màu chia cho kích thước ảnh chia cho Trong nén ảnh có mát, PSNR khoảng 30-50dB, giá trị cao tốt Giá trị chấp nhận truyền tín hiệu không dây có tổn thất khoảng từ 20 dB đến 25 dB Cài đặt thuật toán Dựa sơ đồ biến đổi phần lý thuyết, ta thực cài đặt thuật toán theo sơ đồ a Biến đổi thuận liên thành phần - Ta sử dụng biến đổi DWT – SPIHT Sử dụng lọc Wavelet filters Matlab cung cấp, ta lấy thông số lọc thông thấp, thông cao cho phân rã thông số thông thấp thông cao cho tái cấu trúc từ câu lệnh matlab: [Lo_D,Hi_D,Lo_R,Hi_R] = wfilters(wname); - - Trong đó: o Lo_D: phân rã lọc thông thấp o Hi_D: phân rã lọc thông cao o Lo_R: tái cấu trúc thông thấp o Hi_R: tái cấu trúc thông cao Tiến hành biến đổi DWT [img_wave,S] = func_DWT(img,level,Lo_D,Hi_D); - Trong hàm func_DWT thực phân tách ảnh thành nhiều dải tần số gọi subband Mỗi mức DWT tác động lần : lần duyệt theo chiều ngang lần duyệt theo chiều dọc ta thu bốn dải Tương ứng code Matlab, ta có: function [I_W , S] = func_DWT(I, level, Lo_D, Hi_D) [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 b Lượng tử hóa - Ta thực lượng tử hóa với công thức : hệ số Wavelet vị trí , băng tần : hàm lấy dấu : hệ số Wavelet sau lượng tử hóa thành số nguyên : bước lượng tử hóa, thay đổi theo băng tần lọc Wavelet: : nominal dynamic range băng tần , tổng số bit ban đầu biểu diễn pixel ảnh độ tăng ích lọc băng tần : số bit biểu diễn phần mũ (exponent) hệ số Wavelet : số bit biểu diễn phần số (mantissa) hệ số Wavelet - Ta xây dựng hàm lượng tử hóa với công thức sau: function Qtable = testquant(row, col, l) R=8;c=11;f=52;i=l; t = (1+f/2^11)*2^(R-c+i); Qtable = zeros(row,col); for level=1:i end_x = uint16(row/(2^(level-1))); end_y = uint16(col/(2^(level-1))); end_x2 = uint16(end_x/2); end_y2 = uint16(end_y/2); Qtable(1:end_x2,1:end_y2) = t/(2^level); %CA part Qtable(end_x2+1:end_x,1:end_y2) = t/(2^(level-1)); %CH part Qtable(1:end_x2,end_y2+1:end_y) = t/(2^(level-1)); %CV part Qtable(end_x2+1:end_x,end_y2+1:end_y) = t/(2^(level-2)); %CD part end; c - Mã hóa, thực biến đổi EZW Xây dựng hàm mã hóa theo EZW function [significance_map, refinement] = func_ezw_enc2(img_wavedata,maxloop); subordinate_list = []; refinement = []; significance_map = []; img_wavedata_save = img_wavedata; img_wavedata_mat = 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 (maxloop>0) [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; maxloop = maxloop - 1; end - Thực mã hóa với ảnh sau lượng tử với đoạn code: init_threshold = pow2(floor(log2(max(max(abs(img_wave_quantized)))))); [img_enc_significance_map, img_enc_refinement] = func_ezw_enc2(img_wave_quantized, maxloop); [img_ezw_stream_bit] = testhuff(img_enc_significance_map, img_enc_refinement,maxloop); - Sau thực phép biến đổi trên, ta thu ảnh sau mã hóa, thực phép biến đổi ngược để thu ảnh khôi phục - Xây dựng hàm giải mã EZW: function img_wavedata_dec = func_ezw_decode(dim, threshold, significance_map, refinement); 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, % 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 - Thực biến đổi giải mã hóa EZW img_dec_significance_map = img_enc_significance_map; img_dec_refinement = img_enc_refinement; img_wave_dec = func_ezw_dec(size_row, init_threshold, img_dec_significance_map, img_dec_refinement); d Biến đổi giải lượng tử hóa: - Thực với đoạn code matlab: g = 0.5; img_wave_rev_quantized = sign(img_wave_dec).*(abs(img_wave_dec)+ g) *d; e Thực biến đổi ngược thành phần - Thực inverse DWT img_reconstructed = func_InvDWT(img_wave_rev_quantized,S,Lo_R,Hi_R,level); img_reconstructed = uint8(img_reconstructed); f Thực xử lý sau biến đổi để ảnh đầu ra: sum = 0; for i=1:size_row for j=1:size_col sum = sum + (double(img_reconstructed(i,j)-img(i,j)))^2; end; end; g Đo lường thông số sau biến đổi - Ta thực tính MSE PSNR công thức đưa với đoạn code: im = imread('lena256.bmp'); im=im2double(im); im1= imread('lena256.jp2'); im1= im2double((im1)); D=abs(double(im) - double(im1)).^2; mse=sum(D(:))/numel(im); PSNR=10*log10((255*255)/mse); disp(mse); disp(PSNR); Tiến hành thử nghiệm - Ảnh gốc - Thực biến đổi với filter db4 - Thực biến đổi với filter db8 - Thực biến đổi với filter db10 Đánh giá, nhận xét Phép biến đổi Wavelet không chia khối phép biến đổi DCT mà phép biến đổi mã hóa băng nên thành phần chia thành băng tần số khác băng mã hóa riêng rẽ ảnh nén với tỉ số cao mà không làm giảm nhiều chất lượng ảnh DWT cung cấp thông tin phổ tần số tín hiệu cho biết thành phần xuất TÀI LIỆU THAM KHẢO - - - Slide giảng xử lý liệu đa phương tiện – PGS.TS Nguyễn Thị Hoàng Lan MathWorks: o http://www.mathworks.com/help/wavelet/ref/dwt2.html o http://www.mathworks.com/help/wavelet/ref/dwt.html J M Shapiro, "Embedded image coding using zerotrees of wavelet coefficients, IEEE Transactions on Signal Processing, Vol 41, No 12, 1993, pp 3445-3462 Cohen-Daubechies-Feauveau wavelet: https://en.wikipedia.org/wiki/CohenDaubechies-Feauveau_wavelet EZW (Embedded Zerotree Wavelet): http://www.mathworks.com/matlabcentral/fileexchange/19296-ezw embeddedzerotree-wavelethttp://www.mathworks.com/help/wavelet/ref/dwt2.html [...]... Tiến hành thử nghiệm - Ảnh gốc - Thực hiện biến đổi với filter db4 4 - Thực hiện biến đổi với filter db8 - Thực hiện biến đổi với filter db10 Đánh giá, nhận xét Phép biến đổi Wavelet không chia khối như phép biến đổi DCT mà là phép biến đổi mã hóa băng con nên các thành phần sẽ được chia thành các băng tần số khác nhau và mỗi băng sẽ được mã hóa riêng rẽ như vậy ảnh sẽ được nén với tỉ số cao mà không... trên ảnh khi tín hiệu được biểu diễn bởi B bits trên một đơn vị lấy mẫu, MAXI = 2^B−1 Với ảnh màu RGB, MSE là tổng của 3 giá trị màu đó chia cho kích thước của ảnh và chia cho 3 Trong nén ảnh có mất mát, PSNR trong khoảng 30-50dB, giá trị càng cao càng tốt Giá trị có thể chấp nhận được khi truyền tín hiệu không dây có tổn thất khoảng từ 20 dB đến 25 dB 2 Cài đặt thuật toán Dựa trên sơ đồ biến đổi trên. .. hóa với ảnh sau khi lượng tử với đoạn code: init_threshold = pow2(floor(log2(max(max(abs(img_wave_quantized)))))); [img_enc_significance_map, img_enc_refinement] = func_ezw_enc2(img_wave_quantized, maxloop); [img_ezw_stream_bit] = testhuff(img_enc_significance_map, img_enc_refinement,maxloop); - Sau khi thực hiện các phép biến đổi trên, ta thu được ảnh sau khi mã hóa, thực hiện các phép biến đổi ngược... với công thức : hệ số Wavelet tại vị trí , băng tần con : hàm lấy dấu : hệ số Wavelet sau khi lượng tử hóa thành số nguyên : bước lượng tử hóa, thay đổi theo từng băng tần con của bộ lọc Wavelet: : nominal dynamic range của băng tần con , bằng tổng số bit ban đầu biểu diễn một pixel ảnh và độ tăng ích của bộ lọc tại băng tần con này : số bit biểu diễn phần mũ (exponent) của hệ số Wavelet : số bit biểu... thuật toán cần thiết trên matlab o Chạy thuật toán với các thông số khác nhau o Đo các thông số của output để so sánh Các thông số cần đo o PSNR – Tỉ số tín hiệu cực đại trên nhiễu: : là tỉ lệ giữa giá trị năng lượng tối đa của một tín hiệu gốc và năng lượng nhiễu (các lỗi khi nén có mất mát dữ liệu) o PSNR được tính thông qua MSE:dung cho ảnh kích thước mxn trong đó I là ảnh gốc, K là ảnh khôi phục: Khi... func_InvDWT(img_wave_rev_quantized,S,Lo_R,Hi_R,level); img_reconstructed = uint8(img_reconstructed); f Thực hiện xử lý sau biến đổi để được ảnh đầu ra: sum = 0; for i=1:size_row for j=1:size_col sum = sum + (double(img_reconstructed(i,j)-img(i,j)))^2; end; end; g Đo lường các thông số sau biến đổi - Ta thực hiện tính MSE và PSNR như công thức đã đưa ở trên với đoạn code: im = imread('lena256.bmp'); im=im2double(im); im1= imread('lena256.jp2');... Thêm 16 nếu là P và – 16 nếu là N Các giá trị 0 thì không thêm gì Bước 2: Ngưỡng ở P2 vẫn là 16 Ngưỡng ở S2 giảm 1 nửa còn lại 8 Cứ tiếp tục như vậy đến khi ta giải mã xong Về cơ bản thì giải mã thực hiện ngược lại của mã hóa III 1 Xây dựng, cài đặt thử nghiệm thuật toán nén ảnh JPEG2000 Chuẩn bị - Phần mềm Matlab R2015b Ảnh nguồn: lena256.bmp với kích thước 256x256 pixel 1 Kịch bản và tiến hành thử... Thực hiện biến đổi giải mã hóa EZW img_dec_significance_map = img_enc_significance_map; img_dec_refinement = img_enc_refinement; img_wave_dec = func_ezw_dec(size_row, init_threshold, img_dec_significance_map, img_dec_refinement); d Biến đổi giải lượng tử hóa: - Thực hiện với đoạn code matlab: g = 0.5; img_wave_rev_quantized = sign(img_wave_dec).*(abs(img_wave_dec)+ g) *d; e Thực hiện biến đổi ngược... dB 2 Cài đặt thuật toán Dựa trên sơ đồ biến đổi trên phần lý thuyết, ta thực hiện cài đặt thuật toán theo sơ đồ a Biến đổi thuận liên thành phần - Ta sử dụng biến đổi DWT – SPIHT Sử dụng bộ lọc Wavelet filters do Matlab cung cấp, ta lấy các thông số bộ lọc thông thấp, thông cao cho phân rã và thông số thông thấp thông cao cho tái cấu trúc từ câu lệnh trong matlab: [Lo_D,Hi_D,Lo_R,Hi_R] = wfilters(wname);... thông thấp o Hi_R: tái cấu trúc thông cao Tiến hành biến đổi DWT [img_wave,S] = func_DWT(img,level,Lo_D,Hi_D); - Trong đó hàm func_DWT sẽ thực hiện phân tách ảnh ra thành nhiều dải tần số gọi là các subband Mỗi mức DWT sẽ được tác động 2 lần : một lần duyệt theo chiều ngang và một lần duyệt theo chiều dọc và do đó ta thu được bốn dải Tương ứng code trên Matlab, ta có: function [I_W , S] = func_DWT(I,

Ngày đăng: 08/06/2016, 23:56

Từ khóa liên quan

Mục lục

  • 3.1 Xử lý trước khi biến đổi ( preprocessing)

  • 3.2 Biến đổi liên thành phần (Intercomponent transform)

  • 3.3 Biến đổi riêng thành phần (Intracomponent transform) – biến đổi Wavalet.

  • 3.4 Lượng tử hóa

  • 3.5 Mã hóa tầng thứ nhất (Tier-1 encoder)

  • 3.6 Mã hóa tầng thứ 2 (Tier-2 encoder)

  • 1 Ví dụ về EZW

    • a. Mã hóa

    • b. Giải Mã

    • 1 Chuẩn bị

    • 1. Kịch bản và tiến hành thử nghiệm

    • 2. Cài đặt thuật toán

    • b. Lượng tử hóa

    • c. Mã hóa, thực hiện biến đổi EZW

    • Xây dựng hàm giải mã EZW:

    • d. Biến đổi giải lượng tử hóa:

    • e. Thực hiện biến đổi ngược thành phần

    • f. Thực hiện xử lý sau biến đổi để được ảnh đầu ra:

    • g. Đo lường các thông số sau biến đổi

    • Ta thực hiện tính MSE và PSNR như công thức đã đưa ở trên với đoạn code:

      • 3. Tiến hành thử nghiệm

      • 4. Đánh giá, nhận xét

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

Tài liệu liên quan