Tổng quan về xử lý ảnh và thư viện mã nguồn mở Opencv

MỞ ĐẦU Thị giác máy là một lĩnh vực đã và đang rất phát triển. Khái niệm xử lý ảnh và thị giác máy – Computer vision có liên quan tới nhiều ngành học và hướng nghiên cứu khác nhau. Từ những năm 1970 khi mà năng lực tính toán của máy tính ngày càng trở nên mạnh mẽ hơn, các máy tính lúc này có thể xử lý được những tập dữ liệu lớn như các hình ảnh, các đoạn phim thì khái niệm và kỹ thuật về thị giác máy ngày càng được nhắc đến và nghiên cứu nhiều hơn cho tới ngày nay. Thị giác máy bao gồm lý thuyết và các kỹ thuật liên quan nhằm mục đích tạo ra một hệ thống nhân tạo có thể tiếp nhận thông tin từ các hình ảnh thu được hoặc các tập dữ liệu đa chiều. Việc kết hợp giữa thị giác máy với các kỹ thuật khác như công nghệ thông tin, truyền thông, điện tử, điều khiển tự động, cơ khí cho chúng ta rất nhiều ứng dụng trong đời sống hàng ngày cũng như trong khoa học, an ninh, quân sự Ngày nay, ứng dụng của thị giác máy đã trở nên rất rộng lớn và đa dạng, len lỏi vào mọi lĩnh vực từ quân sự, khoa học, vũ trụ, cho đến y học, sản xuất, và tự động hóa tòa nhà. Trong thời gian thực tập tốt nghiệp, được sự giúp đỡ của thầy cô hướng dẫn em đã từng bước tiếp cận và nghiên cứu cơ sở ban đầu về xử lý ảnh số, sử dụng thư viện mã nguồn mở OpenCV, lập trình Visual C++ và xây dựng giao diện điều khiển trên máy tính. Công nghệ xử lý ảnh bao gồm rất nhiều hướng nghiên cứu, một trong những hướng nghiên cứu của em đó là tìm hiểu và xây dựng hệ thống bám mục tiêu di dộng sử dụng thuật toán xử lý ảnh Camshift của OpenCV. Báo cáo thực tập bao gồm: Chương 1: Tổng quan về xử lý ảnh và thư viện mã nguồn mở Opencv Chương 2: Cơ sở về hệ thống bám ảnh tự động Chương 3: Tìm hiểu thư viện mã nguồn mở OpenCV của Intel trên nền Visual C++ Chương 4: Xây dựng giao diện điều khiển dùng Visual C++

doc36 trang | Chia sẻ: lvcdongnoi | Lượt xem: 10881 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Tổng quan về xử lý ảnh và thư viện mã nguồn mở Opencv, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
MỞ ĐẦU Thị giác máy là một lĩnh vực đã và đang rất phát triển. Khái niệm xử lý ảnh và thị giác máy – Computer vision có liên quan tới nhiều ngành học và hướng nghiên cứu khác nhau. Từ những năm 1970 khi mà năng lực tính toán của máy tính ngày càng trở nên mạnh mẽ hơn, các máy tính lúc này có thể xử lý được những tập dữ liệu lớn như các hình ảnh, các đoạn phim thì khái niệm và kỹ thuật về thị giác máy ngày càng được nhắc đến và nghiên cứu nhiều hơn cho tới ngày nay. Thị giác máy bao gồm lý thuyết và các kỹ thuật liên quan nhằm mục đích tạo ra một hệ thống nhân tạo có thể tiếp nhận thông tin từ các hình ảnh thu được hoặc các tập dữ liệu đa chiều. Việc kết hợp giữa thị giác máy với các kỹ thuật khác như công nghệ thông tin, truyền thông, điện tử, điều khiển tự động, cơ khí… cho chúng ta rất nhiều ứng dụng trong đời sống hàng ngày cũng như trong khoa học, an ninh, quân sự… Ngày nay, ứng dụng của thị giác máy đã trở nên rất rộng lớn và đa dạng, len lỏi vào mọi lĩnh vực từ quân sự, khoa học, vũ trụ, cho đến y học, sản xuất, và tự động hóa tòa nhà. Trong thời gian thực tập tốt nghiệp, được sự giúp đỡ của thầy cô hướng dẫn em đã từng bước tiếp cận và nghiên cứu cơ sở ban đầu về xử lý ảnh số, sử dụng thư viện mã nguồn mở OpenCV, lập trình Visual C++ và xây dựng giao diện điều khiển trên máy tính. Công nghệ xử lý ảnh bao gồm rất nhiều hướng nghiên cứu, một trong những hướng nghiên cứu của em đó là tìm hiểu và xây dựng hệ thống bám mục tiêu di dộng sử dụng thuật toán xử lý ảnh Camshift của OpenCV. Báo cáo thực tập bao gồm: Chương 1: Tổng quan về xử lý ảnh và thư viện mã nguồn mở Opencv Chương 2: Cơ sở về hệ thống bám ảnh tự động Chương 3: Tìm hiểu thư viện mã nguồn mở OpenCV của Intel trên nền Visual C++ Chương 4: Xây dựng giao diện điều khiển dùng Visual C++ Chương 1: TỔNG QUAN VỀ XỬ LÝ ẢNH VÀ THƯ VIỆN MÃ NGUỒN MỞ OPENCV 1.1 Giới thiệu một số ứng dụng của xử lý ảnh Trong những năm gần đây, Trên thế giới nghiên cứu ứng dụng xử lý và nhận dạng ảnh (Machine Vision) đang là hướng nghiên cứu tập trung của rất nhiều nhà khoa học trong đa số các lĩnh vực. Xử lý ảnh số đã được phát triển và trở thành một lĩnh vực khoa học. Xử lý ảnh số không chỉ nâng cao chất lượng của ảnh mà còn phân tích và lý giải nó phục vụ các mục đích riêng biệt. Các thiết bị ngày nay được ứng dụng công nghệ xử lý và điều khiển theo hình ảnh ngày càng nhiều và cho thấy rõ sự ưu việt của nó, trong đó có rất nhiều ứng dụng mang tính cách mạng như: 1.1.1 Trong quân sự: Các hệ thống tích hợp quang hồng ngoại có khả năng tự động điều khiển dàn hỏa lực (pháo, tên lửa) được lắp đặt cho các trận địa cao xạ, trên xe tăng, tàu chiến, máy bay, tên lửa hoặc vệ tinh (Hình 1). Chúng được thay thế và hỗ trợ các dàn rada dễ bị nhiễu trong việc tự động phát hiện, cảnh giới, bám bắt mục tiêu. Đặc biệt có những loại lắp trên máy bay có khả năng điều khiển hỏa lực đánh phá hàng chục mục tiêu một lúc. Ngoài ra còn phải kể đến các đầu tự dẫn tên lửa và đạn thông minh 1.1.2 Trong an ninh, phòng chống tội phạm, bảo vệ pháp luật: Các hệ thống camera nhận dạng khuôn mặt vân tay tự động cũng như phát hiện, theo dõi, cảnh báo các âm mưu và hoạt động khủng bố. Các xe robốt tự hành có gắn các camera cũng được ứng dụng trong các môi trường độc hại, dò phá bom mìn (Hình 1.1). 1.1.3 Trong lĩnh vực hàng không vũ trụ: Các hệ thống ống kính chụp ảnh viễn thám (remote sensing) lắp trên các vệ tinh bay quanh trái đất có thể chụp và quan sát được các vật kích cỡ 0,5 m từ độ cao 750 km trong mọi điều kiện thời tiết (Hình 1.1).. Việc nối ghép các ống kính này với hệ thống GPS sẽ cho phép xây dựng các bản đồ số có những lĩnh vực ứng dụng cực kỳ quan trọng trong quốc phòng an ninh, phát triển kinh tế, xã hội... 1.1.4 Trong công nghiệp, giao thông, xây dựng : Hệ thống quang điện tử đóng vai trò của các thị giác máy (machine vision) có khả năng tự động đo đạc kiểm tra chất lượng sản phẩm trong các dây truyền sản xuất: phân loại hạt ngũ cốc, cà phê; tìm lỗi lắp ráp linh kiện các bản vi mạch và khuyết tật các mối hàn và động cơ... Các hệ thống quang điện tử cũng được ứng dụng ngày càng nhiều trong giao thông như đo tốc độ, tự động kiểm soát điều khiển và phân luồng giao thông (Hình 1.2). 1.1.5 Trong nghiên cứu y sinh dược học: Các kính hiển vi có khả năng tự động nhận dạng và đo đếm các tế bào với độ chính xác cao. Các kính hiển vi có hệ thống dẫn đường laser cho phép thực hiện những phẫu thuật rất phức tạp như mổ u não, nơi mà một sự không chính xác cỡ mm cũng gây tổn hại đến các dây thần kinh chằng chịt xung quanh... 1.1.6 Trong công nghiệp giải trí truyền hình: Các hệ thống tích hợp có thể điều khiển các camera kích thước và khối lượng lớn dễ dàng tự động bám theo các đối tượng chuyển động nhanh như bóng đang bay, đua xe... Một số hình ảnh hệ thống sử dụng công nghệ xử lý ảnh: Hình 1.1 Một số hệ thống tích hợp quang hồng ngoại, và ảnh nhiệt trên các phương tiện di động Hình 1.2 Một số hệ thống camera robot tự hành, trong hàng không vũ trụ 1.2. Một số giải pháp phần cứng phục vụ xử lý ảnh Để giải bài toán xử lý bằng hình ảnh, ta có rất nhiều giái pháp khác nhau. Từ phần cứng cho tới các phần mềm. Ta có thể điểm qua một vài phương pháp hay được sử dụng và có hiệu quả cao như sau. 1.2.1 Máy tính PC, laptop Đây là một trong những phương pháp đơn giản nhất. Có thể tận Dụng các mainboard máy tính hay thậm chí các máy tính xách tay với chức năng là một đơn vị xử lý ảnh, và đưa ra quyết định. Với việc kết nối một camera hay webcam ta hoàn toàn chủ động trong quá trình nhận/xử lý ảnh. Các giao tiếp ngoại vi phổ biến như UART, Parallel, USB hay KeyboarD. Việc sử dụng PC, laptop sẽ có những ưu/ nhược điểm sau: * Ưu điểm: - Rất dễ dàng phát triển các ứng dụng dựa trên các phần mềm lập trình như C, VisualC, VisualBasic…, rất phù hợp cho những người mới bắt đầu nghiên cứu về lĩnh vực xử lý ảnh đặc biệt là hiện nay có rất nhiều thư viện mở phục vụ cho xử lý ảnh, do đó rất thuận tiện cho người mới bắt đầu tìm hiểu về xử lý ảnh - Có tốc độ xử lý không cao - Dễ Dàng lập trình, kiểm lỗi - Hệ điều hành quen thuộc (winDows/linux) - Các công cụ lập trình/biên Dịch phổ biến (C, C++, VisualC, VisualBasic..) * Nhược điểm - Kích thước, khối lượng lớn - Dễ hư hỏng Do va đập hay các tác nhân khác - Có quá nhiều thành phần không sử Dụng đến - Chỉ có thể giao tiếp với ngoại vi thông qua các chuẩn phổ biến như UART, USB 1.2.2 Main công nghiệp, máy tính nhúng PC 104 Hình 1.3 Main công nghiệp PC 104 Ta có thể sử dụng mainboad PC104 với các chức năng như một máy tính thông thường. Việc sử dụng PC104 sẽ có những ưu/ nhược điểm sau: Ưu điểm: - Có tốc độ xử lý cao - Dễ Dàng lập trình, kiểm lỗi - Hệ điều hành quen thuộc (windows/linux) - Các công cụ lập trình/biên dịch phổ biến (MSVC, C++..) Nhược điểm: - Kích thước lớn - Có quá nhiều thành phần không sử dụng đến - Giá thành đắt (>300$) - Chỉ có thể giao tiếp với ngoại vi thông qua các chuẩn phổ biến như UART, USB 1.2.3 Single Board Computer(SBC) sử dụng Single on Chip (SoC) Hình 1.4 SBC sử dụng SoC SBC (Single board computer) có sử dụng các SoC là buớc tiến lớn trong việc xây d ựng thiết bị với khả năng tính toán và xử lý như một máy tính thông thường. Với nhiều ưu điểm hơn hẳn so với các thiết bị khác như. Sử dụng các SoC làm bộ xử lý trung tâm có khả năng chuyên biệt về xử lý hình ảnh hay xử lý trên môi trường mạng rất hữu hiệu. Do vậy tuỳ và bài toán đặt ra mà ta có thể chọn các SBC cho các SoC phù hợp với yêu cầu cụ thể. Hiện nay đã có nhiều SoC có khả năng tích hợp các DSP Processor vào trong nhân nhằm tăng khả năng xử lý (sign processing). Ưu điểm: - Kích thước rất nhỏ - Giá thành rẻ (~<100$) - Hỗ trợ SPI, I2C, I2S, MMC, SDCarD, UART, USB2.0/1.1 v..v - Có tốc độ xử lý cao - Sử dụng hệ điều hành Linux - Được sự hỗ trợ rất lớn của cộng đồng mã nguồn mở. Từ HĐH, kernel hay rất nhiều - Các công cụ biên dịch phổ biến gcc - Các công cụ hỗ trợ lập trình rất nhiều. Eclipse, Vim, Emacs v..v Nhược điểm: - Việc chạy/kiểm thử phải thực hiện giả lập trên máy tính trước khi đưa vào mạch - Am hiểu kiến thức về các giao tiếp ngoại vi, kiến trúc về SBC 1.2.4 FPGA Đây là giải pháp về phần cứng mà hay được sử dụng hiện nay. Tận dụng đặc tính của FPGA là linh hoạt và tốc độ xử lý nhanh (cứng hoá các giải thuật). Ta có thể kết nối FPGA với các CCD sensor để điều khiển và nhận các frame hình thông qua bus dữ liệu tốc độ cao. Ví dụ ta có thể tham khảo mô hình của CCD Sensor MT9T001 của Micron như sau: Hình 1.5 CCD Sensor MT9T001 của hãng Micron Ta có thể thao tác trực tiếp vào các thanh ghi điều khiển của MT9T001 thông qua bus TWI, và lấy các frame hình qua bus data 10bit. FPGA có tốc độ nhanh sẽ làm nhiệm vụ điều khiển MT9T001 và lấy dữ liệu liên tục từ data bus sau đó đưa vào bộ nhớ tạm để xử lý. 1.2.5 DSP (Digital signal processing) Bộ xử lý tín hiệu số DSP được giới thiệu đầu tiên vào những năm 1978, 1979 bởi Intel, Bell Các bộ xử lý DSP có những đặc tính nổi bật như sau: - Thích hợp cho các quá trình cần xử lý theo thời gian thực - Hiệu năng được tối ưu với dữ liệu dạng luồng - Chương trình và dữ liệu được bố chí riêng biệt (kiến trúc Harvard) - Tích hợp các chỉ thị lệnh đặc biệt SIMD (Single Instruction, Multiple Data) - Không hỗ trợ đa nhiệm - Tương tác trực tiếp với bộ nhớ của thiết bị - Tích hợp sẵn ADC và DAC Hình 1.6 một board xử lý ảnh sử dụng DSP DSP ngày nay đã được tích hợp nhiều thành phần khác nhau, làm tăng khả năng xử lý linh hoạt và tốc độ xử lý. Đặc biệt các DSP rất thích hợp cho những nhu cầu cần tính toán nhanh, xử lý số thực. Đặc biệt một số còn có sẵn những chỉ thị lệnh giúp cho việc tính toán ma trận, tích chập hay thậm chí các phép biến đổi DCT trong quá trình nén ảnh. Với những ưu điểm đó DSP được dùng trong nhiều thiết bị xử lý ảnh chuyên nghiệp. Chương 2: CƠ SỞ VỀ HỆ THỐNG BÁM ẢNH TỰ ĐỘNG TỔNG QUAN: Phát hiện và phân loại các đối tượng di động là một lĩnh vực quan trọng trong nghiên cứu thị giác máy tính. Lĩnh vực này rất quan trọng do thế giới quan sát được của chúng ta là động và ta liên tiếp bắt gặp những cảnh video chứa đựng một số lượng lớn các đối tượng di động. Để phân tách, phát hiện và bám những đối tượng này từ một chuỗi các ảnh video là một thách thức quan trọng nhất mà các chuyên gia thị giác máy tính phải đối mặt. Trong chương này chung ta sẽ trình bày vấn đề và các giải pháp có thể của mỗi nhiệm vụ con trong nhiệm vụ phân tích cảnh động. Các hệ thống này có ứng dụng trong các lĩnh vực giám sát người, hệ thống bảo vệ giám sát giao thông, thị giác công nghiệp, giám sát phòng ngự,… YÊU CẦU : Bước đầu tiên để giải bài toán phát hiện và bám đối tượng di động là phân tách nền (background) và vật (foreground) bằng cách trừ nền từ mỗi khung ảnh của chuỗi video. Sự sai khác thu được chỉ ra các đối tượng di động,… người di động hoặc ôto di động được gọi là vật. Tuy nhiên, sự phức tạp trong việc tách các vật di động trong cảnh động sẽ tăng theo sự xuất hiện của các chuyển động sinh ra bởi các hiện tượng khác. Các hiện tượng đó có thể là sự thay đổi chiếu sáng, sự thay đổi mầu do tự cân bằng trắng (hoặc hiệu chỉnh mầu) trong camera mầu, sự thay đổi giá trị pixel do rung rinh hoặc các hiện tượng khác, từ đó sinh ra các chuyển động giả trong cảnh động. Các chuyển động cũng còn do chuyển động của bóng, cây và nhiều thứ khác trong cảnh cần được xem xét và phát hiện đó là các chuyển động giả. Trong diễn dải ở trên, chúng ta cần mô hình nền sao cho chỉ những vật di động cần quan tâm được phát hiện và bám. MÔ HÌNH NỀN THÍCH NGHI: Những vấn đề chính để hiểu mô hình nền là: Tại sao mô hình nền là cần thiết. Các phương pháp cũ của mô hình nền là gì và Các chiến lược mới dựa vào một số khái niệm được đưa ra bởi một vài nhà nghiên cứu gần đây nhất. Chúng ta hiểu nền là phần tĩnh trong cảnh không thay đổi theo thời gian. Chỉ có những đối tượng di động thay đổi vị trí của chúng trong cảnh. Tuy nhiên, có một vài yếu tố tạo ra sự thay đổi trong nền. Nó thực sự quan trọng do trong khi thực hiện giám sát cảnh liên tục, chúng ta nên mô hình nền này là liên tục. Mô hình nền là cần thiết vì những lý do sau: Có khả năng chiếu sáng trong cảnh ngoài trời thay đổi thường xuyên do mây, mưa, sương khói… Các hiện tượng tự nhiên như dông gió cũng sinh ra sự thay đổi trong nền do sự di động của cành cây, bụi cây… Thậm chí trong một ngày bình thường, toàn bộ sự chiếu sáng cũng thay đổi từ bình minh đến hoang hôn khi mà độ chiếu sáng của mặt trời thay đổi liên tục. Sự thay đổi quan sát được từ các tia phản chiếu và ánh sáng của mặt trời do có sự thay đổi góc chiếu sáng của mặt trời. Ánh sáng nhân tạo như đèn đường cũng tạo ra sự thay đổi nền. Có những đối tượng di động khác, bao gồm bóng, làm mờ trường thị giác và sinh ra nhiễu loạn và thay đổi nền. Mỗi yếu tố trên sinh ra sự thay đổi nền, do vậy nó không còn là một thực thể tĩnh. Mô hình nền thực sự là một thành phần thiết yếu trong phân tích cảnh động. Phương pháp mô hình nền thất bại nếu thuật toán không mô hình nền là liên tục, do nền phải trải qua sự thay đổi liên tục sinh ra bởi các yếu tố kể trên. Mô hình nền không thích nghi và liên tục thì các lỗi nền sẽ được tích lũy liên tục. Khi đó phát hiện và bám đối tượng di động có thể gặp sai lầm. 3.1 Chiến lược mô hình hóa nền cơ bản Trong trường hợp cảnh thay đổi liên tục, mỗi pixel có thể có chuyển động không đổi. Điều này có nghĩa là giá trị độ sáng của một pixel nhất định có sự thay đổi là không đổi trong khi môi trường thay đổi. Các hiện tượng quan tâm khác xuất hiện khá thường xuyên là, một pixel thuộc về lớp lá cây ở một khung ảnh nhất định và pixel đó lại thuộc lớp khác (người chẳng hạn) ở khung ảnh tiếp theo. Do đó mỗi biến pixel nên được mô hình là thay đổi thống kê. Sự ước lượng liên tục mô hình thống kê này là triết lý chính của mô hình hóa nền. Trong trường hợp có rất ít hoặc không có đối tượng di động trong nền, chúng ta có thể lấy trung bình đơn giản của các khung ảnh nền để tạo một nền tĩnh gần đúng. Phương pháp mô hình hóa nền đơn giản làm việc khi chúng ta lấy một số lớn các khung ảnh nền không có bất kỳ đối tượng di động trong cảnh. Tuy nhiên, trong hầu hết trường hợp thực tế có một lượng đáng kế các đối tượng di động. Điều này đòi hỏi phương pháp mô hình hóa nền bền vững. 3.2 Một phương pháp mô hình hóa nền bền vững Một pixel trong một cảnh có thể được hiểu là thuộc về một trong nhiều lớp mẫu như lá cây, cỏ … Mỗi lớp có một phân bố xác suất riêng. Mỗi lớp mẫu riêng sẽ được mô hình hóa bằng một histogram giá trị cường độ riêng, histogram này quy định một đo lường phân bố của nó. Khi pixel thuộc về chỉ một lớp đơn khối thì phân bố các giá trị lý tưởng nên là compact, phân bố giống gauss quanh một vài điểm trung bình. Tuy nhiên, khi một pixel có trạng thái chuyển động không đổi thì một pixel nhất định trong cảnh có thể được xem xét là một tổ hợp của nhiều phân bố gauss và chỉ một gauss không đủ để mô hình giá trị pixel. Trong thực tế, nhiều đối tượng có thể xuất hiện trong trường nhìn của pixel nhất định do điều kiện chiếu sáng thay đổi. Do vậy, để mô hình một pixel thường phải dùng phân bố gauss thích nghi. Ta sử dụng một phân bố gauss trộn thích nghi để xấp xỉ quá trình này. Bây giờ ta hãy xem xét quá khứ của một pixel theo thời gian, ở đây về bản chất là một thang thời gian của các giá trị xám (hoặc là vector đối với ảnh mầu). Tại điểm thời gian t, quá khứ của một pixel nhất định {X1, X2, …, Xt-1} , được lấy bằng tổ hợp trọng số của một số có phân bố gauss (K) như phương trình dưới. Giá trị K lớn hơn sẽ cho xấp xỉ tốt hơn. ở đó là trọng số được ước lượng ở khung ảnh thứ t của phân bố gauss thứ i, có giá trị trung bình và phương sai biểu diễn lớp mẫu thứ i. Phân bố gauss của lớp i là: Các tham số phải ước lượng và cập nhật là (1) vector đặc trưng trung bình , và (2) ma trận hiệp biến . Nếu các điểm đặc trưng độc lập thì các thành phần hiệp biến của hướng tới 0. Giả thiết rằng quan hệ giữa các thành phần R, G, B của pixel là rất nhỏ và các biến đổi của chúng được nhận biết thì ma trận hiệp biến được khai triển như sau: ở đó I là ma trận đơn vị. Giá trị pixel mới được biểu diễn bởi K thành phần chính trong mô hình trộn và giá trị này thường để cập nhật mô hình. Khi giá trị cường độ của một pixel rơi vào trong một khoảng định trước của phân bố, ta nói rằng pixel phù hợp với phân bố. Nếu K phân bố không phù hợp với giá trị hiện tại thì phân bố xác suất kém nhất được thay thế bằng phân bố mới có giá trị hiện là giá trị trung bình. Trọng số tiền nghiệm của K phân bố ở thời điểm t+1được hiệu chỉnh như sau: ở đó và là hai hằng số học và là 1 nếu hợp mô hình và 0 nếu không hợp. Giá trị trung bình và hiệp biến được cập nhật như sau: và Hằng số học và cập nhật các phương trình điều khiển tốc độ của việc học và bị ràng buộc . Mục đích cơ bản của ước lượng mô hình nền là để xác định mô hình trộn Gauss nào được tạo ra là giống nhất với quá trình nền. Fig 1. Sau khi xếp loại các phân bố bằng chiến lược thích hợp, phân bố nền giống nhất được giữ lại ở đỉnh của danh sách xếp loại và các phân bố nền tức thời kém nhất sẽ đổ về phía dưới của danh sách, ở đó có thể bị thay thế bởi phân bố mới. Một ưu điểm quan trọng nhất của mô hình nền này là khi một pixel trong vật được cho phép trở thành một phần của nền, nó không làm hỏng mô hình nền hiện hành. GẮN NHÃN THÀNH PHẦN LIÊN KẾT Khi ta lấy một tập các pixel vật trong mỗi khung, sau khi mô hình hóa nền và trừ nền thì quan trọng là phải phân ngưỡng chúng để đạt được một tập các điểm nhị phân. Các pixel vật nhị phân sẽ được phân đoạn thành các vùng bởi thuật toán gắn nhãn thành phần liên kết, tại đây sẽ thu được một tập các đốm (blob) tương ứng với mỗi đối tượng di động. Mục tiêu của gắn nhãn thành phân liên kết là để xác định tất cả các tập thành phần được liên kết với nhau trong ảnh và quy cho một nhãn riêng với mỗi pixel trong thành phần liên kết giống nhau. Ảnh nhị phân được quét từ trái qua phải, pixel đối tượng chưa gắn nhãn được gán một nhãn gọi là X và mỗi pixel đối tượng lân cận của nó được gán nhãn giống nhau cho tới khi tất cả các pixel đối tượng trong ảnh được gắn nhãn. Như vậy thuật toán đệ quy có thể tính toán hiệu quả trên máy lưới song song để gắn nhãn thành phần liên kết. Một chiến lược xen kẽ của việc gắn nhãn thành phần liên kết có thể được định nghĩa trong 2 phần. Phần đầu, mỗi pixel đối tượng được gán một nhãn theo tiêu chuẩn sau: Nếu cả lân cận trên P(i-1,j) và trái P(i,j-1) của pixel đối tượng P(i,j) trong lân cận liên kết 4 có nhãn giống nhau X, thì gán nhãn X cho P(i,j). Nếu hoặc là lân cận trên P(i-1,j) hoặc là trái P(i,j-1) của pixel đối tượng P(i,j) trong lân cận liên kết 4 có nhãn X, thì gán nhãn X cho P(i,j). Nếu lân cân trên P(i-1,j) có nhãn X và lân cận trái P(i,j-1) của pixel đối tượng P(i,j) trong liên kết 4 có nhãn khác làY (X≠Y) thì gán nhãn X cho P(i,j). Nhập X và Y vào một bảng tương đương gọi là E. Nếu cả lân cận trên P(i-1,j) và trái P(i,j-1) của pixel đối tượng P(i,j) trong lân cận liên kết 4 không là pixel đối tượng (nền) thì gán nhãn mới Z cho P(i,j). Nhập Z vào bảng tương đương E. Thường ta gán nhãn là một số tự nhiên cho mỗi thành phần. Bản tương đương E chứa đựng một tập các nhãn tượng đương. Phần hai, các nhãn tương đương được hợp nhất để tạo một nhãn duy nhất cho mỗi thành phần liên kết trong ảnh. Nếu X và Y là hai nhãn tương đương thì gán lại Y bởi X nếu X<Y và ngược lại. Kết quả là mỗi thành phân liên kết được gán một nhãn duy nhất. Do đó thuật toán gắn nhãn thành phần liên kết ở trên là thuật toán 2 phần. Trong phần đầu các pixel đối tượng thuộc về thành phân liên kết giống nhau được gán nhãn khác nhau và được ghi là tương đương trong bảng tương đương E. Trong phần 2 các nhãn tượng đương được hợp nhất do vậy mỗi thành phần liên kết được gán một nhãn duy nhất. PHÁT HIỆN BÓNG Phát hiện và khử bóng có lẽ là một nhiệm vụ quan trong nhất trong giám sát video [4]-[8]. Nếu ta có thể loại bỏ các bóng thì nhiệm vụ nhận dạng đối tượng và lý giải cảnh trở nên dễ dàng. Chi tiết quan trọng nhất của bóng là rằng các pixel tạo thành đối tượng di động và bóng của nó được xác định đồng thời từ việc trừ ảnh. Các bóng và đối tượng di động sinh ra bóng thường được định vị liên kề nhau. Như vậy chúng có thể được bao chưa trong cùng một đốm. Cũng thường thì các bóng của hai đối tượng di động được hợp thành một đốm, từ đó sinh ra kết quả phát hiện đối tượng không đúng. Vì vậy ta phải hiểu một số chi tiết của bóng để có thể phân biệt được các bóng với các đối tượng di động. Bóng có các kiểu khác nhau. Đôi khi một phần của đối tượng là đen do phần này không được chiếu sáng. Những bóng này được gọi là “tự bóng”. Ngược lại bóng được sinh ra bởi một vật trên một bề mặt được gọi là “bóng đổ”. Khi vật, như hình người di chuyển thì bóng cũng di chuyển. Có 3 chi tiết khác nhau của bóng: Bóng rất khác biệt trong không gian màu HSV, tương tự như nhận thức của người. Điều này ẩn ý rằng bóng được tạo ra bởi đối tượng thì thay đổi H, S, và V nhiều đáng kể. Hơn nữa các điểm bóng đổ làm giảm cường độ của pixel nền, bóng làm tối nền. Quan sát thấy rằng bóng làm giảm sự bão hòa của điểm, co nghĩa rằng hiệu giữa giá trị bão hòa của pixel nền và giá trị bão hòa của pixel bóng là một số dương. Giải thuật khử bóng sử dụng cả thông tin cường độ và mầu sẽ thu được kết quả tốt [5]. CÁC NGUYÊN LÝ CỦA BÁM ĐỐI TƯỢNG Khi mô hình hóa nền thích hợp và phát hiện và loại bỏ bóng đã được thực hiện thì nhiệm vụ tiếp theo là bám đối tượng chìm trong nhiễu loạn. Nhiều hướng tiếp cận đã được công bố dựa trên các thuật toán bám khác nhau [10]-[12]. Dưới đây kể đến 8 yếu tố khi thiết kế cần được xem xét và kết hợp chặt chẽ trong hệ thống bám mục tiêu. Nền tĩnh: Khi cảnh chứa nhiều đối tượng, nền không chuyển động trong khi tất cả hoặc một phần của các đối tượng trong vật (foreground) có thể chuyển động. Kích thước mục tiêu thay đổi: Kích thước mục tiêu giảm khi mục tiêu di chuyển ra xa camera. Do đó kỹ thuật xác định tỉ lệ phải được kết hợp trong khi xử lý bám. Mất mục tiêu tạm thời: Trong suốt pha bám mục tiêu có thể bị mất tạm thời khi nó đi vào đằng sau các đối tượng khác. Đây còn gọi là sự mất hút. Trong trường hợp đó hệ thống sẽ khôi phục mục tiêu một cách tự động. Mô hình mục tiêu: Mô hình mục tiêu cần phải được kết hợp. Ví dụ trong trường hợp bám người, thì hình dạng của người có thể được mô hình hóa như sự kết hợp của một vài hình ellip, ở đó mỗi ellip biểu diễn một phần thân thể riêng như đầu, thân, tay, chân, v.v… Mầu, hình dạng, cường độ, và những thuộc tính khác của đối tượng có thể thay đổi trong khi đối tượng chuyển động và dù thể hệ bám nên có khả năng bám chính xác. Phát hiện mục tiêu tự động: Hệ bám nên có khả năng tự động phát hiện tất cả các mục tiêu mới và bắt đầu bám chúng. Thời gian thực: Thuật toán bám nên được tính toán đơn giản và tối ưu sao cho quá trình bám có thể thực hiện trong thời gian thực. Quỹ đạo mục tiêu: Mục tiêu có thể hoặc không theo một quỹ đạo đặc biệt. Có thể có sự thay đổi đột ngột trong hướng của mục tiêu. Tốc độ mục tiêu: Tốc độ của mục tiêu có thể thay đổi đột ngột; nó có thể là hằng số, tăng hay giảm đi. MÔ HÌNH HỆ BÁM Hệ bám có thể được mô hình hóa như một máy có 3 trạng thái liên tiếp, máy này có 3 trạng thái là: khóa, bám và khôi phục. Các chức năng của 3 trạng thái như sau: Trạng thái khóa: Khởi đầu hệ thống là trạng thái khóa, khi camera đang trong mode tìm kiếm để tìm kiếm mục tiêu. Trong suốt trạng thái này quá trình xử lý tiến hành trên toàn bộ khung ảnh. Hệ thống sẽ phân đoạn khung ảnh thu được từ camera thành một số các đối tượng di động. Lịch sử của các đối tượng này được trích chọn từ việc kiểm tra quỹ đạo sau đó của các đối tượng, và sự chứng thực đối tượng di động là được tiến hành trong mode tự động. Khi một mục tiêu đã được chứng thực thì sự điều khiển hệ thống được chuyển tới trạng thái bám. Trạng thái bám: Trạng thái này nên sử dụng kỹ thuật tính toán ít tốn kém. Vị trí hiện tại được trích chọn từ trạng thái khóa được sử dụng để xử lý. Vị trí tiếp theo của mục tiêu được nhận dạng và thông tin vị trí đó được lưu trữ trong cơ sử dữ liệu lích sử. Nếu mục tiêu không tồn tại trong vùng cửa sổ dự đoán thì điều khiển hệ thống được chuyển tới trạng thái khôi phục. Trạng thái khôi phục: Hoàn toàn bình thường khi đối tượng di động đang được quan tâm có thể mất tạm thời hay mãi mãi. Trong trạng thái này nếu mất mục tiêu thì hệ thống sẽ cố gắng phục hồi mục tiêu từ ảnh phân giải thấp. Nếu mục tiêu được khôi phục trong một vài khung thì hệ thống sẽ chuyển điều khiển tới trạng thái bám, nếu không nó vân duy trì trạng thái khôi phục cho tới khi hết thời gian định trước. Sau khi thời gian này trôi qua điều khiển sẽ chuyển tới trạng thái khóa. Chương 3: TÌM HIỂU THƯ VIỆN MÃ NGUỒN MỞ OPENCV TRÊN NỀN VISUAL C++ 1.3 Thư viện mã nguồn mở OpenCV của Intel OpenCV (Open Computer Vision library) do Intel phát triển, được giới thiệu năm 1999 và hoàn thiện thành phiên bản 1.0 năm 2006. Thư viện OpenCV - gồm khoảng 500 hàm – được viết bằng ngôn ngữ lập trình C và tương thích với các hệ điều hành Windows, Linux, Mac OS... đóng vai trò xác lập chuẩn giao tiếp, dữ liệu, thuật toán cho lĩnh vực CV và tạo điều kiện cho mọi người tham gia nghiên cứu và phát triển ứng dụng. Hình 1.7 Tổ chức thư viện OpenCV Trước OpenCV không có một công cụ chuẩn nào cho lĩnh vực xử lý ảnh. Các đoạn code đơn lẻ do các nhà nghiên cứu tự viết thường không thống nhất và không ổn định. Các bộ công cụ thương mại như Matlab, Simulink, Halcon, v.v... lại có giá cao chỉ thích hợp cho các công ty phát triển các ứng dụng lớn. Ngoài ra còn có các giải pháp kèm theo thiết bị phần cứng mà phần lớn là mã đóng và được thiết kế riêng cho từng thiết bị, rất khó khăn cho việc mở rộng ứng dụng. OpenCV là công cụ hữu ích cho những người bước đầu làm quen với xử lý ảnh số vì các ưu điểm sau: - OpenCV là công cụ chuyên dụng: Được Intel phát triển theo hướng tối ưu hóa cho các ứng dụng xử lí và phân tích ảnh, với cấu trúc dữ liệu hợp lý, thư viện tạo giao diện, truy xuất thiết bị phần cứng được tích hợp sẵn. OpenCV thích hợp để phát triển nhanh ứng dụng. - OpenCV là công cụ mã nguồn mở: Không chỉ là công cụ miễn phí (với BSD license), việc được xây dựng trên mã nguồn mở giúp OpenCV trở thành công cụ thích hợp cho nghiên cứu và phát triển, với khả năng thay đổi và mở rộng các mô hình, thuật toán. - OpenCV đã được sử dụng rộng rãi: Từ năm 1999 đến nay, OpenCV đã thu hút được một lượng lớn người dùng, trong đó có các công ty lớn như Microsoft, IBM, Sony, Siemens, Google và các nhóm nghiên cứu ở Standford, MIT, CMU, Cambridge... Nhiều forum hỗ trợ và cộng đồng người dùng đã được thành lập, tạo nên kênh thông tin rộng lớn hữu ích cho việc tham khảo tra cứu. Hình 1.8 Nhận dạng khuôn mặt với Haar classifier Tổ chức thư viện OpenCV khá đơn giản (xem Hình 1.7), bao gồm 4 module chính và 2 module mở rộng: - CXCORE chứa các định nghĩa kiểu dữ liệu cơ sở. Ví dụ, các cấu trúc dữ liệu cho ảnh, điểm và hình chữ nhật được định nghĩa trong cxtypes.h . CXCORE cũng chứa đại số tuyến tính và phương pháp thống kê, chức năng duy trì và điều khiển chuỗi. Một số ít, các chức năng đồ họa để vẽ trên ảnh cũng được đặt ở đây. - CV chứa các thuật toán về xử lý ảnh và định kích cỡ camera. Các chức năng hình họa máy tính cũng được đặt ở đây. - CVAUX được mô tả trong tài liệu của OpenCV như chứa các mã cũ và thứ nghiệm. Tuy nhiên, các giao diện đơn cho sự nhận diện ảnh ở trong module này. Code  sau này chúng được chuyên dụng cho nhận diện mặt và chúng được ứng dụng rộng rãi cho mục đích đó. - HIGHGUI và CVCAM được đặt trong cùng thư mục là “otherlibs”. HIGHGUI chứa các giao diện vào ra cơ bản, nó cũng chứa các khả năng cửa sổ mở rộng và vào ra video. CVCAM chứa các giao diện cho video truy cập qua DirectX trên nền Windows 32 bits. Kèm theo thư viện là tài liệu hướng dẫn và các ví dụ mẫu thể hiện một phần các chức năng của công cụ OpenCV. Các chức năng của openCV tập trung vào thu thập ảnh, xử lí ảnh và các thuật toán phân tích dữ liệu ảnh, bao gồm: - Truy xuất ảnh và phim: đọc ảnh số từ camera, từ file, ghi ảnh và phim - Cấu trúc dữ liệu ảnh số và các dữ liệu hỗ trợ cần thiết: ma trận, vector, chuỗi, xâu và cây - Xử lí ảnh căn bản: các bộ lọc có sẵn, tìm chi tiết cạnh, góc, chỉnh đổi màu, phóng to thu nhỏ, và hiệu chỉnh histograms - Xử lí cấu trúc: tìm viền, nhận chuyển động, thay đổi trong không gian 3D, đối chiếu bản mẫu, xấp xỉ các đơn vị hình học cơ sở - mặt phẳng, đa giác, ellipse, đường thẳng... - Phân tích dữ liệu ảnh: nhận dạng thực thể, theo dõi các chi tiết và phân tích chuyển động - Tạo giao diện đơn giản: hiển thị ảnh, thao tác bàn phím, chuột, thanh trượt để chỉnh thông số (nếu cần thiết các bạn có thể tự tạo thêm các phím điều khiển thông qua thao tác chuột, hoặc tích hợp thêm các thư viện về giao diện như wxWidgets) - Chức năng vẽ, chú thích lên ảnh. - Bắt đầu viết ứng dụng sử dụng OpenCV Để tạo những ứng dụng cho mục đích của chúng ta, tôi sẽ sử dụng ngôn ngữ lập trình Visual C++ 6.0 để viết code. Nhưng để viết code sử dụng thư viện OpenCV thì ta cần phải làm một số công việc sau: + Cài một số phần mềm hỗ trợ Để viết được ứng dụng dùng ngôn ngữ lập trình Visual C++ 6.0 nên nhất thiết chúng ta phải cài đặt nó. Tiếp theo chúng ta cần cài đặt thêm DirectX SDK và Platform SDK vì OpenCV cần có hỗ trợ hai phần mềm này. Mọi sự giúp đỡ về điều này bạn sẽ tìm thấy ở “[OPENCV_ROOT]\OpenCV\docs\ faq.htm”, trong đó [OPENCV_ROOT] là thư mục cài đặt OpenCV của bạn. Cuối cùng là cài đặt thư viện OpenCV. Đến hiện tại thì đã có năm phiên bản của OpenCV mà bạn có thể sử dụng (từ bản 1.0 đến beta 5.0), tuy nhiên bản mới nhất sẽ có những bổ sung và chỉnh sửa mới, vì thế chúng ta sẽ cài đặt bản beta 5.0 để dùng. Download phiên bản này theo đường dẫn   và cài đặt bình thường. Chú ý rằng, trước khi cài đặt OpenCV thì Visaul C++ 6.0 phải được chạy it nhất một lần rồi. a) Sử dụng OpenCV và DirectShow trong Visual C++ 6.0 Tạo một Project có tên bất kỳ(kiểu Dialog Based), chẳng hạn tên là AzC Trong file AzCDlg.h, trong phần định nghĩa Include, trước phần định nghĩa lớp CAzCDlg, chúng ta thêm các header files sau đây: #include "cv.h" #include "highgui.h" #include "DShow.h" #include "initguid.h" #include "vector" #pragma comment (lib,"strmiids.lib") #pragma comment (lib,"quartz.lib") using namespace std; #define PI 3.1415926535897932384626433832795 #define SAFE_RELEASE(p){if(p){(p)->Release();(p)=NULL;}} Trong file AzCDlg.cpp, ta thêm đoạn code sau ở trên phần khai triển lớp CazCDlg.h như sau: #include "stdlib.h" #include "string.h" #include "cv.h" #include "highgui.h" #include "cvcam.h" #include "DShow.h" #include "initguid.h" #include "math.h" #if !defined iProxyTrans_h #include "iProxyTrans.h" #endif #if !defined ProxyTransuids_h #include "ProxyTransuids.h" #endif #pragma comment (lib,"cvcam.lib") void callback(void* imgCallback){ CAzCDlg* dlgcam=(CAzCDlg*)AfxGetApp()->m_pMainWnd; dlgcam->lktCallbackCam((IplImage*)imgCallback); } Hàm callback là hàm được gọi lại trong bộ lọc ProxyTrans, hàm này là hàm ngoài lớp CAzCDlg , nó giúp bạn có thể tạo liên kết với lớp CazCDlg khi bạn muốn vẽ hình ảnh thu được từ Graph lên Dialog của bạn. Tiếp theo, từ Project->Settings, hộp thoại Project Settings xuất hiện, chọn tab C/C++. Trên tab này, từ Catergory trổ xuống, bạn chọn Preprocessor. Sau đó, bạn thêm các đường dẫn sau vào hộp hộp text: Additional Include Directories C:\Program Files\OpenCV\cv\include C:\Program Files\OpenCV\cxcore\include C:\Program Files\OpenCV\cvaux\include C:\Program Files\OpenCV\otherlibs\cvcam\include C:\Program Files\OpenCV\otherlibs\highgui Chú ý: Các đường dẫn trên phụ thuộc vào việc OpenCV được cài ở đâu, ở đây OpenCV được cài ở C:\Program Files\. Nếu OpenCV được cài ở đường dẫn khác thì các đường giẫn trên cũng sẽ thay đổi theo. Bạn sẽ nhìn thấy trực tiếp các đường dẫn trên được thêm vào Project Options ở bên dưới: Tiếp theo, cũng trong hộp thoại Project Settings, chúng ta chuyển sang chọn tab Link. Trên tab này, trog Category trổ xuống, chọn General. Trong hộp text Object/Library modules, ta nhập các thu viện sau vào đó và nhấn Enter để kết thúc: cv.lib cxcore.lib highgui.lib cvcam.lib cxts.lib trs.lib Hộp thoại đó trông như sau: Tiếp theo, từ Tools->Options, hộp thoại Options xuất hiện, chọn tab Directories, giữ nguyên mặc định cho Platform, trong Show directories for trổ xuống, chọn Include files. Tương ứng với Include files thì ở Directories bên dưới, chúng ta thêm các đường dẫn sau(nếu bạn đã biết các cài đặt cần thêm nằm ở đâu _ nếu không biết, bạn có thể nhấn chuột vào tận cùng của hàng đó để tìm đường dẫn tới đó). C:\DXSDK\Include C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE C:\PROGRAM FILES\OPENCV\CV\INCLUDE C:\PROGRAM FILES\OPENCV\CVAUX\INCLUDE C:\PROGRAM FILES\OPENCV\CXCORE\INCLUDE C:\PROGRAM FILES\OPENCV\FILTERS\PROXYTRANS C:\PROGRAM FILES\OPENCV\OTHERLIBS\CVCAM\INCLUDE C:\PROGRAM FILES\OPENCV\OTHERLIBS\HIGHGUI Chú ý là các đường dẫn màu xanh dương là các đường dẫn đã có trước đó khi cài Visual C++ Bạn có thể quan sát tab này như dưới đây: Cũng từ tab Directories đổ xuống, chọn Library Files, ở Directories bên dưới, thêm các đường dẫn sau như đối với Include files. C:\DXSDK\Lib C:\Program Files\Microsoft Visual Studio\VC98\LIB C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB C:\PROGRAM FILES\OPENCV\LIB Các dòng màu xanh dương là các dòng đã có trước đó. Nhấn OK để kết thúc quá trìn cài đặt OpenCV và DirectShow trong một ứng dụng Visual C++. b) Sử dụng OpenCV và DirectShow trong Microsoft Visual Studio 2008 + Giao điện khởi động của Microsoft Visual Studio 2008: Tiếp đó các bạn chọn mục Create>>Project >>chọn MFC Application Sau đó chọn đường dẫn lưu tên sử dụng dự án. Chọn mục Dialog based : Cách Add thư viện OpenCV trong VC++ 2008: Đầu tiên: Sau đó: Add links của OpenCV : cv.lib,cxcore.lib,highgui.lib,cvcam.lib,cxts.lib,trs.lib vào mục Propoty Pages: Sau đó Nhấn OK để kết thúc quá trình cài đặt và tiến hành xây dựng giao diện và lập trình dự án. CHƯƠNG 3: THIẾT KẾ VÀ XÂY DỰNG GIAO DIỆN CHƯƠNG TRÌNH Thiết kế Dialog Based : Viết chương trình : Và chạy thử chương trình: KẾT LUẬN Trong thời gian nghiên cứu cùng với những định hướng và hướng dẫn quý báu của cô Hà Thị Kim Duyên, em đã hoàn thành đề tài nghiên cứu thực tập của mình. Do thời gian nghiên cứu thực tập có hạn nên báo cáo này còn nhiều khiếm khuyết nhưng cũng là nền tảng cho em trong tương lại có thể nghiên cứu sâu hơn nữa vào Đồ án tốt nghiệp của mình và cao hơn nữa là đưa vào ứng dụng ở cuộc sống. Em xin chân thành cảm ơn. Tài liệu tham khảo Tiếng việt: 1. Nhập môn xử lý ảnh số, ĐH Bách Khoa Hà Nội. 2. Động cơ điện một chiều, Tiếng anh: 1. datasheet at91sam7s256 complete 2. www.keil.com/arm, Keil C tutorial, Hardware API Selector: AT91SAM7S256 Main Frame. 3. chuyên mục xử lý ảnh DSP và hệ thống nhúng, www.dientuvietnam.net. 4. , Cộng đồng phát triển vi điều khiển ARM AT91SAM7S256. 5. MUC LUC

Các file đính kèm theo tài liệu này:

  • docTổng quan về xử lý ảnh và thư viện mã nguồn mở Opencv.doc
Luận văn liên quan