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.
74 trang |
Chia sẻ: luyenbuizn | Lượt xem: 1112 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Đề tài Xây dựng chương trình tìm kiếm theo nội dung trong file avi, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ĐẠ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.
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).
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
Ả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ố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.
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
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
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
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: "giÎGi sẽ $ gfÎGF 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à gI 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 NF m
Các file đính kèm theo tài liệu này:
- Tìm kiếm theo nội dung trong file video.doc