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

Thuật toán nén ảnh JPEG

18 2,3K 106

Đ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

Định dạng
Số trang 18
Dung lượng 422,47 KB

Nội dung

Mục lục 1. Sơ đồ khối thuật toán nén ảnh JPEG. 1 2. Phân khối 2 3. Biến đổi DCT 3 3.1 Biến đổi DCT một chiều 3 3.2 Biến đổi DCT hai chiều 4 4 Lượng tử hóa 5 5 Mã hóa 7 5.1 Các phương pháp mã hóa 7 5.2 Mã hóa các hệ số DCT Fq(u,v) 10

Trang 1

Mục lục

1. Sơ đồ khối thuật toán nén ảnh JPEG.

Trang 2

2. Phân khối

Biến đổi Cosin đối với các khối có kích thước nhỏ sẽ làm tăng độ chính xác khi tính toán với số dấu phẩy tĩnh, giảm thiểu sai số do làm tròn sinh ra Do điểm ảnh hàng xóm có độ tương quan cao hơn, do đó phép biến đổi Cosin cho từng khối nhỏ

sẽ tập trung năng lượng hơn và một số ít các hệ số biến đổi Việc loại bớt một số

hệ số năng lượng thấp trong các khối chỉ tạo ra mất mát thông tin cục bộ giúp nâng cao chất lượng ảnh

Chuyển ảnh thành các khối (block) có cùng kích thước và mỗi block là một ma trận điểm ảnh 8×8 pixel được lấy từ một ảnh màn hình theo chiều từ trái sang phải,

từ trên xuống dưới

Lí do kích thước mỗi block là 8×8:

• Qua việc nghiên cứu cho thấy hàm tương quan suy giảm rất nhanh khi khoảng cách giữa các pixel vượt quá 8

• Độ phức tạp về tính toán sẽ tăng nếu kích thước block tăng Tiện lợi cho việc tính toán và thiết kế phần cứng

Trang 3

Giả sử ảnh gốc:

3. Biến đổi DCT

Vì ảnh gốc có kích thước rất lớn cho nên trước khi đưa vào biến đổi DCT, ảnh được phân chia thành các khối vuông, mỗi khối này thường có kích thước 8 x 8 pixel và biểu diễn các mức xám của 64 điểm ảnh, các mức xám này là các số

nguyên dương có giá trị từ 0 đến 255 Việc phân khối này sẽ làm giảm được một phần thời gian tính toán các hệ số chung, mặt khác biến đổi cosin đối với các khối nhỏ sẽ làm tăng độ chính xác khi tính toán với dấu phẩy tĩnh, giảm thiểu sai số do làm tròn sinh ra

Giá trị x(n1, n2) biểu diễn các mức xám của ảnh trong miền không gian, X(k1, k2) là các hệ số sau biến đổi DCT trong miền tần số

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

Biến đổi DCT một chiều được định nghĩa như sau:

Với

Khi dãy đầu vào x(n) là thực thì dãy các hệ số X(k) cũng là số thực Biến đổi

DCT một chiều giúp ta hiểu rõ hơn về biến đổi DCT 2 chiều dưới đây

Trang 4

3.2 Biến đổi DCT hai chiều

Biến đổi DCT được thực hiện trên một khối gồm 8 pixel và 8 dòng của ảnh thật đã lấy mẫu để cho ra một ma trận 8 x 8 với các điểm là các hệ

sốDCT.Các hệ số DCT nói lên sự biến đổi tần số giữa các mẫu theo chiều ngang và chiều dọc Phép toàn DCT được mô tả như sau:

Trong đó:

x,y : là tọa độ pixel của ảnh gốc

u,v : là độ độ hệ số DCT

N: là kích thước ma trận thực hiện phép biến đổi

• Thuật toán biến đổi DCT hai chiều cho mỗi khối trong trường hợp này sẽ bao gồm 16 phép biến đổi DCT một chiều

• Đầu tiên, người ta biến đổi nhanh Cosin một chiều cho các dãy điểm ảnh trên mỗi hàng Lần lượt thực hiện cho 8 hàng

• Sau đó biến đổi DCT một chiều theo từng cột của ma trận vừa thu được sau

8 phép biến đổi trên Cũng lần lượt thực hiện cho 8 cột

 Ma trận cuối cùng sẽ là ma trận hệ số biến đổi của khối tương ứng

Thành phần chói Y sau khi số hóa sẽ có biên độ các mẫu nằm trong khoảng 0-255, các mẫu của thành phần màu CR, CB có biên độ cực đại là ±128 Để có thể sử dụng một bộ mã hóa DCT cho cả tín hiệu chói và màu, tín hiệu Y được dịch mức xuống dưới bằng cách trừ 128 từ mỗi giá trị pixel trong block 8x8

Từ ma trận ảnh gốc ở trên ta dịch mức xám -128, ta được ma trận:

Trang 5

Biến đổi DCT ta được ma trận:

4 Lượng tử hóa

Bước tiếp theo của quá trình nén ảnh là lượng tử hóa các hệ số DCT F(u,v) với mục đích làm giảm số lượng bit cần thiết dùng để mô tả những hệ số đó

Đầu vào của khối nén ảnh gồm 2 thành phần: một chiều và xoay chiều

Các hệ số tương ứng với tần số thấp thường có giá trị lớn, những hệ số này

chứa phần lớn năng lượng của tín hiệu, do đó chúng phải được lượng tử hóa với độ chính xác cao Riêng hệ số DC cần mã hóa với độ chính xác cao nhất, vì hệ số này

là giá trị độ chói trung bình của từng block ảnh Sự thay đổi độ chói trung bình của các block sẽ ảnh hưởng rất nhiều tới chất lượng của ảnh nén

Trang 6

Để thực hiện quá trình nén dữ liệu, ma trận các hệ số khai triển sau DCT phải được chia cho bảng trọng số Q(u,v) để loại bỏ một phần các hệ số DCT có biên độ nhỏ (thường là các thành phần cao tần)

JPEG sử dụng phương pháp lượng tử không đồng đều, các hệ số có tần số thấp được chia cho các giá trị nhỏ, các hệ số ứng với tần số cao được chia cho cácgiá trị lớn hơn, kết quả sẽ được làm tròn (bỏ đi các phần thập phân):

Fq(u,v) = round Với ma trận lượng tử hóa:

Fq(0,0) = round = -26

Fq(0,1) = round = -3

Fq(0,2) = round = -6

.

.

Fq(8,8) = round = 0

Ta được ma trận lượng ảnh sau khi lượng tử hóa:

Trang 7

5 Mã hóa

5.1 Các phương pháp mã hóa

Phương pháp mã hóa loạt dài (Run Level Coding)

Phương pháp mã hóa loạt dài lúc đầu được phát triển dành cho ảnh số 2 mức: mức đen (1), và mức trắng (0) như các văn bản trên nền trắng, trang in, các bản vẽ kỹ thuật

Nguyên tắc của phương pháp là phát hiện một loạt các bít lặp lại, thí dụ như một loạt các bít 0 nằm giữa hai bít 1, hay ngược lại, một loạt bít 1 nằm giữa hai bít 0 Phương pháp này chỉ có hiệu quả khi chiều dài dãy lặp lớn hơn một ngưỡng nào đó Dãy các bít lặp gọi là loạt hay mạch (run) Tiếp theo, thay thế chuỗi đó bởi một chuỗi mới gồm 2 thông tin: chiều dài chuỗi và bít lặp (ký tự lặp) Như vậy, chuỗi thay thế sẽ có chiều dài ngắn hơn chuỗi cần thay

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

Phương pháp mã hóa Huffman là phương pháp dựa vào mô hình thông kê Dựa vào dữ liệu gốc, người ta tính tần suất xuất hiện của các ký tự Việc tính tần suất được thực hiện bởi cách duyệt tuần tự tệp gốc từ đầu đến cuối Việc xử lý ở đây tính theo bit Trong phương pháp này người ta gán cho các ký tự có tần suất cao một từ mã ngắn, các ký tự có tần suất thấp từ mã dài

Nói một cách khác, các ký tự có tần suất càng cao được gán mã càng ngắn và ngược lại Rõ ràng với cách thức này, ta đã làm giảm chiều dài trung bình của từ

mã hóa bằng cách dùng chiều dàibiến đổi Tuy nhiên, trong một số tình huống khi tần suất là rất thấp, ta có thể không được lợi một chút nào, thậm chí còn bị thiệt một ít bit

Trang 8

Thuật toán

Thuật toán bao gồm 2 bước chính:

- Giai đoạn thứ nhất: tính tần suất của các ký tự trong dữ liệu gốc: duyệt tệp gốc một cách tuần tự từ đầu đến cuối để xây dựng bảng mã Tiếp sau đó là sắp xếp lại bảng mã theo thứ tự tần suất giảm dần

- Giai đoạn thứ hai: duyệt bảng tần suất từ cuối lên đầu để thực hiện ghép 2 phần tử

có tần suất xuất hiện thấp nhất thành một phần tử duy nhất Phần tử này có tần suất bằng tổng 2 tần suất thành phần Tiến hành cập nhật lại bảng và đương nhiên loại

bỏ 2 phần tử đã xét Quá trình được lặp lại cho đến khi bảng chỉ có một phần tử Quá trình này gọi là quá trình tạo cây mã Huffman vì việc tập hợp được tiến hành nhờ một cây nhị phân 2 nhánh Phần tử có tần suất thấp ở bên phải, phần tử kia ở bên trái Với cách tạo cây này, tất cả các bit dữ liệu/ký tự là nút lá; các nút trong là các nút tổng hợp

Mã hóa: mỗi lần xuống bên phải ta thêm 1 bit “1” vào từ mã; mỗi lần xuống bên trái ta thêm một bit “0”

Ví dụ:

Trang 9

Bảng tần suất Bảng tần suất theo thứ tự giảm dần

Lưu ý rằng, trong phương pháp Huffman, mã của ký tự là duy nhất và không mã nào là phần bắt đầu của mã khác Vì vậy, khi đọc tệp nén từng bit từ đầu đến cuối

ta có thể duyệt cây mã cho đến một lá, tức là ký tự đã được giải nén

Trang 10

Bảng từ mã gán cho các kí tự bởi mã Huffman

5.2 Mã hóa các hệ số DCT Fq(u,v)

• Để mã hóa entropy các hệ số Fq(u,v), ta cần biến đổi hệ số Fq(u,v) thành các chuỗi số một chiều

• Hệ số Fq(0,0) (thành phần 1 chiều) là thành phần trung bình của mỗi block được đưa vào bộ mã hóa vi sai (DPCM- Differential pulse code modulation)

• Các hệ số khác (thành phần xoay chiều) trong từng block được đọc theo kiểu zig-zag và đưa tới bộ mã hóa loạt dài (RLC)

• Cuối cùng dữ liệu từ 2 bộ mã hóa DPCM và RLC được mã hóa một lần nữa bằng mã Entropy

• Dữ liệu nén, các bảng mã, bảng lượng tử được kết hợp lại thành một file theo chuẩn JPEG

Mã hóa thành phần một chiều.

- Các hệ số DC là giá trị trung bình của các khối ảnh 8x8 Độ chói trung bình của các block ảnh gần nhau thường ít biến đổi, do đó trong chuẩn nén JPEG, các hệ số DC được mã hóa theo phương

pháp DPCM

- Để tăng hiệu suất nén, kết quả nhận được sau đó được mã hóa tiếp bằng mã Huffman

- Trên lý thuyết, dải động của các giá trị nhận được sau khi mã hóa DPCM lớn gấp đôi dải động của các hệ số DCT, có nghĩa là thành phần này sẽ có giá trị nằm trong khoảng -211 đến 211-1 Số bit cần

để mã hóa thành phần 1 chiều có thế là 11

• Sơ đồ khối mã hóa thành phần 1 chiều DC

Trang 11

Hệ số DC Từ mã DC

Hệ số DC của các khối DCT được lần lượt đưa tới bộ DPCM Thành phần sai số giữa hai hệ số DC liên tiếp sẽ được mã hóa trong bộ mã Huffman

Trang 12

 Quá trình mã hóa Huffman được thực hiện cho thành phần DC như sau:

• Dò tìm trong bảng phân loại để phân loại giá trị ∆DC (phân loại chiều dài từ mã dùng để mã hóa thành phần ∆DC)

• Dùng bảng mã Huffman cho thành phần DC để tìm ra từ mã cho loại

∆DC tìm được ở bước 1

• Mã hóa nhị phân giá trị ∆DC

• Ghép các từ mã Huffman và giá trị nhị phân của ∆DC để có được từ

mã cho thành phần DC

Trên bảng 1 và 2 là các bảng tra cần thiết để thực hiện mã hóa thành phần

DC

-1 1 -3, -2 2, 3 -7,-6,-5,-4 4,5,6,7 -15,…,-8 8,…,15 -31,…,-16 16,…,31 -63,…,-32 32,…,63 -127,…,-64 64,…,127 -255,…-128 128,…,255 -511,…,-256 256,…,511 -1023,…,-512 512,…,1023 -2047,…,-1024 1024,…,2047

1 2 3 4 5 6 7 8 9 10 11

Bảng 1: phân loại hệ số DC và AC

-255,…-128 128,…,255 8 1111 110 -127,…,-64 64,…,127 7 1111 10 -63,…,-32 32,…,63 6 1111 0 -31,…,-16 16,…,31 5 1110 -15,…,-8 8,…,15 4 110 -7,-6,-5,-4 4,5,6,7 3 101

Trang 13

-3, -2 2, 3 2 01

Bảng 2: bảng mã Huffman cho thành phần DC

Ví dụ:

Ta có ma trận hệ số DCT:

Thành phần DC trong khối ma trận là DCn=15

Giả sử DCn-1=12

 Kết quả mã hóa DPCM là =DCn-DCn-1 = 3

Trên bảng phân loại hệ số =3 thuộc loại 2

Dựa vào bảng mã Huffman ta có từ mã tương ứng với loại 2 là 01 (2 chính là

độ dài từ mã)

Giá trị =3 mã hóa nhị phân là 11

 Từ mã DC n là 0111

Mã hóa thành phần xoay chiều.

Quét zig-zag:

Kĩ thuật nén JPEG sử dụng phương pháp quét zig-zag Tác dụng của sắp xếp lại theo thứ tự ZigZag là tạo ra nhiều loại hệ số giống nhau, khi dùng mã RLC hiệu quả sẽ nén sẽ tăng lên

Trang 14

Chúng ta biết rằng năng lượng của khối hệ số giảm dần từ góc trên bên trái xuống góc dưới bên phải nên việc sắp xếp lại các hệ số theo thứ tự ZigZag sẽ tạo điều kiện cho các hệ số xấp xỉ nhau (cùng mức lượng tử) nằm trên một dòng

Sơ đồ khối bộ mã hóa thành phần AC:

Trang 16

Các hệ số AC Từ mã AC

Trang 17

Chuỗi hệ số AC được lần lượt đưa vào bộ mã hóa RLC Ở đầu ra ta nhận được các

từ mã bao gồm hai thành phần:

• Giá trị chạy là số lượng bit "0" đứng trước hệ số khác "0" đang được mã hóa

• Biên độ của hệ số khác "0" nói trên Từ mã Huffman ứng với cặp giá trị trên được tìm ra trong bảng phân loại (bảng 1 ở trên) và bảng mã Huffman cho thành phần AC

 Từ mã AC sẽ bao gồm từ mã Huffmanvà giá trị biên độ của hệ số AC

Ví dụ từ ma trận DCT ở trên, Sau quá trình quét zig-zag, ta nhận được chuỗi hệ số

AC sau:

0, -2, -1, -1, -1, 0 , 0,-1, 0, 0……

Chuỗi bit nhận được sau khi mã hóa RLC:

(1,-2) (0, -1) (0, -1) (0, -1) (2,-1) (EOB)

Từ mã cuối cùng để báo hiệu kết thúc khôi: EOB (end of block)

Sử dụng bảng phân loại ta tìm được loại của biên độ các hế số

(1,2)(-2), (0,1)(-1), (0,1)(-1), (0,1)(-1), (2,1)(-1), (0,0)

Ý nghĩa mỗi giá trị (a,b) c:

a là giá trị chạy

b là loại

c là biên độ

Bảng mã Huffman cho thành phần AC

Trang 18

4 1 6 111011

(1,2)(-2) được mã hóa là 11100101

 Kết quả mã hóa cả thành phần AC và DC ta được chuỗi bit:

Ngày đăng: 14/05/2015, 18:08

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w