Thiết kế khối lƣợng tử trong chuẩn nén ảnh JPEG2000 trên bo mạch FPGA

pdf 7 trang phuongnguyen 140
Bạn đang xem tài liệu "Thiết kế khối lƣợng tử trong chuẩn nén ảnh JPEG2000 trên bo mạch FPGA", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfthiet_ke_khoi_long_tu_trong_chuan_nen_anh_jpeg2000_tren_bo_m.pdf

Nội dung text: Thiết kế khối lƣợng tử trong chuẩn nén ảnh JPEG2000 trên bo mạch FPGA

  1. THIẾT KẾ KHỐI LƢỢNG TỬ TRONG CHUẨN NÉN ẢNH JPEG2000 TRÊN BO MẠCH FPGA IMPLEMENT HARDWARE THE QUANTIZATION OF THE JPEG2000 Encoder ON FPGA. Bạch Tuấn Đồng1,2, Nguyễn Minh Khánh Ngọc2, Nguyễn Bá Tuyển1, Lê Mỹ Hà1 1Trường đại học Sư phạm kỹ thuật TP. Hồ Chí Minh 2Trung tâm Nghiên cứu và Đào tạo Thiết kế Vi mạch thuộc Đại Học Quốc Gia TP. Hồ Chí Minh TÓM TẮT Lượng tử là một phần quan trọng cần thiết trong chuẩn nén ảnh JPEG2000. Quá trình lượng tử làm giảm số bit cần biểu diễn trong tất cả các sub-band. Trong bài báo này đã tìm 2 giá trị mantissa và exponent để cho kết quả nén hình ảnh tốt nhất cho từng mức biến đổi FDWT trong chuẩn nén ảnh JPGE2000. Mặt khác trong bài báo hỗ trợ chia hình ảnh ra dưới dạng code-block có kích thước 16x16, 32x32, 64x64. Quá trình chia code-block hỗ trợ thực hiện mã hóa tier 2 hiệu quả trong chế độ thực hiện thời gian thực. Thực nghiệm hóa hệ thống trên bảng mạch FPGA là một bước cần thiết để minh chứng cho hiệu quả của phương pháp đề xuất. Kiểm tra thiết kế sử dụng matlab, Modelsim VCS và Quartus II. Từ khóa: Lượng tử hóa, FDWT, JPEG2000, bước nhảy, sub-band, ROI. ABSTRACT In the standard of JPEG2000 for image compression, the quantization lossy computing all sub-band. In this paper, we find coefficient mantissa and exponent for computing stepsize the 8bit, 16bit image. Coefficient mantissa is proposed to processing reducing data of the JPEG2000 image compression standard. Method supports data divide image to code-block size,16x16,32x32, 64x64. The process separates code-block support implementation tier-2 encoded high perform real-time. The experiment is implemented on the FPGA to demonstrate the effectiveness of this proposed method. The quantization is implemented success on hardware system, tested by using Matlab, Model and simulated on Modelsim,VCS tools and Quartus II tools. Keywords: Quantization, FDWT, JPEG2000, stepsize, sub-band, ROI. ratio) là vô cùng. Đây là một điểm mạnh của 1. GIỚI THIỆU LƢỢNG TỬ HÓA nén ảnh theo chuẩn JPEG2000 so với JPEG TRONG CHUẨN JPEG2000 Sau quá trình biến đổi wavelet rời rạc, Công thức biến đổi bước nhảy lượng tử [1] tất cả các sub-band được lượng tử trong chế Rbb  b độ nén tổn hao nhằm làm giảm độ chính xác 2 (1 11 ) của các sub-band, qua đó giảm được số bit 2 (1) cần biểu diễn. Lượng tử hóa các sub-band R b độ sâu của bit ảnh. DWT là một trong những nguồn gây tổn hao trong hệ thống nén ảnh JPEG2000. Nén mất b có giá trị được biểu diễn 11bits. dữ liệu (lossy) sẽ cho tỷ lệ nén cao nhưng  đồng thời cũng làm giảm chất lượng của ảnh b có giá trị được biểu diễn 5 bits được phục hồi bởi lượng thông tin đã bị mất. Sau khi dữ liệu được lượng tử thì tiến nén không mất dữ liệu (lossless) trong quá hành chia thành từng code-block nhỏ. Trong trình nén không tổn hao hình ảnh sau khi thiết kế hỗ trợ code-block 16x16, 32x32 và phục hồi có PSNR (peak signal-to-noise 64x64 pixel. 1
  2. Hình 1 Là sơ đồ hệ thống nén ảnh chuẩn Trong Bảng 3 cung cấp những giá trị JPEG2000. mantissa và exponent cần thiết để thực hiện phép toán trong công thức (1). Trong đó Sink 5 FDWT Quantization MCT Tiling mantissa là 5 bits nên có 2 giá trị lựa chọn 11 và exponent là 11 bits nên có 2 giá trị lựa chọn, việc lấy 2 giá trị này cho phù hợp từng Quantization_buff ROI level là một điều khó khăn, sau nhiều quá trình thực nghiệm bài báo đã tìm ra được những giá trị mantissa và exponent phù hợp cho từng level được thể hiện trong Bảng 3. Source Shift down back Tier 2 Tier 1 Rate Control Giá trị này cho kết quả nén ảnh JPEG2000 ground đạt kết quả tốt nhất trên phần cứng bo mạch - FPGA. Hình 1. Sơ đồ khối hệ thống JPEG2000 Trong trường hợp nén không tổn hao thì 2. GIẢI PHÁP THIẾT KẾ PHẦN dữ liệu đi qua khối lượng tử (quantization) CỨNG dữ nguyên so với đầu vào. Quá trình sắp xếp 2.1 Thiết kế khối lƣợng tử và đệm lại dữ liệu trong khối “quantization_buff” thì vẫn giống như nén Công thức tính độ sau của ảnh [1] có tổn hao. Rb R Ilog2 ( gain b ) (2) Bảng 3. Giá trị mantissa và exponent Trong đó giá trị log (gain ) 2 b Mantissa Mantissa Exponent level Có giá trị trong Bảng 1 R=I 8 RI = 16 Bảng 1. Giá trị gainb 14 22 1824 Level 5 14 22 1776 Sub-band gainb log2b (gain ) 14 22 1776 Level LL 1 0 14 22 1728 Level LH 2 1 13 21 1824 Level 4 Level HL 2 1 13 21 1792 Level HH 4 2 13 21 1792 Trong bảng trên thì ta thấy giá trị 13 21 1760 12 20 1848 Level 3 log2 (gainb ) của sub-band chỉ thay đổi trong một level. Trong các level khác nhau thì quy 12 20 1872 luật này vẫn đúng theo Bảng 1. Giá trị trong 12 20 1872 Bảng 2 là giá trị RR, . 12 20 1896 bI 11 19 1874 Level 2 10 18 5 Bảng 2. giá trị R I 10 18 5 10 18 71 Sub-band RI log2b (gain ) Rb 9 17 36 Level 1 LL 8 0 8 10 18 2003 LH 8 1 9 10 18 2003 HL 8 1 9 10 18 1890 HH 8 2 10 Phương pháp dùng trong lượng tử là LL 16 0 16 uniform scalar lượng tử có công thức như LH 16 1 17 sau[1]: HL 16 1 17 HH 16 2 18 2
  3. y(,). i j W i LL_0 10'b00000_00000 LH_0 b 10'b00000_00001 HL_0 10'b00001_00000 q i,, j sign y i j HH_0 10'b00001_00001 LL_1 bb 10'b00001_00011 LH_1 10'b00011_00001 HL_1 10'b00011_00011 HH_1 10'b00011_00111 step_size_reg (3) LL_2 D Q 10'b00111_00011 LH_2 10'b00111_00111: HL_2 HH_2 10'b00111_01111 10'b01111_00111 Trong đó y i, j là hệ số của wavelet LL_3 b 10'b01111_01111 LH_3 10'b01111_11111 HL_4 E HH_4 10'b11111_01111 trong sub-band. 10'b11111_11111 là bước nhảy lượng tử trong phương trình (1) được xác định dựa vào các giá trị {row_in, column_in} data_valid_in ,,R để xác định bước nhảy lượng tử ready_in b b b Hình 3. Bộ giải mã bước nhảy lượng tử hóa column_in cb_out Quá trình giải mã để chọn bước nhảy row_in data_out cho phù hợp với mỗi level. Để quá trình giải data_valid_in Data vào Mã hóa Bộ nhân Bộ làm tròn Quantization_buff row_out mã cần dựa vào hàng và cột trong khối data_in column_out FDWT. Giải mã bước nhảy lượng tử tương ready_out ứng trong Hình 3. Ta thấy trong Hình 4 Ready_in row_in = 0, column_in = 0 thì bước nhảy Quantization lượng tử là 4260. Những giá trị bước nhảy Hình 2. Sơ đồ khối thực hiện lượng tử hóa lấy từ Bảng 4. Trong quá trình lượng tử phải thực hiện phép chia với bước nhảy trong từng sub-band. Trong thiết kế phần cứng việc thực hiện phép chia là rất phức tạp do phải sử dụng dấu chấm động nên tốn nhiều tài nguyên hệ thống, Để khắc phục vấn đề này trong bài báo thay vì thực hiện phép chia thì Hình 4. Giải mã tìm bước nhảy lượng tử nhân nghịch đảo với với 8192, Kết quả phép nhân phải dịch lại 13 bit và làm tròn theo Ảnh GRAY (mức xám) biểu diễn 16-bit giải thuật “Banker's rounding”. Ví dụ hàm nén tổn hao. Quá trình lượng tử sẽ tràn bit “Banker's rounding” làm tròn như sau: trong level 4, 5 vì thực hiện phép chia. Để giải quyết vấn đề này chúng tôi đã tăng số 2.5 làm tròn thành 2, với giá trị là 3.5 làm bit cần biểu diễn dữ liệu lên tới 34-bit thay vì tròn thành 4. Ngoài ra các giá trị sau dấu dùng 32-bit như ảnh GRAY 8-bit và ảnh chấm lớn hơn 0.5 được làm tròn thành 1 và GRAY 16-bit nhưng level nhỏ hơn 4, đồng nhỏ hơn 0.5 được làm tròn về 0. thời thiết kế một khối tách dữ liệu và một Bảng 4 đã nhân nghịch đảo với với 8192. khối gộp dữ liệu lại sơ đồ xem trong Hình 5. Vì dữ liệu ghi/đọc trong RAM chứa tối đa Bảng 4. Giá trị bước nhảy lượng tử 32-bit để biểu diễn 1 dữ liệu, Nếu nhiều hơn thì tách ra một dữ liệu thành 2 dữ liệu có độ LEVEL LL LH, HL HH rộng bus nhỏ hơn hoặc bằng 32-bit. LEVEL=1 16100 8282 4260 LEVEL=2 34221 16344 7917 LEVEL=3 68900 34239 17015 LEVEL=4 138654 69905 35246 LEVEL=5 277309 280790 284359 in_one_out_two quantization in_two_out_one Hình 5. Thiết kế khối lượng tử khi GRAY 16 pixel level 4, 5 3
  4. Trong thiết kế khối lượng tử cần phải Hình 8. Quy ước đặt vị trí code-block trong tuân thủ theo chuẩn Avalon Streaming. một sub-band Chuẩn này được quy định trong Hình 6, Chiều dài là 96 Chiều rộng là 64 Hình 7. Chiều dài code block là 32 Chiều rộng code block 32 clk 0 31 63 95 data_in -1 2 7 0 1 0 4 6 7 Full code blcok Sink data_valid_in Full code blcok Full code blcok row_in 1 0 1 0 1 2976 3007 3039 3071 column_in 0 1 0 1 0 1 3072 3104 3136 3167 ready_out Invalid Valid Hình 6. Giản đồ thời gian đầu vào khối Full code blcok Full code blcok Full code blcok lượng tử 6048 6079 6111 6143 clk Hình 9. Vị trí bắt đầu và kết thúc một Source data_in -1 18 7 0 17 28 4 6 7 code-block trong sub-band data_valid_out Trong Hình 9 là một ví dụ một sub-band row_out 1 0 1 0 1 có chiều dài 96 pixel, chiều rộng 64 pixel và column_out 0 1 0 1 0 1 chiều dài, rộng code-block là 32 pixel. Vị trí sub-band này lưu trong RAM được tính toán ready_in trước những vị trí đầy của mỗi code-block. Invalid Valid Hình 7. Giản đồ thời gian đầu ra khối lượng Khi ghi vào RAM thì tuần tự từ thấp tử đến cao. Khi đọc ra thì đọc từng code-block, đọc code-block nhỏ đến 2.2 Thiết kế khối lƣợng tử đệm code-block lớn hơn, xem Hình 10. Cần phải Khối “quantization_buff” dùng để sắp tính toán được những vị trí mà code-block xếp data theo từng vùng tần số riêng biệt đầy để đọc ra. Nhưng nếu trong quá trình tương ứng với từng sub-band khác nhau. đó mà chưa đọc được thì chúng ta lại tiếp Tiếp theo là đọc ra theo từng code-block. tục ghi vào, ghi đến khi nào đầy 2 band (có Dữ liệu được lưu trữ trong bộ nhớ. Khi đầy kích thức 2 lần chiều cao code-block) thì một code-block thì đọc dữ liệu ra. Cách không được ghi nữa mà chờ đọc ra, để giải thức quy định vị trí code-block thể hiện phóng bộ nhớ để tiếp tục ghi vào. Việc này trong Hình 8 được điều khiển bằng cách hạ ready_out xuống khi nào đọc xong lại bật ready_out 0 1 4 5 16 17 18 19 lên tiến hành reset hết địa chỉ đọc và địa chỉ 6 7 21 22 23 ghi tiến hành lại từ đầu. 2 3 20 8 9 12 13 24 25 27 2.3 Mức độ ƣu tiên của quá trình đọc ra 26 10 11 14 15 28 29 31 Trong trường hợp có nhiều vùng RAM 30 4 đã chứa đầy dữ liệu thì quá trình ưu tiên đọc 35 32 33 34 48 49 50 51 ra theo cách sau. Mức ưu tiên cao nhất là đọc 36 37 38 39 52 53 54 55 code-block đang thực hiện. duy trì trạng thái đọc dữ liệu trong code-block xong thì mới 40 41 42 43 56 57 58 59 code-block khác. Thứ 2 là nếu nhiều 44 45 46 47 60 61 62 63 code-block ở các sub-band khác nhau đang ở trạng thái đầy thì ưu tiên code-block ở vị 4
  5. trí sub-band nhỏ nhất trước minh họa Hình 3. KẾT LUẬN 10 Trong bài báo này đã hỗ trợ lượng tử trong 2 chuẩn là nén tổn hao và không tổn Code-block full hao. Trong quá trình không tổn hao thì kết Code-block full quả hình ảnh nén có PSNR là inf (vô cùng). Sub-band=3 Sub-band=2 Code-block full Code-block full Sub-band=1 Sub-band=0 Ưu tiên đọc trước Hình 10. Vùng dữ liệu ưu tiên đọc trước Hình 12. Nén không tổn hao Kiến trúc khối lượng tử đệm giao tiếp Lượng tử không tổn hao được tổng hơp với DDR theo chuẩn Avalon Streaming kiến trong Bảng 5 trúc được thể hiện trong Hình 11. Memorry Bảng 5. Kết quả nén không tổn hao out _ out , _ out Module memorry _ writedata out mem address _ _ mem write _ mem Kích level Dung Dung PSNR _ read mem _ _ _ _ in icdrec_jpeg2000_ready_AMM_slave in in , address writedata write thƣớc lƣợng lƣợng hình đầu sau ready_in icdrec_jpeg2000_AMM_slave 128x 1 48.1KB 25.2 inf readdatavalid readdata waitrequest out _ 128 KB out _ out out _ _ _ out write writedata read address _ 128x 2 48.1KB 24.4 Inf out , , _ out , , 128 KB 256x 3 192.1KB 141.2 Inf icdrec_jpeg2000_quantization_buff_AMM 256 KB _master 512x 4 768.1KB 352.6 Inf Module Quantization_buff in _ in 512 KB _ out in _ _ out _ out out _ _ 1024x 5 3.0 MB 812.7 inf readdata readdatavalid read waitrequest writedata address write 1024 KB icdrec_jpeg2000_quantization_buff_AMM _master Trong trường hợp nén tổn hao thì kết quả PSNR khá cao hơn hơn 40 nên mắt in _ in _ out in _ người không phân biệt được. Thông thường _ out _ out out _ _ Đầu ra của khối readdata readdatavalid read waitrequest writedata address write thì mắt con người không phân biệt được quantzation_buff ready_in data_valid_out hình nén và hình gốc nếu hình nén có chỉ số data_out DATA_WIDTH Đầu vào của khối row_subband_out PSNR lớn hơn 37. quantzation_buff cb_out BIT_CB row_code_block_out data_valid_in DATA_WIDT data_in H icdrec_jpeg2000enc_quantization_buff data_valid_in[I] ready_tier_in sub_band_in 4 priority_read_in[I] no_read_in Ready_out write_full_out[I] ready_out[I] icdrec_jpeg2000enc_q uantization_buff_read read_full_out[I] _write[I] start_read_out[I] ddr_rw_out[I] write_req_out[I] read_req_out[I] ] I [ out _ full _ 4 write icdrec_jpeg2000enc_quantization_division _ffo_15_0 Hình 13. Nén có tổn hao Hình 11. Sơ đồ kết nối khối lượng tử đệm với RAM ngoài 5
  6. Bảng 6. Nén tổn hao tài mã số KC.01.13/11-15. Tôi xin gửi lời cảm ơn chân thành đến Bộ Khoa học và Kích level Dung Dung PSNR Công nghệ, Văn phòng các chương trình thƣớc lƣợng lƣợng trọng điểm cấp Nhà nước, Ban Chương trình hình trƣớc sau KC.01 đã đầu tư kinh phí cho đề tài. 128x 1 48.1K 20.2KB 51.54 128 B Tôi cũng gửi lời cảm ơn chân thành đến 128x 2 48.1K 19.2KB 51.73 Trung Tâm Nghiên Cứu và Đào Tạo Thiết 128 B Kế Vi Mạch (ICDREC), các đồng nghiệp 256x 3 192.1 118.7KB 51.63 đã giúp đỡ nhiệt tình để tôi có cơ hội tham 256 KB gia đề tài này. 512x 4 768.1 245.6KB 51.91 512 KB 1024x 5 3.0 812.7KB 51.75 1024 MB LỜI CẢM ƠN Em biết ơn cơ quan ICDREC đã cấp kinh phí cho em nghiên cứu và có thành quả ngày hôm nay. Bài báo là thành quả của đề TÀI LIỆU THAM KHẢO [1] ISO/IEC 15444-1, Information Technology-JPEG2000 Image Coding System, Part 1: Core Coding System., 2000. [2] TinkuAcharya and Ping-Sing Tai, “JPEG2000 Standard for Image Compression”:, Concepts, Algorithms and VLSI Architectures, New Jersey, U.S.A, 2005 [3] Bach Tuan Dong, Ngo Thanh Dong, Nguyen Tuan Phuoc, Le My Ha “decreasing capacity of JPEG2000 standard image on fpga board”the 2nd international conference on green technology and sustainable development 2014. Ho Chi Minh City October.2014 pp.49-54. [4] Balster, E.J. Dept. of Electr. & Comput. Eng., Univ. of Dayton, Dayton, OH, USA Fortener, B.T. ; Turri, W.F. "Integer computation of JPEG2000 wavelet transform and quantization for lossy compression" IEEE Conference July 2010 pp 495-500 [5] Han oi', Ali Bilgin':', and Michael W Marcellin l 'Department ofElectrical and Computer Engineering, 2Biomedical Engineering The University of Arizona, Tucson, AZ, 85721, USA “Visibility thresholds for quantization distortion in JPEG2000” IEEE Conference July 2009 PP 228 - 232 Thông tin liên hệ tác giả chính (người chịu trách nhiệm bài viết): Họ tên: Bạch Tuấn Đồng Đơn vị: Học viên cao học, ngành kỹ thuật điện tử 2013B, khoa Điện – Điện tử Trƣờng Đại Học Sƣ Phạm Kỹ Thuật HCM, Trung tâm Nghiên cứu và Đào tạo Thiết kế Vi mạch (ICDREC). Điện thoại: 098999400 Email: tuandongvt@gmail.com Chuyên ngành nghiên cứu: Xử lý ảnh, DSP 6
  7. BÀI BÁO KHOA HỌC THỰC HIỆN CÔNG BỐ THEO QUY CHẾ ĐÀO TẠO THẠC SỸ Bài báo khoa học của học viên có xác nhận và đề xuất cho đăng của Giảng viên hướng dẫn Bản tiếng Việt ©, TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HỒ CHÍ MINH và TÁC GIẢ Bản quyền tác phẩm đã được bảo hộ bởi Luật xuất bản và Luật Sở hữu trí tuệ Việt Nam. Nghiêm cấm mọi hình thức xuất bản, sao chụp, phát tán nội dung khi chưa có sự đồng ý của tác giả và Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh. ĐỂ CÓ BÀI BÁO KHOA HỌC TỐT, CẦN CHUNG TAY BẢO VỆ TÁC QUYỀN! Thực hiện theo MTCL & KHTHMTCL Năm học 2016-2017 của Thư viện Trường Đại học Sư phạm Kỹ thuật Tp. Hồ Chí Minh.