ĐẠI HỌC THÁI NGUYÊN
KHOA CÔNG NGHỆ THÔN TIN
ĐỒ ÁN
TỐT NGHIỆP ĐẠI HỌC
Chuyên ngành Công nghệ thông tin
Đề tài:
XÂY DỰNG CHƯƠNG TRÌNH TÌM KIẾM
THEO NỘI DUNG TRONG FILE AVI
Sinh viên thực hiện:
BÙI MẠNH HÙNG
Lớp K1B, hệ chính qui
Giáo viên hướng dẫn: ThS. VŨ THÀNH VINH
Thái Nguyên, 4 - 2007
LỜI CẢM ƠN
Trước hết em xin gửi đến thấy giáo Thạc sĩ Vũ Thành Vinh lời cảm ơn
chân thành và sâu sắc nhất. Bằng kinh nghiệm và lòng nhiệt huyết của mình,
trong thời gian vừa qua, thầy đã tận tình chỉ bảo và hướng dẫn giúp em hoàn
thành tốt đồ án của mình, kết quả đạt được của đồ án này cũng bao gồm một
phần công lao rất lớn của thầy. Em xin cảm ơn thầy một lần nữa!
Em cũng xin cảm ơn các thầy cô trong khoa Công nghệ thông tin Đại
học Thái Nguyên, đặc biệt là những thầy cô đã trực tiếp giảng dạy em trong
5 năm học vừa qua, thầy cô là những người đã tạo nền tảng kiến thức cơ bản
nhất, vững chắc nhất và đầy đủ nhất để em có thể nhận và hoàn thành đồ án
này. Em xin cảm ơn!
Sinh viên
Bùi Mạnh Hùng
LỜI CAM ĐOAN
Tôi, sinh viên Bùi Mạnh Hùng, lớp K1B khoa Công nghệ thông tin, Đại học
Thái Nguyên, xin cam đoan đồ án này là đồ án của tôi, không sao chép nội dung
cơ bản từ bất kì đồ án nào khác, toàn bộ nội dung chính của đồ án là do nhưng
nghiên cứu của bản thân tôi xây dựng lên. Chương trình kèm theo với các nội
dung chính liên quan đến đồ án là do tôi tự viết ra, không sao chép từ bất kỳ
nguồn nào và chương trình này chỉ sử dụng với mục đích demo cho nội dung đồ
án không có bất kỳ một mục đích nào khác. Tôi xin cam đoan những gì tôi trình
bày ở trên hoàn toàn là sự thật, nếu có nội dung nào sai sự thật tôi xin hoàn toàn
chịu trách nhiệm.
3
MỤC LỤC
Mở đầu
Chương 1: Tổng quan về ngôn ngữ lập trình Visual C++ 6.0
Chương 2: Tổng quan về xử lý ảnh
2.1 Tổng quan về một hệ thống xử lý ảnh
2.2 Các vấn đề cơ bản trong xử lý ảnh nâng cao
2.2.1 Histogram và biến đổi histogram
2.2.2 Các kỹ thuật tăng cường ảnh (Image Enhancement)
2.2.3 Khôi phục ảnh (Image Restauration)
2.2.4 Nhận dạng ảnh
2.2.5 Nén ảnh
Chương 3: Tổng quan về video
3.1 Tổng quan về video
3.2.Một số thuộc tính đặc trưng của video
3.2.1.Color
3.2.2.Texture
3.2.3.Shape
3.2.4.Motion
Chương 4: Các phương pháp xác định độ đo tương tự trong xử lý ảnh
4.1 Giới thiệu
4.2 Phương pháp Histogram dòng, cột
4.3 Mô hình Cognitive Visual Attention (CVA)
4.4 Độ đo tương tự có thể học (Trainable similarity measure)
4.5 Multivariate Two-sample problem
Chương 5: Phân tích và thiết kế hệ thống
5.1.Phân tích
5.1.1.Đặt vấn đề
5.1.2.Phân tích bài toán
.......
5.2.Kỹ thuật đề xuất
5.3.Thiết kế hệ thống
Chương 6: Thực nghiệm
6.1 Giới thiệu chương trình
6.2 Các chức năng chính của chương trình
6.2.1 Giao diện chính
6.2.2 Chức năng mở file video, ảnh gốc
6.2.3 Thao tác với file video
6.2.4 Hiển thị Histogram
6.2.5 Xuất frame ra file bitmap
6.2.6 Khoanh vùng đối tượng cần tìm
6.2.7 Xác định độ đo tương tự
6.3 Kết quả đạt được
KẾT LUẬN
TÀI LIỆU THAM KHẢO
PHỤ LỤC
MỞ ĐẦU
Ngày nay, thông tin hình ảnh đóng vai trò quan trọng trong trao đổi thông tin,
bởi phần lớn các thông tin mà con người thu nhận được đều thông qua thị giác. Do
vậy vấn đề xử lý ảnh nói chung và xử lý video nói riêng đã phát triển , nó liên quan
đến nhiều ngành khác như: hệ thống tin học, lý thuyết thông tin, lý thuyết thống kê,
trí tuệ nhân tạo, nhận dạng, v.v. Thực tế này đặt ra ba bài toán lớn. Thứ nhất, giảm
dung lượng video và tăng tốc độ xử lý. Thứ hai, tổ chức lưu trữ, tìm kiếm video hiệu
quả. Thứ ba, tiến đến việc hiểu nội dung video.
Trong đợt làm đồ án tốt nghiệp này, em đã chọn đề tài là "Tìm kiếm theo nội
dung trong file video" vì các lí dó sau. Đầu tiên, đây là đề tài đáp ứng được nguyện
vọng vủa em là được nghiên cứu đề tài liên quan đến xử lý ảnh, một vấn đề mà em
đã và đang rất qua tâm, thứ hai đây là một trong các bài toán nằm trong lớp bài toán
thứ ba đề cập ở trên, một lớp bài toán có ý nghĩa đặc bệt quan trọng do vậy nó mang
rất nhiều ý nghĩa thực tiễn, thứ ba đây là một cơ hội rất tốt giúp em có thể tự đánh
giá được năng lực bản thân bởi vì đây là một đề tài khó và hiện tại vẫn chưa có
nhiều nghiên cứu có kết quả cao và chưa được phổ biến rộng rãi.
Chương 1: TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH
VISUAL C++ 6.0
1.1 Giới thiệu
Trước đây phần lớn các ứng dụng Windows được viết bằng ngôn ngữ C. Ngày
nay các môi trường lập trình mới đã cho phép viết các chương trình thương mại có
chất lượng cao bằng C, C++, Pascal, BASIC và các ngôn ngữ khác. Trong đó, ngôn
ngữ C++ đã được các lập trình viên chuyên nghiệp chọn để sử dụng thay cho C. Kết
hợp với thư viện lớp, C++ trừu tượng, giao diện lập trình ứng dụng (Application
Programming Interface - API) của Windows nhờ các lớp cơ sở để biểu diễn các dối
tượng chung như cửa sổ, thực đơn ... C++ làm giảm các khó khăn cho những người
lập trình ít kinh nghiệm. Ở đây chúng ta sẽ mô tả các sử dụng MFC (Microsoft
Foundation Class) để viết các ứng dụng Windows trên cơ sở thông điệp và các đặc
tính cơ bản của C++ như lớp, thừa hưởng ...
1.2 Cơ bản về MFC
MFC là tập hợp các lớp định nghĩa sẵn. Chúng biểu diễn cách tiếp cận hướng
đối tượng đến lập trình Windows và chúng gói các Windows API. Rất nhiều lập
trình viên C++ đã chọn thư viện MFC như là thư viện lớp để phát triển ứng dụng của
mình. MFC cho phép lập trình viên dành nhiều thời gian hơn cho phát triển các
thành phần cấu trúc chương trình và ít phải lo lắng về giao diện của Windows. Đặc
biệt, MFC làm đơn giản tiến trình phát triển mã trình cho các loại máy có hệ điều
hành khác nhau: Windows 16 bít, Windows 32 bít, Windows 64 bít.
Hiện nay, MFC 6.0 (trong bộ Visual C++ 6.0) có hơn 130 lớp, trong đó một số
lớp được trực tiếp sử dụng và một số khác làm lớp cơ sở cho lớp riêng của lập trình
viên. Rất nhiều lớp khá đơn giản, chẳng hạn như lớp CPoint (chỉ chứa tọa độ x,y
của một điểm). Một số lớp khác lại rất phức tạp, như lớp CWnd chứa cả cửa sổ mà
ta quan sát thấy trên màn hình.
Hình 1.1 - Mô tả rút gọn cấu trúc MFC
Trong chương trình MFC, giao diện lập trình API rất ít khi được gọi trực tiếp.
Thay vào đó là tạo ra các đối tượng của các lớp MFC và gọi các hàm thành phần của
chúng. Rất nhiều hàm thành phần MFC là lớp vỏ bao bọc mỏng xung quanh API; rất
nhiều hàm, thậm chí, có cùng tên với các hàm API. Điều này giúp cho lập trình viên
C có thể chuyển nhanh sang MFC. Thí dụ, khi dịch chuyển cửa sổ, trong C ta gọi
hàm API với tên SetWindowsPos. Khi tìm tên này trong MFC ta thấy MFC cũng
trợ giúp chúng, đó là hàm thành phần của lớp CWnd khi cửa sổ được coi là đối
tượng, còn SetWindowsPos là một hành động mà ta muốn thực hiện trên đối tượng
đó.
MFC còn là khung (framework) ứng dụng. MFC giúp định nghĩa cấu trúc của
ứng dụng và quản lý rất nhiều công việc khác nữa. Bắt đầu với CWinApp, là lớp
biểu diễn chính ứng dụng, MFC bao gồm hầu hết mọi thao tác chương trình. Khung
ứng dụng cung cấp hàm WinMain, đến lượt WinMain gọi các hàm thành phần của
đối tượng ứng dụng để làm cho chương trình chạy. Một trong các hàm thành phần
của CWinApp mà WinMain gọi đến là hàm Run, nó chứa vòng lặp thông điệp và
lệnh chạy chương trình. MFC còn trợ giúp các tài liệu (document) và quan sát
(view), cho phép tách dữ liệu của chương trình khỏi biểu diễn đồ họa của chúng.
MFC cũng đưa ra một số API riêng, độc lập với các lớp và được dùng chung.
1.3 CObject, cha của tất cả các lớp
Khi quan sát biểu đồ phân cấp MFC ta sẽ thấy phần lớn các lớp MFC là lớp suy
diễn trực tiếp hoặc gián tiếp từ CObject. CObject cũng cấp ba kiểu cơ bản để xây
dựng các lớp thừa hưởng chúng:
Vào/ra dữ liệu (Serialization)
Thông tin về lớp khi chương trình đang chạy (Run - time)
Thông báo kiếm tra lỗi
Serialization (vào/ra) là tiến trình giúp các đối tượng tự truyền đến hoặc truyền
đi từ phương tiện lưu trữ như đĩa từ, clipboard. CObject có hai hàm thành phần làm
nhiệm vụ xử lý vào/ra: IsSerializable và Serialize. Chương trình có thể gọi hàm
IsSerializable của đối tượng suy diễn từ CObject để xác định xem chúng có trợ giúp
vào/ra hay không.
Đặc trưng khác mà các lớp suy diễn từ CObject thừa hưởng là trợ giúp lấy
thông tin về đối tượng của chương trình đang chạy. Cho trước con trỏ CObject đến
lớp suy diễn từ chúng, tiện ích thông tin kiểm tra kiểu run - time cho phép chương
trình biết được tên lớp của đối tượng cũng như các thông tin khác. CObject cung cấp
hai hàm thành phần để làm việc này: IsKindOf và GetRuntimeClass.
Đặc trưng thứ ba mà CObject thêm vào các lớp suy diễn của chúng là trợ giúp
kiểm tra lỗi Hàm thành phần ảo AssertValid của CObject yêu cầu đối tượng thực
hiện kiểm tra tính hợp lý trên chính nó (trạng thái bên trong của đối tượng) nhờ một
dãy toán tử xen, tách ( >> hay << ). Hàm thành phần ảo Dump thực hiện quá trình
kiểm tra các thành phần dữ liệu của đối tượng, có ích khi gỡ rối chương trình và
kiểm tra các đối tượng mà nó sử dụng.
1.4 Các lớp kiến trúc ứng dụng
Các lớp kiến trúc ứng dụng hình thành khuôn dạng và cấu trúc của các ứng
dụng MF, CWinApp biểu diễn chính ứng dụng. Toàn bộ ứng dụng trên cơ sở MFC
đều suy diễn lớp từ CWinApp và tạo các đối tượng ứng dụng từ các lớp suy diễn.
Nhóm lớp này còn bao gồm CDocument, lớp cơ sở cho các tài liều (document)
trong các ứng dụng sử dụng kiên trúc tài liệu/quan sát (document/view) của MFC.
Hiểu đơn giản, một “tài liệu” là biểu diễn trừu tượng của các dữ liệu chương trình.
CDocument cho phép ứng dụng bảo quản dữ liệu tách biệt khỏi các thành phần khác
của chương trình, bao gồm các “quan sát” của dữ liệu được vẽ trên màn hình.
Một lớp quan trọng khác là CWinThread. Một đối tượng CWinThread biểu
diễn một luồng thực hiện Các hàm thành phần của chúng như CreateThread,
SetThreadPriority và SuspendThread cung cấp các công cụ mà chương trình MFC
sử dụng để tạo và xử lý các luồng thực hiện.
1.5 Các lớp đối tượng trực quan
Các lớp đối tượng trực quan (visual object) bao gồm phần lớn các đối tượng
quan sát được khi màn hình chương trình Windows chạy, bao gồm cửa sổ, hộp
thoại, thực đơn, điều khiển và nhiều đối tượng khác. Chúng còn bao gồm cả ngữ
cảnh thiết bị (Device Context - DC) của Windows và các đối tượng giao diện thiết bị
đồ họa (Graphics Device Interface - GDI) như bitmaps, chổi tố (brushes) và bút vẽ
(pens). Một trong những lớp trừu tượng nhất của loại này là CView, chúng là bản
đối trọng của CDocument và là lớp cơ sở cho mọi quan sát dữ liệu của ứng dụng.
Gốc của mọi lớp đối tượng trực quan là CWnd, chúng được sử dụng như lớp cơ
sở cho mọi lớp cửa sổ. CWnd định nghĩa các chức năng cơ bản của cửa sổ và chứa
hàng chục hàm thành phần để xử lý cho cửa sổ theo nhiều cách khác nhau CWnd
còn định nghĩa các trả lời mặc định của cửa sổ cho hầu hết các thông điệp. CWnd
đôi khi được sử dụng trực tiếp nhưng thường xuyên hơn là sử dụng các lớp suy diễn
từ các lớp suy diễn của CWnd hay lập đối tượng từ các lớp mà MFC suy diễn từ
CWnd.
Lớp CGdiObject được sử dụng như lớp cơ sở của các đối tượng GDI như bút,
chổi tô và cọ chữ, cùng với các lớp suy diễn từ CGdiObject như CPen, CBrush, và
CFont biễu diễn chính các đối tượng.
1.6 Các lớp chức năng chung
Không phải tất cả các lớp MFC được thiết kế để gói API của Windows. MFC
còn có rất nhiều lớp khác thực hiện các công việc như quản lý các biến xâu và vào/ra
tệp. Lớp cực kỳ hữu hiệu CString định nghĩa dữ liệu xâu có kiểu cơ sở với các toán
tử chuẩn như =, +=, < và để thực hiện gán, ghép và so sánh. Lớp CFile và các suy
diễn từ chúng thực hiện các hàm vào/ra chuẩn như Read và Write và cài đặt chúng
trong ngữ cảnh đối tượng tệp. CException là lớp cơ sở trừu tượng để sử dụng cơ chế
quản lý lỗi try/throw/catch của C++.
1.7 Các hàm AfxXxx
Không phải tất cả các hàm mà MFC cũng cấp là hàm thành phần lớp. MFC còn
cho API dưới dạng các hàm tổng thể với tên bắt đầu là Afx (A và f trong Afx là
“application frameword”). Các hàm này được gọi bất kỳ đâu trong ứng dụng MFC,
không như hàm thành phần là chúng phải có đối tượng hay con trỏ đối tượng.
Bảng 1.1 liệt kê một vài hàm AfxXxx. Hàm Afx BeginThread thường được gọi thay
cho hàm CWinThread::CreateThread vì chúng tạo và thực hiện luồng thực hiện trong một
bước. Hàm AfxMessageBox tương đương với hàm MessageBox của Windows và không
như CWnd::MessageBox, chúng có thể được gọi mà không cần con trỏ đến lớp suy diễn từ
CWnd AfxFormatString1 thường được nối với AfxMessageBox để thực hiện tạo dạng xâu
kiểu printf. AfxGetApp dùng để lấy về con trỏ đến đối tượng ứng dụng khai báo trong tệp
khác, và AfxGetInstanceHandle lấy chỉ danh làm tham số của hàm API của Windows. Cuối
cùng AfxRegisterWndClass được sử dụng khi MFC không thực hiện đăng ký lớp cửa sổ
mặc định.
Tên hàm
AfxAbort
AfxBeginThread
AfxEndThread
AfxFormatString1
AfxMessageBox
AfxGetApp
AfxGetInstanceHandle
AfxRegisterWndClass
Mô tả
Kết thúc vô điều kiện ứng dụng.
Lập luồng thực hiện mới và bắt đầu thực hiện chúng
Kết thúc luồng thực hiện đang thực hiện.
Thay thế xâu vào vị trí %1 trong xâu tài nguyên
Hiển thị thông báo của Windows
Cho lại con trỏ đến đối tượng ứng dụng.
Cho lại handle chỉ ra bản thân ứng dụng hiện hành
Đăng ký một lớp cửa sổ riêng cho ứng dụng MFC
Bảng 1.1 - Một số hàm AfxXxx
1.8 Kiến truc tài liệu/quan sát
Trong ứng dụng tài liệu/quan sát đối tượng tài liệu biểu diễn dữ liệu ứng dụng,
còn một hay nhiều đối tượng quan sát sẽ biểu diễn quan sát dữ liệu đó. Các đối
tượng dữ liệu và quan sát cùng xử lý đầu vào của người sử dụng, vẽ ký tự và biểu
diễn đồ họa của dữ liệu kết quả. Lớp CDocument được sử dụng làm lớp cơ sở cho
các đối tượng tài liệu, còn lớp CView và các lớp phái sinh của chùng làm cơ sở cho
các đối tượng quan sát. Cửa sổ trên cùng suy diễn từ CFrameWnd hay
CMDIFrameWnd không còn là tiểu điểm để xử lý các thông điệp, nhưng để làm cái
“chứa” quan sát, thanh công cụ, thanh trạng thái, và các đối tượng khác.
MFC trợ giúp hai loại ứng dụng tài liệu/quan sát Loại thứ nhất là ứng dụng
ghép nối đơn tài liệu (Single-Document Interface - SDI), chúng chỉ cho phép mở
một tài liệu một lần Loại thứ hai là ứng dụng ghép nối đa tài liệu (MultipleDocument Interface - MDI), cho phép mở hai hay nhiều tài liệu đồng thời.
1.8.1 Đối tượng tài liệu
Trong ứng dụng tài liệu/quan sát, dữ liệu được lưu trong một đối tượng tài liệu của
lớp phái sinh từ CDocument. Khái niệm “tài liệu” hay gây nhầm lẫn vì nó thường được
hiểu dưới cái nhìn của các chương trình xử lý văn bản hay trang tính và các ứng dụng khác
làm cho ta suy nghĩ đến tài liệu văn bản truyền thống. Trong thực tế, kiến trúc tài liệu/quan
sát đề cập đến biểu diễn trừu tượng dữ liệu chương trình, vạch ra đường ngăn cách rõ ràng
giữa việc lưu giữ dữ liệu và biểu diễn dữ liệu. Dữ liệu thường được lưu trong các biến
thành phần đi theo lớp tài liệu phái sinh. Bảng 1.2 liệt kê một số hàm thành phần quan
trọng mà đối tượng tài liệu thừa hưởng từ lớp CDocument. Hàm SetModifiedFlag được gọi
mỗi khi dữ liệu tài liệu thay đổi. Hàm SetModifiedFlag sẽ lập cờ bên trong đối tượng tài
liệu để cho khung ứng dụng biết rằng tài liệu có dữ liệu chưa được lưu trên đĩa. Ta có thể tự
xác định xem tài liệu có chữa dữ liệu chưa lưu lại trên đĩa không nhờ gọi hàm IsModified
của tài liệu. Hàm GetTitle và GetPathName lấy tên tệp của tài liệu và đường dẫn đầy đủ của
tệp.
Tên hàm
GetFirstViewPositio
n
GetNextView
GetPathName
GetTitle
IsModified
SetModifiedFlag
UpdateAllViews
OnFileSendMail
Mô tả
Cho lại giá trị POSITION để truyền cho GetNextView
Cho lại con trỏ CView trỏ đến quan sát tiếp theo trong danh sách
Lấy tên tệp và đường dẫn của tài liệu
Lấy tiêu đề tài liệu
Cho lại giá trị khác 0 nếu tài liệu chưa lưu trên đĩa
Đặt hoặc xoá cờ cho biết tài liệu bị thay đổi
Làm tươi toàn bộ các quan sát
Cài đặt lệnh Send Mail trong thực đơn file
Bảng 1.2 - Các thao tác cơ bản của CDocument
CDocument còn cung cấp tập các hàm ảo để nạp chồng. Một số thường xuyên phải
nạp chồng trong các lớp tài liệu phái sinh, một số khác rất ít khi nạp chồng. Bốn hàm
thường xuyển hay được nạp chồng nhất được mô tả trong danh sách sau:
Tên hàm
OnNewDocument
OnOpenDocument
DeleteContents
Serialize
Mô tả
Khởi động tài liều mới
Mở một tài liệu đã được lưu lên đĩa
Xóa dữ liệu của tài liệu
Thực hiện vào/ra dữ liệu với thiết bị lưu trữ
Bảng 1.3 - Các hàm nạp chồng của CDocument
1.8.2 Đối tượng quan sát
Trong khi mục đích duy nhất của đối tượng tài liệu là lưu trữ dữ liệu ứng
dụng, các đối tượng quan sát có hai mục đích: biểu diễn dữ liệu tài liệu trên màn
hình và chuyển đổi đầu vào từ người sử dụng thành các lệnh thao tác tài liệu - trừ
các thông điệp chuột và bàn phím, chúng chuyển đối đối tượng tài liệu như các
thông điệp lệnh. Như vậy tài liệu và quan sát có quan hệ mật thiết và thông tin trao
đổi giữa chúng là hai chiều.
Đối tượng tài liệu có thể có số lượng bất kỳ các quan sát liên quan đến nó,
những mỗi quan sát chỉ gắn với một loại tài liệu. Khung ứng dụng lưu con trỏ đến
đối tượng tương ứng trong thành phần dữ liệu m_pDocument của quan sát và con trỏ
này được thầm nhập qua hàm thành phần GetDocument.
Lớp CView của MFC định nghĩa các tính chất của quan sát, và các lớp quan sát
phái sinh chia sẻ chức năng phụ. Như lớp CDocument, CView và các lớp phái sinh
của chúng bao gồm một số hàm thành phần ảo mà ta có thể nạp chổng để thực hiện
các thao tác quan sát riêng. Hàm quan trọng nhất là hàm OnDraw, nó được gọi mỗi
khi quan sát nhận thông điệp WM_PAINT. Trong ứng dụng không phải cấu trúc tài
liệu/quan sát, các thông điệp WM_PAINT được xử lý nhờ hàm OnPaint, hàm này sử
dụng đối tượng CPaintDC để vẽ. Trong ứng dụng tài liệu/quan sát, khung ứng dụng
nhận thông điệp WM_PAINT và gọi hàm OnDraw của lớp quan sát, chuyển con trỏ
CDC cho chúng để vẽ. Không cần ánh xạ thông điệp bởi vì OnDraw là ảo.
Chương 2: TỔNG QUAN VỀ XỬ LÝ ẢNH
2.1 Tổng quan về một hệ thống xử lý ảnh
Xử lý ảnh là một môn khoa học còn tương đối mới mẻ so với nhiều ngành khoa
học khác, nhất là trên qui mô công nghiệp, song trong xử lý ảnh đã bắt đầu xuất
hiện những máy tính chuyên dụng. Để có thể hình dung cấu hình một hệ thống xử
lý ảnh chuyên dụng hay một hệ thống xử lý ảnh dùng trong nghiên cứu, đào tạo,
trước hết chúng ta sẽ xem xét các bước cần thiết trong xử lý ảnh.
Trước hết là quá trình thu nhận ảnh. Ảnh có thể thu nhận qua camera. Thường
ảnh thu nhận qua camera là tín hiệu tương tự (loại camera ống kiểu CCIR), nhưng
cũng có thể là tín hiệu số hoá (loại CCD - Charge Coupled Device).
lưu
trữ
CAMERA
Thu nhận
ảnh
Số hoá
Phân tích
ảnh
Nhận
dạng
SENSOR
lưu
trữ
Hệ quyết
định
Hình 2.1 - Các giai đoạn trong xử lý ảnh
Ảnh cũng có thể thu nhận từ vệ tinh qua các bộ cảm ứng (sensor), hay ảnh,
tranh được quét trên scanner. Tiếp theo là quá trình số hoá (Digitalizer) để biến đổi
tín hiệu tương tự sang tín hiệu rời rạc (lấy mẫu) và số hoá bằng lượng hoá, trước khi
chuyển sang giai đoạn xử lý, phân tích hay lưu trữ lại.
Quá trình phân tích ảnh thực chất bao gồm nhiều công đoạn nhỏ. Trước hết là
công việc tăng cường ảnh để nâng cao chất lượng ảnh. Do những nguyên nhân khác
nhau: có thể do chất lượng thiết bị thu nhận ảnh, do nguồn sáng hay do nhiễu, ảnh
có thể bị suy biến. Do vậy cần phải tăng cường và khôi phục lại ảnh để làm nổi bật
một số đặc tính chính của ảnh, hay làm cho ảnh gần giống nhất với trạng thái gốctrạng thái trước khi ảnh bị biến dạng.Giai đoạn tiếp theo là phát hiện các đặc tính
như biên, phân vùng ảnh, trích chọn các đặc tính, v.v...
Cuối cùng, tuỳ theo mục đích của ứng dụng, sẽ là giai đoạn nhận dạng, phân
lớp hay các quyết định khác.Các giai đoạn chính của quá trình xử lý ảnh có thể mô
tả ở hình 2.1.
Với các giai đoạn trên, một hệ thống xử lý ảnh (cấu trúc phần cứng theo chức
năng) gồm các thành phần tối thiểu như hình 2.2.
Đối với một hệ thống xử lý ảnh thu nhận qua camera-camera như là con
mắt của hệ thống.Có 2 loại camera: camera ống loại CCIR và camera
CCD.Loại camera ứng với chuẩn CCIR quét ảnh với tần số 1/25 và mỗi ảnh
gồm 625 dòng.Loại CCD gồm các photo điốt và làm tương ứng một cường
độ sáng tại một điểm ảnh ứng với một phần tử ảnh (pixel).Như vậy, ảnh là
tập hợp các điểm ảnh.Số pixel tạo nên một ảnh gọi là độ phân giải
(resolution).
Bộ xử lý tương tự (analog processor).Bộ phận này thực hiện các chức
năng sau:
- Chọn camera thích hợp nếu hệ thống có nhiều camera.
- Chọn màn hình hiển thị tín hiệu
- Thu nhận tín hiệu video thu nhận bởi bộ số hoá(digitalizer).Thực
hiện lấy mẫu và mã hoá.
- Tiền xử lý ảnh khi thu nhận: dùng kỹ thuật bảng tra (Look Up Table - LUT).
Bộ xử lý ảnh số.Gồm nhiều bộ xử lý chuyên dụng: xử lý lọc, trích chọn
đường bao, nhị phân hoá ảnh.Các bộ xử lý này làm việc với tốc độ 1/25
giây.
Máy chủ.Đóng vai trò điều khiển các thành phần miêu tả ở trên.
Bộ nhớ ngoài: Dữ liệu ảnh cũng như các kiểu dữ liệu khác, để có thể
chuyển giao cho các quá trình khác, nó cần được lưu trữ.Để có một ước
lượng, xét thí dụ sau: một ảnh đen trắng cỡ 512 x 512 với 256 mức xám
chiếm 256K bytes.Với một ảnh màu cùng kích thước dung lượng sẽ tăng
gấp 3 lần.
Mành hình
đồ họa
camera
Bộ xử lý
tương tự
Bộ nhớ
ảnh
Bộ nhớ
ngoài
Máy chủ
Bộ xử lý
ảnh số
Màn hình
Bàn phím
Máy in
Hình 2.2 - Các thành phần chính của hệ thống xử lý ảnh
2.2 Các vấn đề cơ bản trong xử lý ảnh nâng cao
2.2.1 Histogram và biến đổi histogram
2.2.1.1 Lược đồ xám (Histogram)
Lược đồ mức xám của một ảnh là một hàm cung cấp tần suất xuất hiện của mỗi
mức xám (grey level).
Lược đồ xám được biểu diễn trong một hệ toạ độ vuông góc x,y. Trong hệ toạ
độ này, trục hoành biểu diễn số mức xám từ 0 đến N, N là số mức xám (256 mức
trong trường hợp chúng ta xét). Trục tung biểu diễn số điểm ảnh cho một mức xám
(số điểm ảnh có cùng mức xám). Cũng có thể biểu diễn khác một chút: trục tung là
tỷ lệ số điểm ảnh có cùng mức xám trên tổng số điểm ảnh
số điểm ảnh
số điểm ảnh
mức xám
ảnh đậm
mức xám
ảnh nhạt
2.3 - Lược đồ xám của ảnh
Lược đồ xám cung cấp rất nhiều thông tin về phân bố mức xám của ảnh. Theo
thuật ngữ của xử lý ảnh gọi là tính động của ảnh. Tính động của ảnh cho phép phân
tích trong khoảng nào đó phân bố phần lớn các mức xám của ảnh: ảnh rất sáng hay
ảnh rất đậm. Nếu ảnh sáng, lược đồ xám nằm bên phải (mức xám cao), còn ảnh đậm
luợc đồ xám nằm bên trái(mức xám thấp).
Theo định nghĩa của lược đồ xám, việc xây dựng nó là khá đơn giản. Thuật
toán xây dựng lược đồ xám có thể mô tả như sau:
Bắt đầu
H là bảng chứa lược đồ xám (là vec tơ có N phần tử)
a. Khởi tạo bảng
Đặt tất cả các phần tử của bảng là 0
b. Tạo bảng
Với mỗi điểm ảnh I(x,y) tính H[I(x,y)] = H[I(x,y)] + 1
c. Tính giá trị Max của bảng H. Sau đó hiện bảng trong khoảng từ 0 đến Max.
Kết thúc
Lược đồ xám là một công cụ hữu hiệu dùng trong nhiều công đoạn của xử lý
ảnh như tăng cường ảnh ( xem chương Bốn). Dưới đây ta xem xét một số biến đổi
lược đồ xám hay dùng.
2.2.1.2 Biến đổi histogram
Trong tăng cường ảnh, các thao tác chủ yếu dựa vào phân tích lược đồ xám.
Trước tiên ta xét bảng tra LUT(Look Up Table). Bảng tra LUT là một bảng chứa
biến đổi một mức xám i sang mức xám j .Một cách toán học, LUT được định nghĩa
như sau:
- Cho GI là tập các mức xám ban đầu GI = {0, 1, ..., NI}
- Cho GF là tập các mức xám kết quả GF = {0, 1, ..., NF}
để cho tiện ta cho NI = NF = 255.
- f là ánh xạ từ GI vào GF: giGi sẽ gfGF mà gf = f(gi)
Với mỗi giá trị của mức xám ban đầu ứng với một giá trị kết quả. Việc chuyển
đổi một mức xám ban đầu về một mức xám kết quả tương ứng có thể dễ dàng thực
hiện được nhờ một bảng tra.
Khi đã xây dựng được bảng, việc sử dụng bảng là khá đơn giản. Người ta xem
xét mức xám của mỗi điểm ảnh, nhờ bảng tra tính được mức xám kết quả. Gọi là
bảng tra, thực ra là một véctơ có NI + 1 phần tử. Mỗi phần tử của bảng chứa một
giá trị mức xám kết quả. Có hai kiểu bảng tra: bảng đồng nhất và bảng nghịch đảo.
Với bảng đồng nhất, giá trị mức xám ban đầu cũng chính là giá trị mức xám kết quả;
còn với bảng nghịch đảo, nếu giá trị mức xám ban đầ là g I thì giá trị mức xám kết
quả là 255-gI.
Một trong những ứng dụng phổ biến của LUT là viền khung động. Một số ảnh
ban đầu hoặc có thể là rất đậm hay rất nhạt, hoặc độ tương phản thấp. Điều này có
thể là do trong ảnh ban đầu, các mức xám có thể vượt lên cao hoặc xuống dưới tỷ
lệ, hay tập trung lại trong một vùng rất hẹp (trên lược đồ xám thể hiện rõ điều này).
Mục đích của LUT là phân bố lại mức xám để chúng có thể phủ trên toàn dải đó chính là viền khung động. Việc chọn giá trị Min và Max là phụ thuộc vào từng
ứng dụng.
Một ứng dụng khác của LUT là làm nổi bật một số dải mức xám của ảnh. Điều
này có thể thực hiện được nhờ viền khung động tại miền quan tâm, bên ngoài miền
đặt giá trị là 0 hay nhị phân hoá ảnh (binarisation).
Với một ảnh tự nhiên được lượng hoá một cách tuyến tính, phần lớn các điểm
ảnh có giá trị thấp hơn độ sáng trung bình. Trong miền tối, ta khó có thể cảm nhận
các chi tiết của ảnh. Thực tế cần phải khắc phục nhược điểm này bằng cách biến
đổi luợc đồ xám. Người ta biến đổi lược đồ sao cho tiến gần tới lược đồ định trước.
Có nhiều phương pháp, trong đó phương pháp phổ dụng là san bằng lược đồ
(histogram equalisa-tion).
Nếu ảnh có kích thước pxp và ảnh kết quả được mã hoá trên N F mức xám, thì
số điểm ảnh cho 1 mức xám trong lược đồ cân bằng lý tưởng sẽ là hằng số và bằng
p2/NF (NF là số mức xám đầu ra). Trên thực tế, N F thường nhỏ hơn NI (số mức xám
ban đầu).
Việc san bằng lược đồ được thực hiện theo thuật toán:
/*
Ima:
ảnh gốc cần san bằng
Histo:
lược đồ xám của ảnh
Transfo: bảng san bằng lược đồ
BatDau, KetThuc : điểm bắt đầu và điểm kết thúc mỗi dải xét.
Bande, CentreBande: độ rộng băng và trung điểm của dải
Nl: Số mức xám của ảnh gốc
Nf: Số mức xám của ảnh kết quả
*/
a. Khởi tạo
TBLituong <-- pxp/NF;
Bande <-- NI/NF;
CentreBande <-- Bande/2;
BatDau, KetThuc <-- 0;
b. Tính và biến đổi lược đồ
While KetThuc < Nl
do
Begin
Tong <-- 0;
While (Tong < TBLituong) and(KetThuc < NI ) do
- Xem thêm -