NÉN ẢNH số DÙNG DCT (có code bên dưới) ............................................ NÉN ẢNH số DÙNG DCT (có code bên dưới) ............................................ NÉN ẢNH số DÙNG DCT (có code bên dưới) ............................................ NÉN ẢNH số DÙNG DCT (có code bên dưới) ............................................ NÉN ẢNH số DÙNG DCT (có code bên dưới) ............................................ NÉN ẢNH số DÙNG DCT (có code bên dưới) ............................................
ĐỒ ÁN NÉN ẢNH SỐ DÙNG DCT MỤC LỤC DANH MỤC CÁC HÌNH VẼ HÌNH 2-1: HÌNH MINH HỌA MA TRẬN 8x8.[2] HÌNH 2-2: SƠ ĐỒ KHỐI CỦA NÉN VÀ GIẢI NÉN JPEG DỰA VÀO DCT HÌNH 4-1: THIẾT KẾ GUIDE CHO NÉN ẢNH HÌNH 4-2: ẢNH SAU KHI ĐƯỢC NÉN HÌNH 4-3: BẢNG PHÂN TÍCH HÌNH ẢNH SAU KHI NÉN BẰNG DCT DANH MỤC CÁC TỪ VIẾT TẮT RGB Red Green Blue DCT Discrete cosine Transform JPEG Joint Photographic Experts Group ĐỒ ÁN Trang 4/21 CHƯƠNG TỔNG QUAN VỀ ẢNH SỐ 1.1 Ảnh số • Điểm ảnh: phần tử ảnh số tọa độ (x,y), với độ xám độ màu định • Mức xám: kết qủa mã hóa tương ứng, với cường độ sáng điểm ảnh ứng với giá trị số trình lượng hóa • Ảnh RGB: Ảnh dự trữ Matlab dạng mạng liệu có kích thước chiều mxnx3, định nghĩa với giá trị màu Red, màu Green màu Blue cho điểm ảnh riêng biệt Màu điểm ảnh định kết hợp giá trị Red, Green, Blue Được lưu trữ mặt phẳng màu vị trí điểm ảnh Hình 1-1: Ảnh RGB.[1] Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 5/21 • Ảnh nhị phân: Trong ảnh nhị phân, ứng điểm ảnh chứa hai giá trị nhị phân Hai giá trị tương ứng với bật tắt, ảnh nhị phân lưu trữ dạng mảng logic Hình 1-2: Ảnh nhị phân.[1] 1.2 Nén Ảnh • Nén ảnh cơng nghệ nhằm mã hóa loại ảnh kỹ thuật số để làm giảm số bít biểu diễn ảnh giúp làm giảm nhớ giá trị truyền ảnh • Nén liệu ảnh biến đổi dòng thơng tin từ ảnh thành đoạn mã, nhằm giảm độ dư thừa thông tin (không gian thời gian, độ dư thừa phổ độ dư thừa độ cảm thụ) • Dung lượng thơng tin bao gồm: lưu trữ truyền (tốc độ dòng bít) • Lượng thơng tin thu sau nén thường nhỏ liệu gốc • Tính hiệu dựa trên: chi phí thời gian, khơng gian độ phức tạp tính tốn 1.3 Giới thiệu sử dụng Matlab xử lý ảnh Matlab ngôn ngữ mạnh, hỗ trợ tốt thao tác kỹ thuật làm việc ảnh Vì việc sử dụng Matlab cho ứng dụng xử lý ảnh lựa chọn hàng đầu cho việc thực thuật toán xử lý phần mềm Một số hàm Matlab dùng cho xử lý ảnh: Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 6/21 Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 7/21 CHƯƠNG MIÊU TẢ ĐỀ TÀI NÉN ẢNH SỐ DÙNG DCT 1.4 Giới thiệu nén ảnh Cùng với phát triển rộng khắp mạng máy tính nhu cầu sử dụng mạng tăng cao Điều dẫn tới việc liệu truyền tải qua mạng lớn, đa phần liệu truyền tải mạng máy tính thuộc loại sau: ảnh, ký tự, loại media… Việc hàng ngày số lượng liệu lớn luân chuyển liên tục mạng tạo nên hoạt động truyền tải, sử dụng, tái sử dụng nhiều thuật toán phát minh sử dụng để nén mã hóa ảnh liệu sử dụng nhiều mạng máy tính Một số phương pháp dùng để nén ảnh như: • Phương pháp biến đổi DCT: biến đối cosin rời rạc thường sử dụng dạng ảnh chuẩn JPEG • Phương pháp biến đổi DFT, biến đổi Furier khắc phục số nhược điểm biến đổi ảnh sử dụng phương pháp DCT Tính chất chung tất ảnh số tương quan điểm ảnh cạnh lớn, điều dẫn đến dư thừa thong tin để biểu diễn ảnh Thông tin dư thừa làm cho việc mã hóa khơng tối ưu Do cơng việc cần làm để nén ảnh phải tìm biểu diến ảnh có tương quan nhỏ để giảm thiểu độ dư thừa thông tin ảnh Có hai kiểu dư thừa thơng tin: • Dư thừa miền khơng gian: Đó tương quan giá trị điểm ảnh ảnh Điều có nghĩa điểm ảnh lân cận ảnh có giá trị gần giống • Dư thừa miền tần số: Sự tương quan mặt phẳng màu dải phổ khác Trọng tâm nghiên cứu nén ảnh, tìm cách giảm số bit cần để biểu diễn ảnh cách loại bỏ dư thừa, miền không gian miền tần nhiều tốt Trong số thuật tốn biến đổi ảnh để mã hóa nén có hai dạng: Không liệu ảnh liệu ảnh 1.5 Biến đổi cosine rời rạc DCT Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 8/21 Biến đổi cosine rời rạc (DCT) biểu diễn ảnh dạng tổng cosine thành phần biên độ tần số khác ảnh Hàm dct2 tính DCT hai chiều ảnh số DCT thường sử dụng ứng dụng nén ảnh nhờ hiệu suất làm việc tối ưu ảnh có độ tương quan với điểm ảnh lân cận DCT giải thuật nén ảnh theo chuẩn quốc tế thường biết với tên JPEG DCT hai chiều ma trận A có kích thước mxn định nghĩa : M −1 N −1 B pq = α pα q ∑ ∑ Amn cos m =0 n =0 ≤ p ≤ M −1 π (2m + 1) p π (2n + 1) q cos 2M 2N với ≤ q ≤ N − 1/ M 1/ N p=0 q=0 αp = αq = (2 / M ) ≤ p ≤ M − (2 / N ) ≤ q ≤ N − Trong đó: Các giá trị Bpq gọi hệ số biến đổi DCT Nó biến đổi ngược biến đổi ngược cho cơng thức sau: M −1 N −1 Amn = ∑ ∑ α pα q B pq cos p = q =0 ≤ m ≤ M −1 π (2m + 1) p π (2n + 1)q cos 2M 2N với ≤ n ≤ N − 1/ M 1/ N p=0 q=0 αp = αq = (2 / M ) ≤ p ≤ M − (2 / N ) ≤ q ≤ N − Trong đó: Biểu thức DCT ngược xem xét coi ma trận A kích thước mxn tổng mn hàm có dạng : α pα q B pq cos π (2m + 1) p π (2n + 1)q cos 2M 2N Những hàm đựơc gọi hàm sở giải thuật DCT Hệ số DCT Bpq xem trọng số cho hàm sở Với ma trận 8x8, 64 hàm sở minh hoạ ảnh sau: Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 9/21 Hình 2-1: Hình minh họa ma trận 8x8.[2] 2.3.2 Nguyên lý nén ảnh dựa vào DCT Giải thuật nén có tổn hao biết đến nhiều giải thuật dùng DCT chuẩn JPEG sử dụng để mã hoá ảnh đa mức xám, ảnh màu Tuy khơng cho kết ổn định với ảnh đen trắng Chuẩn JPEG cung cấp giải thuật cho hai loại nén nén không thông tin nén thông tin Sơ đồ khối giải thuật nén, giải nén ảnh JPEG dựa vào DCT: Hình 2-2: Sơ đồ khối nén giải nén ảnh JPEG dựa vào DCT.[3] Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 10/21 a Phân khối Chuẩn nén JPEG phân ảnh khối 8x8.Công đoạn biến đổi Cosin hai chiều cho khối 8x8 tỏ hiệu Biến đổi Cosin cho khối có kích cỡ giảm phần tính tốn tính hệ số C ji Khi n=8 cần tính hệ số Cji cho tầng (8= 23), số hệ số là: + + = Nến với ảnh 1024x1024, phép biến đổi nhanh Cosin chiều theo hàng ngang hàng dọc ta phải qua 10 tầng (1024 = 210) Số hệ số Cji là: 512 + 256 + 128 + 64 + 32 + 16 + + + + = 1021 Thời gian tính hệ số C ji với toàn ảnh 1024x1024 lớn gấp 150 lần so với thời gian tính tốn hệ số cho khối Biến đổi Cosin khối có kích thước nhỏ làm tăng độ xác tính tốn với số dấu phẩy tĩnh, giảm thiểu sai số làm tròn sinh Do điểm ảnh kề cận có độ tương quan cao, nên phép biến đổi Cosin cho khối nhỏ tập trung lượng vào số hệ số biến đổi Việc loại bớt số hệ số lượng thấp khối tạo mát thông tin cục nhằm giúp nâng cao chất lượng ảnh Ảnh chia làm B khối với: M ' N' × = M B × NB k l B= b Biến đổi Biến đổi công đoạn lớn phương pháp nén sử dụng phép biến đổi Nhiệm vụ công đoạn biến đổi tập trung lượng vào số hệ số biến đổi Công thức biến đổi cho khối là: Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 11/21 X (k1 , k ) = ε k1 ε k1ε k 7 (2n1 + 1)k Π (2n + 1)k Π Cos ∑ ∑ x(n1 , n )Cos n1=0 n 2=0 16 16 = k1 = (0 < k1 < 8) εk2 = khi Trong k2 = (0 < k < 8) Thuật toán biến đổi nhanh Cosin hai chiều cho khối trường hợp gồm 16 phép biến đổi nhanh Cosin chiều Đầu tiên, người ta biến đổi nhanh Cosin chiều cho dãy điểm ảnh hàng, thực cho hàng Sau đem biến đổi nhanh Cosin chiều theo cột ma trận vừa thu sau phép biến đổi trên, thực cho cột Ma trận cuối ma trận hệ số biến đổi khối tương ứng c Lượng tử hóa Khối lượng tử hố sơ đồ nén đóng vai trò quan trọng, định tỉ lệ nén chuẩn nén JPEG Đầu vào khối lượng tử hoá ma trận hệ số biến đổi Cosin khối điểm ảnh Để giảm số lượng tử, ta quy hệ số khối khoảng phân bố Chuẩn nén JPEG sử dụng lượng tử hoá Giả sử hệ số có hàm tính xác suất xuất Chúng ta chỉnh lại hệ số y j phép gán: yj = Với yj −µj σj µj trung bình cộng hệ số thứ j σj độ lệch hệ số thứ j d Nén Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 12/21 Đầu vào khối nén gồm có hai thành phần khác nhau: thành phần hệ số chiều hệ số xoay chiều Để nâng cao hiệu nén cho hệ số khối người ta xếp lại chúng theo thứ tự ZigZag Có thể hình dung hình ZigZag bảng trang sau 10 20 21 35 11 19 22 34 36 12 18 23 33 37 48 13 17 24 32 38 47 49 14 16 25 31 39 46 50 57 15 26 30 40 45 51 56 58 27 29 41 44 52 55 59 62 28 42 43 53 54 60 61 63 Mỗi khối ZigZag mã hoá theo phương pháp RLE Cuối khối đầu RLE, ta đặt dấu kết thúc khối EOB (End Of Block) Sau đó, khối dồn lại mã hoá lần phương pháp mã Huffman Nhờ có dấu kết thúc khối nên phân biệt hai khối cạnh giải mã Huffman Hai bảng mã Huffman cho hai thành phần hệ số tất nhiên khác Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 13/21 CHƯƠNG XÂY DỰNG CHƯƠNG TRÌNH 1.6 Sơ đồ giải thuật ẢNH GỐC Phân khố i ẢNH NÉN 8x8 DCT Lượng tử hoá Mã hoá Bảng lượng tử Bảng mã 8x8 8x8 Hình - 1: sơ đồ giải thuật DCT thuận Hình 3-2:Sơ đồ giải thuật DCT nghịch 1.7 Thuật tốn chương trình 1.1.1 Chọn ảnh Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 14/21 Hình 3-3: Chọn ảnh • Chọn ảnh RGB từ file chứa ảnh Chọn kiểu Đọc ảnh ảnh 1.1.2 Nén ảnh dùng DCT Nén Ảnh Số Dùng DCT Hiển thị ảnh ĐỒ ÁN Trang 15/21 Hình 3-4: Nén ảnh JPEG Phân bố DCT Ảnh nén iDCT Hình 3-5: Giải thuật nén ảnh Nén Ảnh Số Dùng DCT Lượng tử hóa Mã Hóa ĐỒ ÁN Trang 16/21 CHƯƠNG KẾT QỦA MƠ PHỎNG 1.8 Thiết kế Guide cho chương trình Hình 4-1: Thiết kế Guide cho nén ảnh 1.9 Kết ảnh sau nén dùng DCT Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 17/21 Hình 4-2: Ảnh sau nén Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 18/21 Hình 4-3: Bảng phân tích hình ảnh sau nén DCT Với mức độ nén khác nhau, ta kết nén độ phân giải hình ảnh khác Ứng với độ phân giải cao tỷ lệ nén cao độ hiển thị hình ảnh thấp Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 19/21 CHƯƠNG KẾT LUẬN 1.10 Ưu nhược điểm Ưu điểm: Việc phân khối làm giảm phần thời gian tính tốn hệ số chung, biến đổi cosin khối nhỏ làm tăng độ xác tính tốn với dấu phẩy tĩnh, giảm thiểu sai số làm tròn sinh Biến đổi DCT khơng làm thơng tin DCT biến đổi tuyến tính chuyển giá trị điểm ảnh từ miền không gian thành hệ số miền tần số Nén ảnh tổn hao dựa vào DCT tính tốn đơn giản, chất lượng tốt dễ dàng thực mặt phần cứng… Khuyết điểm: Vì ảnh đầu vào phân chia thành nhiều khối độc lập, khối thực biến đổi DCT riêng có tương quan dọc đường biên khối Điều gây lỗi khối thực mã hoá với tốc độ bit thấp 1.11 Hướng phát triển Nén ảnh dựa vào DCT đời từ nhiều năm trước ,do cần nghiên cứu cải tiến để nâng cao hiệu nén Nghiên cứu thêm giải thuật DFT, SPIHT, EZW ứng dụng chúng TÀI LIỆU THAM KHẢO Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 20/21 [1] https://vi.wikipedia.org [2] http://matlab.izmiran.ru/help/toolbox/images/transfo5.html [3] http://aita.gov.vn/tin-tuc/1413/tieu-chuan-ky-thuat-ve-udcntt-trong-cqnn-tieu- chuan-jpeg-%E2%80%93-dinh-dang-anh-jpeg-13 [4] Ken Cabeen and Peter Gent, Image Compression and the Discrete Cosine Transform [5] MatLab ứng dụng viễn thông - Tác giả: TS Phạm Hồng Liên, Đặng Ngọc Khoa - Trần Thanh Phương Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 21/21 PHỤ LỤC [file1, pathname]=uigetfile('*.bmp;*.BMP;*.tif;*.TIF;*.jpg','Open An image'); im = imread(file1); subplot(1,2,1), imshow(im); title('Ori image'); S = size(im); L=length(S); Q=[16 11 10 16 24 40 51 61; 12 12 14 19 26 58 60 55; 14 13 16 24 40 57 69 56; 14 17 22 29 51 87 80 62; 18 22 37 56 68 109 103 77; 24 35 55 64 81 104 113 92; 49 64 78 87 103 121 120 101; 72 92 95 98 112 100 103 99]; c = F = create_mat_dct(); if(L==3) im1=rgb2gray(im); [hang cot]=size(im1); im=imresize(im,[256 256]); red = im(:,:,1); green= im(:,:,2); blue = im(:,:,3); %DCT FOR RED CHANNEL [im_1, im_2] = size(red); for j = : : im_1 for i = : : im_2 temp_im1 = red(i:i+7, j:j+7); dct_im1 = mydct(temp_im1, F); quant_im1 = myDCT_quantization(dct_im1, Q, c); q_im1(i:i+7, j:j+7) = quant_im1; end end % Dequantize dq_im1 = zeros(im_1, im_2); for j = : : im_1 for i = : : im_2 temp_im1 = q_im1(i:i+7, j:j+7); dequant_im1 = myDCT_dequantization(temp_im1, Q, c); idct_im1 = myIDCT(dequant_im1, F); dq_im1(i:i+7, j:j+7) = idct_im1; end end %DCT FOR GREEN CHANNEL [im_3, im_4] = size(green); for j = : : im_3 Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 22/21 for i = : : im_4 temp_im2 = green(i:i+7, j:j+7); dct_im2 = mydct(temp_im2, F); quant_im2 = myDCT_quantization(dct_im2, Q, c); q_im2(i:i+7, j:j+7) = quant_im2; end end % Dequantize dq_im2 = zeros(im_3, im_4); for j = : : im_3 for i = : : im_4 temp_im2 = q_im2(i:i+7, j:j+7); dequant_im2 = myDCT_dequantization(temp_im2, Q, c); idct_im2 = myIDCT(dequant_im2, F); dq_im2(i:i+7, j:j+7) = idct_im2; end end %DCT FOR BLUE CHANNEL [im_5, im_6] = size(blue); for j = : : im_5 for i = : : im_6 temp_im3 = blue(i:i+7, j:j+7); dct_im3 = mydct(temp_im3, F); quant_im3 = myDCT_quantization(dct_im3, Q, c); q_im3(i:i+7, j:j+7) = quant_im3; end end % Dequantize dq_im3 = zeros(im_5, im_6); for j = : : im_5 for i = : : im_6 temp_im3 = q_im3(i:i+7, j:j+7); dequant_im3 = myDCT_dequantization(temp_im3, Q, c); idct_im3 = myIDCT(dequant_im3, F); dq_im3(i:i+7, j:j+7) = idct_im3; end end R = uint8(dq_im1); G = uint8(dq_im2); B = uint8(dq_im3); final = cat(3,R,G,B); final = imresize(final,[hang cot]); ;subplot(1,2,2), imshow(uint8(final)); title(['For c = ' num2str(c) ' compressed image']) imwrite(uint8(final),'my_output_image.jpg'); else [im_x, im_y] = size(im); Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 23/21 for j = : : im_x for i = : : im_y temp_im = im(i:i+7, j:j+7); dct_im = mydct(temp_im, F); quant_im = myDCT_quantization(dct_im, Q, c); q_im(i:i+7, j:j+7) = quant_im; end end % Dequantize dq_im = zeros(im_x, im_y); for j = : : im_x for i = : : im_y temp_im = q_im(i:i+7,j:j+7); dequant_im = myDCT_dequantization(temp_im, Q, c); idct_im = myIDCT(dequant_im, F); dq_im(i:i+7, j:j+7) = idct_im; end end subplot(1,2,2), imshow(uint8(dq_im)); title(['For c = ' num2str(c) ' compressed image']) imwrite(uint8(dq_im),'hinhtest.tif') end % fprintf('For c: %i\n', c); % fprintf('Entropy of image: %f\n', My_entropy(uint8(dq_im))); %fprintf('RMSE of image: %f\n\n', RMSE(im, dq_im)); % figure % subplot(1,2,1), imshow(uint8(im)); title('Original Image'); %subplot(1,2,2), imshow(uint8(dq_im)); title(['For c = ' num2str(c) ' compressed image']) function [ imqDCT ] = myDCT_quantization( imDCT, qm, c ) %myDCT_quantization for outputs quantized DCT image imqDCT = ones(8,8); for j = 1:8 for i = 1:8 imqDCT(i,j) = round(imDCT(i,j) / (qm(i,j) * c)); end end end function [ invdctTransformed ] = myIDCT( im, F ) %myIDCT outputs IDCT of transformed image invdctTransformed = transpose(F)*double(im)*F; Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 24/21 end function [ dequantizedImage ] = myDCT_dequantization(imqDCT, qm, c) %myDCT_dequantization de-quantizes the quantized DCT image dequantizedImage = ones(8,8); for j = 1:8 for i = 1:8 dequantizedImage(i,j) = round(imqDCT(i,j) * (qm(i,j) * c)); end end end function [ dctTransformed ] = myDCT( im, F ) %myDCT outputs DCT transformed image dctTransformed = F*double(im)*transpose(F); end function [ basis ] = create_mat_dct() %create_mat_dct outputs the 8-point 2D-DCT basis function N = 8; basis = zeros(N, N); r = 0; for i = 0:7 for j = 0:7 if i == r = sqrt(1/N); else r = sqrt(2/N); end basis(i+1, j+1) = r * cos((pi*(2*j+1)*i)/(2*N)); end end %dc = dctmtx(8); %A = basis; %B = dc; %thr = 0.0000000000000001; %assert(all(A(:) == B(:)), 'Some elements are not the same'); %assert(all(abs(A(:) - B(:)) < thr), 'Some elements are not close'); end Nén Ảnh Số Dùng DCT ... kiểu Đọc ảnh ảnh 1.1.2 Nén ảnh dùng DCT Nén Ảnh Số Dùng DCT Hiển thị ảnh ĐỒ ÁN Trang 15/21 Hình 3-4: Nén ảnh JPEG Phân bố DCT Ảnh nén iDCT Hình 3-5: Giải thuật nén ảnh Nén Ảnh Số Dùng DCT Lượng... Guide cho nén ảnh 1.9 Kết ảnh sau nén dùng DCT Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 17/21 Hình 4-2: Ảnh sau nén Nén Ảnh Số Dùng DCT ĐỒ ÁN Trang 18/21 Hình 4-3: Bảng phân tích hình ảnh sau nén DCT Với... biên độ tần số khác ảnh Hàm dct2 tính DCT hai chiều ảnh số DCT thường sử dụng ứng dụng nén ảnh nhờ hiệu suất làm việc tối ưu ảnh có độ tương quan với điểm ảnh lân cận DCT giải thuật nén ảnh theo