Trong lĩnh vực điều khiển, bài toán điều khiển bám mục tiêu là một trong những bài toán phổ biến nhất. Tùy theo những yêu cầu về tính ổn định và chất lượng điều khiển, ta có nhiều phương án giải quyết khác nhau dựa trên nền tảng lý thuyết điều khiển kinh điển lẫn hiện đại. Hiện nay, để điều khiển bám một đối tượng dịch chuyển có chất lượng tốt, nhiều tác giả đã ứng dụng công nghệ xử lý ảnh trên nền tảng sử dụng camera để tracking đối tượng. Đối tượng bám rất đa dạng: có thể là người, xe, bóng, hoặc tùy theo yêu cầu thực tế. Vì vậy, bài toán đầu tiên trong hệ thống điều khiển bám đối tượng dịch chuyển dùng camera là phải nhận dạng được đối tượng dịch chuyển trên cơ sở các frame ảnh phản hồi từ camera, sử dụng các giải thuật xử lý ảnh, giải thuật xử lý bám đối tượng trên nền các frame ảnh thu được đưa ra tọa độ, vận tốc dịch chuyển, hướng dịch chuyển hiện thời của đối tượng trên nền ảnh và cuối cùng là áp dụng các giải thuật điều khiển động cơ để điều khiển cơ cấu mang camera bám theo đối tượng thực. Trong thực tế, đã có rất nhiều tác giả nghiên cứu chế tạo các mô hình điều khiển hệ thống mang camera bám theo đối tượng dịch chuyển. Chẳng hạn như hệ robot xe – camera, cánh tay máy mang camera, nòng súng mang camera, hệ pan –tilt camera ... có thể xoay nhiều hướng. Trong số các mô hình này, hệ pantilt camera là một trong những mô hình cơ bản nhất, mục tiêu của mô hình này là điều khiển hai động cơ DC servo hoặc động cơ bước để đảm bảo tầm quan sát và hướng quan sát của camera theo dõi và bám theo đối tượng di chuyển.
Trang 1CHƯƠNG I: TỔNG QUAN HỆ PAN-TILT
CAMERA BÁM THEO MỤC TIÊU DI ĐỘNG
Đối tượng bám rất đa dạng: có thể là người, xe, bóng, hoặc tùy theo yêu cầu thực tế Vì vậy, bài toán đầu tiên trong hệ thống điều khiển bám đối tượng dịch chuyển dùng camera là phải nhận dạng được đối tượng dịch chuyển trên
cơ sở các frame ảnh phản hồi từ camera, sử dụng các giải thuật xử lý ảnh, giải thuật xử lý bám đối tượng trên nền các frame ảnh thu được đưa ra tọa độ, vận tốc dịch chuyển, hướng dịch chuyển hiện thời của đối tượng trên nền ảnh và cuối cùng là áp dụng các giải thuật điều khiển động cơ để điều khiển cơ cấu mang camera bám theo đối tượng thực
Trong thực tế, đã có rất nhiều tác giả nghiên cứu chế tạo các mô hình điều khiển hệ thống mang camera bám theo đối tượng dịch chuyển Chẳng hạn như hệ robot xe – camera, cánh tay máy mang camera, nòng súng mang camera, hệ pan –tilt camera có thể xoay nhiều hướng Trong số các mô hình này, hệ pan-tilt camera là một trong những mô hình cơ bản nhất, mục tiêu của mô hình này là điều khiển hai động cơ DC servo hoặc động cơ bước
để đảm bảo tầm quan sát và hướng quan sát của camera theo dõi và bám theo
Trang 2đối tƣợng di chuyển Hình 1.1 mô tả sơ đồ tổng quát của hệ pan-tilt camera theo dõi và bám theo đối tƣợng di chuyển
Hình 1.1: Sơ đồ tổng quát của hệ pan – tilt camera theo dõi và bám theo đối
tƣợng
Hình 1.2: Sơ đồ điều khiển hệ pan-tilt camera bám theo mục tiêu di động
Controller
Pan-Tilt Camera system
Camera Frame
Trang 3Hình 1.3: Mô hình vật lý của hệ thống Việc xây dựng hệ thống điều khiển bám mục tiêu di động sử dụng thị giác máy tính không chỉ là nền tảng cho các nghiên cứu sau này, mà còn có thể ứng dụng cụ thể trong ngành điều khiển robot bám mục tiêu theo những quỹ đạo mong muốn để thực hiện một số nhiệm vụ cụ thể, hoặc có thể ứng dụng trong lĩnh vực quốc phòng nhƣ xây dựng hệ thống ngắm bắn tự động bám mục tiêu trên các loại pháo phòng không
Trang 41.2 Tổng quan về các công trình liên quan
Mô hình hệ pan-tilt camera là mô hình cơ bản gắn liền để giải quyết bài toán hệ robot-camera tự hành bám mục tiêu động sử dụng thị giác máy tính
Đả có tác giả đã nghiên cứu, đưa ra được một số kết quả mô phỏng lẫn thực nghiệm với chất lượng điều khiển bám tương đối tốt Tác giả Bùi Trọng Tuyên (Viện Vật Lý Việt Nam) đã sử dụng mạng nơ ron để điều khiển hệ camera- robot bám theo mục tiêu di động, nguyên lý chung của phương pháp này dựa tên tập dữ liệu đặc trưng ảnh của đối tượng nhận được từ camera như tọa độ các điểm đặc trưng trên mặt phẳng ảnh [u, v], khoảng cách giữa các
Tập hợp các vectơ đặc trưng ảnh tạo thành không gian thông số đặc trưng ảnh
ký hiệu u v , 1 1 1 1 S S 1 2.
Hình 1.4: Sơ đồ điều khiển robot mang camera Mục tiêu của hệ thống là xây dựng bộ điều khiển sử dụng mạng nơ ron
mục đích đưa camera về vị trí mà tại đó hình ảnh thu nhận được về đối tượng tương đương với hình ảnh mong muốn Kết quả đạt được của bài báo chỉ dừng lại ở mức độ mô phỏng hệ thống sử dụng matlab
Trang 5Tác giả Ngô Mạnh Tiến (Viện Vật lý, Viện KH&CN Việt Nam) đã sử dụng thuật toán bám theo một tập hợp các điểm đặc trưng ảnh của Lucas, Kanade và Tommasini KLT [3], đây là phương pháp bám sử dụng rất có hiệu quả đối với ảnh thu được là ảnh đen trắng, ảnh của camera hồng ngoại nhìn đêm Thuật toán này dùng để tính toán sai lệch vị trí mục tiêu, bao gồm các bước: tiền xử lý, xác định và bám các đặc tính (sử dụng 100 đặc tính), bù tự chuyển động của camera, sai phân ảnh, định nghĩa và phân đoạn chuyển động, ước lượng vị trí của đối tượng, xác định LOS và bù vào vòng bám, xây dựng cửa sổ và hiển thị ảnh Đối với các đối tượng thu được hình ảnh từ camera là ảnh màu đặc trưng so với nền ảnh, tác giả sử dụng thuật toán Camshift (Continuously Adaptive Meanshift), thuật toán này dựa trên cơ sở của thuật toán MeanShift, nó gồm các bước: Chọn vị trí ban đầu của Search Window, dùng thuật toán Meanshift lưu ra một vùng moment thứ 0, đặt kích cỡ của cửa
sổ tìm kiếm bằng một hàm của moment thứ 0 tìm được trong bước 2, lặp lại bước 2 và bước 3 cho đến khi hội tụ
Hình 1.5: Lưu đồ giải thuật thuật toán Camshift Trong lưu đồ thuật toán trên, đầu tiên là tạo Histogram chứa các thuộc tính liên quan đến màu sắc, tiếp theo là tâm và kích cỡ của mục tiêu được tính
Trang 6toán để theo dõi mục tiêu khi hình dạng và kích cỡ của nó thay đổi Tính xác suất phân bố mục tiêu căn cứ vào Histogram nhận được Dịch chuyển đến vị trí mới với mỗi khung hình vừa nhận được từ video Camshift sẽ dịch chuyển đến vị trí mà nó ước lượng trên đối tượng tập trung nhiều điểm sáng nhất trong bức ảnh xác suất Tìm vị trí mới bắt đầu từ vị trí trước đó và tính toán giá trị trọng tâm vừa tìm được Cả hai thuật toán trên đều có thư viện các hàm tính toán trong OpenCV và nhóm tác giả đã chọn lập trình phần bám ảnh trên Visual C 6.0 có sử dụng thư viện mã nguồn mở OpenCV của Intel
Hình 1.6: Sơ đồ khối hệ thống robot-camera bám theo đối tượng di chuyển Kết quả chạy mô hình thực nghiệm
Trang 7Hệ thống còn có hạn chế ở chỗ: tốc độ bám còn chậm (khoảng 10 frame/s), hệ thống bám chưa chú ý nhiều đến những thông số quan trọng như
đo gia tốc, vận tốc động cơ
Tác giả Comaniciu, Ramesh và Meer có các công trình nghiên cứu được đăng trên IEEE đã sử dụng thuật toán Meanshift và bộ lọc Kalman để dự báo tối ưu hướng dịch chuyển của đối tượng quan sát để xây dựng hệ thống bám theo đối tượng [4] Tuy nhiên, kết quả cũng chỉ dừng lại ở tốc độ bám ảnh còn chậm do thời gian xử lý các thuật toán trên máy tính và độ phân giải của camera khi đọc dữ liệu về máy tính
Ở trường đại học bách khoa Hồ Chí Minh, năm 2008, tác giả Lý Thanh Phương đã sử dụng đặc trưng Haar-Like và thuật toán tăng tốc Adaboost để nhận dạng và bám theo gương mặt người trên nền tảng SharpCV [1], tác giả
đã sử dụng luật điều khiển mờ trên cơ sở tọa độ gương mặt bám được trên các frame ảnh hồi tiếp về để điều khiển đế pan-tilt mang camera quay theo hướng dịch chuyển của gương mặt Tuy nhiên đề tài chỉ dừng lại ở việc nhận dạng gương mặt, tốc độ đáp ứng của camera còn chậm
1.3 Các hướng tiếp cận trong việc điều khiển hệ pan-tilt bám theo đối tượng dịch chuyển
Để giải bài toán điều khiển bám mục tiêu trên cơ sở thị giác máy, 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
Trang 8PC, 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 tra 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
UART, USB
Trang 9 Main công nghiệp, máy tính nhúng PC 104
Hình 1.7: 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++ )
Trang 10Hình 1.8: 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
- 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
- Các công cụ hỗ trợ lập trình rất nhiều Eclipse, Vim, Emacs vv
Trang 11Mô hình của CCD Sensor MT9T001 của Micron nhƣ sau:
Hình 1.9: 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ý
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
Trang 12Bộ 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.10: 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
Trang 131.3.1.2 Giải pháp phần cứng được sử dụng trong đề tài:
Phần cứng được sử dụng trong đề tài bao gồm một máy tính laptop sử dụng hệ điều hành Win7, vi xử lý Duo Core 2GHz, Ram 2G, 01 mini Webcam của hãng Microsoft có tốc độ đọc ảnh khoảng 30 frame/s, 02 vi điều khiển AVR Atmega8L điều khiển 2 động cơ theo hai phương
Atmega8 là bộ vi xử RISC với kiến trúc Harvard thuộc họ AVR được sản xuất bởi Cty ATMEL với tính năng mạnh mẽ Một số tính năng chính của Atmega8L:
- Có 130 lệnh mạnh xử lý hầu hết trong một chu kỳ xung nhịp
- Có 8Kbyte bộ nhớ flash có thể xóa lập trình được và có thể chịu được
10000 lần ghi xóa Có 32 thanh ghi đa năng 8 bit
- 512 byte bộ nhớ EEPROM tích hợp trên chíp, có 1 kbyte SRAM nội
- Có hai bộ Timer/counter 8 bit và một bộ timer/counter 16 bit với bộ chia tần lập trình được
- Có ba kênh điều xung PWM, 6 kênh lối vào chuyển đổi ADC với độ phân giải 10 bit
- Atmega8 có 28 chân, trong đó có 23 cổng vào ra Nguồn nuôi từ 2.7 đến 5.5 đối với Atmega8L và từ 4.5 đến 5.5 đối với Atmega8, làm việc tiêu thụ dòng 3.6mA
- Sử dụng mạch dao động ngoài từ 0 đến 8 Mhz với Atmega8L và từ 0 đến 16 Mhz với Atmega8 Ngoài ra chíp Atmega8 còn có bộ xung nhịp
Hình 1.11: Sơ đồ chân Atmega8L
Trang 14Hình 1.12: Sơ đồ khối của Atmega8
Trang 151.3.2 Hướng tiếp cận phần mềm
Để giải quyết bài toán xử lý ảnh – thị giác máy tính nói chung và bài toán điều khiển bám đối tượng nói riêng, trong thực tế ta hay dùng các thư viện mã nguồn mở trên cơ sở các thuật toán được tích hợp sẵn trong các hàm
cơ sở Ta có thể liệt kê một số thư viện mã nguồn mở hay được sử dụng :
- Intel OpenCV (http://sourceforge.net/projects/opencvlibrary)
Hình1.13: Cấu trúc thư viện OpenCV
- CMVision (http://www.cs.cmu.edu/~coral/minnow/platform.html)
- ImLib3D
- Imalab
Trang 16Đề tài sử dụng thư viện OpenCV phiên bản 2.3.1, được cài đặt tích hợp vào Visual Studio 2010, và lập trình MFC C++ Sau đây là một số đặc điểm cấu trúc của thư viện xử lý ảnh OpenCV
Hình 1.14: Một số thư viện chính của OpenCV 2.3.1
- CV: chứa các hàm cơ bản và nâng cao thực thi các bài toán thị giác máy (computer vision)
- ML (Machine Learning): thư viện học máy với các công cụ phân lớp (classifier) và phân cụm (clustering)
- HighGUI: các hàm vào ra và các hàm lưu trữ, nạp và hiển thị ảnh và video
- CXCore: chứa các kiểu dữ liệu cơ bản, một số thuật toán cơ bản và các hàm vẽ, có hỗ trợ XML
OpenCV cung cấp các hàm mà cho phép chúng ta tương tác trực tiếp với
hệ điều hành, các file hệ thống, các phần cứng như Webcam Các hàm này nằm trong thư viện HighGUI, HighGUI cho phép mở một window, hiển thị bức ảnh, đọc các file liên quan đến đồ hoạ (ảnh, video) các file ảnh như jpg,
Trang 17bmp v v các file video như avi, wma, mp4, dat v v Ngoài ra, nó còn xử lý các sự kiện chuột, bàn phím, OpenCV còn cho phép chúng ta lựa chọn thuật toán linh động hơn bằng cách cung cấp các hàm tạo thanh trượt slider, switch v v Để làm việc với OpenCV trước hết phải học các hàm trong thư viện này
Thư viện HighGUI có thể chia thành 3 phần: phần cứng, phần file hệ thống và phần GUI (Graphical User Interface) chúng ta có thể xem xét các phần trong thư viện HighGUI như sau
Phần cứng: là phần thiết yếu nhất, liên quan đến hoạt động của Camera, trong phần lớn hệ điều hành việc tương tác với phần cứng rất khó khăn và thực sự rất khó nhưng OpenCV cung cấp hàm đơn giản để thực
hiện việc tương tác này ví dụ: cvCaptureFromCAM()
Phần file hệ thống: là khái niệm liên quan đến việc tải và lưu ảnh, một đặc điểm rất tuyệt vời trong thư viện HighGUI là cho phép chúng ta làm việc với ảnh tương tự khi làm việc với video Vì vậy, chúng ta có thể nhanh chóng tiếp cận với việc xử lý ảnh mà không mất nhiều thời gian cho việc tải, lưu ảnh, video
Phần GUI: là hệ thống cửa sổ (Window), thư viện cung cấp một số hàm đơn giản mà cho phép chúng ta mở một window hiển thị ảnh trên window này Ngoài ra, nó còn cho phép chúng ta thực thi các sự kiện nhận được từ chuột và bàn phím
Một số hàm đơn giản thường xuyên sử dụng trong thư viện HighGUI như sau:
- Đầu tiên chúng ta cần học cách làm thế nào để đọc và viết các files ảnh, chụp video chuyển đổi giữa các định dạng màu, và truy cập dữ liệu điểm ảnh tất cả qua giao diện OpenCV
Trang 18- Đọc và viết một bức ảnh
- Bức ảnh vào/ra thì rất dễ dàng trong OpenCV, để đọc một file ảnh, đơn giản gọi hàm cvLoadImage(tên file) OpenCV hỗ trợ hầu hết các định dạng phổ biến kể cả JPEG, PNG và BMP cvLoadImage() tự động quyết định dạng file thông qua file header này
- Để viết một bức ảnh đến một file, ta dùng hàm cvSaveImage() Hàm này cũng tự quyết định file định dạng, để sử dụng từ tên file mở rộng
- Cả cvLoadImage và cvSaveImage đều nằm trong module HighGUI
- Khi bạn sử dụng xong bức ảnh đầu vào nhận được từ cvLoadImage(), loại bỏ nó bằng hàm cvReleaseImage() Hàm này đưa ra một địa chỉ của con trỏ giống đầu vào của nó bởi việc nó làm là loại bỏ an toàn (Safe Release)
Nó chỉ loại bức ảnh này khi bức ảnh là non-null Sau khi loại bỏ xong nó đặt giá trị con trỏ về 0
- Làm việc với Video tương tự như là việc với ảnh
- Nhận các frame từ một webcam, hay các thiết bị video số khác thì dễ dàng như tải nó lên từ một file có sẵn Để nhận một khung từ camera ta chỉ việc thay cvCreateFileCapture() bằng hàm cvCreateCameraCapture() Ta
có thể tạo cvCapture*Object với cvCreateFileCapture() và cvQueryFrame ()
để nhận từng frame và cvWaitkey(33) để chờ 33ms giữa từng frame Chúng ta
sử dụng cvReleaseCapture() để loại bỏ capture khi ngừng sử dụng
- Copy một bức ảnh
- Lưu trữ bức ảnh trong OpenCV
- OpenCV lưu bức ảnh giống cấu trúc C, IplImage, Ipl viết tắt của image processing library Kiểu dữ liệu IplImage được định nghĩa trong CXCORE Thêm vào dữ liệu ảnh thực, nó chứa một số đặc điểm để
mô tả như sau:
• Width - độ rộng bức ảnh tính theo pixel
Trang 19• Height - độ cao bức ảnh tính theo pixel
• Depth - một kiểu tiền định nghĩa chỉ rõ lượng bits/pixel/channel
Ví dụ : Depth=IPL_DEPTH_8U, dữ liệu cho mỗi pixel kênh ảnh
được lưu giữ như 8-bits không dấu
• nChannel – số lượng của dữ liệu channel ảnh (từ 1- 4) Mỗi một
channel chứa một kiểu của pixel dữ liệu Ví dụ bức ảnh RGB có 3 kênh R
(đỏ), G (xanh lá cây), B (xanh da trời)
• Grayscale là bức ảnh chỉ chứa một kênh điểm ảnh sáng nhất
• Truy cập giá trị điểm ảnh Chúng ta có thể tạo ra rất nhiều hàm truy cập điểm ảnh mà không cần tác động trực tiếp đến dữ liệu ảnh thô
- Cách dễ nhất để đọc từng điểm ảnh riêng lẻ là sử dụng hàm cvGet2D
• Hàm cvScalar cvGet2D(const *CvArr, int row, int col): có 3 thuộc tính: một pointer trỏ đến dữ liệu chứa trong CvArr*, một mảng chỉ
rõ vị trí hàng và cột Hàng topmost của điểm ảnh là row=0, và bottommost là row=height-1
- Smoothing (làm mịn): hay còn gọi là blurring nó là một thuật toán
xử lý ảnh đơn giản và thường xuyên sử dụng Có rất nhiều nguyên nhân chúng ta dùng đến smoothing nhưng nó thường dùng để loại bỏ nhiễu do máy ảnh sinh ra Smoothing quan trọng khi bạn muốn giảm độ phân giải của một bức ảnh theo rất nhiều cách khác nhau Bằng việc thay thế kiểu smooth
và các thông số sẽ có các bức ảnh tương đối khác nhau tùy theo mục đích sử dụng nhưng thường dùng nhất vẫn là CV_GAUSSIAN
- Image morphology (hình thái học bức ảnh): OpenCV cung cấp hàm
chuyển đổi morphology nhanh chóng và tiện lợi khi làm việc với bức ảnh Cơ bản của morphology là dilation (giãn) và erosion (co) chúng ngày càng được
Trang 20sử dụng rộng rãi trong việc loại bỏ nhiễu, cô lập những thành phần riêng rẽ,
và liên kết các thành phần với nhau
- Theshold (phân ngưỡng): ta thường làm rất nhiều bước xử lý ảnh khác
nhau và đưa ra những quyết định cuối cùng về điểm ảnh trên một bức ảnh hay nói cách khác là loại bỏ giá trị phía trên hoặc dưới một ngưỡng nào đó giữ lại nhưng điểm ảnh nằm trong khoảng giá trị mong muốn lúc đó ta dùng hàm threshold
- Histogram: trong việc phân tích hình ảnh thông tin về đối tượng và video, chúng ta thường muốn biểu diễn chúng giống như là một histogram Histogram có thể sử dụng để biểu diễn rất nhiều dạng khác nhau như phân bố màu của đối tượng, độ dốc mẫu cạnh của một đối tượng, hay xác suất phân bố
vị trí của đối tượng Tìm histogram được sử dụng rất nhiều trong các chương trình ứng dụng thị giác máy tính Histogram được sử dụng để dò tìm sự thay đổi giữa các cảnh trong video bằng cách đánh dấu khi cạnh và màu sắc thay đổi từ khung này đến khung khác Chúng sử dụng để nhận dạng nhưng điểm quan tâm trên một bức ảnh bằng cách gán mỗi điểm ảnh một
“tag” chứa những Histogram của những đặc điểm gần nhất Histogram của cạnh, màu, góc và rất nhiều đặc điểm khác Một chuỗi các màu sắc, cạnh có thể dùng để xác nhận dù có hay không một video đã được copy trên web
- Ghép mẫu template matching: Hàm ghép cvMatchTemplate() không dựa trên histogram, hơn nữa, hàm này ghép một bức ảnh thực đến một bức ảnh đầu vào bằng cách “Sliding” đường dẫn qua bức ảnh đầu vào này sử dụng thao tác ghép mô tả trong phần này
- Hàm Contours :Mặc dù thuật toán như dò tìm cạnh candy có thể sử dụng để tìm ra cạnh pixel để phân bức ảnh thành các phần khác nhau Bước tiếp theo là xây dựng các cạnh này thành contours
Trang 21- Hàm cvCamShift( const CvArr* prob_image, CvRect window,
CvTermCriteria criteria, CvConnectedComp* comp, CvBox2D* box CV_DEFAULT(NULL)) thực thi thuật toán camshift
- Để nhúng bộ lọc Kalman vào chương trình xử lý ảnh bám đối tượng ta
có thể sử dụng một số hàm liên quan như sau:
• Hàm tạo và hủy cấu trúc CvKalman:
cvCreateKalman(
int nDynamParams, //Số chiều vector trạng thái
int nMeasureParams, //Số chiều vector đo
int nControlParams //Số chiều vector điều khiển
typedef struct CvKalman {
int MP; // measurement vector dimensions
int DP; // state vector dimensions
int CP; // control vector dimensions
CvMat* state_pre; // predicted state: x_k = F x_k-1 + B u_k
CvMat* state_post; // corrected state: x_k = x_k’ + K_k (z_k’- H x_k’)
CvMat* transition_matrix; // state transition matrix : F
CvMat* control_matrix; // control matrix :B
CvMat* measurement_matrix; // measurement matrix : H
Trang 22CvMat* process_noise_cov; // process noise covariance : Q
CvMat* measurement_noise_cov; // measurement noise covariance : R CvMat* error_cov_pre; // prior error covariance: (P_k’=F P_k-1 Ft) + Q
CvMat* gain; // Kalman gain matrix: K_k = P_k’ H^T (H P_k’ H^T + R)^-1
CvMat* error_cov_post; // posteriori error covariance : P_k = (I - K_k H) P_k’
CvMat* temp1; // temporary matrices
cvKalmanCorrect( CvKalman* kalman, CvMat* measured );
c Hướng tiếp cận xây dựng mô hình hệ pan-tilt mang camera
Trong thực tế, có nhiều mô hình hệ pan-tilt được xây dựng trên cơ sở các ứng dụng thực tiễn, ta có thể tìm thấy ở các phim trường nơi đòi hỏi phải có những thước phim ở những góc độ quay khác nhau, hoặc trên các hệ thống camera giám sát hiện nay Để điều khiển cơ cấu pan-tilt, ta hay sử dụng hai
Trang 23động cơ (có thể là Servo hoặc động cơ bước) để giúp camera có thể chuyển động theo hai phương Sau đây là các mô hình pan-tilt thường gặp:
Hình 1.15: Một số cơ cấu Pan-tilt trong thực tế
Đề tài sử dụng hai động cơ DC 12-24V có gắn hộp số và các encoder Chi tiết
về cơ cấu này sẽ được trình bày trong chương 4
1.4 Các giải thuật nhận dạng, tracking đối tượng di chuyển đặc trưng được sử dụng trong thực tế
Vấn đề nhận dạng đối tượng đang được nghiên cứu và có nhiều ứng dụng trong cuộc sống Các đối tượng được phát hiện nhờ những thông tin trong một frame ảnh Có rất nhiều hướng tiếp cận để giải quyết vấn đề trên Các tác giả Alper Yilmaz, Omar Javed và Mubarak Shah đã phân loại các hướng tiếp cận này được trình bày [12]:
Trang 24Bảng 1.1 - Bảng phân loại các thuật toán nhận dạng đối tượng
Việc lựa chọn phương pháp áp dụng phải dựa vào tình huống cụ thể, đối với trường hợp có ảnh nền không thay đổi việc phát hiện đối tượng chuyển động có thể bằng các phương pháp trừ nền Các giải thuật này sẽ được trình bày sau đây Hướng giải quyết là xây dựng mô hình nền, sau đó sử dụng mô hình này cùng với frame hiện tại để rút ra được các foreground chuyển động
Để có thể tiếp cận cần phải xây dựng được mô hình background Có nhiều phương pháp xây dựng mô hình background bởi các tác giả: Anurag Mittal dùng adaptive kernel density estimation được tính bằng [10] Kết quả tốt tuy nhiên khó khăn về không gian lưu trữ, tính toán phức tạp, tốc độ không đáp ứng thời gian thực Haritaoglu dùng giải thuật W4, Stauffer sử dụng Mixture of Gaussian [11] để xây dựng mô hình nền… Nhằm phát hiện được các đối tượng chuyển động, xác định xem những đối tượng này có đúng là
Trang 25những đối tượng ta cần phát hiện hay không Đây là các khó khăn cần khắc phục
Trong các lĩnh vực về phát hiện phần đầu của người thì Wei Qu, Nidhal Bouaynaya and Dan Schonfeld đề ra hướng tiếp cận bằng cách kết hợp mô
hình màu da cùng với mô hình màu tóc (skin and hair color model) Những
màu này được phát hiện dựa vào mô hình Gauss Sau đó bằng cách áp dụng phương pháp so khớp mẫu (template matching) để đạt được mục đích phát hiện phần đầu người đáp ứng thời gian thực Khó khăn trong hướng tiếp cận này thường gặp ở việc thu thập dữ liệu huấn luyện màu da và màu tóc, độ chính xác dể bị ảnh hưởng bởi độ sáng của môi trường Việc phát hiện đối tượng có thể được thực hiện bằng các phương pháp máy học Các phương pháp này có thể kể đến như: mạng neural, adaptive boosting, cây quyết định, support vector machines Điểm chung của các phương pháp này đều phải trải qua giai đoạn huấn luyện trên một tập dữ liệu Tập dữ liệu này phải
đủ lớn, bao quát hết được các trạng thái của đối tượng Sau đó các đặc trưng
sẽ được rút trích ra trên bộ dữ liệu huấn luyện này
Việc lựa chọn đặc trưng sử dụng đóng vai trò quan trọng ảnh hưởng đến hiệu quả của các phương pháp máy học Một số đặc trưng thường được
sử dụng như: đặc trưng về màu sắc, đặc trưng về góc cạnh, đặc trưng histogram… Sau khi đã có được đặc trưng, ta sẽ đánh nhãn lớp cụ thể cho các đặc trưng đó để sử dụng trong việc huấn luyện Trong quá trình huấn luyện, các phương pháp máy học sẽ sinh ra một hàm để ánh xạ những đặc trưng đầu vào tương ứng với nhãn lớp cụ thể Sau khi đã huấn luyện xong thì các phương pháp máy học trên sẽ được dùng để phân lớp cho những đặc trưng mới
Trang 26Đặc điểm của phương pháp này là độ chính xác cao Tuy nhiên, nó gặp phải khó khăn trong việc thu thập dữ liệu huấn luyện ban đầu, tốn thời gian
và chi phí cho quá trình học máy
Ngoài ra để tăng khả năng bám đối tượng và hạn chế khả năng mất bám
do các yếu tố nhiễu nền, đối tượng di chuyển nhanh, ta có thể sử dụng thuật toán bám ảnh Camshift kết hợp bộ lọc nhiễu dự báo Kalman
Camshift viết gọn của “Continuously Adaptive Mean Shift” là cơ sở của thuật toán theo dõi khuôn mặt trong OpenCV Nó bao gồm thuật toán cơ
sở Mean Shift với thích ứng các bước thay đổi kích cỡ của vùng Nhân là một hàm step đơn giản nằm trong một bản đồ vỏ xác suất (skin-probability)
Vỏ xác suất của mỗi một điểm ảnh được tính toán dựa trên màu sắc bằng cách sử dụng một phương pháp gọi là Histogram backprojection Màu sắc được đưa ra như Hue từ mô hình màu HSV
Kể từ nhân là một hàm step, Mean Shift ở mỗi một lần lặp thì chỉ đơn giản là giá trị trung bình x và y của vỏ xác suất đóng góp trong vùng hiện tại Điều này được xác định bằng cách chia moment thứ nhất của vùng này cho moment thứ không ở mỗi lần lặp và dịch chuyển vùng đến trọng tâm xác suất Sau khi Mean Shift hội tụ đến một vị trí (x,y), phạm vi của vùng được cập nhật dựa trên giá trị hiện tại của moment thứ 0 Giá trị của bản cập nhật này có thể thay đổi, phạm vi tuyến tính của nó được giả định là tỉ lệ thuận với căn bậc 2 của tổng của các khoản đóng góp xác suất của khu vực hiện tại (ví
dụ Moment thứ không) Chiều rộng và chiều dài tại thời điểm thứ i sẽ được tính thông qua giá trị tại thời điểm thứ i-1, nghĩa là giá trị trước đó Trong thuật toán CamShift, một bức ảnh về xác suất phân bố màu sắc của bức ảnh trong chuỗi video được tạo ra Đầu tiên nó tạo ra một mẫu mô tả
Trang 27màu Hue Saturation Value (HSV) được tham chiếu từ không gian màu tiêu chuẩn RGB Vì phân bố màu sắc của các bức ảnh trong video thay đổi theo thời gian, nên thuật toán CamShift đã được sửa đổi để dễ dàng thích ứng với
sự thay đổi phân bố xác suất màu sắc của mục tiêu nó theo dõi Trong OpenCV thuật toán CamShift được điều chỉnh từ thuật toán Mean Shift
Và nó đươc tính toán như sau:
1 Kích chọn kích thước khung bám
2 Chọn vị trí khởi tạo của khung bám (cửa sổ bám)
3 Tính giá trị trung bình bên trong khung bám
4 Đặt tâm khung bám ở vị trí trung bình đã tính trong bước 3
5 Lặp lại bước 3 và bước 4 cho đến khi hội tụ (hoặc cho đến khi độ dịch chuyển vị trí tâm nhỏ hơn một ngưỡng đặt trước)
Trang 28Hình 1.16: Lưu đồ thuật toán Camshift
Chứng minh hội tụ: Giả sử trong không gian euclid có một phân bố f, ta sẽ
chứng minh từng bước:
1 Chọn khung bám W có kích thước là s
Trang 292 Tâm của khung bám ở điểm Pk
3 Tính giá trị trung bình bên trong khung bám:
00
x y
M I(x, y) (1.4) Sau đó tính moment bậc 1 cho x và y:
M xI(x, y) M yI(x, y) (1.5) Trong đó: I(x,y) là giá trị điểm ảnh tại vị trí (x,y) và vị trí tâm của khung bám
* Bộ lọc nhiễu dự báo Kalman:
Bộ lọc Kalman là một tập hợp các phương trình toán học giúp tối ưu ước lượng trạng thái của một hệ (theo nghĩa giá trị ước đoán có sai số bình phương trung bình nhỏ nhất – MMSE) dựa trên mô hình hệ thống (system model), giá trị đo (measurement value) và các hiểu biết về nhiễu (của hệ thống lẫn phép đo)
Bộ lọc Kalman do R.E.Kalman công bố vào năm 1960, ông đưa ra một giải pháp đệ quy để giải quyết bài toán lọc thông tin rời rạc tuyến tính
(discrete data linear filtering) Bài báo có tựa đề “A New Approach to Linear
Trang 30Filtering and Prediction Problems” Hơn 50 năm trôi qua, bộ lọc Kalman đã
trở nên phổ biến Nó xuất hiện trong rất nhiều ứng dụng và bởi vì vấn đề lọc
mà nó giải quyết là một vấn đề cơ bản trong rất nhiều lĩnh vực, nên nó có ý nghĩa rất lớn trong nhiều ứng dụng mới nữa ở tương lai (trừ khi có một bộ lọc hay một giải pháp nào đó tốt hơn ra đời)
Biểu đồ sau đây là một mô tả hình thức của một bộ lọc nói chung
Hình 1.17: Sơ đồ khối mô tả mối quan hệ giữa bộ lọc và các tín hiệu liên quan
Cách 1: Dùng phương trình động học để tính vị trí vật
Ta có vị trí của vật tại thời điểm t là x(t) = x(0) + v.t Hay viết dưới dạng truy hồi là:
Trang 31(1.7)
Cách 2: Sử dụng bộ phận định vị gắn trên vật
Khi đó các vị trí đơn giản là giá trị do bộ phận này cung cấp:
(1.8) Trong đó z(k) là giá trị do bộ phận định vị cung cấp tại thời điểm k
tính toán và giá trị đo được của bộ phận định vị là có thể tin tưởng Tuy nhiên, bạn sẽ thất vọng khi biết rằng đó chỉ là cảm giác của bạn, còn thực tế không phải vậy! Bởi lẽ phép tính của bạn (trong những trường hợp phức tạp) lẫn giá trị cung cấp bởi bộ phận định vị không có cơ sở nào để khẳng định là chính xác với thực tế Cho dù 2 kết quả này hoàn toàn trùng khớp thì cũng có thể chỉ là ngẫu nhiên Một trường hợp khác thường xảy ra hơn là khi 2 kết quả này không giống nhau
Cách 3: Tính toán kết quả bằng cách tổng hợp 2 phương pháp
Trang 32Cách này nhìn có vẻ ổn Vì có thể có trường hợp x (k)1 chính xác hơn, có
ta chọn (hoặc kết hợp) kết quả một cách thích đáng Tuy nhiên, đến đây lại nảy sinh 2 vấn đề mới:
1 ⍺ và β phải chọn ra sao để được kết quả tối ưu?
2 Và như đã nói, ⍺ và β có thể sẽ thay đổi (để tùy trường hợp mà kết hợp 2 ước lượng cho hợp lý nhất), vậy thì đâu sẽ là căn cứ, tiêu chuẩn để ta cập nhật 2 hệ số này? Đến đây, bộ lọc Kalman xuất hiện, hai vấn đề chúng ta vừa nêu chính là đối tượng giải quyết của bộ lọc Kalman
Ta có mô hình tổng quát của ước lượng dùng bộ lọc Kalman như sau:
Hình 1.18: Sơ đồ tổng quát của mô hình ước lượng dùng bộ lọc Kalman
Trang 33nghiệm (ước lượng chưa qua bộ lọc Kalman) Nó được tính bằng phương trình:
Trang 34Theo quy tắc trực giao, để sai số của ước lượng bình phương trung bình là nhỏ nhất (MMSE) ta phải có:
Ta biến đổi phương trình trên:
Trang 35Trừ 2 phương trình sau:
T k
Trang 36Lưu ý vì các biến ngẫu nhiên w, v có kỳ vọng bằng 0 và chúng độc lập với x,
z nên ta có:
T T
k
k k k T
T
k k k k k k
[I-K H ]P ( )H K R 0, (1.27)
được do kỳ vọng của nhiễu đo đạt v bằng 0)
Trang 37k k k
R E v v
(1.28)Nhƣ vậy ta thu đƣợc độ lợi của bộ lọc Kalman: