Tải bản đầy đủ (.pdf) (72 trang)

Ứng dụng thuật toán phân cụm trong xây dựng ảnh chỉ số

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 (1.28 MB, 72 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
---------------------------------------

Kiều Huy Thắng

ỨNG DỤNG THUẬT TOÁN PHÂN CỤM
TRONG XÂY DỰNG ẢNH CHỈ SỐ

LUẬN VĂN THẠC SỸ KHOA HỌC
Ngành: Toán Công nghệ

NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS. TS. PHAN TRUNG HUY

Hà Nội – 2010


MỤC LỤC
LỜI MỞ ĐẦU........................................................................................... 3
LỜI CẢM ƠN ........................................................................................... 6
CHƯƠNG I TỔNG QUAN VỀ ẢNH SỐ................................................ 7
1. Lý thuyết ảnh màu, ảnh kỹ thuật số ............................................................ 7
2 Các định dạng ảnh cơ bản trong ảnh số........................................................ 10
Đầu tệp.................................................................................................................
Dữ liệu nén ..........................................................................................................
Bảng màu .............................................................................................................
Qui trình đọc tệp ảnh ...........................................................................................
Định dạng JPEG ..................................................................................................
Định dạng RAW ..................................................................................................
Định dạng PNG ...................................................................................................
Định dạng TIFF ...................................................................................................


Định dạng PSD ....................................................................................................
CHƯƠNG II LÝ THUYẾT VỀ PHÂN CỤM ẢNH.............................. 22
1. Lý thuyết về nén ảnh .................................................................................. 22
2. Các thuật toán về lập bảng chỉ số.............................................................. 23
3. Các thuật toán về phân cụm màu cho bài toán rút gọn màu ..................... 27
* Thuật toán K-mean……………………………………………….34

* Thuật toán C-mean……………………………………………….39

1


4. Các ứng dụng của phân cụm màu ............................................................. 49
CHƯƠNG III CHƯƠNG TRÌNH VÀ CÁC KẾT QUẢ ĐẠT ĐƯỢC………….51
1. Sơ đồ thuật toán......................................................................................... 51
2. Giả mã......................................................................................................... 53
3. Giao diện của các chương trình................................................................... 60
NHẬN XÉT, ĐÁNH GIÁ…………………………………………………… 62
KẾT LUẬN …………………………………………………………………68
TÀI LIỆU THAM KHẢO.………………………………………………………69
TÓM TẮT………………………………………………………………………70

2


LỜI MỞ ĐẦU

Việc tạo ra hình ảnh trong lịch sử loài người khởi đầu bằng việc khắc các
hình trên đá, sau đó là vẽ trên giấy, lụa, sơn mài, sử dụng máy chụp hình…
Khi máy tính và kỹ thuật số ra đời cùng với những thiết bị đồ họa chuyên

dụng khác, con người có thêm một công cụ mới để tạo lập, lưu trữ và xử lý
dữ liệu ảnh.
Với sự có mặt của internet, và với sự phát triển nhanh chóng của máy ảnh
số, các bức ảnh ngày càng trở nên thông dụng trên toàn thế giới.
Việc xử lý ảnh số là cần thiết để đạt được một bức ảnh nhằm phục vụ một
mục đích nào đó của người sử dụng.
Xử lý ảnh số 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 hệ kỹ sư, hệ cử nhân ngành Công Nghệ Thông
Tin, cũng như một số ngành kỹ thuật khác trong các trường Đại học kỹ
thuật. Xử lý ảnh có liên quan đến nhiều ngành khác như: hệ thống tin học,
lý thuyết thông tin, thông tin liên lạc, trí tuệ nhân tạo, nhận dạng, v.v.
Phân cụm ảnh là một trong các quá trình xử lý ảnh. Phân cụm ảnh được ứng
dụng nhiều trong thực tế: để xử lý ảnh, rút gọn màu, xác định các đường
viền trên ảnh…qua đó lại tiếp tục ứng dụng vào các mục đích khác như:
tạo màu trong suốt, giấu tin trong file ảnh, áp dụng chuẩn đoán hình
ảnh trong y học, dự đoán về thị trường, nén ảnh (đây là một trong những
ứng dụng quan trọng nhất của quá trình phân cụm), …
Có nhiều thuật toán cho quá trình phân cụm và các thuật toán này đóng vai
trò rất quan trọng đối với việc phân cụm
Với các yêu cầu đó, luận văn sẽ đưa ra một chương trình về phân cụm ảnh
sử dụng ngôn ngữ Java. Chương trình nhằm đạt được một số yêu cầu: đọc

3


ảnh đầu vào, đưa ra một số cụm cho trước, tìm các điểm màu có cùng chỉ số
đưa vào các cụm…
Các mục tiêu chính của luận văn là:
• Tìm hiểu lý thuyết về ảnh kỹ thuật số, cách biểu diễn ảnh số trong máy
tính

• Tìm hiểu lý thuyết về phân cụm, tìm hiểu các thuật toán phân cụm ứng
dụng trong rút gọn ảnh màu
• Viết chương trình dựa trên các thuật toán cụ thể
Kết cấu luận văn gồm ba phần chính:
- Chương I: Tổng quan về ảnh số
Trong phần này, luận văn sẽ nêu ra các khái niệm về ảnh màu, ảnh kỹ
thuật số, pixel, các dải màu…
- Chương II: Lý thuyết về phân cụm ảnh và ứng dụng
Trong chương này, các khái niệm về phân cụm, các thuật toán phân
cụm, các dạng phân cụm…sẽ được nêu ra
- Chương III: Xây dựng chương trình phân cụm
Chương này sẽ trình bày sơ qua về chương trình phân cụm được viết
bằng ngôn ngữ Java dựa trên hai thuật toán cụ thể.
Đã có nhiều chương trình, bài viết về phân cụm ảnh với nhiều thuật toán
khác nhau. Tuy nhiên, việc tiếp tục thực hiện các chương trình phân cụm
màu sẽ mang lại nhiều ưu điểm cũng như sự khác biệt với các chương trình
đã có như:
+ Vấn đề bản quyền: việc chủ động trong quá trình phân cụm ảnh sẽ giúp
người sử dụng chủ động hơn trong việc áp dụng vào các ứng dụng khác
+ Vấn đề công nghệ: mỗi chương trình viết ra đều có những ưu điểm riêng
biệt thích hợp với từng người sử dụng, theo từng ngôn ngữ lập trình cụ thể
+ Khả năng đánh giá: các chương trình được viết ra càng tăng thêm khả
năng đánh giá về các thuật toán phân cụm. Đánh giá về tốc độ và chất

4


lượng. Mỗi thuật toán đều có một ưu điểm riêng. Có thuật toán chạy với tốc
độ nhanh nhưng chất lượng lại không được tốt. Có thuật toán chạy với tốc
độ chậm nhưng cho kết quả cao hơn.


5


LỜI CẢM ƠN

Tôi muốn gửi lời cảm ơn sâu sắc nhất đền thầy của tôi: PGS.TS Phan
Trung Huy, người đã tận tình hướng dẫn tôi trong suốt quá trình làm bài
luận văn này.
Tôi xin chân thành cảm ơn các thầy, cô trong khoa Toán Tin Ứng Dụng
Trường Đại học Bách Khoa Hà Nội đã tận tình dạy dỗ, truyền đạt kiến thức
để tôi có thể hiểu được các kiến thức khoa học.
Xin cảm ơn tất cả các bạn bè, đồng nghiệp đã giúp đỡ tôi trong suốt quá
trình làm bài luận văn này.

6


CHƯƠNG I TỔNG QUAN VỀ ẢNH SỐ

1. Lý thuyết ảnh màu, ảnh kỹ thuật số
Tổ chức quốc tế về chuẩn hoá màu CIE (Commision Internationale
d’Eclairage) đưa ra một số các chuẩn để biểu diễn màu. Các hệ này có các
chuẩn riêng. Hệ chuẩn màu CIE- RGB dùng 3 màu cơ bản: đỏ (Red), xanh
lục (Green), xanh lơ (Blue) và ký hiệu RGBCIE để phân biệt với các chuẩn
khác. Mỗi màu là tổ hợp của các màu cơ bản theo một tỷ lệ nhất định.
Ảnh thực chất là một tập hợp các điểm màu liên tiếp xếp liền nhau,
hoặc một tập hợp các đường hình học nhằm miêu tả một phong cảnh, sự vật
hay chủ đề nào đó. Trên máy tính, ảnh được lưu trên các file nhị phân, theo
các định dạng do nhà sản xuất quy định.

Ảnh màu là ảnh tổ hợp từ 3 màu cơ bản: đỏ, xanh lục, xanh lơ và
thường thu nhận trên các giải băng tần khác nhau. Một pixel ảnh màu gồm
3 thành phần màu trên. Mỗi màu cũng phân thành K cấp khác nhau (K
thường là 256). Do vậy, để lưu trữ ảnh màu, người ta có thể lưu trữ từng
mặt màu riêng biệt, mỗi màu lưu trữ như một ảnh đa cấp xám. Do đó,
không gian nhớ dành cho một ảnh màu lớn gấp 3 lần một ảnh đa cấp xám
cùng kích thước.

Tín hiệu số và biểu diễn ảnh số
* Pixel
Ả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.
Trong quá trình số hoá, người ta biến đổi tín hiệu liên tục sang tín hiệu rời
rạc thông qua quá trình lấy mẫu (rời rạc hoá về không gian) và lượng hoá

7


thành phần giá trị (rời rác hoá biên độ giá trị) mà bằng mắt thường không
phân biệt được hai mức kề nhau. Trong quá trình này, người ta sử dụng khái
niệm Picture Element mà quen gọi là Pixel- phần tử ảnh. Mỗi pixel gồm
một cặp toạ độ x, y và các giá trị màu.
Như vậy, ảnh là một tập hợp các điểm ảnh. Khi được số hoá, nó
thường được biểu diễn bởi bảng hai chiều I(n,p): n dòng và p cột. Ta nói
ảnh gồm n x p pixels. Ta ký hiệu I(x,y) để chỉ một pixel. Nhìn chung có thể
xem một hàm hai biến chứa các thông tin như biểu diễn của một ảnh.
Các tín hiệu liên tục theo thời gian qua quá trình số hóa ta thu
được tín hiệu rời rạc (tín hiệu số). Ảnh số chính là ảnh xử lý bằng máy
tính thu được từ ảnh liên tục bởi quá trình số hoá (lấy mẫu và lượng hoá),
giá trị I(x,y) biểu diễn cường độ sang được mã hoá của mỗi điểm ảnh (x,y).

Giá trị đó còn gọi là mức xám, ta coi giá trị của I(x,y) là nguyên:
I(x,y) ∈ {0,1,..., L − 1}
Trong đó: L là mức xám tối đa dùng để biểu diễn.
Để giảm độ phức tạp tính toán, các giá trị của (x,y) thường được chọn
là hữu hạn, và thường là 512, còn L thường được chọn là 256. Ảnh có nhiều
mức xám gọi là ảnh đa cấp xám. Ảnh có 2 mức xám 0 và 1 gọi là ảnh nhị
phân.
Với cách biểu diễn trên, ảnh số chính là một phần của tín hiệu số
trong không gian hai chiều. Và cách biểu diễn ảnh số thông dụng nhất là
dùng bảng hai chiều thường gọi là ma trận ảnh hay bản đồ ảnh.
Hệ thống số là một hệ thống tiếp nhận tín hiệu số ở đầu vào, xử lý tín
hiệu theo một quy trình nào đấy và dữ liệu đầu ra cũng là tín hiệu số. Vì ảnh
số là một phần của tín hiệu số nên hệ thống xử lý ảnh số có đặc thù như hệ
thống số cộng thêm một số tính chất riêng.
Nếu gọi tín hiệu đầu vào là X(m,n), tín hiệu đầu ra là Y(m,n), và đặc
trưng của hệ thống là H, thì ta có biểu diễn như sau:

8


Y(m,n)= H [X(m,n)]
Phần lớn các hệ thống số là tuyến tính và bất biến.
Các kênh (chanels)
Kết quả của quá trình xử lý dữ liệu trên tệp RAW để nội suy ra các giá
trị còn thiếu(hoặc trong máy ảnh, hoặc trong máy tính) là một mảng chữ
nhật của các điểm ảnh, mỗi một điểm ảnh này có ba giá trị. Nhìn trực diện
thì hình ảnh thu được bao gồm ba lớp, mỗi lớp tương ứng với một màu
chính là đỏ, xanh lục, xanh lơ. Các lớp này thường được gọi là các kênh,
hay đôi khi còn gọi là các dải. Do đó các hình ảnh của ta được tạo bởi ba
kênh. Các kênh có thể tách rời nhau và được xem như các hình ảnh độc lập.

Ảnh đơn sắc hay ảnh đa mức xám là một trường hợp đặc biệt khi ba kênh
này đồng nhất với nhau. Mỗi một điểm ảnh chỉ có một mức sáng hoặc mức
xám cố định.

Các bit trên mỗi kênh.
Màu ở trên sử dụng một thang chia từ 0-255 cho mỗi kênh. Là trường
hợp cho các ảnh 8-bit màu, chẳng hạn được lưu trong ảnh JPEG. Đó là vì
28 = 256 (=1 byte), do vậy 8-bit là đủ để lưu 256 giá trị riêng lẻ. Số lượng

màu lớn nhất trong một ảnh như thế có thể là 16 triệu màu (tương đương
với 2563 ). Người ta cũng chỉ ra rằng, ta có thể làm hơn thế nữa với các ảnh
RAW mà nó có thể chứa tới 4096 giá trị có thể cho mỗi kênh. 4096 = 212 , do
vậy ta có 12-bit trên một kênh. Các máy ảnh dân dụng thường phát hiện số
lượng các bit trên mỗi kênh khi một bức ảnh được chụp. 12-bit là một byte
rưỡi, nhưng các tệp được lưu với giá trị dữ liệu trên toàn bộ byte. Bởi vậy
để chứa những hình ảnh này, phần lưu trữ được chỉ định là 2 byte hay 16bit cho mỗi kênh với mỗi điểm ảnh. Điều này có nghĩa là một số phần lưu
trữ sẽ bị lãng phí, nhưng nó lại là không gian nhớ cho ta thao tác với ảnh.

9


Kích cỡ của ảnh
Ta phải biết một điều quan trọng là bất kể dữ liệu ảnh được nén để lưu
trên đĩa hay nó được tải vào bộ nhớ để xử lý thì cũng chiếm một số lượng
lớn các byte. Nếu ảnh có N điểm ảnh(N là chiều rộng hoặc chiều cao tính
theo điểm ảnh), nó sẽ chiếm 3N byte nếu nó có 8-bit trên mỗi kênh và 6N
byte nếu nó có 16-bit trên mỗi kênh.
Do vậy một ảnh 12-megapixel được tải từ ảnh JPEG (mà nó chỉ chứa 8bit trên mỗi kênh) thì cần 36MB bộ nhớ trong quá trình xử lý. Nếu nó được
tải từ tệp RAW hoặc từ ảnh TIFF 16-bit thì cần 72MB nhớ trong quá trình
xử lý.


2 Các định dạng ảnh cơ bản trong ảnh số
Hiện tại có hơn 50 định dạng ảnh khác nhau, được chia làm hai loại cơ
bản: ảnh bitmap và ảnh vector.
Ảnh bitmap là loại ảnh được lưu trữ theo dạng từng điểm màu được
xếp liền nhau theo một thứ tự nhất định do người định dạng ảnh quy định
và có thể được nén bằng một vài thuật toán nén dữ liệu do người định dạng
ảnh chọn. Đây là loại ảnh có chất lượng lưu trữ tốt, hình ảnh và màu sắc
trung thực, nhưng lại tốn không gian lưu trữ, tốc độ hiển thị chậm và tương
đối phức tạp trong việc xử lý. Một vài ví dụ về các loại ảnh bitmap phổ biến
là: GIF, PCX, BMP, TIF, RLE, ICO, GEM…
Ảnh vector là loại ảnh được lưu trữ theo cách mô tả đường biên của
các đối tượng trong ảnh như là các hình và các đường hình học, ví dụ như
elíp(ellipse), đa giác (polygon), hình cung (arc), đường thẳng(line), chữ
nhật(rectangle)… Việc lưu trữ ảnh vector thực chất là lưu trữ lại các lệnh
dùng để vẽ lại ảnh đó. Ảnh vector được lưu trữ dưới dạng hình học nên chất
10


lượng lưu trữ không tốt lắm, nhưng bù lại, kích thước file ảnh tương đối
nhỏ và việc xử lý ảnh rất đơn giản, thong qua các hàm toán học. Các file
ảnh vector phổ biến hiện nay là WMF, CGM, CDR, GEM Metafile…
Ảnh thu được sau quá trình số hoá thường được lưu lại cho các quá
trình xử lý tiếp theo hay truyền đi. Trong quá trình phát triển của kỹ thuật
xử lý ảnh, tồn tại nhiều định dạng khác nhau từ ảnh đen trắng IMG, ảnh đa
cấp xám/ ảnh màu: BMP, GIP, JPEG,… Tuy nhiên, các định dạng này là
khác nhau, song chúng tuân theo một cấu trúc chung nhất.
Nhìn chung, một tệp ảnh gồm 3 phần:
+ Đầu tệp (Header)
+ Dữ liệu nén (data compression)

+ Bảng màu (Palellet color)

Đầu tệp
Chứa các thông tin về kiểu ảnh, kích thước, độ phân giải, số bít dung
cho 1 pixel, cách mã hoá, vị trí bảng màu,… Kích thước phần header rất
khác nhau, phụ thuộc kiểu định dạng ảnh.
Dữ liệu nén
Số liệu ảnh đã được mã hoá bởi kiểu mã hoá chỉ ra trong phần header
Bảng màu
Chỉ ra số màu dùng trong ảnh và sử dụng thể hiện ảnh
Qui trình đọc tệp ảnh
Để xử lý được ảnh, ta phải tiến hành đọc tệp ảnh và chuyển vào bộ nhớ
của máy tính dưới dạng ma trận số hliệu ảnh. Khi lưu trữ dưới dạng tệp, ảnh
là một khối các byte. Để đọc đúng, ta cần hiểu ý nghĩa các phần trong cấu
trúc của tệp ảnh như đã nêu trên. Trước tiên, ta cần đọc Header để lấy các
11


thông tin điều khiển. Việc đọc này sẽ dừng ngay khi không gặp ký tự mong
muốn (thường là 6 byte đầu). Dựa vào thông tin điều khiển này, ta xác định
vị trí bảng màu (nếu có) và đọc nó vào bộ nhớ. Cuối cùng ta đọc phần dữ
liệu nén.
Sau khi đã đọc xong các khối vào bộ nhớ, ta tiến hành giải nén số liệu
ảnh. Căn cứ vào phương pháp nén chỉ ra trong phần Header ta giải mã được
ảnh. Cuối cùng là khâu hiện ảnh. Dựa vào số liệu ảnh đã giải nén, vị trí và
kích thước ảnh, cùng sự trợ giúp của bảng màu ảnh được hiện lên màn hình.
Các máy ảnh số hiện nay thường sử dụng hai định dạng JPEG và RAW
trong việc lưu trữ ảnh số dưới dạng file hoặc lưu vào đĩa cứng.
Định dạng RAW không phải là định dạng chung nhất của file ảnh,
mỗi nhà sản xuất máy ảnh số đều có định dạng riêng của mình. (.NEF của

Nikon, .CRW hoặc .CR2 của Canon,…).
JPEG (thường là định dạng .JPG) là định dạng chung nhưng nó không
sánh kịp so với RAW vì hai lý do chính sau đây:
• Thuật toán nén JPEG thường bị suy hao dữ liệu.
• Định dạng JPG chỉ lưu dữ được các kênh màu với 8 bit.
Ngoài ra còn một vài định dạng khác của ảnh số như: .DNG, .TIFF, .PSD
vv

12


Định dạng JPEG
JPEG là tên của thuật toán nén (phương pháp sử dụng bảng tính). Trong đó,
dữ liệu được nén bằng cách:
+ Chia bức ảnh thành các lưới nhỏ với kích thước mỗi lưới là 8x8 pixel
+ Áp dụng phép biến đổi Cosin rời rạc trên mỗi mắt lưới
+ Bỏ qua các tần suất xuất hiện cao từ kết quả.
Có thể đạt được các tỷ lệ nén lớn, tuy nhiên sẽ có những suy hao đáng kể.
Các file JPEG thường được sử dụng như những kết quả cuối cùng đối với
việc hiển thị hay quá trình phân bố. Tuy nhiên, sau mỗi lần nén ta thường bị
suy hao dữ liệu, thậm chí ở quá trình xử lý cấp cao.

Định dạng RAW
Mỗi nhà sản xuất đều có một thuật toán riêng để nén và giải nén các dữ liệu
ảnh theo cách mà không để bị suy hao dữ liệu. Các phần tử nén trong phạm
vi 6 được sử dụng phổ biến nhất.
Tuy nhiên, có một hạn chế là, không có nhiều ứng dụng có thể đọc được
các định dạng này. Các máy ảnh hiện nay được trang bị Photoshop hay các
phần mềm tiện ích khác thì có thể đọc được định dạng RAW.


Định dạng PNG
Định dạng PNG do Adobe tạo ra như là một định dạng chung với một mức
giống nhau về quá trình nén và được trông đợi để thay thế định dạng của
nhiều hãng khác nhau.

13


Định dạng TIFF
Đây là định dạng đã có mặt từ rất lâu. Định dạng này cần đến thuật toán
LZW. Nhưng nó không nén được nhiều lắm đối với ảnh màu

Định dạng PSD
PSD là định dạng của Photoshop. Nén được ít và không bị mất dữ liệu. Ta
chỉ sử dụng định dạng này khi cần làm việc với từng lớp ảnh và muốn sử
dụng lớp ảnh đó cho công việc khác.

14


Định dạng RAW có 12 bit cho mỗi kênh màu. Do đó sẽ có
212=4096 mức trên mỗi trục.
Trong khi đó, JPEG chỉ có 8bit trên mỗi kênh màu

Định dạng ảnh Bitmap
Ta tìm hiểu chi tiết cấu trúc của ảnh này vì đây là đối tượng chính đóng vai
trò vật mang tin trong bài toán của ta.
Ảnh BIMAP do hãng Microsoft đề xuất, phần mở rộng là BMP và được sử
dụng rộng rãi trên các ứng dụng của Windows. Dữ liệu của ảnh BITMAP là một
ma trận điểm ảnh, mỗi điểm ảnh được biểu diễn bởi một số bit, thông thường là 8

bit hoặc 24 bit.
Tệp ảnh BITMAP được tổ chức thành 4 phần:
• Phần đầu (bitmap file header) gồm 14 byte.
• Phần thông tin (bitmap file info) gồm 40 byte.
• Phần bảng màu (color palete), đối với ảnh 24 bit thì không có bảng
màu.

15


• Phần dữ liệu (bitmap data): Đây là nơi được dùng để che giấu thông
tin.
Đối với ảnh bitmap 8 bit màu: Các điểm ảnh được lưu trữ theo hàng từ dưới
lên trên, các điểm ảnh trong mỗi hàng được lưu trữ từ trái qua phải. Nếu ảnh có m
hàng, n cột thì phần dữ liệu của ảnh gồm m*n byte, mỗi byte thể hiện số hiệu
trong bảng màu (chỉ số màu) của một điểm ảnh. Chi tiết các phần như sau:
• Phần đầu: Đây là khối các byte bắt đầu một bimap và sử dụng khối
này để định danh bimap. Ứng dụng tiêu biểu là đọc khối này xem tệp
đó có đúng là bimap hay không.
Byte

Ý nghĩa

Chi tiết

1-2

Nhận dạng file kiểu mảng 2 ký tự.

Chứa ký tự BM


3-6

Kích thước file kiểu longint

Tính bằng byte

7-8

Dự phòng

Giá trị thực tế phụ thuộc
vào ứng dụng tạo nên
ảnh

9-10

Dự phòng

Giá trị thực tế phụ thuộc
vào ứng dụng tạo nên
ảnh

11-14

Byte bù

Tức là: bắt đầu từ địa chỉ
này của byte, dữ liệu ảnh
được tìm thấy.


• Phần thông tin: Khối byte này cho ứng dụng biết được thông tin chi
tiết về ảnh mà nó sẽ được sử dụng để hiển thị trên màn hình. Khối
này cũng phù hợp với các tiêu đề nội tại được sử dụng bởi Windows,
OS/2 và có một vài biến thể khác. Tất cả chúng có chứa một trường

16


dword, xác định kích thước ảnh, vì vậy một ứng dụng có thể xác định
dễ dàng phần đầu được sử dụng trong ảnh. Lý do là có rất nhiều các
phần đầu khác nhau do Microsoft đã vài lần mở rộng định dạng DIB.
Các phần đầu mở rộng có thể được dùng với một số hàm GDI thay vì
thay vì những hàm cũ hơn. Vì GDI hỗ trợ các hàm tải tệp bimap, điển
hình là các ứng dụng Windows sử dụng các hàm này. Do đó, với các
ứng dụng như thế các định dạng BMP phải được hỗ trợ phù hợp với
định dạng của phiên bản Windows đang dùng.

17


Byte

Ý nghĩa

Chi tiết

1-4

Kích cỡ của phần đầu (40 byte)


5-8

Chiều rộng của bitmap tính theo pixel Là số nguyên có dấu

9-12

Chiều cao của bitmap tính theo pixel

13-14

Số lượng các bảng màu được sử dụng Phải đặt là 1

15-16

Số lượng các bit cho mỗi điểm ảnh

Là số nguyên có dấu
Nó thể hiện độ sâu màu
cho mỗi ảnh, các giá trị
điển hình là 1, 4, 8, 16,
24, và 32

17-20

Phương pháp mã hóa được sử dụng

21-24

Kích cỡ ảnh


Là kích cỡ của dữ liệu
raw bitmap, không nên
nhầm lẫn với kích cỡ của
tập tin

25-28

Độ phân giải ngang của ảnh

Điểm ảnh trên mỗi mét,
là số nguyên có dấu

29-32

Độ phân giải dọc của ảnh

Điểm ảnh trên mỗi mét,
là số nguyên có dấu

33-36

Số lượng các màu trên bảng màu

37-40

Số lượng các màu quan trọng được 0 khi tất cả các màu quan
sử dụng

Mặc định là từ 0 đến 2n

trọng, thông thường bỏ
qua các byte này.

18


• Phần bảng màu:
Tiếp theo sau phần thông tin là phần bảng màu của ảnh BITMAP.
Nó bao gồm nhiều bộ có kích thước bằng 4 byte xếp liền nhau theo
cấu trúc B-G-R và một byte dành riêng cho trọng số màu. Kích thước
của vùng bảng màu bằng bốn lần số màu của ảnh. Vì bảng màu của
màn hình có cấu tạo R-G-B, nên khi đọc bảng màu của ảnh BITMAP,
ta phải chuyển lại cho phù hợp. Số màu của ảnh nhận biết được dựa
trên số bit cho một điểm ảnh, cụ thể là: 8-bit/điểm ảnh ta có ảnh 256
màu, 4-bit/điểm ảnh ta có ảnh 16 màu, 24-bit/điểm ảnh ta có ảnh 16
triệu màu.
• Phần dữ liệu ảnh:
Đây là phần chứa các giá trị màu của các điểm ảnh trong BITMAP.
Trên mỗi dòng, các điểm ảnh được lưu theo thứ tự từ trái qua phải.
Các dòng lại được lưu theo thứ tự từ dưới lên trên. Mỗi byte trong
phần dữ liệu ảnh có thể lưu một hoặc nhiều điểm ảnh tùy theo số bit
dùng cho mỗi điểm ảnh.

Cài đặt các phần của BITMAP
Do đặc trưng kiến trúc của ảnh, ta sẽ cài đặt các phần của ảnh dự trên cấu
trúc mà các ngôn ngữ lập trình hỗ trợ đó là struct.
Cài đặt phần đầu:
// Hai ký tự đầu nhận dạng BM
struct bmpfile_magic {
unsigned char magic[2];

};

19


struct bmpfile_header {
uint32_t filesz;
uint16_t creator1;
uint16_t creator2;
uint32_t bmp_offset;
};
Cài đặt phần thông tin:
typedef struct {
uint32 header_sz;
uint32 width;
uint32 height;
uint16 nplanes;
uint16 bitspp;
uint32 compress_type;
uint32 bmp_bytesz;
uint32 hres;
uint32 vres;
uint32 ncolors;
uint32 nimpcolors;
} bmp_info;
Các phần còn lại ta dùng kiến trúc mảng nhiều chiều để thao tác và lưu trữ.

Các công cụ hỗ trợ thao tác với ảnh BIMAP
Ngày nay, cùng với sự phát triển của công nghệ thông tin cùng với các công
cụ hỗ trợ lập trình ứng dụng rất mạnh. Các hãng lớn đã phát triển các công

cụ hỗ trợ lập trình đồ họa rất mạnh. Chẳng hạn như JAI của Sun, hay GDI,
20


GDI+ của Microsoft. Ngoài ra còn có các phần hỗ trợ lập trình đồ họa
chuyên dụng như OpenGL, DirectX….
Thư viện JAI(Java Advance Image) của Sun: Đây là thư viện do
SunMicrosystem phát triển. Nó bao gồm các chức năng sau:
o Thao tác trên ảnh số, bao gồm hơn 100 hàm bao quát hầu hết
các thao tác xử lý ảnh thông dụng, đảm bảo tối ưu cho việc
thực thi.
o Các định dạng ảnh và các kiểu dữ liệu.
o Cho phép truy xuât, vào, ra đối với file ảnh.
o Cho phép thao tác ảnh từ xa cho các phương thức gọi hàm như
RMI, IIP…
o Có khả năng trộn ảnh và đồ họa.
Thư viện GDI/GDI+ (Graphic Device Interface) của Microsoft: là
một ứng dụng lập trình giao diện và các thành phần lõi đáp ứng cho
việc biểu diễn các đối tượng đồ họa và truyền tải chúng qua các thiết
bị đầu ra như máy in hay màn hình. Phiên bản đầu GDI chỉ thích hợp
với các hình ảnh đơn giản, và nó không hỗ trợ trực tiếp cho ảnh động,
và nó cũng không hỗ trợ các phép biến đổi affine trên ảnh. GDI+ ra
đời nhằm hỗ trợ nhưng thiếu sót này, đồng thời nó cũng hỗ trợ thao
tác các ảnh phổ biến hiện nay như JPG, PNG. Như vậy, GDI không
chỉ là một thư viện hỗ trợ việc thao tác với ảnh số, mà còn hỗ trợ mọi
lập trình giao diện khác.

21



CHƯƠNG II LÝ THUYẾT VỀ PHÂN CỤM ẢNH

1. Lý thuyết về nén ảnh
Quá trình nén được sử dụng ở mọi nơi, tất cả các ảnh chúng ta nhận được từ
trên mạng đều ở dạng nén thường là ở dạng JPEG hoặc GIF, phần lớn các
bộ điều giải đều sử dụng quá trình nén. Một số hệ thống file tự động nén
file khi lưu trữ, phần còn lại là do con người tự thao tác bằng tay. Một vấn
đề cơ bản của quá trình nén là các thuật toán được sử dụng trong thế giới
thực tạo ra các công cụ thuật toán vô cùng hiệu quả, bao gồm quá trình sắp
xếp, các bảng hỗn độn, các phép thử ..v.v... Ngoài ra, các thuật toán với các
cơ sở lý thuyết mạnh tạo ra một nguyên tắc khắt khe trong các ứng dụng
của thế giới thực.
Nhiệm vụ của quá trình nén bao gồm hai giai đoạn, một thuật toán mã hóa
nhận thông báo rồi đưa ra một phép biểu diễn “nén”, và một thuật toán giải
mã sẽ đưa ra bản thông báo ban đầu, hoặc một các xấp xỉ của nó trong quá
trình biểu diễn nén. Hai bước này có quan hệ với nhau khá phức tạp vì
chúng đều được hiểu là quá trình biểu diễn nén.
Chúng ta phân biệt giữa các thuật toán bảo toàn thông tin (là các thuật toán
mà khi giải nén cho ta thông tin chính xác như khi đưa vào quá trình nén)
với các thuật toán suy hao (là các thuật toán cho ra kết quả gần đúng so với
dữ liệu đầu vào). Các thuật toán bảo toàn thông tin thường được dùng để
nén các file text, còn các thuật toán suy hao dữ liệu thông thường được sử
dụng để nén các file ảnh, âm thanh.
Khi nói về các thuật toán nén thì điều quan trọng là phải chỉ ra được sự
khác biệt của hai quá trình: mô hình và thiết bị ghi mã. Một mô hình, ví dụ
như là việc đưa ra các đặc điểm chung của một khuôn mặt. Còn hệ thống
ghi mã thì đưa ra một thông tin ngắn về vật thể đó, khuôn mặt đó.

22



Nén dữ liệu là quá trình làm giảm lượng thông tin “dư thừa” trong dữ liệu
gốc và do vậy, lượng thông tin thu được sau nén thường nhỏ hơn dữ liệu
gốc rất nhiều. Với dữ liệu ảnh, kết qủa thường là 10:1, một số phương pháp
mới còn cho kết quả cao hơn
Tỷ lệ nén
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. Tuy nhiên, về cách đánh giá và các kết quả công bố trong các tài liệu,
nhìn chung, người ta định nghĩa tỷ lệ nén như sau:

Tỷ lệ nén =

1
x %
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 thu được sau nén.
Các kết quả nén còn phụ thuộc vào kiểu dữ liệu định nén, không gian, thời
gian và cả độ phức tạp tính toán

2. Các thuật toán về lập bảng chỉ số
Màu chỉ số được giới hạn trong 256 màu, 256 màu này được lấy từ tập 16,7
triệu trong 24 bit màu. Mỗi màu được sử dụng là một bộ 24 bit giá trị RGB.
Mỗi một file ảnh màu sẽ bao gồm bảng màu riêng của nó, đó là một danh
sách 256 màu đã được chọn (hay 16 màu trong một bảng màu nhỏ hơn).
Các bức ảnh được gọi là ảnh màu chỉ số vì dữ liệu ảnh màu thực tế đối với
từng pixel là các chỉ số nằm bên trong bảng màu này. Mỗi một dữ liệu của
pixel là một số xác định một màu chỉ số. Chẳng hạn “màu số 82”, thì trong
đó 82 là chỉ số trong bảng màu, và màu thứ 82 trong danh sách màu. Chúng

ta sẽ tìm hiểu các bảng màu để biết có những màu nào trong đó. Bảng màu
được lưu trữ cùng với file ảnh.
23


Chỉ số được đặc trưng là 4 bit giá trị (16 màu) hoặc 8 bit giá trị (256 màu)
cho từng pixel, mục đích đặt ra là giảm đi khả năng lưu trữ một cách đáng
kể so với việc lưu trữ 24 bit màu của mỗi pixel. Tuy nhiên, một số 8 bit chỉ
bao gồm một số giá trị từ 0 đến 255, do vậy, chỉ có 256 màu được thể hiện
trong bảng màu. Kích trước của hầu hết các file ảnh đồ họa có thể được giới
hạn trong việc sử dụng 16 màu, nghĩa là chỉ sử dụng 4 bit màu chỉ số, giảm
đi một nửa.
Một file ảnh cũng có thể bao gồm bảng màu, đây là bảng của 24 bit màu đã
được chọn, hoặc 3 byte của bộ màu RGB cho mội màu trong bảng màu
(768 byte cho 256 màu).
Màu RGB đầu tiên trong bảng màu có chỉ số là 0, màu thứ hai trong bảng
màu có chỉ số là 1…và cứ tiếp tục như vậy cho đến tối đa là 256 màu trong
bảng màu. Các file chỉ số lưu trữ 24 bit cho từng bảng màu, nhưng không
phải đối với từng pixel. Mỗi pixel chỉ lưu trữ hoặc 4 bit dữ liệu, hoặc 8 bit
dữ liệu để xác định bảng màu nào được sử dụng.
Các chương trình xư lý ảnh sẽ đưa ra được bảng màu cho các ảnh chỉ số, và
có thể xác định các màu chỉ số.
Có nhiều cách khác nhau để tạo bảng màu, các cách chọn bảng màu ảnh
hưởng đáng kể đến bức ảnh.

Phương pháp để chuyển ảnh 24bit màu về ảnh chỉ số
Có một số phương pháp để chuyển về màu chỉ số. Có hai cách được chọn
đó là, xác định bảng chỉ số của màu và đồng là cách chọn làm sao để rung
động hoặc để thể hiện màu ngoài bảng màu.
Các bảng chỉ số này được tạo từ các màu đặc trưng của 256 màu trong bức

ảnh xác định. Bức ảnh gradient dưới đây được chuyển dần từ đỏ sang trắng.
24


×