Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (898.2 KB, 120 trang )
kích thớc của ảnh. Giả sử có 256 giá trị màu (đã đợc đánh chỉ số), ta lu giá trị
màu 24-bpp (24 bit cho một điểm ảnh) trong mỗi một điểm truy cập của CLUT
(ta thực hiện đợc là nhờ vào khả năng của phàn cứng cho phép). Sau đó thực hiện
một phơng thức nén ảnh nào đó, khi đó ta đã lu đợc dữ liệu màu 24 bit bằng 8bit
CLUT. Tuy nhiên dữ liệu ảnh thì phải chứa cả CLUT. Tổng dung lợng cần thiết
cho một ảnh 640x480 là (640x480+256x24)/8=30KB. Nếu không sử dụng CLUT
thì tổng dung lọng cần thiết là (640x480x24)/8=922K.
Nh vậy hiệu quả của CLUT đã giúp ta tiết kiệm đợc 2/3 kích thớc của file. Sử
dụng CLUT không phải luôn tạo ra các sence. Nếu ảnh chứa số lợng lớn các màu
nó cần nhiều không gian nhớ để lu các điểm ảnh. Một cách tổng quát ta thấy đối
với tín hiệu ảnh nhiều hơn 256 màu thì cách tốt nhất là sử dụng dạng literal hoặc
absolute, bởi vì phần đầu của một CLUT lớn thì không có hiệu quả về không
gian. Trên thực tế kích thớc của CLUT có thể tiến tới kích thớc của ảnh.
Sự trong suốt (Transparency)
Trong lĩnh vực truyền hình TV, hình ảnh động thờng overload trên các ảnh tĩnh
( nh các bản đồ thời tiết chẳng hạn). Trong phạm vi ảnh bitmap thì hai ảnh
bitmap cũng có thể overload, từng phần của một ảnh bitmap đợc hiển thị từng
chi tiết và trong suốt để ta có thể thấy đợc ảnh nền. Tơng tự ta sử dụng đặc tính
trong suốt để tạo ra sự biến mất dần dần của một nguồn video tới một nguồn
khác. Trong trờng hợp này cần nhiều các mức độ trong suốt khác nhau (không
chỉ có bật và tắt thuộc tính trong suốt). Sự trong suốt thờng xuyên đợc diễn tả
bằng ảnh dạng bitmap trên cơ sở điểm nối tiếp điểm. Thông tin về tính trong
suốt đợc cộng vào cùng với thông tin về màu. Kiểu TGA sử dụng 5 bit cho mỗi
một thông tin màu (R, G, B) và một bit cho thông tin về tính trong suốt, tổng
cộng ta cần có 16 bit. Khi bit dành cho tính trong suốt đợc thiết lập 1 thì phần
cứng hiển thị ...Với dạng TGA có 32 bit trong đó dành 8 bit cho tính trong suốt
thì ta có 256 mức độ trong suốt khác nhau (0 là hoàn toàn trong suốt, 256 là
hoàn toàn mờ đục).
Một số dạng file ảnh
Trong phần này chúng ta có một danh sách các dạng ảnh thông dụng. Bảng
6.1 là danh sách liệt kê các dạng ảnh. Sau đó sẽ nói về các đặc tính tổng quát của
dạng đồ hoạ nh cách tổ chức file, cách nén, cách hiển thị.
Format
Type
AutoCAD DXF
Vector
Autodesk 3 D Studio
Scene Description
BMP(window)
Bitmap
CGM
Metafile
FLI
Animation
GEM Raster
Bitmap
GEM VDI
Metafile
GIF
Bitmap
Harvard Graphics
Metafile
IFF
Bitmap
93
Intel DVI
Multimedia
JPEG File Interchange
Bitmap
Kodak PhotoCD
Bitmap
MPEG
Mutimedia
PCX
Bitmap
PICT(Mac)
Metafile
Pixar RIB
Scene Description
PNG
Bitmap
POV
Vector
PPM
Bitmap
Quick Time
Multimedia
RayShade
Scene Description
SPIFF
Bitmap
Sun Raster
Bitmap
TIFF
Bitmap
TTDDD
Vector and Animation
Utah RLE
Bitmap
VEC
Vector
WMF(Windows)
Metafile
Bảng 6.1
Phơng thức nén
Một số các phơng thức nén đợc sử dụng trong thông tin số (ngoài hình ảnh
còn có các thông tin khác), những phơng thức còn lại sử dụng để nén ảnh và một
số dạng dữ liệu đặc biệt khác. Trớc hết ta tìm hiểu xem bốn phơng thức nén dữ
liệu thông dụng : RLE, LZW, mã hoá Huffman và mã hoá arithmetic. Phần tiếp
theo xem xét phơng thức nén ảnh Diserete Cosine Transform (DCT) hay
transform-based compression.
Khi ta thực hiện nén dữ liệu thì có thể làm mất một phần thông tin (lossy)
hay không làm mất thông tin (lossless) nguyên thuỷ ban đầu. Phơng thức nén
lossy loại bỏ các thông tin đợc xem là kém quan trọng nhất tơng ứng trong một
ví dụ cụ thể. Khi nén có thể là nén đối xứng( symmetic) bởi quá trình nén là quá
trình ngợc lại với quá trình giải nén. Một cách nén khác là nén bất đối xứng nó
là một quá trình phức tạp hơn các phơng thức nén khác. Đối với tín hiệu video
nguyên thủy DMI của Itel. Một máy tính lớn song song đợc sử dụng để nén
chuỗi các ảnh liên tiếp, đồng thời một số lợng nhỏ các vi mạch mã hoá có trong
chip PSD video đợc sử dụng để giải nén các ảnh này. Đó là một ví dụ cho phơng
thức nén bất đối xứng.
Đối với các file ảnh bitmap thông thờng chỉ có các dữ liệu bitmap đợc nén.
Các thông tin khác có trong file (nh phần đầu và phần cuối - header and footer)
thì không đợc nén và cho phép đọc một cách bình thờng. Đối với các file dạng
94
vector thì thờng là không đợc nén. Bởi bản thân ảnh dạng vector đã đợc nén một
phần do chúng có mức trừu tợng cao hơn hẳn so với dạng bitmap. Việc hoàn trả
về các file vector thì cần nhiều thời gian hơn so với dạng bitmap, nếu có thêm
quá trình giải nén thì còn chậm hơn nữa.
RLE
Run Length Encoding (RLE) là một phơng thức nén khá thông dụng cho phép
nén các chuỗi kí tự tuần tự dạng số hay chữ.
Ví dụ:
Aaaaaaaaabc đợc mã hoá nh sau 10A1B1C
Số 10 là một số đếm, còn chữ cái A lại là một giá trị. Mỗi một kí tự trong
bảng mã ASCII đợc lu bằng một byte, một chuỗi ban đầu khi cha nén đợc lu bởi
12 byte sau khi đã nén chỉ đợc lu bởi 7 byte. Chú ý rằng độ dài chạy của 1 đòi
hỏi tối thiểu 2 kí tự.
Với các kí tự mã nhị phân ta có thể chọn lựa cách nén một bit hay một byte?
Việc lu độ dài chạy của giá trị thay đổi là nguyên nhân gây ra sự tăng kích thớc
file so với lúc đầu, hiện tợng này gọi là negative Compression. Một phơng thức
làm giảm đến tối thiểu ảnh hỏng của độ dài chạy là mã hoá bít, bắt đầu tại mỗi
khối, các bít đầu này cho biết độ dài chạy của chính khối đó. Nói cách khác nếu
giá trị của bít là 1 thì trình biên dịch sẽ cho biết khối có độ dài chạy; ngợc lại thì
dữ liệu trong khối là dữ liệu thờng không đợc mã hoá.
Đối với dữ liệu bitmap 2-D ta tự do hơn trong việc chọn cách mã hoá. Chúng
ta có thể mã hoá theo hàng (quét dòng), mã hoá theo cột thậm chí có thể mã hoá
theo từng phần nhỏ của dữ liệu.
Thuật toán nén Lempel, Ziv và Welch
Thuật toán nén dữ liệu đợc sử dụng rộng rãi hiện nay do Lempel, Ziv và
Welch phát minh do đó thuật toán nén đợc gọi là thuật nén LZW, ngoài ra một
số các thuật toán nén khác nh LZ77, LZ78 tất cả đều đợc đăng kí bản quyền do
vậy để có thể sử dụng đợc chúng ta cần phải trả tiền theo đúng qui định. Các
thuật toán đợc sửa đổi nh LZ77 không cho phép ta vi phạm luật bản quyền và
thật không may là các phần mềm phân tán rộng rãi ví dụ nh các file Compuserve
GIF thì lại sử dụng thuật toán nén này. Do có sự chống lại mạnh mẽ việc phải trả
tiền cho các phiên bản trên nên thuật toán PKZIP đã ra đời dựa trên cơ sở của
thuật toán cũ nhng đợc cung cấp miễn phí. GIF cũng là một thuật toán nén đòi
hỏi bản quyền nhng hiện nay thì tràn ngập các ảnh GIF. Có nhiều các tiện ích
cho phép chuyển đổi file ảnh GIF sang các dạng file khác, ví dụ nh dạng PPM.
Ngoài ra có một dạng file là PNG đợc tạo ra cạnh tranh với GIF và nó đợc cung
cấp miễn phí.
Cách thức làm việc của thuật toán nén LZW nh thế nào ?. Họ thuật toán nén
LZ mã hoá theo kiểu dictionary-based. Nguyên tắc nh sau: dữ liệu đợc đọc bằng
một bộ nén, một bảng hay một data dictionary, tạo nên điểm truy cập cho từng
mẫu có trong luồng dữ liệu vào. Nếu dữ liệu mới không có trong data dictionary,
một điểm truy cập mới sẽ đợc tạo ra tơng ứng với nó. Khi dữ liệu đợc đọc thì
điểm truy cập tơng ứng có trong data dictionary cũng đợc đọc và hiển nhiên là
nó nhỏ hơn dữ liệu nguyên thuỷ ban đầu, sau đó đợc copy đa vào luồng dữ liệu
ra (nh vậy đã thực hiện việc nén tín hiệu). Chìa khóa của thuật nén LZW là
95
dictionary không cần bộ giải mã, bởi vì theo cách tổ chức dữ liệu, bộ giải mã sẽ
có thể cấu trúc lại dictionary. Sự sắp xếp nh vậy có thể lu đợc nhiều không gian
hình ảnh hơn. Thuật nén LZW là thuật nén không mất dữ liệu(lossless).
Mã hoá Huffman
Giống nh thuật toán LZW, mã hoá Huffman dựa trên cơ sở từ mã. ở đây các
mã ngắn đợc chọn nhằm đại diện cho cảnh (hình ảnh) thờng xuyên xuất hiện
nhất trong luồng dữ liệu ảnh, các mã dài đợc sử dụng đại diện cho các cảnh ít
xuất hiện hơn. Ví dụ chữ cái A nếu đợc sử dụng thờng xuyên trong một văn bản
thì đợc mã hoá bằng hai bit thay vì 8 bit nh trong mã ASCII, trong khi đó chữ cái
Q ít khi xuất hiện trong văn bản có thể đợc mã hoá bởi 12 bit. Muốn thực hiện đợc quá trình giải mã và mã hoá nh vậy cần có một dictionary sử dụng cho quá
trình mã hoá. Trong các bộ nén kiểu LZW không có kiểu từ điển on-the-fly.
Luồng dữ liệu đợc tạo ra bởi mã Huffman đòi hỏi cấu trúc tinh vi hơn: không có
1 từ mã nào lại là phần đầu của một từ mã khác. Với cách làm này bộ giải mã
xác định từng cảnh (từng hình) một cách chính xác trong luồng dữ liệu đợc đọc
vào tuần tự. Một sự cải tiến của mã hoá Huffman là mã hoá số học (sẽ nói tới
trong phần sau). Cả hai loại mã Huffman và mã hoá số học đều thuộc thuật nén
không mất thông tin (lossless).
Mã hoá số học
Mã hoá số học hay còn gọi là mã hoá entropi phát triển từ mã hoá Hufman
theo hai cách. Trớc hết bạn có thể có phân đoạn mã- đó là các mã 4.18 bit (đợc
định nghĩa bằng cách thống kê). Thứ hai bạn sử dụng một dạng thống kê phức
tạp hơn. Nội dung thông tin đợc phân tích để sau đó chuyển đổi sang dạng mã
lần lợt cho từng mẫu, ta đa vào kí hiệu U đi kèm với mã nếu mã này xuất hiện
không thờng xuyên và đa vào kí hiệu UQ với các mã thờng xuyên xuất hiện( các
mã ngắn). Một nhánh của kiểu mã hoá số học đợc gọi là mã Q, nó đợc sáng chế
bởi IBM và AT&T. Thuật toán nén ảnh dạng JPEG đợc phát triển trên cơ sở mã
hoá Q.
DCT
DCT-phơng thức chuyển đổi dữ liệu ảnh sang miền tần số. DCT rất giống
với DFT nó có thể coi nó nh một tròng hợp riêng của DFT. Sự chuyển đổi mang
lại một tập các giá trị dơng phù hợp với các phần tử hay xuất hiện. Huffman eye
không phân biệt sự chuyển đổi màu ở tần số cao và các thông tin này đợc bỏ đi
mà không ảnh hởng nhiều tới chất lợng của ảnh. Đồng thời khi chuyển đổi sẽ
gán các giá trị không hay gần tới không để đạt đợc hiệu quả nén nh các phơng
thức nén kiểu lossless. Trong khi đó tất cả các phơng thức nén kiểu JPEG đều là
kiểu lossy.
Vấn đề hiển thị và Internet
Đối với ngời dùng Internet và WWW đây là cách hiệu quả để hiện thị các
ảnh đồ họa. Khi ngời sử dụng đến một địa chỉ Web nào đó thì mọi dữ liệu trong
đó có các dữ liệu đồ họa đều đợc tải xuống và hiển thị và họ dễ dàng nhận thấy
khi còn đang trong quá trình nạp dữ liệu thì các dữ liệu ảnh đợc giữ vị trí bởi các
khung và một biểu tợng nhỏ nằm trong khung này. Có hiện tợng này là hiện nay
chúng ta đang dùng các file ảnh dạng JPEG, GIF, PNG...Đối với ảnh GIF chúng
đợc truyền theo cách: ban đầu là các dòng thứ 8.x đợc truyền, tiếp đó là các dòng
96
thứ 4.x, 2.x và cuối cùng là các dòng còn lại nh vậy ban đầu chúng ta cũng chỉ
có thể nhìn thấy đợc 1/8 của ảnh. Cách truyền nh vậy đợc gọi là interlaced. Cách
ngợc lại với cách này đợc gọi là non-interlaced, các ảnh sẽ đợc lu và truyền đi
các dòng kế tiếp nhau một cách tuần tự. Chúng ta hãy xem minh hoạ trên hình
6.5 để biết chi tiết.
Dạng PNG đi cùng vớí GIF, nó thuộc kiểu interlaced trong đó mỗi điểm ảnh
thứ 8 nằm trên dòng thứ 8 đợc truyền đi đầu tiên và ta có thể nhìn thấy 1/64 của
toàn ảnh lúc ban đầu.
Luồng dữ liệu JPEG có cách truyền theo phơng thức khác. Thay cho việc
quét theo dòng nh ở trên thì ảnh đợc quét theo từng lớp. Phép xấp xỉ gần đúng
với ảnh gốc gửi đi tuần tự so vậy ngời dùng có thể nhìn thấy toàn cảnh của ảnh,
hiệu quả của phơng thức này là về mặt thời gian. Trong quá trình hiển thị ảnh
dạng JPEG cần có quá trình giải nén do đó có thể đòi hỏi sự xử lí bởi CPU.
Một dạng cải tiến từ ảnh JPEG cung cấp khả năng lu trữ tuần tự của cùng một
ảnh với các giải pháp khác nhau. Đối với mỗi một ảnh thì giá trị của các giải
pháp là khả năng tơng thích với các phần cứng để in và hiển thị ảnh.
Hình 6.5
Một số các dạng ảnh thông dụng
Trong phần này chúng ta nói tới chi tiết cấu trúc của các dạng ảnh thờng
dùng. Chú ý rằng th viện của Sun Java AWT cũng cung cấp một số các file ảnh ở
dạng JPEG và GIF.
GIF
GIF sử dụng thuật nén LZW. Có hai phiên bản là GIF87a (phiên bản đầu
tiên) và GIF89a. Phiên bản sau GIF89a có thể không tơng thích với một số phần
mềm chỉ đọc ảnh GIF87a, do đó hầu hết các trình xử lí ảnh đều có cả hai phiên
bản này. Cả hai phiên bản nói chung là giống nhau nhng phiên bản GIF89a có
97
sữ mở rộng hơn. Trên hình 6.6 biểu thị cấu trúc của file ảnh của cả hai phiên
bản.
Cấu trúc chung của file ảnh GIF:
Header: Chiếm 6 byte, ba byte đầu định danh dạng ảnh, 3 byte sau chỉ ra
phiên bản (87a hay 89a).
Local Screen Descriptor: nhóm byte có kích thớc xác định chứa các thông tin
về màn hình nh độ cao , độ rộng, màu sắc. Nếu kích thớc màn hình nhỏ hơn giá
trị các tham số thì ứng dụng tự động cân bằng lại kích thớc cho phù hợp.
Global color table: Chứa CLUT gồm 256 mục( mỗi mục là một giá trị màu).
Local Image Descriptor: chứa các thông tin về đặc tính của dữ liệu gồm vị trí
hiển thị ảnh, độ phân giải, thông tin màu.
Local color Table: GIF có thể đợc mở rộng để chứa nhều ảnh hơn mặc dù
khả năng này đợc ít khi sử dụng tới. Một chuẩn bị trớc tạo ra bảng màu cho ảnh.
Đây là bảng màu dùng để chỉ rõ CLUT và dữ liệu ảnh theo sau. Nếu bảng màu
đợc hiện diện thì nó sẽ thay thế bảng màu Global color table.
Image data: khi nén theo thuật toán LZW, dữ liệu ảnh đa vào một luồng và
đọc từ đầu cho đến hết. Dạng GIF chia ảnh tành các khối con, mỗi khối đợc bắt
đầu bằng một byte chỉ độ dài của khối sau nó. Khối kết thúc luồng dữ liệu ảnh
có giá trị của byte này là không.
Header
Header
Logical Screen Descriptor
Logical Screen
Descriptor
Global Color Table
Global Color Table
Local Image Descriptor
Comment Extension
Local Color Table
Application Extension
Image Data
Graphic Control
Extension
End of File Marker
Local Image
Descriptor
GIF87a
Local Color Table
Image Data
Comment Extension
Plain text Extension
End of File Marker
GIF 89a
Hình 6.6
JPEG và JFIF
Chuẩn ảnh JPEG thì không rõ ràng làm cho nó trở thành một chuẩn file
không đầy đủ. C-cube Mycrosystem tạo ra một chuẩn file ảnh mới đợc gọi là
98