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

Tìm hiểu các phương pháp nén ảnh và ứng dụng biến đổi wavelet trong thông tin di động

66 1,1K 2

Đ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 66
Dung lượng 1,22 MB

Nội dung

Trong đồ án tốt nghiệp “Tìm Hiểu Các Phương Pháp Nén Ảnh Và Ứng Dụng Biến Đổi Wavelet Trong Thông Tin Di Động” được sự hướng dẫn của cô giáo NGÔ THÚY NGÂN em đã nghiên cứu một số phương

Trang 1

MỤC LỤC

LỜI NÓI ĐẦU 2

LỜI CẢM ƠN 2

LỜI CAM ĐOAN 2

THUẬT NGỮ TIẾNG ANH 2

DANH MỤC CÁC HÌNH 2

DANH MỤC CÁC BẢNG 2

CHƯƠNG 1: TỔNG QUAN VỀ NÉN ẢNH 2

1.1 Giới thiệu về ảnh số và xử lý ảnh số: 2

1.1.1 Ảnh số: 2

1.1.2 Xử lý ảnh số: 2

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

1.3 Các khái niệm cơ bản: 2

1.4 Cách phân loại các phương pháp nén ảnh: 2

1.4.1 Cách phân loại dựa vào nguyên lý nén: 2

1.4.2 Cách phân loại dựa vào cách thức thực hiện nén: 2

1.4.3 Cách phân loại dựa vào lý thuyết mã hoá: 2

1.4.4 Quá trình nén và giải nén: 2

Chương 2: CÁC PHƯƠNG PHÁP NÉN ẢNH 2

2.1 Phương pháp mã hoá độ dài loạt RLE: 2

2.1.1 Nguyên tắc: 2

2.1.2 Thuật toán: 2

2.1.3 Một số thủ tục chương trình: 2

2.2 Phương pháp mã hoá Huffman: 2

2.2.1 Nguyên tắc: 2

2.2.2 Thuật toán: 2

`2.2.3 Một số thủ tục chương trình: 2

2.3 Phương pháp mã hoá LZW: 2

2.3.1 Nguyên tắc: 2

2.3.2 Thuật toán: 2

2.3.3 Một số thủ tục chương trình: 2

2.4 Phương pháp mã hoá JPEG: 2

2.4.1 Nguyên tắc: 2

2.4.3 Một số thủ tục chương trình: 2

Chương 3: BIẾN ĐỔI WAVELET VÀ ỨNG DỤNG TRONG THÔNG TIN DI ĐỘNG 2

3.1 Biến đổi wavelet 2

Trang 2

3.2 Giới thiệu một số họ Wavelet 2

3.2.1 Biến đổi Wavelet Haar 2

3.2.2 Biến đổi Wavelet Meyer 2

3.2.3 Biến đổi Wavelet Daubechies 2

3.3 Một số ứng dụng nổi bật của Wavelet 2

3.3.1 Nén tín hiệu 2

3.3.2 Khử nhiễu 2

3.3.3 Mã hoá nguồn và mã hoá kênh 2

3.4 Chuẩn nén ảnh tĩnh dựa trên biến đổi Wavelet-JPEG2000 2

3.4.1 Lịch sử ra đời và phát triển chuẩn JPEG2000 2

3.4.2 Các tính năng của JPEG2000 2

3.4.3 Các bước thực hiện nén ảnh theo chuẩn JPEG2000 2

3.4.4 So sánh chuẩn JPEG2000 với JPEG và các chuẩn nén ảnh tĩnh khác 2

3.4.5 Ứng dụng Wavelet trong thông tin di động 2

Nhận Xét Của Giáo Viên Hướng Dẫn 2

Trang 3

LỜI NÓI ĐẦU

Ngày nay, cùng với sự phát triển không ngừng của khoa học và công nghệ thìmáy tính đóng vai trò ngày càng quan trọng và không thể thiếu trong cuộc sống xã hộiloài người Việc trao đổi thông tin của con người trong tất cả các ngành, các lĩnh vựccủa đời sống ngày càng trở nên cần thiết cùng với sự ra đời và phát triển của mạngInternet

Xử lý ảnh là một ngành khoa học còn tương đối mới mẻ so với nhiều ngànhkhoa học khác nhưng nó đang được tập trung nghiên cứu và phát triển vì những ứngdụng thực tiễn của nó trong nhiều ngành, lĩnh vực khác nhau Trong đó “Nén ảnh” làmột phần của xử lý ảnh có ứng dụng to lớn trong truyền thông và trong lưu trữ, đã córất nhiều phương pháp nén ảnh được ra đời và không ngừng được cải tiến để ngàycàng hoàn thiện đem lại hiệu quả nén cao và cho chất lượng ảnh tốt nhất Trong đồ án

tốt nghiệp “Tìm Hiểu Các Phương Pháp Nén Ảnh Và Ứng Dụng Biến Đổi Wavelet Trong Thông Tin Di Động” được sự hướng dẫn của cô giáo NGÔ THÚY

NGÂN em đã nghiên cứu một số phương pháp nén ảnh phổ biến như: mã loạt dàiRLE, HUFFMAN, LZW, JPEG và phương pháp nén ảnh JPEG2000 dựa trên biến đổiWavelet với những đặc tính vượt trội so với các chuẩn nén trước đó đem lại hiệu quảnén cao, cho ảnh nén chất lượng tốt và nhiều những ưu điểm khác mà các chuẩn néntrước đó không thể có

Nội dung bài đồ án bao gồm các chương như sau:

- Chương 1: Tổng quan về nén ảnh

- Chương 2: Các phương pháp nén ảnh

- Chương 3: Biến đổi Wavelet và ứng dụng trong thông tin di động

Trang 4

THUẬT NGỮ TIẾNG ANH

CWT Biến đổi Wavelet liên tục (Continuous Wavelet Transform) DCT Biến đổi Cosine rời rạc (Discrete Cosine Transform)

DFT Biến đổi Fourier rời rạc (Discrete Fourier Transform)

DPCM Điều xung mã vi sai (Differized Pulse Code Modulation)

DWT Biến đổi Wavelet rời rạc (Discrete Wavelet Transform)

EZW Wavelet cây zero (Embedded Zerotree Wavelet)

HVS Hệ thống cảm nhận hình ảnh của mắt người

(Human Visual System) IDWT Biến đổi Wavelet rời rạc ngược

JPEG Chuẩn nén ảnh của ủy ban JPEG quốc tế

(Joint Photographic Experts Group) JPEG2000 Chuẩn nén ảnh JPEG2000

MRA Phân tích đa phân giải (Multi Resolution Analysis)

MSE Sai số bình phương trung bình (Mean Square Error)

PCM Điều xung mã(Pulse Code Modulation)

PSNR Tỷ số tín hiệu đỉnh trên nhiễu (Peak Signal to Noise Ratio) QMF Lọc gương cầu tứ phương (Quardrature Mirror Filters)

RLC Mã hoá loạt dài (Run Length Coding)

ROI Kỹ thuật mã hóa ảnh theo vùng (Region Of Interest) – Một

tính năng mới nổi bật của JPEG2000 SPIHT Phương pháp mã hoá phân cấp theo vùng

(Set partitioning in hierarchical trees) STFT Biếnđổi Fourier thời gian ngắn (Short Time Fourier Transform) Wavelet Biến đổi băng con Wavelet

Trang 5

DANH MỤC CÁC HÌNH

Hình 1.1 Biểu diễn của một mức xám của ảnh số 2

Hình 1 2: Các giai đoạn chính trong xử lý ảnh 2

Hình 1.3: Quá trình nén và giải nén 2

Hình 2.1: Quá trình nén ảnh theo chuẩn JPEG 2

Hình 2.2: Quá trình giải nén ảnh JPEG 2

Hình 2.3: Mô tả giải thuật biến đổi nhanh 2

Hình 2.4: Sơ đồ biến đổi Cosin ngược 2

Hình 2.5: Minh hoạ khối Zig-Zag 2

Hình 3.1: Phân tích đa phân giải áp dụng cho biểu diễn tín hiệu 2

Hình 3.2: Hàm ψ (t ) của biến đổi Haart ) của biến đổi Haar 2

Hình 3.3: Hàm ψ (t ) của biến đổi Haart ) của biến đổi Meyer 2

Hình 3.4: Hàm ψ (t ) của biến đổi Haart ) của họ biến đổi Daubechies n với n=2, 3, 7, 8 2

Hình 3.5: Trình tự mã hoá (t ) của biến đổi Haara) và giải mã JPEG2000 (t ) của biến đổi Haarb) 2

Hình 3.6: Minh hoạ ảnh với RGB và YcrCb 2

Hình 3.7: Phương pháp Lifting 1D dùng tính toán biến đổi Wavelet 2

Hình 3.8: Minh hoạ cây tứ phân (t ) của biến đổi Haara) và sự phân mức (t ) của biến đổi Haarb) 2

Hình 3.9: Hai cách sắp xếp thứ tự các hệ số biến đổi 2

Hình 3.10: So sánh JPEG và JPEG2000 2

Hình 3.11: Minh hoạ tính năng ROI 2

Hình 3.12: Sơ đồ khối quá trình nén ảnh bằng Wavelet 2

Hình 3.13: (t ) của biến đổi Haara) Biến đổi Wavelet 2D mức 3 và (t ) của biến đổi Haarb) Minh hoạ bằng ảnh “CASTLE” 2

Hình 3.14: Phân bố số học các hệ số thông cao sau phép biến đổi Wavelet mức 2 2

Hình 3.15: Dữ liệu sau phép biến đổi Wavelet với hai kỹ thuật loại bỏ HH và H* 2

Trang 6

DANH MỤC CÁC BẢNGBảng 1: Cấu trúc từ điển 2Bảng 2: So sánh JPEG và JPEG2000 2Bảng 3: So sánh tính năng của JPEG2000 với các chuẩn nén ảnh tĩnh khác 2

Trang 7

CHƯƠNG 1 TỔNG QUAN VỀ NÉN ẢNH

1.1 Giới thiệu về ảnh số và xử lý ảnh số:

1.1.1 Ả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ểudiễn số của các ảnh đa mức xám, một ảnh được biểu diễn dưới dạng một ma trận haichiề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)

- Với ảnh đa cấp xám: Nếu dùng 8 bit (1 byte) để biểu diễn mức xám, thì

số các mức xám có thể biểu diễn được là 28 hay 256 Mỗi mức xám được biểu diễndưới dạng là một số nguyên nằm trong khoảng từ 0 đến 255, với mức 0 biểu diễn chomức cường độ đen nhất và 255 biểu diễn cho mức cường độ sáng nhất

- Với ảnh màu: Cách biểu diễn cũng tương tự như với ảnh đen trắng, chỉ khác

là các số tại mỗi phần tử của ma trận biểu diễn cho ba màu riêng rẽ gồm: đỏ (red), lục(green) và lam (blue) Để biểu diễn cho một điểm ảnh màu cần 24 bit, 24 bit này đượcchia thành ba khoảng 8 bit Mỗi khoảng này biểu diễn cho cường độ sáng của mộttrong các màu chính

Hình 1.1 Biểu diễn của một mức xám của ảnh số.

1.1.2 Xử lý ảnh số:

Xử lý ảnh là một khoa học mặc dù còn tương đối mới so với nhiều ngành khoahọc khác, nhất là trên quy mô công nghiệp Xử lý ảnh số có rất nhiều ứng dụng nhưlàm nổi các ảnh trong y học, khôi phục lại ảnh do tác động của khí quyển trong thiên

Trang 8

văn học, tăng cường độ phân giải của ảnh truyền hình mà không cần thay đổi cấu trúcbên trong của hệ thống chuyển tải, nén ảnh trong khi truyền đi xa hoặc lưu trữ.

Các giai đoạn chính trong xử lý ảnh có thể được mô tả trong hình sau:

dụ về lưu trữ ảnh số và truyền đi xa với đường truyền 9600 baud (9600 bps) để thấy rõ

sự cần thiết của việc nén ảnh:

• Ảnh đa cấp xám hay ảnh 256 màu có kích thước 800 x 600, 8 bit/điểm ảnh,cần 3.840.000 bit lưu trữ và mất 6.67 phút để truyền

• Ảnh màu RGB (24 bit/điểm ảnh ) cùng độ phân giải như vậy cần hơn 10 triệubit để lưu trữ và 20 phút để truyền

THU NHẬN

ẢNH

ẢNH NHẬNDẠNG CAMERA

SENSOR

LƯU TRỮ

LƯU

HỆ QUYẾT ĐỊNH

Trang 9

• Một phim âm bản có kích thước 24×36 mm (35mm) chia bằng các khoảngcách nhau 12 mm, vào khoảng 3000×2000 điểm, 8 bit/pixel, yêu cầu 48 triệu bit cholưu giữ ảnh và 83 phút để truyền.

Qua ví dụ trên ta thấy nhiều vấn đề trong việc lưu trữ và truyền tải ảnh số hoá.Nén ảnh có nhiều ứng dụng trong thực tế như: truyền các văn bản đồ hoạ qua đườngđiện thoại (Fax), nén ảnh trong y tế và truyền hình cáp Chính sự ứng dụng trong nhiềulĩnh vực của nén ảnh cùng với sự tiến bộ trong lĩnh vực vi điện tử dẫn đến sự ra đờicác chuẩn nén ảnh

Nén ảnh đạt được bằng cách loại bỏ các phần dư thừa trong ảnh đã được số hoá

Dư thừa có thể là dư thừa thông tin về không gian, dư thừa về cấp xám hay dư thừa vềthời gian:

• Dư thừa thông tin về không gian: trong một bức ảnh luôn tồn tại sự tươngquan giữa các điểm ảnh cạnh nhau

• Dư thừa thông tin về cấp xám: là dư thừa dựa vào sự tương quan giữa các màusắc cạnh nhau

• Dư thừa thông tin về thời gian: Trong một chuỗi ảnh video, tồn tại sự tươngquan giữa các điểm ảnh của các frame khác nhau

1.3 Các khái niệm cơ bản:

• Pixel (picture element): phần tử ảnh

Ảnh trong thực tế là một ảnh liên tục về không gian và về giá trị độ sáng Để cóthể xử lý ảnh bằng máy tính cần thiết phải tiến hành số hoá ảnh Như vậy một ảnh làmột tập hợp các pixel Mỗi pixel là gồm một cặp toạ độ x, y và màu Cặp toạ độ x,ytạo nên độ phân giải (resolution) Màn hình máy tính có nhiều loại với độ phân giảikhác nhau: 320 x 200, 640x350, 800x600, 1024x768,…

• Nén dữ liệu

Trang 10

Nén dữ liệu là quả trình giảm dung lượng thông tin “dư thừa” trong dữ liệu gốc

và làm cho lượng thông tin thu được sau nén thường nhỏ hơn dữ liệu gốc rất nhiều Dovậy, tiết kiệm được bộ nhớ và giảm thời gian trao đổi dữ liệu trên mạng thông tin màlại cho phép chúng ta khôi phục lại dữ liệu ban đầu

• Tỷ lệ nén

Tỷ lệ nén là một trong các đặc trưng quan trọng của mọi phương pháp nén Tỷ

lệ nén được định nghĩa như sau:

Tỷ lệ nén = 1/r*%

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.

Như vậy hiệu suất nén = (1- tỷ lệ nén)*100%

Đối vơi ảnh tĩnh, kích thước chính là số bit biểu diễn toàn bộ bức ảnh.

Đối với ảnh video, kích thước chính là số bit để biểu diễn một khung hình video

(video frame)

1.4 Cách phân loại các phương pháp nén ảnh:

1.4.1 Cách phân loại dựa vào nguyên lý nén:

Nén bảo toàn thông tin (losses compression): bao gồm các phương pháp nén màsau khi giải nén sẽ thu đựơc chính xác dữ liệu gốc Tuy nhiên nén bảo toàn thông tinchỉ đạt hiệu quả nhỏ so với phương pháp nén không bảo toàn thông tin

Nén không bảo toàn thông tin (lossy compression): bao gồm các phương pháp

nén sau khi giải nén sẽ không thu được dữ liệu như bản gốc Các phương pháp nàyđược gọi là “tâm lý thị giác” đó là lợi dụng tính chất của mắt người chấp nhận một sốvặn xoắn trong ảnh khi khôi phục lại Phương pháp này luôn đem lại hiệu quả cao doloại bỏ đi những thông tin dư thừa không cần thiết

1.4.2 Cách phân loại dựa vào cách thức thực hiện nén:

Phương pháp không gian (Spatial Data Compression): các phương pháp này

thực hiện nén bằng cách tác động trực tiếp lên việc lấy mẫu của ảnh trong miền khônggian

Phương pháp sử dụng biến đổi (Transform Coding): gồm các phương pháp tác

động lên sự biến đổi của ảnh gốc chứ không tác động trực tiếp

Trang 11

1.4.3 Cách phân loại dựa vào lý thuyết mã hoá:

Các phương pháp nén thế hệ thứ nhất: gồm các phương pháp có mức độ tính

toán đơn giản như lấy mẫu, gán từ mã,

Các phương pháp nén thế hệ thứ hai: gồm các phương pháp dựa vào mức độ

bão hoà của tỷ lệ nén bằng cách sử dụng các phép toán tổ hợp đầu ra một cách hợp lýhoặc sử dụng biểu diễn ảnh như: phương pháp kim tự tháp Laplace, phương pháp dựavào vùng gia tăng, phương pháp tách hợp

1.4.4 Quá trình nén và giải nén:

Gồm 2 công đoạn:

Nén: dữ liệu gốc qua bộ mã hoá dữ liệu, bộ mã hoá này thực hiện nén dữ liệu

đến một mức thích hợp cho việc lưu trữ và truyền dẫn thông tin Quá trình này sẽ thựchiện việc loại bỏ hay cắt bớt những dư thừa của ảnh để thu được thông tin cần thiếtnhưng vẫn đảm bảo được chất lượng ảnh

Giải nén: dữ liệu nén đi qua bộ giải mã dữ liệu, bộ giải mã sẽ thực hiện giải nén

để thu được dữ liệu gốc ban đầu.Việc giải nén này thường phải dựa vào các thông tin

đi kém theo dữ liệu nén, tuỳ thuộc vào kiểu nén hay phương pháp nén mà dữ liệu giảinén được có hoàn toàn giống với dữ liệu gốc ban đầu hay không

Tóm lại quá trình nén và giải nén dữ liệu có thể mô tả một cách tóm tắt theo sơ

đồ dưới đây

Hình 1.3: Quá trình nén và giải nén

QUÁ TRÌNH NÉNQUÁ TRÌNH GIẢI

NÉN

Trang 12

Chương 2 CÁC PHƯƠNG PHÁP NÉN ẢNH

2.1 Phương pháp mã hoá độ dài loạt RLE:

Mã hoá theo độ dài loạt RLE (Run Length Encoding) là một phương pháp nénảnh dựa trên sự cắt bớt các dư thừa về không gian (một vài hình ảnh có vùng màu lớnkhông đổi đặc biệt đối với ảnh nhị phân) Loạt được định nghĩa là dãy các phần tửđiểm ảnh (pixel) liên tiếp có cùng chung một giá trị

2.1.1 Nguyên tắc:

Nguyên tắc của phương pháp này là phát hiện một loạt các điểm ảnh lặp lại liêntiếp, ví dụ: 110000000000000011 Ta thấy điểm ảnh có giá trị 0 xuất hiện nhiều lầnliên tiếp thay vì phải lưu trữ toàn bộ các điểm ảnh có giá trị 0 ta chỉ cần lưu trữ chúngbằng cách sử dụng các cặp (độ dài loạt, giá trị)

Trang 13

Cho một chuỗi nguồn d:

Đối với ảnh chiều dài của một dãy lặp có thể lớn hơn 255, nếu ta dùng 1 byte

để lưu trữ chiều dài thì sẽ không đủ Giải pháp được dùng là tách chuỗi đó thành 2chuỗi: một chuỗi có chiều dài là 255, chuỗi kia có chiều dài còn lại

Phương pháp nén RLE chỉ đạt hiệu quả khi chuỗi lặp lớn hơn 1 ngưỡng nhấtđịnh nào đó hay nói các khác trong ảnh cần nén phải có nhiều điểm ảnh kề nhau cócùng giá trị màu Do đó phương pháp này không đem lại cho ta kết quả một cách ổnđịnh vì nó phụ thuộc hoàn toàn vào ảnh nén chỉ thích hợp cho những ảnh đen trắnghay ảnh đa cấp xám

dữ liệu nguồn nghĩa là chỉ mã hoá độ dài loạt dữ liệu lặp lại Người ta đã đưa ra cách

đó là thêm kí tự tiền tố vào trước độ dài loạt, việc giải mã được thực hiện nếu gặp kí tựtiền tố với độ dài loạt và giá trị điểm ảnh theo sau

Ví dụ:

Ta có chuỗi nguồn:

d = 5 8 4 8 8 8 8 8 8 8 8 10 10 10 10 10 10 10 10 10

Giả sử kí tự tiền tố là “+” ta có : 5 8 4 +7 8 + 9 10

Trang 14

Ta có dựa vào độ tương quan này để có được hiệu quả nén cao, bằng việc áp dụng e(i)

= d(i) –d(i-1) sẽ thu được:

5 2 2 2 2 5 10 10 10 10 -3 5 5 5 5 5 5 5 5 5

Áp dụng phương pháp nén loạt dài ta dễ dàng thu được:

(5 1)( 2 4)(5 1)(10 5)(-3 1)(5 9)

2.1.2 Thuật toán:

Thuật toán như sau:

• Tiến hành duyệt trên từng hàng cho đến khi kết thúc vùng dữ liệu ảnh, trong

quá trình duyệt tiến hành kiểm tra để tìm ra những loạt có cùng giá trị đồng thời chú ýnhững kí hiệu xuống dòng (hay kết thúc dòng), kết thúc ảnh Bitmap

• Khi gặp loạt có độ dài > 3 thì nhảy đến chế độ nén ngược lại nhảy đến chế độ

không nén tuy nhiên nếu loạt > 255 thì sẽ tách ra chỉ mã < 255 sau đó mã tiếp phầncòn lại Ngoài ra còn các chế độ khác như: bắt đầu, kết thúc 1 dòng

• Kết thúc khi gặp kí hiệu kết thúc bitmap (end – o f- bitmap)

2.1.3 Một số thủ tục chương trình:

• Chương trình nén theo phương pháp RLE:

void CRLE::CompressInRLE8(BYTE*pSrcBits,CByteArray&pRLEBits, int&

RLE_size)

{

int line;

int src_index = 0, dst_index = 0, counter, i;

for ( line = 0; line < m_dib.dsBmih.biHeight; line++){

state_start:

if ( EndOfLine(src_index)){

pRLEBits[dst_index++] = 1;

pRLEBits[dst_index++] = pSrcBits[src_index];src_index++;

goto end_of_line;

Trang 15

tate_compress;

if ( EndOfLine(src_index+1)){

pRLEBits[dst_index++] = 1;

pRLEBits[dst_index++] = pSrcBits[src_index++];

pRLEBits[dst_index++] = 1;

pRLEBits[dst_index++] = pSrcBits[src_index++];

goto state_compress;

}elsegoto state_no_compress;

pRLEBits[dst_index++] = counter+1;

pRLEBits[dst_index++] = pSrcBits[src_index];src_index += counter +1;

goto end_of_line;

}}

pRLEBits[dst_index++] = counter + 1;

for (i = counter + 1; i > 0; i )

Trang 16

if ( 0 != ((counter+1) % 2) )pRLEBits[dst_index++];

goto state_compress;

}}

• Chương trình giải nén phương pháp RLE:

BOOL CRLE::DecRLE8(ifstream &fil, BYTE *pDest)

{

Trang 17

DWORD x, y, paddedwidth;

paddedwidth =BMPWIDTHBYTES(pInfo->biWidth*pInfo-> biBitCount);

BYTE FirstByte, SecondByte;

switch (SecondByte){

}

if ((SecondByte % 2) == 1)

if (!fil.get(ch)) return FALSE;

}}

else

{for (BYTE i = 0; i < FirstByte; i++)pDest[paddedwidth * y + x++] = SecondByte;

}}

return FALSE;

}

Trang 18

2.2 Phương pháp mã hoá Huffman:

2.2.1 Nguyên tắc:

Phương pháp mã hoá Huffman là phương pháp dựa vào mô hình thống kê.Người ta tính tần suất xuất hiện của các ký tự bằng cách duyệt tuần tự từ đầu tệp gốcđến cuối tệp Việc xử lý ở đây tính theo bit Trong phương pháp này các ký tự có tầnsuất cao một từ mã ngắn, các ký tự có tần suất thấp một từ mã dài Như vậy với cáchthức này ta đã làm giảm chiều dài trung bình của từ mã hoá bằng cách dùng chiều dàibiến đổi tuy nhiên cũng có trường hợp bị thiệt 1 ít bit khi tần suất là rất thấp

• Bước hai:

Duyệt bảng tấn suất từ cuối lên đầu để thực hiện ghép hai phần tử có tần suấtthấp thành một phần tử duy nhất có tần suất bằng tổng hai tần suất thành phần Cậpnhật phần tử này vào vị trí phù hợp trong bảng và loại bỏ hai phần tử đã xét Thực hiệncho đến khi bảng chỉ có một phần tử Đây là quá trình tạo cây nhị phân Huffman ,phần

tử có tần suất thấp ở bên phải, phần tử kia ở bên trái Sau khi cây đã tạo xong người tatiến hành gán mã cho các nút lá Việc mã hoá thực hiện theo quy định: mỗi lần xuốngbên phải ta thêm một bit ‘1’ vào từ mã, mỗi lần xuống bên trái ta thêm một bit‘0’ vào

từ mã

Quá trình giải nén cũng khá đơn giản được tiến hành theo chiều ngược lại Người ta cũng phải dựa vào bảng mã tạo ra trong giai đoạn nén (bảng này được lưu trữtrong cấu trúc đầu của tệp nén cùng với dữ liệu nén)

Ví dụ: Một tệp bất kỳ có tần suất xuất hiện của các kí tự số như bảng sau

Trang 19

Bảng tần suất sắp xếp giảm dần

0635241879

0.39060.15350.10510.09820.08240.05770.03880.02860.02350.0222

0 1 2 3 4 5 6 7 8 9

1532 152 323 412 226 385 602 92 112 87

Trang 20

Mô tả: Ta tiến hành hợp nhất hay cộng 2 tần suất nhỏ nhất ở cuối bảng để thu

được giá trị tần suất mới sau đó đưa giá trị này trở lại bảng tần suất ban đầu đã bỏ đi 2tần suất thành phần tạo thành nó Sau khi đưa giá trị mới vào bảng ta phải tiến hànhsắp xếp lại toàn bộ bảng, lúc này số lượng tần suất chỉ còn là n-1 nếu ban đầu số lượngtần suất là n Tiếp tục thực hiện lần lượt theo thứ tự như trên cho đến khi nào số lượngtần suất chỉ còn lại duy nhất 1 giá trị

Việc tạo cây nhị phân có thể được thực hiện theo một thuật toán sau:

1 Tất cả những ký tự ban đầu được xem như là những ký tự giao điểm tự do

2 Hai nút tự do với tần số xuất hiện thấp nhất được phân công tới một nút gốcvới giá trị bằng với tổng của hai nút con tự do

3 Hai nút con được chuyển khỏi danh sách nút tự do Chuyển nút gốc mới tạothành công vào danh sách

4 Bước hai sang bước ba được lặp cho đến khi chỉ có 1 nút tự do về phía trái.Nút tự do này là gốc của cây

Bảng từ mã gán cho các kí tự số như sau:

0 6 3 5 2 4 1 8 7 9

1 001 011 0001 0100 00000 01010 01011 000010 000011

Như vậy với ví dụ sau đây ta có thể tiến hành mã hoá như sau:

Chuỗi nguồn: 00000000006666693333 kích thước = 20*8=160 bit

Sử dụng mã Huffman theo bảng trên

kích thước =10*1+5*3+1*6+4*3= 43 bit

Trang 21

Vì giá trị 0 xuất hiện 10 lần nhưng chỉ dùng 1 bit để thể hiện, giá trị 6 xuất hiện

5 lần dùng 3 bit để thể hiện, giá trị 9 dùng 6 bit và giá trị 3 xuất hiện 4 lần dùng 3 bit

để thể hiện

Tỷ số nén = 160 / 43 = 3.7Trong phương pháp mã 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ã trước.Vì vậy khi đọc theo từng bit từ đầu đến cuối tệp nén ta cóthể duyệt cây mã cho đến một lá, tức là ký tự đã được giải mã Việc giải mã chắc chắnphải sử dụng cây nhị phân giống như trong mã hoá Để đọc, giải mã được yêu cầu phải

sử dụng theo đúng tiêu chuẩn nhất định

`2.2.3 Một số thủ tục chương trình:

• Chương trình nén phương pháp HUFFMAN:

bool CompressHuffman(BYTE*pSrc, int nSrcLen, BYTE *&pDes,int

int nNodeCount = GetHuffmanTree(nodes);

int nNodeSize = sizeof(DWORD)+sizeof(BYTE);

Trang 22

•Chương trình giải nén phương pháp HUFFMAN :

bool DecompressHuffman(BYTE*pSrc,int nSrcLen,BYTE*&pDes,int

&nDesLen)

{

nDesLen = *(DWORD*)pSrc;

pDes = (BYTE*)malloc(nDesLen+1);

int nNodeCount = *(pSrc+sizeof(DWORD))+1;

CHuffmanNode nodes[511], *pNode;

int nNodeSize = sizeof(DWORD)+sizeof(BYTE), nSrcIndex

Trang 23

đã cải tiến giải thuật LZ thành giải thuật mới hiệu quả hơn và được đặt tên là LZW( Lempe – Ziv - Welch) Phương pháp này xây dựng từ điển lưu các chuỗi ký tự có tầnsuất lặp lại cao và thay thế bằng từ mã tương ứng mỗi khi gặp lại chúng, nó hay hơncác phương pháp trước đó ở kỹ thuật tổ chức từ điển cho phép nâng cao tỷ lệ nén.

Giải thuật LZW được dùng cho tất cả các loại file nhị phân, thườngđược dùng

để nén các loại dữ liệu như: văn bản, ảnh đen trắng, ảnh màu, ảnh đa cấp sám…và làchuẩn nén cho các dạng ảnh GIF và TIFF Số bit/pixel không ảnh hưởng đến hiệu quảcủa LZW

2.3.1 Nguyên tắc:

Giải thuật nén LZW xây dựng một từ điển lưu các mẫu có tần suất xuất hiện

cao trong ảnh Từ điển là tập hợp những cặp (từ vựng và nghĩa của từ vựng) Trong đó

từ vựng sẽ là các từ mã được sắp xếp theo thứ tự nhất định Nghĩa là một chuỗi con

trong dữ liệu ảnh Từ điển được xây dựng song song với quá trình đọc dữ liệu Sự xuấthiện của chuỗi con trong từ điển khẳng định rằng chuỗi đó đã từng xuất hiện trongphần dữ liệu đã đựoc đọc qua Thuật toán liên tục tra cứu và sau mỗi lần đọc một ký tự

ở dữ liệu đầu vào thì tiến hành cập nhật lại từ điển

Do giới hạn của bộ nhớ và để đảm bảo tốc độ tìm kiếm nhanh, từ điển chỉ giớihạn 4096 phần tử dùng để lưu trữ giá trị của các từ mã Như vậy độ dài lớn nhất của từ

mã là 12 bit (4096=212) Cấu trúc từ điển như sau:

nguyên từ 0…255 Đây là mã của 256 kí tự cơ bản trong bảng mãASCII

Code) Khi số mẫu lặp lớn hơn 4096 thì người ta sẽ coi ảnh gồmnhiều mảnh ảnh và từ điển sẽ gồm nhiều từ điển con Khi hết mộtmảnh ảnh sẽ gửi 1 mã xoá (CC)để báo hiệu kết thúc mảnh ảnh cũ vàbắt đầu mảnh ảnh mới đồng thời sẽ khởi tạo lại từ điển

• Từ mã thứ 257 chứa mã kết thúc thông tin (EOI - End Of Information) Thông

thường một file ảnh GIF có thể chứa nhiều mảnh ảnh, mỗi mảnh ảnh này sẽ được mã

0

1

…255256257ChuỗiChuỗi

…Chuỗi

Trang 24

hoá riêng Chương trình giải mã sẽ lặp đi lặp lại thao tác giải mã từng ảnh cho đến khigặp mã kết thúc thông tin thì dừng lại.

• Các từ mã còn lại (từ 258 đến 4095) chứa các mẫu thường lặp lại trong ảnh 512 phần

tử đầu tiên của từ điển biểu diễn bằng 9 bit Các từ mã từ 512 đến 1023 biểu diễn bởi

10 bit, từ 1024 đến 2047 biểu diễn bởi 11 bit, và từ 2048 đến 4095 biểu diễn bởi 12 bit

Ví dụ: Cho chuỗi đầu vào “HELLOHELLOHELL”

Từ điền ban đầu đã gồm 256 kí tự cơ bản

Kích thước đầu vào: 14 x 8 = 112 bit

H(72) H đã có trong từ điển đọc tiếp

E(69) 72 Thêm vào từ điển mã 258 đại diện cho chuỗi HEL(76) 69 Thêm vào từ điển mã 259 đại diện cho chuỗi EL

L 76 Thêm vào từ điển mã 260 đại diện cho chuỗi LL

O(79) 76 Thêm vào từ điển mã 261 đại diện cho chuỗi LO

H 79 Thêm vào từ điển mã 262 đại diện cho chuỗi OH

E HE đã có trong từ điển đọc tiếp

L 258 Thêm vào từ điển mã 263 đại diện cho chuỗi

HEL

L LL đã có trong từ điển đọc tiếp

O 260 Thêm vào từ điển mã 264 đại diện cho chuỗi

LLO

H OH đã có trong từ điển đọc tiếp

E 262 Thêm vào từ điển mã 265 đại diện cho chuỗi

OHE

L EL đã có trong từ điển đọc tiếp

L 259 Thêm vào từ điển mã 266 đại diện cho chuỗi

Quá trình giải nén thực hiện như sau:

Trang 25

NewStr = OldStr + NewChar

IF ( InDictionary(NewStr) ) OldsSr = NewStr

ELSE

{

Output(Code(OldStr))AddToDictionary(NewStr)OldStr = NewChar

• Hàm InitDictionary(): Khởi tạo từ điển Đặt giá trị cho 256 phần tử đầu tiên.

Gán mã xoá CC cho phần tử thứ 256 và mã kết thúc thông tin EOI cho phần tử thứ

257 Xoá giá trị tất cả các phần tử còn lại

• Hàm InDictionary (NewStr) : Kiểm tra chuỗi NewStr đã có trong từ điển

chưa

Trang 26

• Hàm OutPut( : Gửi chuỗi bit ra file.Tuỳ thuộc vào vị trí của từ mã trong từ

điển mà chuỗi bit có độ dài là 9,10,11 hoặc 12

• Hàm GetNextChar(): Trả về một ký tự từ chuỗi ký tự đầu vào Hàm này cập

nhật giá trị cờ Input xác định xem còn dữ liệu đầu vào nữa hay không

• Hàm AddToDictionary(): Hàm làm chức năng cập nhật mẫu mới vào phần tử

tiếp theo trong từ điển Nếu từ điển đã đầy nó sẽ gửi ra mã xoá CC và gọi đến hàm

InitDictionary() để khởi tạo lại từ điển.

• Hàm Code(): Trả về từ mã ứng với 1 chuỗi.

Tư tưởng của đoạn mã trên có thể hiểu như sau: Nếu còn dữ liệu đầu vào thìtiếp tục đọc Một chuỗi mới sẽ được tạo ra từ chuỗi cũ (chuỗi này ban đầu rỗng, chuỗinày phải là chuỗi đã tồn tại trong từ điển) và ký tự vừa đọc vào Sau đó kiểm tra xemchuỗi mới đã có trong từ điển hay chưa Mục đích của công việc này là hi vọng tìmđược chuỗi có só ký tự lớn nhất trong từ điển Nếu tồn tại thì lại tiếp tục đọc một ký tựtiếp theo và lặp lại công việc Nếu chưa có trong từ điển, thì gửi chuỗi cũ ra ngoài vàthêm chuỗi mới vào từ điển

Giải thuật giải nén gần như ngược với giải thuật nén Với giải thuật nén, một từ

mã ứng với một chuỗi sẽ được ghi ra tệp khi chuỗi ghép bởi chuỗi trên với ký tự vừađọc chưa có mặt trong từ điển Người ta cũng cập nhật ngay vào từ điển từ mã ứng vớichuỗi tạo bởi chuỗi cũ với ký tự vừa đọc Ký tự này đồng thời là ký tự đầu tiên trongchuỗi ứng với từ mã sẽ được ghi ra tiếp theo

Thuật toán được mô tả như sau:

WHILE (GetNextCode() != EOI)

{

IF (First_Code) /*Mã đầu tiên của mỗi mảnh ảnh*/

{

OutBuff(DeCode(code))OldStr = DeCode(code)}

NewStr = DeCode(code)

OutBuff(NewStr)

Trang 27

OldStr = OldStr + FirstChar(NewStr)

• Hàm OutBuff(): Hàm này gửi chuỗi đã giải mã ra vùng nhớ đệm.

• Hàm InitDictionary(): Khởi tạo từ điển Đặt giá trị cho 256 phần tử đầu tiên.

Gán mã xoá CC cho phần tử thứ 256 và mã kết thúc thông tin EOI cho phần tử thứ

257 Xoá giá trị tất cả các phần tử còn lại

• Hàm DeCode(): Hàm này tra cứu từ điển và trả về chuỗi ký tự tương ứng với

• Hàm FirstChar(): Lấy ký tự đầu tiên của một chuỗi Ký tự vừa xác định nối

tiếp vào chuỗi ký tự cũ (đã giải mã ở bước trước) ta được chuỗi ký tự có mặt trong từđiển khi nén Chuỗi này sẽ được thêm vào từ điển giải nén

• Hàm AddToDictionary(): Hàm làm chức năng cập nhật mẫu mới vào phần tử

tiếp theo trong từ điển Nếu từ điển đã đầy nó sẽ gửi ra mã xoá CC và gọi đến hàm

InitDictionary() để khởi tạo lại từ điển.

Trang 28

• Chương trình giải nén phương pháp LZW :

BOOL CLZW::Decompress(CFile &source, CFile &destination){

DWORD prefix = 0, data = 0;

Trang 29

decodeString.Add((BYTE)character);

m_tudien->GetBytesFromCode(&decodeString, prefix);}

vụ các ứng dụng về ảnh cho các lĩnh vực như mạng, y học, khoa học kỹ thuật, ảnhnghệ thuật…

Chuẩn JPEG được sử dụng để mã hoá ảnh đa mức xám, ảnh màu JPEG khôngcho kết quả ổn định lắm với ảnh đen trắng, nó cung cấp cả 2 chế độ nén: nén mất mátthông tin và nén không tổn thất Do độ phức tạp và hiệu suất nén của JPEG không mấtmát thông tin mà nó không được sử dụng phổ biến Dưới đây chỉ trình bày chi tiết vềmột trong các dạng nén biến đổi chấp nhận mất mát thông tin dùng biến đổi Cosin tuần

tự (Sequential DTC- Based) của chuẩn JPEG

2.4.2 Thuật toán:

Trang 30

Mã hoá JPEG bao gồm nhiều công đoạn, sơ đồ thuật toán nén và giải nén được mô tảnhư dưới đây:

Hình 2.1: Quá trình nén ảnh theo chuẩn JPEG

Quá trình giải nén sẽ được thực hiện ngược lại, người ta dựa vào các thông tinliên quan ghi trong phần Header của file nén để giải mã từng phần ảnh nén ứng vớiphương pháp nén Kết quả thu được là hệ số đã lượng tử Căn cứ vào bảng lượng tử sẽkhôi phục lại giá trị trước khi lượng tử hoá của các hệ số này Cuối cùng là biến đổiCosin ngược để thu lại được ảnh như ban đầu

Hình 2.2: Quá trình giải nén ảnh JPEG

a Chia ảnh thành khối

Chuẩn nén JPEG phân ảnh ra các khối 8x8 Biến đổi nhanh Cosin 2 chiều chocác khối 8x8 sẽ đạt hiệu quả hơn, việc biến đổi Cosin cho các khối có cùng kích cỡ cóthể giảm được một phần các tính toán chung như việc tính hệ số Khi n = 8 chúng ta

chỉ cần tính hệ số cho 3 tầng (8 =23), số các hệ số là: 4 +2+ 1 = 7

Nếu với một ảnh 512x512, phếp biến đổi nhanh Cosin một chiều theo hàng

ngang hoặc hàng dọc ta phải cần qua 9 tầng (512 = 29) Số các hệ số là: 256+ 128 +

Trang 31

64 + 32 + 16 + 8 + 4 + 2 +1 =509 Như vậy thời gian tính các hệ số cho ảnh512x512 lớn gấp 72 lần so với thời gian tính toán các hệ số này cho từng khối 8x8 ,nếu kích thước ảnh lớn hơn thì chi phí thời gian sẽ còn tăng gấp nhiều lần đồng thờicòn giúp việc tính toán trong khi biến đổi Cosin chính xác hơn.

Ảnh sẽ chia làm B khối với:

Các khối được xác định bởi bộ số (m,n) với m=[0 -1] và n=[0 -1]

Trong đó:

m: thứ tự của khối theo chiều rộng

n: thứ tự của khối theo chiều dài

Phân khối thực chất là xác định tương quan giữa toạ độ riêng trong khối với tạo

độ thực của điểm ảnh trong ảnh ban đầu Nếu ảnh ban đầu ký hiệu Image[i,j] thì matrận biểu diễn khối (m,n) là x[u,v] được tính:

x[u,v] = Image[mk + u, nl + v]

b Biến đổi

Đây là công đoạn quan trọng của các phương pháp nén sử dụng phép biến đổi,nhiệm vụ của công đoạn này là tập trung năng lượng vào một số ít các hệ số biến đổi.Công thức biến đổi cho mỗi khối là:

Trang 32

Giải thuật biến đổi nhanh được mô tả như hình sau:

Hình 2.3: Mô tả giải thuật biến đổi nhanh

Trong sơ đồ giải nén ta phải dùng phép biến đổi Cosin ngược Công thức biếnđổi ngược cho khối 8x8:

khi k2=0 & khi (0<k2<8)

khi k1=0 & khi (0<k1<8)

Trong đó:

Công thức tính x’(k1,n2) là phép biến đổi Cosin ngược rời rạc một chiều củaX(k1,k2) Như vậy muốn khôi phục lại ảnh ban đầu từ hệ số biến đổi chúng ta sẽ biến

Trang 33

đổi nhanh Cosin ngược rời rạc một chiều các hệ số theo hàng, sau đó đem biến đổinhanh Cosin rời rạc một chiều theo cột các kết quả trung gian vừa tính được.

Sơ đồ biến đổi Cosin ngược nhanh được biểu diễn như sau:

Hình 2.4: Sơ đồ biến đổi Cosin ngược

c Lượng tử hoá

Khối lượng tử hoá trong sơ đồ nén đóng vai trò quan trọng và quyết định tỷ lệnén của chuẩn nén JPEG Đầu vào của khối lượng tử hoá là các ma trận hệ số biến đổiCosin của các khối điểm ảnh Như ta đã biết ảnh được chia làm nhiều khối, ứng mỗikhối là các hệ số xác định Trước khi thực hiện bước lượng tử hoá ta có thể loại bỏ vài

hệ số Ngoài hệ số (0,0) (được coi là thành phần DC) biểu diễn mức sáng trung bìnhcủa một khối ta có thể loại một số hệ số khác trong khối mang thông tin chi tiết về ảnh

Ta có thể bắt đầu loại bỏ từ hệ số có độ lệch chuẩn thấp nhất Việc nên giữ lại baonhiêu hệ số còn tuỳ thuộc vào việc ta muốn tỷ lệ nén cao hay thấp và những yêu cầu vềchất lượng của ảnh nén

Ngày đăng: 30/12/2015, 15:07

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1]. PGS.Nguyễn Thanh Thuỷ, Ths.Lương Mạnh Bá, Nhập môn xử lý ảnh số [2]. Võ Đức Khánh (2003),Giáo trình xử lý ảnh , Nxb Thống kê, Hà Nội Sách, tạp chí
Tiêu đề: Nhập môn xử lý ảnh số"[2]. Võ Đức Khánh (2003),"Giáo trình xử lý ảnh
Tác giả: PGS.Nguyễn Thanh Thuỷ, Ths.Lương Mạnh Bá, Nhập môn xử lý ảnh số [2]. Võ Đức Khánh
Nhà XB: Nxb Thống kê
Năm: 2003
[3]. D.Huffman , A method for the contruction of minimum –redundancy codes, Proc IRE 40, 1098-1101 (1952) Sách, tạp chí
Tiêu đề: A method for the contruction of minimum –redundancy codes
[4]. Nguyễn Kim Sách (1997), Xử lý ảnh và video số , Nxb Khoa học và Kỹ thuật , Hà Nội Sách, tạp chí
Tiêu đề: Xử lý ảnh và video số
Tác giả: Nguyễn Kim Sách
Nhà XB: Nxb Khoa học và Kỹ thuật
Năm: 1997
[5]. Michael David Adams - Faouzi Kossentini - Touraji Ebrahimi - “ JPEG2000 : The Next Generation Still Image Compression Standard” (2000) Sách, tạp chí
Tiêu đề: JPEG2000 : The Next Generation Still Image Compression Standard
[6]. Website: http://www.JPEG.org/JPEG2000.html[7]. Website: http://www.codeproject.com Link

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

w