Khoảng hơn mười năm trởlại đây, phần cứng máy tính và các thiết bị
liên quan đã có sựtiến bộvượt bậc vềtốc độtính toán, dung lượng chứa,
khảnăng xửlý v.v. và giá cả đã giảm đến mức máy tính và các thiết bịliên
quan đến xửlý ảnh đã không còn là thiết bịchuyên dụng nữa. Khái niệm
ảnh số đã trởnên thông dụng với hầu hết mọi người trong xã hội và việc
thu nhận ảnh sốbằng các thiết bịcá nhân hay chuyên dụng cùng với việc
đưa vào máy tính xửlý đã trởnên đơn giản.
Trong hoàn cảnh đó, xửlý ảnh là một lĩnh vực đang được quan tâm và
đã trởthành môn học chuyên ngành của sinh viên ngành công nghệthông
tin trong nhiều trường đại học trên cảnước. Tuy nhiên, tài liệu giáo trình
còn là một điều khó khăn. Hiện tại chỉcó một sốít tài liệu bằng tiếng Anh
hoặc tiếng Pháp, tài liệu bằng tiếng Việt thì rất hiếm. Với mong muốn đóng
góp vào sựnghiệp đào tạo và nghiên cứu trong lĩnh vực này, chúng tôi biên
soạn cuốn giáo trình Xửlý ảnhdựa trên đềcương môn học đã được duyệt.
Cuốn sách tập trung vào các vấn đềcơbản của xửlý ảnh nhằm cung cấp
một nền tảng kiến thức đầy đủvà chọn lọc nhằm giúp người đọc có thểtự
tìm hiểu và xây dựng các chương trình ứng dụng liên quan đến xửlý ảnh.
76 trang |
Chia sẻ: donghaict | Lượt xem: 1137 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Giáo trình môn học xử lý ảnh, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
u: 0x80 Count. Byte thứ hai cho biết
độ dài dãy các pixel không giống nhau không nén được.
69
• Loại 4: Dãy các Pixel giống nhau.
Tuỳ theo các bít cao của byte đầu tiên được bật hay tắt. Nếu bít
cao được bật (giá trị 1) thỡ đây là gói nén các byte chỉ gồm bít 0, số
các byte được nén được tính bởi 7 bít thấp còn lại. Nếu bớt cao tắt
(giỏ trị 0) thì đây là gói nén các byte gồm toán bít 1. Số các byte
được nén được tính bởi 7 bít còn lại.
Các gói tin của file IMG rất đa dạng do ảnh IMG là ảnh đen
trắng, do vậy chỉ cần 1 bít cho 1 pixel thay vì 4 hoặc 8 như đã nói ở
trên. Toàn bộ ảnh chỉ có những điểm sáng và tối tương ứng với giá
trị 1 hoặc 0. Tỷ lệ nén của kiểu định dạng này là khá cao.
2. Định dạng ảnh PCX
Định dạng ảnh PCX là một trong những định dạng ảnh cổ điển.
Nó sử dụng phương pháp mó hoỏ loạt dài RLE (Run – Length –
Encoded) để nén dữ liệu ảnh. Quá trỡnh nộn và giải nộn được thực
hiện trên từng dũng ảnh. Thực tế, phương pháp giải nén PCX kém
hiệu quả hơn so với kiểu IMG. Tệp PCX gồm 3 phần: đầu tệp
(header), dữ liệu ảnh (Image data) và bảng màu mở rộng.
Header của tệp PCX có kích thước cố định gồm 128 byte và
được phân bố như sau:
• 1 byte: chỉ ra kiểu định dạng.Nếu là PCX/PCC thì nó luôn có
giá trị là 0Ah.
• 1 byte: chỉ ra version sử dụng để nén ảnh, có thể có các giá
trị sau:
+ 0: version 2.5.
+ 2: version 2.8 với bảng màu.
+ 3: version 2.8 hay 3.0 không có bảng màu.
+ 5: version 3.0 cố bảng màu.
• 1 byte: chỉ ra phương pháp mã hoá. Nếu là 0 thì mã hoá theo
phương pháp BYTE PACKED, ngược lại là phương
pháp RLE.
• 1 byte: Số bít cho một điểm ảnh plane.
• 1 word: toạ độ góc trái của ảnh. Với kiểu PCX nó có giá trị là
(0,0), cũn PCC thì khác (0,0).
• 1 word: toạ độ góc phải dưới.
• 1 word: kích thước bề rộng và bề cao của ảnh.
70
• 1 word: số điểm ảnh.
• 1 word: độ phân giải màn hình.
• 1 word.
• 48 byte: chia nó thành 16 nhóm, mỗi nhóm 3 byte. Mỗi nhóm
này chứa thông tin về một thanh ghi màu. Như vậy ta có 16
thanh ghi màu.
• 1 byte: không dùng đến và luôn đặt là 0.
• 1 byte: số bớt plane mà ảnh sử dụng. Với ảnh 16 màu, giá trị
này là 4, với ảnh 256 mầu (1pixel/8bits) thì số bít plane lại
là 1.
• 1 byte: số bytes cho một dòng quét ảnh.
• 1 word: kiểu bảng màu.
• 58 byte: không dùng.
Định dạng ảnh PCX thường được dùng để lưu trữ ảnh và thao
tác đơn giản, cho phép nén và giải nén nhanh. Tuy nhiên, vì cấu trúc
của nó cố định, nên trong một số trường hợp làm tăng kích thước lưu
trữ. Cũng vì nhược điểm này mà một số ứng dụng sử dụng một kiểu
định dạng khác mềm dẻo hơn: định dạng TIFF (Targed Image File
Format) sẽ mô tả dưới đây.
3. Định dạng ảnh TIFF
Kiểu định dạng TIFF được thiết kế để làm nhẹ bớt các vấn đề
liên quan đến việc mở rộng tệp ảnh cố định. Về cấu trúc, nó cũng
gồm 3 phần chính:
• Phần Header(IFH): cú trong tất cả cỏc tệp TIFF và gồm
8 byte:
+ 1 word: chỉ ra kiểu tạo tệp trên máy tính PC hay máy
Macintosh. Hai loại này khác nhau rất lớn ở thứ tự các
byte lưu trữ trong các số dài 2 hay 4 byte. Nếu trường
này có giá trị là 4D4Dh thì đó là ảnh cho máy Macintosh,
nếu là 4949h là của máy PC.
+ 1 word: version. từ này luôn có giá trị là 42. đây là đặc
trưng của file TIFF và không thay đổi.
+ 2 word: giá trị Offset theo byte tính từ đầu tới cấu trúc
IFD là cấu trúc thứ hai của file. Thứ tự các byte này phụ
thuộc vào dấu hiệu trường đầu tiên.
71
• Phần thứ 2(IFD): Không ở ngay sau cấu trúc IFH mà vị trí
được xác định bởi trường Offset trong đầu tệp. Có thể có một
hay nhiều IFD cùng tồn tại trong một file.
Một IFD bao gồm:
+ 2 byte: chứa các DE ( Directory Entry).
+ 12 byte là các DE xếp liên tiếp, mỗi DE chiếm 12 byte.
+ 4 byte: chứa Offset trỏ tới IFD tiếp theo. Nếu đây là IFD
cuối cùng thì trường này có giá trị 0.
• Phần thứ 3: các DE: các DE có dộ dài cố định gồm 12 byte
và chia làm 4 phần:
+ 2 byte: chỉ ra dấu hiệu mà tệp ảnh đó được xây dựng.
+ 2 byte: kiểu dữ liệu của tham số ảnh. Có 5 kiểu tham số
cơ bản:
1: BYTE (1 byte)
2: ASCII (1 byte)
3: SHORT (2 byte).
4: LONG (4 byte)
5: RATIONAL (8 byte)
+ 4 byte: trường độ dài chưa số lượng chỉ mục của kiểu dữ
liệu đó chỉ ra. Nó không phải là tổng số byte cần thiết để
lưu trữ. Để có số liệu này ta cần nhân số chỉ mục với kiểu
dữ liệu đã dùng.
+ 4 byte: đó là Offset tới điểm bắt đầu dữ liệu liên quan tới
dấu hiệu, tức là liên quan với DE không phải lưu trữ vật
lý cùng với nó nằm ở một vị trí nào đó trong file.
Dữ liệu chứa trong tệp thường được tổ chức thành các nhóm
dòng (cột) quét của dữ liệu ảnh. Cách tổ chức này làm giảm bộ nhớ
cần thiết cho việc đọc tệp. Việc giải nén được thực hiện theo 4 kiểu
khác nhau được lưu trữ trong byte dấu hiệu nén.
72
4. Định dạng file ảnh BITMAP
Mỗi file BITMAP gồm đầu file chứa các thông tin chung về file,
đầu thông tin chứa các thông tin về ảnh, một bảng màu và một mảng
dữ liệu ảnh. Khuôn dạng được cho như sau:
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER bmih;
RGBQUAD aColors[];
BYTE aBitmapBits[];
Trong đó, các cấu trúc được định nghĩa như sau:
typedef struct tagBITMAPFILEHEADER { /* bmfh */
UINT bfType;
DWORD bfSize;
UINT bfReserved1;
UINT bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER { /* bmih */
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, *LPBITMAPINFOHEADER;
với
biSize kích thước của BITMAPINFOHEADER
biWidth Chiều rộng của ảnh, tính bằng số điểm ảnh
biHeight Chiều cao của ảnh, tính bằng số điểm ảnh
73
biPlanes Số plane của thiết bị, phải bằng 1
biBitCount Số bit cho một điểm ảnh
biCompression Kiểu nén
biSizeImage Kích thước của ảnh tính bằng byte
biXPelsPerMeter độ phân giải ngang của thiết bị, tính bằng điểm ảnh trên met
biYPelsPerMeter độ phân giải dọc của thiết bị, tính bằng điểm ảnh trên met
biClrUsed Số lượng các màu thực sự được sử dụng
biClrImportant Số lượng các màu cần thiết cho việc hiển thị, bằng 0 nếu tất cả các màu đều cần để hiển thị
Nếu bmih.biBitCount > 8 thì mảng màu rgbq[] trống, ngược lại thì
mảng màu có 2<< bmih.biBitCount phần tử.
typedef struct tagRGBQUAD { /* rgbq */
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;
Ta cũng có:
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO, *PBITMAPINFO;
74
Phụ lục 2:
CÁC BƯỚC THAO TÁC VỚI FILE AVI
AVI là chuẩn video thường được tích hợp trong các thư viện của
các môi trường lập trình. Để xử lý video, cần có các thao tác cơ bản
để chuyển về xử lý ảnh các khung hình (các frames).
1. Bước 1: Mở và đóng thư viện
Trước mọi thao tác với file AVI, chúng ta phải mở thư viện:
AVIFileInit( )
Hàm này không cần tham số, có nhiệm vụ khởi động thư viện
cung cấp các hàm thao tác với file AVI. (Đó là thư viện vfw32.lib,
được khai báo trong file vfw.h).
Sau tất cả các thao tác bạn phải nhớ đóng thư viện đã mở lúc
đầu, chỉ bằng lệnh:
AVIFileExit( )
Nếu thiếu bất cứ hàm nào, dù là mở hay đóng thư viện thì trình
biên dịch đều sẽ thông báo lỗi.
2. Bước 2: Mở và đóng file AVI để thao tác:
Sau khi mở thư viện, bạn phải mở file AVI bạn định thao tác:
AVIFileOpen(PAVIFILE* ppfile, LPCSTR fname, UINT mode,
CLSID pclsidHandler)
Thực chất, hàm này tạo ra một vùng đệm chứa con trỏ trỏ đến
file có tên là fname cần mở. Và ppfile là con trỏ trỏ đến vùng bộ đệm
đó. Tham số mode quy định kiểu mở file; chẳng hạn OF_CREATE
để tạo mới, OF_READ để đọc, OF_WRITE để ghi . Tham số cuối
dùng
là NULL.
Trước khi đóng thư viện, bạn phải đóng file AVI đã mở, bằng
cách dùng hàm:
AVIFileRelease(PAVIFILE pfile)
Trong đó, pfile là con trỏ trỏ đến file cần đóng.
75
3. Bước 3:
Mở dòng dữ liệu hình ảnh hay âm thanh trong file AVI đã mở ra
để thao tác:
AVIFileGetStream(PAVIFILE pfile, PAVISTREAM * ppavi,
DWORD fccType, LONG lParam)
Trong đó, pfile là con trỏ đến file đã mở; ppavi trỏ đến dòng dữ
liệu kết quả; fccType là loại dòng dữ liệu chọn để mở, là
streamtypeAUDIO nếu là tiếng và streamtypeVIDEO nếu là hình,
lParam đếm số loại dòng được mở, là 0 nếu chỉ thao tác với một loại
dòng dữ liệu.
Sau các thao tác với dòng dữ liệu này, bạn nhớ phải đóng nó lại:
AVIStreamRelease(PAVITREAM pavi).
4. Bước 4: Trường hợp thao tác với dữ liệu hình của phim
Chuẩn bị cho thao tác với khung hình (frames):
AVIStreamGetFrameOpen(PAVISTREAM pavi,
LPBITMAPINFOHEADER lpbiWanted)
Trong đó pavi trỏ đến dòng dữ liệu đã mở, lpbiWanted là con
trỏ trỏ đến cấu trúc mong muốn của hình ảnh, ta dùng NULL để sử
dụng cấu trúc mặc định.
Hàm này trả về đối tượng có kiểu PGETFRAME để dùng cho
bước 5.
Sau khi thao tác với các frame rồi, phải gọi hàm :
AVIStreamGetFrameClose(PGETFRAME pget)
5. Bước 5: Thao tác với frame
Dùng hàm
AVIStreamGetFrame(PGETFRAME pget, LONG lpos)
Hàm này trả về con trỏ trỏ đến dữ liệu của frame thứ lpos. Dữ
liệu đó có kiểu là DIB đã định khối.
Thực hiện các thao tác mong muốn.
76
TÀI LIỆU THAM KHẢO
[1]. Lương Mạnh Bá, Nguyễn Thanh Thủy (2002), Nhập Môn Xử lý ảnh
số, Nxb Khoa học và Kỹ thuật, 2002.
[2]. Anil K.Jain (1989), Fundamental of Digital Image Processing.
Prentice Hall, Engwood cliffs.
[3]. J.R.Paker (1997), Algorithms for Image processing and Computer
Vision. John Wiley & Sons, Inc.
[4]. Randy Crane (1997), A simplified approach to image processing,
Prentice-Hall, Inc.
[5]. John C.Russ (1995), The Image Procesing Handbook. CRC Press, Inc.
[6]. Adrian Low (1991), Introductory Computer Vision and Image
Processing, Copyright (c) 1991 by McGrow Hill Book Company
(UK) Limited.
[7]. T. Pavlidis (1982), Algorithms for Graphics and Image Processing,
Computer Science Press.
File đính kèm:
- xu li anh.pdf