Tải bản đầy đủ (.pdf) (74 trang)

ĐIỀU KHIỂN CAMERA BÁM THEO MỤC TIÊU DI ĐỘNG

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.48 MB, 74 trang )

1

CHƢƠNG I: TỔNG QUAN HỆ PAN-TILT
CAMERA BÁM THEO MỤC TIÊU DI ĐỘNG
1.1. Giới thiệu
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ệ 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


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

Desired
Position +

-

Controller

Frame
Grabber

Pan-Tilt
Camera
system

Camera

Hình 1.2: Sơ đồ điều khiển hệ pan-tilt camera bám theo mục tiêu di động


3

Hì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...


4

1.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
điểm và tham số của các đoạn thẳng trên ảnh ,  , trọng tâm và diện tích S.
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    u1v1,...11...S1S2  .

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
trên cơ sở sai lệch e giữa đặc trƣng ảnh hiện thời actual và đặc trƣng ảnh mong


muốn desired , các tín hiệu phản hồi trạng thái các biến trong robot  ,  nhằm
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.



5

Tá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


6

toá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


7

Hệ 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.


8

1.3.1. Hƣớng tiếp cận phần cứng phục vụ xử lý ảnh
1.3.1.1. Các giải pháp trong thực tế
 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 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

- 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.


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++..).
 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.
 Single Board Computer(SBC) sử dụng Single on Chip (SOC)


10


Hì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.


11

 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.
 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 ảnh thông qua bus dữ liệu tốc độ cao.

Mô 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.


12

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.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.


13

1.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



14

Hình 1.12: Sơ đồ khối của Atmega8


16

1.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 ( />
Hình1.13: Cấu trúc thƣ viện OpenCV
- CMVision ( />- ImLib3D.
- Imalab.


17

Đề 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,


18

bmp 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.


19

- Đọ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.


20

• 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


21

sử 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.


22

- 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

);
cvReleaseKalman(
CvKalman** kalman
);
• Cấu trúc CvKalman chứa các thông tin dùng trong bộ lọc
Kalman: vector trạng thái, ma trận độ lợi (Kalman gain) và các ma trận liên
quan:
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


23

CvMat* 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

CvMat* temp2;
CvMat* temp3;
CvMat* temp4;
CvMat* temp5;
} CvKalman;
• Hàm tiên đoán trạng thái, kết quả của hàm này là tiên nghiệm
state_pre:
cvKalmanPredict( CvKalman* kalman, const CvMat* control = NULL
);
• Hàm tính toán tối ƣu cho ƣớc lƣợng của trạng thái (kết hợp giá
trị của phép đo), kết quả của hàm này là hậu nghiệm stat_post.
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


24


độ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]:


25

Bả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à



26

nhữ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.



×