1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tìm hiểu về kỹ thuật nén ảnh jpeg

58 14 0

Đ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

Thông tin cơ bản

Tiêu đề Tìm Hiểu Về Kỹ Thuật Nén Ảnh JPEG
Tác giả Văn Đức Tài
Người hướng dẫn ThS. Nguyễn Thị Hồng Anh
Trường học Trường Đại Học Vinh
Chuyên ngành Công Nghệ Thông Tin
Thể loại Báo Cáo Đồ Án Tốt Nghiệp
Năm xuất bản 2016
Thành phố Nghệ An
Định dạng
Số trang 58
Dung lượng 0,95 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • CHƯƠNG 1: GIỚI THIỆU (7)
    • 1.1. Cơ sở nghiên cứu và mục đích của đề tài (7)
    • 1.2. Nội dung nghiên cứu đề tài (7)
  • CHƯƠNG 2: TỔNG QUAN VỀ NÉN DỮ LIỆU ẢNH SỐ (8)
    • 2.1. Giới thiệu chung về nén ảnh số (8)
      • 2.1.1. Một số khái niệm (8)
      • 2.1.2. Các loại dư thừa dữ liệu (0)
      • 2.1.3. Sơ đồ khối tổng quát thể hiện quá trình nén và giải nén ảnh số (13)
    • 2.2. Phân loại các kỹ thuật nén ảnh số (13)
      • 2.2.1. Phương pháp nén không tổn hao thông tin (13)
        • 2.2.1.1. Phương pháp mã hóa theo mã loạt dài – RLE (Run Length EnCoding) (14)
        • 2.2.1.2. Phương pháp mã hóa Huffman (14)
        • 2.2.1.3. Phương pháp LZW (16)
      • 2.2.2. Phương pháp nén có tổn hao thông tin (18)
        • 2.2.2.1. Phương pháp dùng biến đổi Cosine (18)
        • 2.2.2.2. Phương pháp dùng biến đổi Wavelet – mã hóa băng con (21)
  • CHƯƠNG 3: CƠ SỞ LÝ THUYẾT CỦA BIẾN ĐỔI COSIN (23)
    • 3.1. Lịch sử ra đời và ứng dụng của biến đổi Cosine (23)
    • 3.2. Biến đổi Cosin một chiều (23)
      • 3.2.1. Phép biến đổi Cosin thuận một chiều (23)
      • 3.2.2. Phép biến đổi Cosin ngược một chiều (0)
    • 3.3. Biến đổi Cosin rời rạc hai chiều (31)
      • 3.3.1. Biến đổi Cosin rời rạc thuận hai chiều (31)
      • 3.3.2. Biến đổi Cosin rời rạc ngược hai chiều (0)
  • CHƯƠNG 4: CHUẨN NÉN ẢNH TĨNH JPEG (33)
    • 4.1. Giới thiệu về chuẩn nén ảnh tĩnh JPEG (33)
      • 4.2.1. Cấu trúc của Frame header (34)
      • 4.2.2. Cấu trúc của Scan header (35)
      • 4.2.3. Cấu trúc bảng lượng tử (0)
      • 4.2.4. Cấu trúc bảng mã Huffman (37)
      • 4.2.5. Cấu trúc phần chú thích (38)
    • 4.3. Cấu trúc file ảnh theo định dạng bitmap (39)
    • 4.4. Chuẩn nén ảnh tĩnh JPEG dựa trên biến đổi Cosin (40)
      • 4.4.1. Sơ đồ nén và giải nén ảnh tĩnh theo chuẩn nén JPEG (40)
      • 4.4.2. Chuyển đổi không gian màu (41)
      • 4.4.3. Phân khối (42)
      • 4.4.4. Biến đổi Cosin các khối 8*8 (42)
      • 4.4.5. Lượng tử hóa (0)
      • 4.4.6. Nén (44)
  • CHƯƠNG 5: CÀI ĐẶT CHƯƠNG TRÌNH VÀ THỬ NGHIỆM (47)
    • 5.1. Thiết kế, cài đặt module nén ảnh theo chuẩn JPEG dựa trên DCT tuần tự (47)
      • 5.1.1. Các bước thực hiện (47)
      • 5.1.2. Sơ đồ thuật toán (47)
    • 5.2. Thiết kế giao diện chương trình (48)
    • 5.3. Đánh giá thực nghiệm kết quả (49)
  • KẾT LUẬN (51)
    • 1. Nhận xét (51)
    • 2. Hướng phát triển của đồ án (51)
  • TÀI LIỆU THAM KHẢO (52)
  • PHỤ LỤC (53)

Nội dung

GIỚI THIỆU

Cơ sở nghiên cứu và mục đích của đề tài

Để sử dụng các dịch vụ Internet và ứng dụng di động, cần có kỹ thuật hỗ trợ truyền thông đa dạng dữ liệu như thoại, văn bản, hình ảnh và video Tuy nhiên, việc truyền tải nội dung đa phương tiện trên thông tin di động gặp khó khăn do băng thông mạng hạn chế, kích thước dữ liệu lớn và yêu cầu thời gian gửi nhận nghiêm ngặt Trong khi cải thiện băng thông cần công nghệ tương lai, kỹ thuật nén dữ liệu là một giải pháp hiệu quả để khắc phục những vấn đề này.

Mặc dù có nhiều kỹ thuật nén dữ liệu đa phương tiện như JPEG, JPEG2000 và MPEG, nhưng chúng chủ yếu tập trung vào hiệu quả nén mà không xem xét tiêu hao năng lượng trong quá trình nén và truyền Bài viết này giới thiệu một kỹ thuật nén ảnh hiệu quả nhằm khắc phục những vấn đề trên, đặc biệt cho dữ liệu điển hình trong thông tin di động, đó là kỹ thuật nén ảnh theo chuẩn JPEG dựa trên biến đổi Cosin tuần tự.

Nội dung nghiên cứu đề tài

Đồ án được tổ chức thành 5 chương và 1 phụ lục

Chương 1: Trình bày một cách tóm tắt cơ sở nghiên cứu, mục đích cũng như cách tổ chức của đồ án

Chương 2: Trình bày khái quát về nén ảnh số, các khái niệm liên quan đến nén ảnh số và các phương pháp phân loại các kỹ thuật nén ảnh hiện nay Đồng thời cũng trình bày sơ lược về các phương pháp nén ảnh cổ điển

Chương 3: Trình bày cơ sở lý thuyết của biến đổi Cosin – một trong những phương pháp biến đổi mà chuẩn JPEG sử dụng nhiều nhất

Chương 4: Giới thiệu một cách khái quát về chuẩn nén ảnh JPEG, cấu trúc file ảnh theo chuẩn JPEG, cấu trúc file ảnh theo định dạng Bitmap Đồng thời giới thiệu cách làm chi tiết từng bước của chuẩn JPEG để nén một bức ảnh sang định dạng JPEG

Chương 5: Cài đặt chương trình và thử nghiệm

TỔNG QUAN VỀ NÉN DỮ LIỆU ẢNH SỐ

Giới thiệu chung về nén ảnh số

2.1.1 Một số khái niệm Ảnh số Ảnh có thể biểu diễn dưới dạng tín hiệu tương tự hoặc tín hiệu số Trong biểu diễn số của các ảnh đa mức xám, một ảnh được biểu diễn dưới dạng ma trận hai chiều Mỗi phần tử của ma trận biểu diễn cho mức xám hay cường độ của ảnh tại vị trí đó Mỗi phần tử trong ma trận được gọi là một phần tử ảnh, thông thường kí hiệu là PEL(Picture Element) hoặc là điểm ảnh(pixel)

Ảnh đa cấp xám sử dụng 8 bit (1 byte) để biểu diễn các mức xám, cho phép tạo ra 256 mức khác nhau Mỗi mức xám được biểu diễn bằng một số nguyên từ 0 đến 255, trong đó 0 đại diện cho cường độ đen nhất và 255 cho cường độ sáng nhất.

Ảnh màu được biểu diễn tương tự như ảnh đen trắng, nhưng mỗi phần tử của ma trận chứa ba giá trị cho ba màu chính: đỏ, lục và lam Để biểu diễn một điểm ảnh màu, cần sử dụng 24 bit, được chia thành ba khoảng 8 bit, mỗi khoảng thể hiện cường độ sáng của một màu riêng biệt.

Pixel or PEL Độ sáng trung bình trong mỗi hình chữ nhật = giá trị một điểm ảnh Hình 1.1 Biễu diễn của một mức xám của ảnh số

Xử lý ảnh là một lĩnh vực khoa học còn tương đối mới, đặc biệt trong ngành công nghiệp, với nhiều ứng dụng quan trọng như làm nổi bật hình ảnh trong y học, khôi phục ảnh bị ảnh hưởng bởi khí quyển trong thiên văn học, và cải thiện độ phân giải của hình ảnh truyền hình mà không cần thay đổi cấu trúc hệ thống Ngoài ra, xử lý ảnh còn cho phép nén ảnh trong quá trình truyền tải hoặc lưu trữ Các giai đoạn chính trong xử lý ảnh có thể được minh họa rõ ràng qua hình ảnh.

+ Thu nhận ảnh : - Qua các camera(tương tự, số)

- Từ vệ tinh qua các bộ cảm ứng(Sensors)

Số hóa ảnh là quá trình chuyển đổi ảnh tương tự thành ảnh rời rạc để máy tính có thể xử lý Quá trình này bao gồm hai bước chính: lấy mẫu, nhằm tạo ra sự rời rạc về mặt không gian, và lượng tử hóa, để đạt được sự rời rạc về mặt biên độ.

Xử lý số là một quá trình bao gồm nhiều bước nhỏ, bao gồm tăng cường ảnh (Enhancement), khôi phục ảnh (Restoration), phát hiện biên (Edge Detection), phân vùng ảnh (Segmentation) và trích xuất các đặc tính (Feature Extraction).

+ Hệ quyết định : Tùy mục đích của ứng dụng mà chuyển sang giai đoạn khác là hiển thị, nhận dạng, truyền thông,…

Pixel (phần tử ảnh) là đơn vị cơ bản của hình ảnh, đại diện cho một điểm trong không gian và giá trị độ sáng Để xử lý ảnh trên máy tính, cần phải số hóa hình ảnh, trong đó mỗi điểm ảnh được xác định bởi tọa độ x, y, tạo thành độ phân giải (resolution) Các màn hình máy tính hiện có nhiều loại với độ phân giải khác nhau, chẳng hạn như 320 x 200, 640 x 350, 800 x 600 và 1024 x 768.

Mức xám là kết quả của quá trình mã hóa, trong đó mỗi cường độ sáng của điểm ảnh được chuyển đổi thành một giá trị số thông qua quá trình lượng hóa.

Trong một bài toán, dữ liệu được cấu thành từ các phần tử cơ sở gọi là dữ liệu nguyên tử, có thể là chữ số, ký tự, con số hoặc từ, tùy thuộc vào yêu cầu cụ thể của từng bài toán.

Nén dữ liệu (Data Compression)

Nén dữ liệu là quá trình giảm thiểu thông tin thừa trong dữ liệu gốc, dẫn đến lượng thông tin thu được sau khi nén thường nhỏ hơn dữ liệu ban đầu Đối với dữ liệu ảnh, tỷ lệ nén thường đạt khoảng 10:1, và một số phương pháp có thể mang lại tỷ lệ nén cao hơn nữa.

Nén dữ liệu, còn được biết đến với các tên gọi như giảm độ dư thừa và mã hoá ảnh gốc, là một kỹ thuật quan trọng trong việc tối ưu hóa dung lượng lưu trữ và tăng tốc độ truyền tải thông tin.

Trong hơn 20 năm qua, nhiều kỹ thuật nén đã được giới thiệu trong tài liệu và phần mềm nén dữ liệu ngày càng phong phú trên thị trường Tuy nhiên, chưa có phương pháp nén nào được xem là hoàn hảo, vì hiệu quả của nó phụ thuộc vào nhiều yếu tố và tính chất của dữ liệu gốc.

Tỷ lệ nén (Compression Rate)

Tỷ lệ nén là một trong các đặc trưng quan trọng nhất của mọi phương pháp nén Nhìn chung,người ta định nghĩa tỷ lệ nén như sau:

Với r là tỷ số nén được định nghĩa: r = kích thước dữ liệu gốc / kích thước dữ liệu nén

Hiệu suất nén được tính bằng công thức: (1 – tỷ lệ nén) * 100% Đối với ảnh tĩnh, kích thước tương ứng là số bit cần thiết để biểu diễn toàn bộ bức ảnh Còn đối với video, kích thước được xác định bởi số bit dùng để biểu diễn một khung hình video.

Mục đích và sự cần thiết của “nén ảnh”

Nén ảnh là kỹ thuật mã hóa giúp giảm số lượng bit dữ liệu cần thiết để biểu diễn ảnh, nhằm tiết kiệm chi phí lưu trữ và thời gian truyền tải Thông tin trong bức ảnh có cấu trúc và trật tự, cho phép xác định phần quan trọng nhất để truyền đi với ít bit hơn mà vẫn đảm bảo tính đầy đủ của thông tin Quá trình giải mã ở bên nhận sẽ tái tổ chức và xắp xếp lại bức ảnh gần giống như ảnh gốc, đáp ứng yêu cầu về chất lượng Ví dụ về lưu trữ và truyền ảnh số có thể thấy rõ qua đường truyền 9600 baud.

Việc nén ảnh trở nên cần thiết khi xem xét kích thước và thời gian truyền tải dữ liệu Một bức ảnh đa cấp xám hoặc ảnh 256 màu có kích thước 800 x 600, với độ sâu màu 8 bit/điểm ảnh, yêu cầu 3.840.000 bit lưu trữ và mất 6,67 phút để truyền Trong khi đó, một bức ảnh màu RGB với độ sâu màu 24 bit/điểm ảnh cùng kích thước này cần hơn 10 triệu bit lưu trữ và mất 20 phút để truyền tải.

Một phim âm bản có kích thước 24 x 36 mm (35 mm) chia bằng các khoảng cỏch khỏc nhau 12 àm, vào khoảng 3000 x 2000 điểm, 8 bit / pixel, yờu cầu

48 triệu bit cho lưu giữ ảnh và 83 phút để truyền

Phân loại các kỹ thuật nén ảnh số

Xét về khả năng phục hồi lại được chất lượng của dữ liệu ảnh, chúng ta có thể chia kỹ thuật nén ảnh thành 2 hướng chính đó là:

Nén chính xác, hay còn gọi là nén không mất mát thông tin, là các phương pháp nén cho phép thu được dữ liệu ảnh gốc một cách chính xác sau khi giải nén.

Nén có mất mát thông tin là các phương pháp mà sau khi giải nén, dữ liệu không hoàn toàn giống như ban đầu Trong nén ảnh, các phương pháp này được gọi là "tâm lý thị giác", chúng tận dụng đặc điểm của mắt người để chấp nhận một số biến dạng trong ảnh khi khôi phục Tuy nhiên, hiệu quả của các phương pháp này chỉ đạt được khi mức độ biến dạng là chấp nhận được với mắt thường hoặc trong một giới hạn dung sai nhất định.

Quá trình nén ảnh được mô tả theo sơ đồ:

2.2.1 Phương pháp nén không tổn hao thông tin

Quá trình nén và giải nén ảnh gốc và ảnh nén thường chỉ đạt hiệu suất thấp, phụ thuộc vào độ tương quan giữa các điểm ảnh Dưới đây là một số phương pháp phổ biến trong nén không tổn hao thông tin.

2.2.1.1 Phương pháp mã hóa theo mã loạt dài – RLE (Run Length EnCoding) Đây là phương pháp nén ảnh được phát triển dành cho ảnh số 2 mức (đen và trắng), như các văn bản trên nền trắng, trang in, các bản vẽ kỹ thuật

Phương pháp nén RLC (Run-Length Coding) dựa trên nguyên tắc phát hiện các chuỗi bit lặp lại liên tiếp, chẳng hạn như chuỗi bit 0 giữa các bit 1 hoặc ngược lại Các chuỗi bit lặp này sẽ được thay thế bằng một chuỗi mới, bao gồm chiều dài chuỗi lặp và giá trị của bit lặp Điều này giúp giảm kích thước dữ liệu, đặc biệt khi chiều dài chuỗi thay thế ngắn hơn chuỗi gốc Tuy nhiên, phương pháp này chỉ thực sự hiệu quả khi số lượng bit lặp vượt quá một ngưỡng nhất định RLC thường được ứng dụng để nén các định dạng ảnh như PCX và BMP.

2.2.1.2 Phương pháp mã hóa Huffman

Phương pháp mã hoá Huffman là một kỹ thuật dựa trên mô hình thống kê, trong đó tần suất xuất hiện của các ký tự trong dữ liệu gốc được tính toán bằng cách duyệt từ đầu đến cuối tệp Các ký tự có tần suất cao sẽ được gán mã ngắn, trong khi các ký tự có tần suất thấp nhận mã dài hơn Nhờ đó, chiều dài trung bình của từ mã hoá được giảm thiểu, tối ưu hoá việc lưu trữ dữ liệu Tuy nhiên, trong một số trường hợp, khi tần suất xuất hiện rất thấp, phương pháp này có thể không mang lại lợi ích, thậm chí còn gây thiệt hại về số bit.

Thuật toán mã hóa theo phương pháp Huffman bao gồm 2 bước chính:

Trong giai đoạn tính tần suất xuất hiện của các ký tự trong dữ liệu gốc, ta tiến hành duyệt tệp từ đầu đến cuối để xây dựng bảng mã Sau đó, bảng mã này sẽ được sắp xếp lại theo thứ tự tần suất giảm dần.

Giai đoạn thứ hai trong quá trình mã hóa là tạo cây mã Huffman bằng cách duyệt bảng tần suất từ cuối lên đầu, ghép hai phần tử có tần suất thấp nhất thành một phần tử mới có tần suất bằng tổng của hai phần tử đó Sau khi cập nhật bảng, hai phần tử đã xét sẽ bị loại bỏ Quá trình này lặp lại cho đến khi chỉ còn một phần tử duy nhất trong bảng Trong cây mã Huffman, phần tử có tần suất thấp nằm bên phải, trong khi phần tử còn lại nằm bên trái Các nút lá trong cây đại diện cho tất cả các bit dữ liệu, trong khi các nút trong là các nút tổng hợp Sau khi cây được tạo xong, mã được gán cho các nút lá bằng cách thêm bit “1” khi di chuyển sang bên phải và bit “0” khi di chuyển sang bên trái.

“0” Tất nhiên có thể làm ngược lại, chỉ có giá trị mã thay đổi còn tổng chiều dài là không đổi

Quá trình giải nén diễn ra theo chiều ngược lại và khá đơn giản, dựa vào bảng mã được tạo ra trong giai đoạn nén Bảng mã này được lưu giữ trong cấu trúc đầu của tệp nén cùng với dữ liệu đã nén Ví dụ, với một tệp dữ liệu, tần suất các ký tự được cung cấp bởi bảng mã sẽ hỗ trợ quá trình giải nén hiệu quả.

Bảng 2.1: Bảng tần suất các ký tự Bảng 2.2: Bảng tần suất sắp xếp theo thứ tụ giảm dần

Ký tự Tần suất Ký tự Tần suất Xác suất

Trong phương pháp Huffman, mã hóa ký tự được đảm bảo là duy nhất, không có mã nào là phần bắt đầu của mã khác Điều này cho phép khi đọc tệp nén từng bit, ta có thể dễ dàng duyệt qua cây mã cho đến khi tìm thấy lá, tức là ký tự đã được giải nén.

Cây mã Huffman tương ứng:

Bảng 2.3 cho từ mã được gán cho các ký tự tương ứng bởi phương pháp mã hoá Huffman:

Ký tự Từ mã Ký tự Từ mã

Bảng 2.3: Bảng từ mã Huffman được gán cho các ký tự

Khái niệm nén từ điển, được giới thiệu bởi Jacob Lempel và Abraham Ziv vào năm 1977, đã phát triển thành một tập hợp các thuật toán nén từ điển được gọi là LZ.

Năm 1984, Terry Welch đã phát triển giải thuật LZ thành một phiên bản cải tiến hơn có tên là LZW Phương pháp nén này sử dụng từ điển để lưu trữ các chuỗi dữ liệu, giúp tối ưu hóa hiệu suất nén.

Giải thuật LZW sử dụng chuỗi ký tự có tần suất lặp lại cao và thay thế chúng bằng từ mã tương ứng, giúp nâng cao tỷ lệ nén dữ liệu Kỹ thuật tổ chức từ điển của LZW vượt trội hơn so với các giải thuật trước đó.

Giải thuật nén LZW là phương pháp nén hiệu quả cho tất cả các loại file nhị phân, bao gồm văn bản, ảnh đen trắng, ảnh màu và ảnh đa mức xám Nó được sử dụng rộng rãi như chuẩn nén cho các định dạng ảnh GIF và TIFF, với hiệu suất không bị ảnh hưởng bởi số bit màu của ảnh.

Thuật toán nén LZW tạo ra một từ điển chứa các mẫu xuất hiện thường xuyên trong ảnh, bao gồm các cặp từ vựng và ý nghĩa của chúng Từ điển này chứa các từ mã được sắp xếp theo thứ tự nhất định, tương ứng với các chuỗi con trong dữ liệu ảnh Quá trình xây dựng từ điển diễn ra đồng thời với việc đọc dữ liệu, và sự hiện diện của một chuỗi con trong từ điển xác nhận rằng chuỗi đó đã từng xuất hiện trong dữ liệu đã đọc Thuật toán liên tục tra cứu và cập nhật từ điển sau mỗi lần đọc một ký tự từ dữ liệu đầu vào.

CƠ SỞ LÝ THUYẾT CỦA BIẾN ĐỔI COSIN

Lịch sử ra đời và ứng dụng của biến đổi Cosine

Phép biến đổi Cosine, được Ahmed giới thiệu vào năm 1974, đã trở thành một công cụ quan trọng trong xử lý tín hiệu số Với hiệu suất gần như tối ưu, nó được áp dụng rộng rãi trong mã hóa ảnh số và phim ảnh Hiện nay, phép biến đổi này là nền tảng cho hầu hết các ứng dụng nén ảnh theo chuẩn JPEG và định dạng MPEG.

Biến đổi Cosin một chiều

3.2.1 Phép biến đổi Cosin thuận một chiều

Biến đổi Cosin rời rạc một chiều thuận được định nghĩa bởi công thức toán học sau đây:

Khi đầu vào là số thực, biến đổi Cosin sẽ cho ra kết quả cũng là số thực Để tối ưu hóa thời gian tính toán trên trường số thực, nhiều kỹ thuật và thuật toán biến đổi Cosin nhanh đã được phát triển Bài viết này sẽ giới thiệu một trong những thuật toán đó.

Phép biến đổi Cosin nhanh

Phép biến đổi Cosin nhanh (FCT) là một phương pháp hiệu quả dựa trên việc chia nhỏ bài toán thành các biến đổi Cosin trên các dãy con Việc thực hiện biến đổi trên các dãy con này giúp đơn giản hóa và rút ngắn thời gian xử lý so với dãy gốc Do đó, quá trình phân nhỏ dãy tín hiệu đầu vào sẽ tiếp tục cho đến khi chỉ còn một phần tử.

Thuật toán Biến đổi Cosin nhanh (Fast Cosine Transform - FCT) không áp dụng trực tiếp lên dãy tín hiệu đầu vào x(n), mà thay vào đó thực hiện trên dãy hoán vị x’(n) của x(n) Giả định rằng số điểm cần tính FCT là lũy thừa của 2, tức là N = 2^M.

Nửa đầu của dãy x'(n) bao gồm các phần tử có chỉ số chẵn của x(n) được sắp xếp theo thứ tự tăng dần, trong khi nửa sau chứa các phần tử có chỉ số lẻ được sắp xếp theo thứ tự giảm dần Áp dụng vào công thức (3.1), chúng ta có được kết quả như sau:

Rút gọn biểu thức trên ta được:

Chia X(k) ra làm hai dãy con, một dãy bao gồm các chỉ số chẵn, còn dãy kia bao gồm các chỉ số lẻ

Có thể biểu diễn dưới dạng:

Có thể biểu diễn dưới dạng:

Nhưng ta có: Cos  ( 2 k  1 )    2 Cos  Cos ( 2 k  )  Cos  ( 2 k  1 )  

Biểu thức thứ 2 trong công thức (3.4) chính là X(2k – 1) nên (3.4) có thể rút gọn thành:

Biểu thức (3.8) và (3.9) cho ta sơ đồ DCT 8 điểm đầu vào Vế phải của (3.8) và (3.9) là các phép biến đổi Cosin cho 4 điểm và X(1) = X(-1)

Hình 3.1: Sơ đồ biểu diễn biểu thức (3.8) và (3.9)

Chúng ta tiếp tục chia Y 00 (k) và Y 01 (k) thành 2 dãy chỉ số chẵn và lẻ như đã làm ở trên và chúng ta được:

Thay các công thức từ (3.16) đến (3.19) vào các công thức từ (3.12) đến (3.15) và đặt:

Y ta được các công thức như sau:

(3.23) Chúng ta cũng sẽ có được sơ đồ biểu diễn các công thức từ (3.20) đến (3.23) tương tự như ở bước trên như sau:

Hình 3.2: Sơ đồ biểu diễn công thức từ (3.20) đến (3.23)

Các sơ đồ ở trên được cho bởi N = 8 Với N = 8 thì các biểu thức từ (3.20) đến

(3.23) có thể viết ngắn gọn lại như sau:

Y   (3.27) ở đây k = 0, 1 Nên (3.24) có thể biểu diễn lại như sau:

Hoàn toàn tương tự cho các công thức từ (3.25) đến (3.27)

Các công thức từ (3.24) đến (3.27) có thể được minh họa bằng sơ đồ đơn giản như sau:

Hình 3.3: Sơ đồ thể hiện bước cuối trong quá trình tính FCT

Để tính các giá trị đầu ra của biến đổi FCT là X, chúng ta cần quay ngược lại và tính các giá trị Y đã xác định trước đó.

Nên Y 10 (k) = X(4k) Hoàn toàn tương tự cho các hệ số khác, ta suy ra được:

Như vậy, sau khi tính toán thì kết quả đầu ra không phải là X(k) mà là tổ hợp của X(k)

3.2.2 Phép biến đổi Cosin ngƣợc một chiều

Phép biến đổi Cosin ngược được cho bởi công thức:

Phép biến đổi Cosin ngược sẽ thực hiện theo quá trình ngược lại so với quá trình biến đổi Cosin nhanh ở trên.

Biến đổi Cosin rời rạc hai chiều

3.3.1 Biến đổi Cosin rời rạc thuận hai chiều

Phép biến đổi Cosin thuận rời rạc hai chiều được định nghĩa như sau:

Để cải thiện tốc độ tính toán, các giải thuật biến đổi Cosin nhanh hai chiều đã được phát triển Phương pháp phổ biến nhất là sử dụng phép biến đổi Cosin nhanh một chiều, trong đó công thức (3.28) được điều chỉnh để phù hợp với dạng mới.

Công thức (3.30) mô tả phép biến đổi Cosin rời rạc một chiều của x(n1, n2), trong đó n2 là biến số và n1 là tham số, dẫn đến kết quả trung gian X'(n1, k2) Tiếp theo, công thức (3.31) thực hiện phép biến đổi Cosin rời rạc của X'(n1, k2), với n1 là biến số và k2 là tham số Để thực hiện biến đổi nhanh Cosin hai chiều cho một ma trận ảnh, ta sẽ áp dụng biến đổi nhanh một chiều theo hàng các điểm ảnh, sau đó tiếp tục với biến đổi nhanh một chiều theo cột của kết quả vừa thu được.

3.3.2 Biến đổi Cosin rời rạc ngƣợc hai chiều

Biến đổi Cosin ngược rời rạc hai chiều được cho bởi công thức như sau:

Trong đó ck1, c k2 cũng nhận các giá trị như biến đổi Cosin thuận rời rạc hai chiều.

Giống như biến đổi Cosin thuận, biến đổi Cosin ngược hai chiều cũng sử dụng phép biến đổi Cosin nhanh ngược một chiều để thực hiện tính toán nhanh chóng Công thức (3.32) được biểu diễn lại thành dạng khác để tối ưu hóa quá trình tính toán.

Công thức (3.34) mô tả phép biến đổi Cosin ngược rời rạc một chiều của X(k1, k2), trong đó k2 là biến số và k1 là tham số, cho ra kết quả trung gian x'(k1, n2) Tiếp theo, công thức (3.35) thực hiện phép biến đổi Cosin ngược rời rạc của x'(k1, n2), với k1 là biến số và n2 là tham số Để khôi phục lại ảnh ban đầu từ ma trận hệ số biến đổi, chúng ta cần thực hiện biến đổi nhanh Cosin ngược rời rạc một chiều theo hàng, sau đó tiếp tục với biến đổi nhanh Cosin rời rạc một chiều theo cột các kết quả trung gian đã tính.

CHUẨN NÉN ẢNH TĨNH JPEG

Giới thiệu về chuẩn nén ảnh tĩnh JPEG

JPEG, viết tắt của Joint Photographic Experts Group, là chuẩn ảnh quốc tế được công nhận từ năm 1990 Chuẩn này phục vụ cho nhiều ứng dụng truyền hình ảnh, bao gồm y học, khoa học kỹ thuật, nghệ thuật và phim ảnh.

Chuẩn JPEG được áp dụng để mã hóa ảnh đa mức xám và ảnh màu, tuy nhiên, hiệu quả với ảnh đen trắng không ổn định Chuẩn này cung cấp các thuật toán cho cả nén không mất mát và nén có mất mát thông tin.

Trong phần tiếp theo của đề án, chúng tôi sẽ trình bày chi tiết về một dạng nén biến đổi chấp nhận mất mát thông tin, cụ thể là Biến đổi Cosin chuẩn JPEG.

Biến đổi Cosin tuần tự (Sequential DTC-Based) là một trong những kỹ thuật nén ảnh tĩnh JPEG phổ biến nhất, vì nó đáp ứng hầu hết các yêu cầu cần thiết cho nhiều ứng dụng khác nhau.

Trước khi khám phá chi tiết quy trình nén JPEG, chúng ta cần hiểu tổng quan về cấu trúc của tập tin ảnh định dạng JPEG và bitmap (BMP).

4.2 Cấu trúc file ảnh theo chuẩn JPEG

Nhìn một cách tổng thể, một file ảnh theo chuẩn JPEG có thể được mô tả như hình 4.1:

Tables Frame header Scan 1 [Scan 2 ] … [Scan n ] Ảnh nén

Tables Scan header ECSScan 0 [ECS 1 ] … [ECS n ]

SOI: viết tắt của Start OfImagemarker Nó đánh dấu điểm bắt đầu của ảnh JPEG, có kích thước 2 bytes và có giá trị bằng 0xFFD8

EOI: viết tắt của End OfImage marker Nó đánh dấu điểm kết thúc của ảnh

JPEG, có kích thước 2 bytes và có giá trị bằng 0xFFD9

4.2.1 Cấu trúc của Frame header

Khung tiêu đề cung cấp thông tin về các đặc điểm của ảnh gốc, bao gồm số lượng thành phần màu, hệ số lấy mẫu cho từng thành phần và vị trí của bảng lượng tử tương ứng với mỗi thành phần của ảnh gốc.

Cấu trúc của Frame header được cho như hình 4.2:

Hình 4.2: Cấu trúc phần Frame header Ý nghĩa của từng phần tử trong Frame header như sau:

The term SOF n stands for Start Of Frame marker, indicating the beginning of the Frame header data This marker has a size of 2 bytes and its values vary depending on the compression type used.

 SOF 0 : cho biết đây là kiểu nén ảnh theo chuẩn JPEG dựa trên biến đổi Cosin tuần tự (Baseline DCT), giá trị bằng 0xFFC0

 SOF 1 : cho biết đây là kiểu nén ảnh dựa trên DCT tuần tự mở rộng và dùng mã hóa Huffman, giá trị bằng 0xFFC1

 SOF 2 : cho biết nén ảnh dựa trên DCT lũy tiến (Progressive DCT) và dùng mã hóa Huffman, giá trị bằng 0xFFC2

Ngoài ra còn rất nhiều trường hợp của SOF n tuy nhiên đây là một số trường hợp hay dùng nhất

L f : chiều dài của Frame header

P: cho biết số độ chính xác theo bit Có thể bằng 8 hoặc 12 bít

Y: số lượng dòng trong ảnh gốc hay chính là chiều cao của ảnh gốc

X:số lượng mẫu trên mỗi dòng của ảnh gốc hay chính là chiều rộng của ảnh gốc

N f : số lượng thành phần mầu trong ảnh gốc

C i : chỉ định thành phần mầu thứ i trong mỗi Scan

H i : tỷ lệ lấy mẫu theo chiều ngang trong mỗi Scan

V i :tỷ lệ lấy mẫu theo chiều dọc trong mỗi Scan

T qi : xác định chỉ số của bảng lượng tử được dùng cho thành phần mầu thứ i trong ảnh

Bảng 4.1 sẽ chỉ rõ giá trị và kích thước của từng thành phần trên có thể nhận:

Bảng 4.1: Giá trị các tham số có thể nhận trong phần Frame header

Tham số Kích thước (bits) Giá trị

DCT Tuần tự DCT Lũy tiến

4.2.2 Cấu trúc của Scan header

Header scan cung cấp thông tin về số lượng thành phần màu của ảnh gốc trong mỗi lần quét, cùng với vị trí của bảng mã entropy được sử dụng để mã hóa và giải mã cho từng thành phần màu tương ứng.

SOS L s N s Các tham số Ss Se A h A l

Cs 1 Td 1 Ta 1 Cs 2 Td 2 Ta 2

Các tham số có ý nghĩa như sau:

SOS: Start OfScan marker,đánh dấu điểm bắt đầu của Scan header, có gia trị bằng 0xFFDA

L s : chiều dài của Scan header

N s : số lượng thành phần mầu của ảnh trong Scan

C sj : lựa chọn thành phần mầu thứ j trong N f thành phần mầu trong Frame header

Td j :xác định bảng mã hóa entropy cho thành phần một chiều DC của thành phần mầu thứ jcủa ảnh

Ta j :xác định bảng mã hóa entropy cho thành phần xoay chiều AC của thành phần mầu thứ jcủa ảnh

Ss: chỉ số bắt đầu cho việc mã hóa

Se:chỉ số kết thúc việc mã hóa

Bảng 4.2 cho biết kích thước và giá trị của từng tham số trong Scan header:

Bảng 4.2: Giá trị các tham số có thể nhận của phần Scan header

Tham số Kích thước (bits) Giá trị

DCT Tuần tự DCT Lũy tiến

4.2.3 Cấu trúc bảng lƣợng tử

Cấu trúc bảng lượng tử xác định một hoặc nhiều bảng lượng tử được sử dụng cho quá trình nén và giải nén ảnh JPEG Hình 4.4 minh họa rõ ràng cấu trúc này.

Hình 4.4: Cấu trúc phần bảng lượng tử

DQT L q Pq Tq Q 0 Q 1 Q 2 … Q 63 t lần Define Quantization segment

DQT: Define Quantization Table marker Đánh dấu điểm bắt đầu của bảng lượng tử

Lq:chiều dài của bảng lượng tử

Pq: xác định độ chính xác cho các phần tử của bảng lượng tử

Tq:xác định bảng lượng tử sẽ được dùng cho việc lượng tử hóa các thành phần của ảnh

Q k : các phần tử của bảng lượng tử

Bảng 4.3 cho biết kích thước cũng như giá trị có thể nhận của từng tham số

Bảng 4.3: Giá trị các tham số có thể nhận trong phần bảng lượng tử

Tham số Kích thước (bits) Giá trị

DCT Tuần tự DCT Lũy tiến

Trong đó, n là số lượng bảng lượng tử

4.2.4 Cấu trúc bảng mã Huffman

Cấu trúc bảng mã Huffman xác định một hoặc nhiều bảng mã Huffman để mã hóa và giải mã dữ liệu hình ảnh Hình 4.5 minh họa cấu trúc của bảng mã Huffman.

Hình 4.5: Cấu trúc bảng mã Huffman

DHT L h Tc Th L 1 L 2 … L 16 Giá trị từ mã t lần

V 16,L16 Ý nghĩa của các tham số:

DHT: Define Huffman Table marker Đánh dấu điểm bắt đầu của bảng mã

L h : chiều dài của bảng mã Huffman

Tc: cho biết bảng mã ngay sau là bảng mã của thành phần DC hay AC Nếu bằng 0 là của DC, bằng 1 là của AC

Th: dùng để xác định bảng mã Huffman dùng để mã hóa và giải mã tương ứng với từng thành phần của ảnh gốc

L i : số lượng từ mã Huffman có chiều dài i

V i,j :giá trị tương ứng của mỗi từ mã Huffman Với mỗi i giá trị tương ứng được gán cho từ mã Huffman có chiều dài là i

Bảng 4.4 cho biết kích thước và giá trị của từng tham số:

Bảng 4.4: Giá trị các tham số có thể nhận trong phần bảng mã Huffman

Tham số Kích thước (bits) Giá trị

DCT Tuần tự DCT Lũy tiến

Trong đó, n là số lượng bảng mã Huffman và 

4.2.5 Cấu trúc phần chú thích

Trong phần này, người tạo ảnh JPEG có thể ghi chú thông tin quan trọng như bản quyền, tên tác giả và phiên bản của bức ảnh, giúp bảo vệ quyền sở hữu trí tuệ và xác định nguồn gốc của tác phẩm.

Hình 4.6: Cấu trúc phần chú thích

COM: Comment marker Đánh dấu điểm bắt đầu của phần chú thích

Lc: chiều dài của phần chú thích

Cm i : giá trị của từng byte chú thích.

Cấu trúc file ảnh theo định dạng bitmap

Định dạng file ảnh bitmap (*.BMP) là một trong những định dạng phổ biến nhất trên hệ điều hành Windows Đây là định dạng ảnh chuẩn, không phụ thuộc vào thiết bị hiển thị, cho phép hiển thị trên mọi loại phần cứng.

Cấu trúc tổng quát của một file ảnh định dạng BMP gồm 4 phần như sau:

Hình 4.7: Cấu trúc tổng quát của một ảnh bitmap

Bảng 4.5 sẽ trình bày cụ thể kích thước, địa chỉ bắt đầu và ý nghĩa của từng phần:

Bảng 4.5: Ý nghĩa của từng phần trong ảnh bitmap

Size (byte) Description Bitmap header 0 14 BITMAPFILEHEADER

Loại file 0 2 Là hai ký tự „BM‟

Kích thước file 2 4 Kích thước của file ảnh tính bằng byte

Dự trữ 6 4 Giá trị bằng 0 Địa chỉ của bitmap data 10 4 Giữ địa chỉ bắt đầu của vùng dữ liệu ảnh

Kích thước 14 4 Kích thước của bitmap info = 40

Chiều rộng 18 4 Chiều rộng ảnh (pixel)

Chiều cao 22 4 Chiều cao ảnh (pixel)

Plane 26 2 Giá trị này luôn = 1

Bitmap header Bitmap info Bitmap Palette Bitmap data

 Bitmap header: kích thước 14 bytes

 Bitmap info: kích thước 40 bytes

 Bitmap palette: bảng mầu của ảnh

 Bitmap data: phần dữ liệu của ảnh

Loại nén 30 4 Loại nén ảnh

Kích thước ảnh 34 4 Ảnh không nén thì luôn = 0 Độ phân giải theo chiều ngang 38 4 Độ phân giải ảnh theo chiều ngang

(pixels/meter) Độ phân giải theo chiều dọc 42 4 Độ phân giải ảnh theo chiều dọc

Số màu được sử dụng 46 4 Số mầu thực sự được dùng bởi bitmap, = 0 nếu dùng tất cả

Số lượng mầu quan trọng 50 4 Số lượng mầu quan trọng để hiển thị ảnh

Bitmap palette 54 4*x x là số bit mầu của ảnh

Lặp lại x lần Lặp lại x lần theo khối RGB

Bitmap data 54+4*x Bắt đầu vùng dữ liệu của ảnh

Vùng Bitmap palette có kích thước 4*x (bytes) chỉ áp dụng cho ảnh BMP với số bit màu tối đa là 8 bit Nếu số bit trên mỗi điểm ảnh vượt quá 8, vùng này sẽ không tồn tại.

Trong bài viết này, chúng ta đã điểm qua những thông tin quan trọng nhất liên quan đến định dạng ảnh JPEG và Bitmap Tiếp theo, chúng ta sẽ tìm hiểu về phương pháp nén ảnh tĩnh của chuẩn JPEG.

Chuẩn nén ảnh tĩnh JPEG dựa trên biến đổi Cosin

4.4.1 Sơ đồ nén và giải nén ảnh tĩnh theo chuẩn nén JPEG

Nén ảnh theo chuẩn nén JPEG bao gồm nhiều giai đoạn được cho như sơ đồ 4.8:

FDCT Lượng tử Mã hóa Ảnh nén

Bảng lượng Bảng mã Khối mã hóa Ảnh gốc

Hình 4.8: Sơ đồ nén ảnh theo chuẩn nén ảnh JPEG

Quá trình giải nén ảnh nén diễn ra bằng cách giải nén từng phần dựa trên phương pháp nén đã sử dụng, với thông tin từ phần header của file ảnh Kết quả thu được là các hệ số đã được lượng tử, sau đó được khôi phục về giá trị ban đầu nhờ bộ giải lượng tử Cuối cùng, thông qua biến đổi Cosin ngược, ta có thể tái tạo lại ảnh gốc với độ trung thực nhất định.

Hình 4.9: Sơ đồ giải nén ảnh theo chuẩn JPEG

Bảng mã và bảng lượng tử trong sơ đồ giải nén được tạo ra từ thông tin trong phần header của ảnh nén Quá trình nén ảnh ghi lại các thông tin này để hỗ trợ cho việc giải nén ảnh hiệu quả.

Quá trình xử lý với thành phần độ chói (luminance) ở phía mã hóa được giải thích chi tiết như sau:

4.4.2 Chuyển đổi không gian màu Đối với ảnh mầu trong hệ mầu RGB, trước khi thực hiện phương pháp nén này chúng ta sẽ chuyển toàn bộ ảnh gốc từ hệ mầu RGB sang một hệ mầu YCbCr Trong đó thành phần Y là thành phần độ chói còn Cb và Cr là hai thành phần màu của từng điểm ảnh trong ảnh Đây là công đoạn tùy chọn, không bắt buộc với mọi chương trình, tuy nhiên nếu thực hiện được thì chất lượng nén sẽ tốt hơn nhiều Để chuyển từ không gian mầu RGB sang không gian YCbCr chúng ta thực hiện theo công thức sau:

 Ảnh nén Giải mã Giải lượng tử IDCT

Bảng lượng tử Bảng mã

Khối giải mã Ảnh khôi phục

Mắt người rất nhạy với thành phần độ chói Y, nhưng lại ít nhạy với hai thành phần màu Cb và Cr Điều này cho phép chúng ta nén thành phần độ chói Y với tỷ lệ thấp, trong khi hai thành phần Cb và Cr có thể nén với tỷ lệ cao hơn.

Chuẩn nén ảnh tĩnh bắt đầu bằng cách chia ảnh thành các khối nhỏ 8x8 không chồng chéo Mỗi điểm ảnh trong khối sẽ được trừ đi 128, giúp các giá trị điểm ảnh từ 0 đến 255 (mã hóa bằng 8 bit không dấu) sau khi áp dụng biến đổi DCT tạo ra các hệ số AC trong dải -1023 đến +1024 (mã hóa bằng 11 bit có dấu) Hệ số DC có giá trị từ 0 đến 2040 (mã hóa bằng 11 bit không dấu) cần xử lý khác so với hệ số AC Việc trừ 128 giúp đồng nhất dải giá trị của cả hai loại hệ số sau biến đổi DCT, thuận lợi cho mã hóa và xử lý.

Biến đổi Cosin nhanh hai chiều cho các khối 8*8 hiệu quả hơn so với áp dụng cho toàn bộ ảnh, nhờ vào việc tăng độ chính xác trong tính toán với số thực và giảm thiểu sai số do làm tròn Các điểm ảnh lân cận có độ tương quan cao, cho phép phép biến đổi Cosin tập trung năng lượng vào một số ít hệ số biến đổi Việc loại bỏ các hệ số có năng lượng thấp trong các khối chỉ gây mất mát thông tin cục bộ, giúp nâng cao chất lượng ảnh sau khi nén.

4.4.4 Biến đổi Cosin các khối 8*8

Biến đổi Cosin là một bước quan trọng trong quá trình nén ảnh JPEG, nhằm mục đích tập trung năng lượng hình ảnh vào một số lượng hạn chế các hệ số biến đổi Công thức của biến đổi này đóng vai trò then chốt trong việc tối ưu hóa dung lượng lưu trữ ảnh.

Thuật toán biến đổi Cosin nhanh hai chiều cho mỗi khối bao gồm 16 phép biến đổi Cosin nhanh một chiều Đầu tiên, áp dụng biến đổi Cosin nhanh một chiều cho các điểm ảnh trên mỗi hàng, thực hiện lần lượt cho 8 hàng Sau đó, tiếp tục thực hiện biến đổi trên cho 8 hàng còn lại Kết quả cuối cùng là ma trận các hệ số biến đổi của khối đối tượng.

Hệ số tương ứng với tần số không gian thấp nhất, được gọi là thành phần một chiều DC, có giá trị lớn nhất và tỷ lệ với độ chói trung bình của khối ảnh 8*8 Các hệ số còn lại là các thành phần xoay chiều AC Theo lý thuyết, biến đổi DCT không làm mất mát thông tin ảnh, mà chuyển đổi thông tin từ miền không gian sang miền tần số, tạo điều kiện thuận lợi cho việc mã hóa ở các bước tiếp theo.

Khối lượng tử hóa trong sơ đồ mã hóa là yếu tố quyết định tỷ lệ nén của chuẩn nén JPEG, với đầu vào là các ma trận hệ số DCT của các khối điểm ảnh Các hệ số được lượng tử hóa độc lập, dựa trên đặc điểm sinh lý của mắt người, cho thấy độ nhạy kém ở tần số cao và tốt hơn ở tần số thấp Do đó, lượng tử hóa thô được áp dụng cho các hệ số tần số cao và lượng tử hóa tinh cho các hệ số tần số thấp Bảng lượng tử được điều chỉnh để tạo ra mức nén thay đổi theo chất lượng ảnh Quá trình lượng tử hóa tạo ra nhiều giá trị 0, đặc biệt ở tần số cao (các hệ số AC), và sự làm tròn trong quá trình này là nguyên nhân chính gây mất mát thông tin ảnh, đồng thời cũng là yếu tố giúp tăng hiệu suất nén.

Chuẩn nén ảnh JPEG đã phát triển ma trận lượng tử tiêu chuẩn cho thành phần độ chói (luminance) và thành phần màu (chrominance), cho phép áp dụng hiệu quả trong quá trình nén ảnh JPEG.

Bảng 4.6: Bảng lượng tử áp dụng cho thành phần độ chói

Như vậy, các hệ số biến đổi DCT sẽ được lượng tử theo công thức:

F(u, v): là hệ số sau biến đổi DCT

Q(u, v): là hệ số của ma trận lượng tử

F Q (u,v): là hệ số sau khi lượng tử

4.4.6 Nén Đầu vào của khối nén gồm hai thành phần: thành phần các hệ số một chiều

DC và thành phần các hệ số xoay chiều AC

Thành phần một chiều DC, ký hiệu là C i (0,0), chứa phần lớn năng lượng tín hiệu ảnh Thay vì nén trực tiếp các giá trị C i (0,0), người ta xác định độ lệch giữa các khối liền kề, được tính bằng công thức d i = C i+1 (0,0) – C i (0,0).

Do các giá trị Ci+1 và Ci thường gần nhau và có giá trị lớn, nên giá trị chênh lệch di thường nhỏ hơn nhiều so với Ci, dẫn đến tỷ lệ nén cao hơn Giá trị khởi tạo đầu tiên của C0 (0,0) là 0, và các độ lệch di sẽ được đưa vào bộ mã hóa entropy.

Thành phần xoay chiều AC:C i (m, n) với 1 ≤ m, n ≤ 7 chứa thông tin chi tiết của ảnh Để tận dụng ưu điểm của các hệ số tần số cao, mảng hai chiều các hệ số đã được lượng tử sẽ được sắp xếp lại theo hình Zigzag, tạo thành mảng một chiều Cách sắp xếp này giúp giảm thiểu năng lượng tổn hao trung bình và tạo ra các dãy giá trị 0 liên tiếp.

Bảng 4.8: Bảng các giá trị Zigzag

Sau khi thực hiện biến đổi Cosin, năng lượng của các khối giảm dần từ góc trên bên trái xuống góc dưới bên phải Việc sắp xếp lại các hệ số theo thứ tự Zigzag giúp các hệ số xấp xỉ nhau nằm trên cùng một hàng, đặc biệt là dãy các số 0 liền kề Trừ hệ số đầu tiên, 63 hệ số còn lại của mỗi khối sẽ được mã hóa bằng phương pháp RLE Cuối mỗi khối đầu ra của RLE sẽ được đánh dấu bằng ký hiệu EOB (End Of Block).

CÀI ĐẶT CHƯƠNG TRÌNH VÀ THỬ NGHIỆM

Thiết kế, cài đặt module nén ảnh theo chuẩn JPEG dựa trên DCT tuần tự

Bước 1: Đọc một khối ảnh kích thước 8*8

Bước 2: Thực hiện biến đổi Cosin đối với khối ảnh đó

Bước 3: Lượng hóa các hệ số sau khi biến đổi Cosin

Bước 4: Sử dụng phép biến đổi Zigzag để sắp xếp lại các hệ số sau khi đã lượng tử hóa

Bước 5: Mã hóa giá trị hệ số DC theo phương pháp điều chế xung vi sai –

Bước 6: Các giá trị còn lại trong mỗi chuỗi Zigzag chính là các giá trị xoay chiều AC, thực hiện mã hóa RLC các hệ số này

Bước 7: Sử dụng phương pháp mã hóa Huffman để mã hóa các giá trị một chiều DC và xoay chiều AC

Bước 8: Nếu chưa hết các khối ảnh thì quay lại thực hiện bước 1

Bước mã hóa các hệ số DC và AC là bước khó nhất trong quy trình, và nó sẽ được thực hiện thông qua phương thức HuffmanBlockEncoder() thuộc lớp HuffmanTable Mã nguồn chi tiết sẽ được cung cấp trong phần phụ lục.

Giả sử chiều rộng (Width) và chiều cao (Height) của ảnh được đo bằng pixel, trong khi Xpos và Ypos đại diện cho vị trí đầu tiên của mỗi khối 8x8 pixel Dưới đây là sơ đồ thuật toán liên quan.

Hình 5.1: Sơ đồ thuật toán nén ảnh theo chuẩn JPEG dựa trên DCT tuần tự

Thiết kế giao diện chương trình

Các chức năng chính của chương trình:

- Mở ảnh: Mở file ảnh muốn nén

Width = image.Width Height = image.Height

Xpos = 0 Đọc một khối ảnh Biến đổi Cosin

Lượng tử hóa Biến đổi Zigzag

Mã hóa Huffman Xpos = Xpos + 8

- Lưu ảnh JPEG với tên mới: Lưu ảnh nén với tên mới

- Nén ảnh JPEG: Thực hiện nén ảnh cần nén sang định dạng JPEG

Chức năng tự động cập nhật cho phép chương trình tự động hiển thị kết quả ngay sau khi thay đổi mức chất lượng ảnh Nếu không chọn tùy chọn này, người dùng cần nhấn F5 để cập nhật và xem kết quả.

Hình 5.2: Giao diện chính của chương trình

Đánh giá thực nghiệm kết quả

Thông qua việc cài đặt chương trình nén ảnh theo chuẩn JPEG dựa trên DCT tuần tự ta rút ra được những kết luận sau:

Phương pháp nén ảnh JPEG dựa trên DCT tuần tự cho chất lượng hình ảnh chấp nhận được theo cảm nhận của mắt người, đồng thời giảm dung lượng tập tin ảnh xuống mức khá nhỏ Điều này giúp việc truyền tải hình ảnh nén qua mạng trở nên hiệu quả, mà vẫn giữ nguyên các nội dung quan trọng của bức ảnh.

Phương pháp nén ảnh theo chuẩn JPEG dựa trên DCT tuần tự cho tỷ lệ nén cao, giúp tối ưu hóa dung lượng bức ảnh Tùy thuộc vào yêu cầu cụ thể, tỷ lệ nén có thể được điều chỉnh để đạt được kích thước ảnh phù hợp.

Tỷ lệ nén của mỗi bức ảnh phụ thuộc vào sự tương quan giữa các điểm ảnh Những bức ảnh có sự tương quan cao sẽ có tỷ lệ nén lớn, trong khi những bức ảnh với sự tương quan thấp sẽ có tỷ lệ nén thấp hơn.

Dưới đây là kết quả nén ảnh với tỷ lệ khác nhau từ ảnh Bitmap gốc 24 bit kích thước 256x256 pixels, dung lượng 192KB Sau khi nén thành ảnh JPEG với tỷ lệ 18:1 bằng phần mềm Paint của Windows, ảnh có dung lượng giảm xuống còn 10,6KB và 29,6KB.

Qua hình ảnh so sánh ta thấy, kết quả nén của chương trình cũng khá tốt.

Ngày đăng: 01/08/2021, 11:27

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
1. Lương Mạnh Bá – Nguyễn Thanh Thủy (1999),Nhập môn xử lý ảnh số, Nhà xuất bản Khoa học Kỹ Thuật, Hà Nội Sách, tạp chí
Tiêu đề: Nhập môn xử lý ảnh số
Tác giả: Lương Mạnh Bá – Nguyễn Thanh Thủy
Nhà XB: Nhà xuất bản Khoa học Kỹ Thuật
Năm: 1999
2. Nguyễn Hoài Nam (2004),Các phương pháp sử dụng trong chuẩn nén ảnh JPEG,Tạp chí Công nghệ Thông tin Truyền thông, Hà Nội Sách, tạp chí
Tiêu đề: Các phương pháp sử dụng trong chuẩn nén ảnh JPEG
Tác giả: Nguyễn Hoài Nam
Năm: 2004
3. Nguyễn Phan Tấn – Đặng Nguyễn Đức Tiến (2005),Image Compression, Đại học Khoa học Tự nhiên Thành phố Hồ Chí Minh Sách, tạp chí
Tiêu đề: Image Compression
Tác giả: Nguyễn Phan Tấn – Đặng Nguyễn Đức Tiến
Năm: 2005
4. Ngô Văn Sỹ, Xử lý ảnh số, Đại học Bách khoa – Đại học Đà Nẵng Sách, tạp chí
Tiêu đề: Xử lý ảnh số
5. Đỗ Ngọc Anh (2006),Nén ảnh sử dụng biến đổi Wavelet và ứng dụng trong các dịch vụ dữ liệu đa phương tiện di động, Luận văn Thạc sĩ khoa học, Trường Đại học Bách khoa Hà Nội, Hà Nội Sách, tạp chí
Tiêu đề: Nén ảnh sử dụng biến đổi Wavelet và ứng dụng trong các dịch vụ dữ liệu đa phương tiện di động
Tác giả: Đỗ Ngọc Anh
Năm: 2006
6. International Telecommunication Union (1993),Information technology digital compression and coding of continuous-tone still image requirements and guidelines, Switzerland Sách, tạp chí
Tiêu đề: Information technology digital compression and coding of continuous-tone still image requirements and guidelines
Tác giả: International Telecommunication Union
Năm: 1993
7. Gregory K. Wallace (1991), The JPEG Still Picture Compression Standard, Digital Equipment Corporation Sách, tạp chí
Tiêu đề: The JPEG Still Picture Compression Standard
Tác giả: Gregory K. Wallace
Năm: 1991
8. C. A Christopoulos – T. Ebrahimi – A. N. Skodras (1997), The jpeg2000 still image coding system: an overview, Greece Sách, tạp chí
Tiêu đề: The jpeg2000 still image coding system: an overview
Tác giả: C. A Christopoulos – T. Ebrahimi – A. N. Skodras
Năm: 1997
9. Eric Hamilton (1992),JPEG File Interchange Format, US Sách, tạp chí
Tiêu đề: JPEG File Interchange Format
Tác giả: Eric Hamilton
Năm: 1992
10. R.C. Gonzalez and R.E. Woods,Digital Image Processing, chapter 8 Khác
11. Rahul Garg, Varun Gulshan (2005),JPEG image Compression Khác

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w