Tải bản đầy đủ (.doc) (76 trang)

Tìm kiếm theo nội dung trong file video

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 (766.46 KB, 76 trang )

ĐẠ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
2
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.
4
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 Mô tả
AfxAbort Kết thúc vô điều kiện ứng dụng.
AfxBeginThread Lập luồng thực hiện mới và bắt đầu thực hiện chúng
AfxEndThread Kết thúc luồng thực hiện đang thực hiện.
AfxFormatString1 Thay thế xâu vào vị trí %1 trong xâu tài nguyên
AfxMessageBox Hiển thị thông báo của Windows
AfxGetApp Cho lại con trỏ đến đối tượng ứng dụng.
AfxGetInstanceHandle Cho lại handle chỉ ra bản thân ứng dụng hiện hành
AfxRegisterWndClass Đă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 (Multiple-Document
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 Mô tả
GetFirstViewPosition Cho lại giá trị POSITION để truyền cho GetNextView
GetNextView Cho lại con trỏ CView trỏ đến quan sát tiếp theo trong danh sách
GetPathName Lấy tên tệp và đường dẫn của tài liệu
GetTitle Lấy tiêu đề tài liệu
IsModified Cho lại giá trị khác 0 nếu tài liệu chưa lưu trên đĩa
SetModifiedFlag Đặt hoặc xoá cờ cho biết tài liệu bị thay đổi
UpdateAllViews Làm tươi toàn bộ các quan sát
OnFileSendMail 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 Mô tả
OnNewDocument Khởi động tài liều mới
OnOpenDocument Mở một tài liệu đã được lưu lên đĩa
DeleteContents Xóa dữ liệu của tài liệu

Serialize 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).
Ả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
Hệ quyết
định
lưu
trữ
SENSOR
Số hoá
Thu nhận ảnh
Nhận
dạng
CAMERA
lưu
trữ
Phân tích
ảnh
Hình 2.1 - Các giai đoạn trong xử lý ảnh
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ốc- trạ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.
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
Mành hình đồ
họa
camera
Bộ xử lý
tương tự
Bộ nhớ
ảnh
Máy chủ
Màn hình
Bộ xử lý
ảnh số
Bộ nhớ
ngoài
Máy in
Bàn phím
Hình 2.2 - Các thành phần chính của hệ thống xử lý ảnh
(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
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.
mức xám mức xám
số điểm ảnh
số điểm ảnh
ảnh đậm ảnh nhạt
2.3 - Lược đồ xám của ảnh
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 G
I
là tập các mức xám ban đầu G
I
= {0, 1, ..., N
I
}
- Cho G
F
là tập các mức xám kết quả G
F

= {0, 1, ..., N
F
}
để cho tiện ta cho N
I
= N
F
= 255.
- f là ánh xạ từ G
I
vào G
F
: ∀g
i
∈G
i
sẽ ∃ g
f
∈G
F
mà g
f
= f(g
i
)
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ó N
I
+ 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-g
I
.
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 p
2
/N
F
(N
F
là số mức xám đầu ra). Trên thực tế, N
F
thường nhỏ hơn N
I
(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
N
l
: Số mức xám của ảnh gốc
N
f
: Số mức xám của ảnh kết quả
*/
a. Khởi tạo
TBLituong <-- pxp/N
F
;

Bande <-- N
I
/N
F;
CentreBande <-- Bande/2;
BatDau, KetThuc <-- 0;
b. Tính và biến đổi lược đồ
While KetThuc < N
l
do
Begin
Tong <-- 0;
While (Tong < TBLituong) and(KetThuc < N
I
) do
Begin
Tong <-- Tong + Histo(KetThuc);
Inc(KetThuc)
End;
For i := BatDau to KetThuc -1 do
Trandfo[i] <-- CentreBande;
CentreBande <- - CentreBande + Bande;
Debut <-- KetThuc;
End
c. Tính ảnh kết quả
For i := 1 to N do
For j :=1 to N do
Begin
Pic <-- Ima[i,j];
Ima[i,j] <-- Transfo[Pic]

End
Lưu ý rằng, N
F
càng hạn chế thì việc tích hợp càng quan trọng vì giá trị p
2
/N
F
sẽ
tăng. Trên thực tế, người ta hay dùng N
F
= N
I
/2 và lặp lại nhiều lần quá trình san
bằng. Thí dụ với một ảnh 128 x 128 mã hoá trên 256 mức xám, nếu muốn lược đồ san
bằng trên 64 mức xám, số lượng trung bình các điểm ảnh lý tưởng sẽ tiệm cận
128
2
/64 = 256.
2.2.2 Các kỹ thuật tăng cường ảnh (Image Enhancement)
Nhiệm vụ của tăng cường ảnh không phải là làm tăng lượng thông tin vốn có
trong ảnh mà làm nổi bật các đặc trưng đã chọn làm sao để có thể phát hiện tốt hơn,
tạo thành quá trình tiền xử lý cho phân tích ảnh.Tăng cường ảnh bao gồm: điều
khiển mức xám, dãn độ tương phản, giảm nhiễu, làm trơn ảnh, nội suy, phóng đại, nổi
biên v...v.
2.2.2.1 Cải thiện ảnh dùng toán tử điểm
Toán tử điểm là toán tử không bộ nhớ, ở đó một mức xám u ∈[0,N] được ánh
xạ sang một mức xám v ∈[0,N]: v = f( u).Ánh xạ f tuỳ theo các ứng dụng khác nhau
có dạng khác nhau và được liệt kê trong bảng sau:
i. Tăng độ tương phản:
( ) ( )

( )





<≤+−
<≤+−
<≤
=
Lubvbu
buavau
auu
uf
b
a
γ
β
αα
Các độ dốc α, β, γ xác định độ tương phản tương đối.L là số mức xám cực đại.
ii. Tách nhiễu và phân ngưỡng
( )





>
<≤
<≤

=
buL
buau
au
uf
α
00
Khi a = b = t được gọi là phân ngưỡng.
iii. Biến đổi âm bản
f(u) = L – u tạo âm bản
iv. Cắt theo mức
( )



≤≤
=
other
buaL
uf
0
v. Chính chọn bit
( ) ( )
Liiuf
nn 1
2

−=
với i
n

= Int[it/2
a-1
], n = 1, 2, ..., B
2.2.2.2 Cải thiện ảnh dùng toán tử không gian
Cải thiện ảnh là làm cho ảnh có chất lượng tốt hơn theo ý đồ sử dụng.Thường là
ảnh thu nhận có nhiễu cần phải loại bỏ nhiễu hay ảnh không sắc nét bị mờ hoặc cần
làm rõ các chi tiết như biên.Các toán tử không gian dùng trong kỹ thuật tăng cường
ảnh được phân theo nhóm theo công dụng: làm trơn nhiễu, nổi biên.Để làm trơn nhiễu
hay tách nhiễu người ta sử dụng các bộ lọc tuyến tính (lọc trung bình, thông thấp) hay
lọc phi tuyến (trung vị, giả trung vị, lọc đồng hình).Do bản chất của nhiễu là ứng với
tần số cao và cơ sở lý thuyết của lọc là bộ lọc chỉ cho tín hiệu có tần số nào đó thông
qua (dải tần bộ lọc).Do vậy để lọc nhiễu ta dùng lọc thông thấp (theo quan điểm tần
số không gian) hay lấy tổ hợp tuyến tính để san bằng (lọc trung bình). Để làm nổi
cạnh (ứng với tần số cao), ngưòi ta dùng các bộ lọc thông cao, Laplace.Chi tiết và các
cách áp dụng được trình bày dưới đây.
 Làm trơn nhiễu bằng lọc tuyến tính (lọc Trung bình và lọc dải thông thấp): vì có
nhiều loại nhiễu can thiệp vào quá trình xử lý ảnh như: nhiễu cộng, nhiễu xung,
nhiễu nhân nên cần có nhiều bộ lọc thích hợp.Với nhiễu cộng và nhiễu nhân ta dùng
các bộ lọc thông thấp, trung bình và lọc đồng hình (homomorphie); với nhiễu xung ta
dùng lọc trung vị , giả trung vị, lọc ngoài (outlier).
 Làm trơn nhiễu bằng lọc phi tuyến: người ta dùng bộ lọc trung vị (Median Filtering),
giả trung vị (Pseudo Median Filtering), lọc ngoài (Outlier).Với lọc trung vị, điểm ảnh đầu
vào sẽ được thay thế bởi trung vị các điểm ảnh.Còn lọc giả trung vị sẽ dùng trung bình
cộng của 2 giá trị "trung vị" (trung bình cộng của max và min ).
 Mặt nạ gờ sai phân và làm nhăn (Unharp Masking and Crispering): mặt nạ gờ
sai phân dùng khá phổ biến trong công nghệ in ảnh để làm đẹp ảnh.Với kỹ thuật này,
tín hiệu đầu ra thu được bằng tín hiệu ra của bộ lọc gradient hay lọc dải cao bổ xung
thêm đầu vào
 Khuyếch đại và nội suy ảnh: có nhiều ứng dụng cần thiết phải phóng đại một
vùng của ảnh.Có nghĩa là lấy một vùng của ảnh đã cho và cho hiện lên như một ảnh

lớn.Có 2 phương pháp được dùng là lặp (Replication) và nội suy tuyến tính (linear
interpolation).
2.2.3 Khôi phục ảnh (Image Restauration)
Khôi phục ảnh đề cập tới các kỹ thuật loại bỏ hay tối thiểu hoá các ảnh hưởng
của môi trường bên ngoài hay các hệ thống thu nhận, phát hiện và lưu trữ ảnh đến ảnh
thu nhận được.Ở đây, ta có thể liệt kê nguyên nhân các biến dạng (degradations): do
nhiễu bộ cảm nhận tín hiệu, ảnh mờ do camera, nhiễu ngẫu nhiên của khí quyển,
v...v.Khôi phục ảnh bao gồm nhiều quá trình như: lọc ảnh, khử nhiễu nhằm làm giảm

×