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

Dự doán chuyển động của bàn tay sử dụng bộ lọc KALMAN

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 (1.41 MB, 27 trang )

HỌC VIỆN CÔNG NGHỆ BƢU CHÍNH VIỄN THÔNG
---------------------------------------

Trần Văn Hiệu

DỰ ĐOÁN CHUYỂN ĐỘNG CỦA BÀN TAY
SỬ DỤNG BỘ LỌC KALMAN

Chuyên ngành: Kỹ thuật Viễn thông
Mã số: 60.52.02.08

TÓM TẮT LUẬN VĂN THẠC SĨ

HÀ NỘI - 2016


Luận văn đƣợc hoàn thành tại:
HỌC VIỆN CÔNG NGHỆ BƢU CHÍNH VIỄN THÔNG

Ngƣời hƣớng dẫn khoa học: TS. Nguyễn Ngọc Minh

Phản biện 1: ……………………………………………………………………

Phản biện 2: ……………………………………………………………………

Luận văn sẽ được bảo vệ trước Hội đồng chấm luận văn thạc sĩ tại Học viện Công
nghệ Bưu chính Viễn thông
Vào lúc: ....... giờ ....... ngày ....... tháng ....... .. năm ...............

Có thể tìm hiểu luận văn tại:
- Thư viện của Học viện Công nghệ Bưu chính Viễn thông




1

LỜI MỞ ĐẦU
Ngày nay, trong lĩnh vực thị giác máy tính, nhận dạng cử chỉ bàn tay đang là một chủ
đề được quan tâm nghiên cứu và các mô hình nhận dạng cử chỉ có tiềm năng ứng dụng lớn
trong việc tương tác với máy tính, ví dụ như trong các môi trường thực tế ảo, điều khiển
robot, trò chơi tương tác, … Trong hệ thống nhận dạng cử chỉ, theo vết chuyển động bàn tay
là công việc quan trọng, trong đó cần phải phát hiện và bám sát vị trí bàn tay trong một
chuỗi các hình ảnh liên tiếp. Có nhiều hướng tiếp cận khác nhau liên quan đến việc phát
hiện và bám sát bàn tay chuyển động, một số phương pháp được đề cập trong tài liệu tham
khảo [3] như: các phương pháp phát hiện và theo vết dựa vào màu sắc dùng thuật toán
MeanShift [28], CamShift [12] hay hướng tiếp cận theo đặc trưng góc cạnh của Cox và
Hingorani đã sử dụng phương pháp Multiple Hypothesis Tracking [17], hoặc là sự kết hợp
của “particle filters” và kỹ thuật tính toán xác suất do MacCormick và Blake [18]. Hướng
tiếp cận bằng phương pháp xây dựng mô hình cũng được nhiều tác giả thực hiện, chẳng hạn
như Anurag Mital và Mikos Paragios [8] đã dùng phương pháp ước lượng mật độ bằng hàm
nhân thích nghi (adaptive kernel density estimation) để tính toán. Phương pháp này được
đánh giá là tốt về mặt không gian lưu trữ nhưng về việc tính toán trên thời gian thực thì còn
hạn chế bởi tính toán phức tạp và tốc độ chậm. Hiện nay, hướng tiếp cận được nhiều người
hướng đến là sử dụng bộ lọc Kalman [16] [20] để dự đoán chuyển động của đối tượng đang
quan sát và kết hợp bộ lọc Kalman với thuật toán MeanShift [13] hay CamShift [5] nhằm
mục đích nâng cao khả năng của việc bám sát. Nhìn chung, mỗi hướng tiếp cận đều có
những ưu nhược điểm riêng và đều hướng tới việc nâng cao độ chính xác, tăng tốc độ phát
hiện và bám sát đối tượng, đảm bảo tính thời gian thực, … Trong đó, bộ lọc Kalman được
biết đến như là một phương pháp phổ biến sử dụng cho các hệ thống theo vết mục tiêu
chuyển động nói chung và hệ thống theo vết bàn tay nói riêng.
Bộ lọc Kalman [16] được giới thiệu lần đầu tiên năm 1960, khi mà R.E. Kalman xuất
bản một bài báo nổi tiếng mô tả về một giải pháp đệ quy để giải quyết vấn đề bộ lọc dữ liệu

tuyến tính và rời rạc. Kể từ đó, do có những ưu điểm lớn trong tính toán, bộ lọc Kalman là
một chủ đề nhận được ngày càng nhiều nghiên cứu và ứng dụng, đặc biệt trong các hệ thống
định vị, dẫn đường. Bộ lọc Kalman là một thuật toán dự đoán, nó cho phép ước lượng trạng
thái quá khứ, hiện tại thậm chí cả tương lai [16], nhận thấy khả năng ứng dụng cao của bộ


2
lọc Kalman vào việc dự đoán vị trí bàn tay di chuyển nên em đã lựa chọn đề tài “Dự đoán
chuyển động của bàn tay sử dụng bộ lọc Kalman” cho luận văn của mình.
Nội dung luận văn được chia làm 3 chương:
Chƣơng 1: Tổng quan về hệ thống theo vết đối tƣợng chuyển động. Ở chương
này, học viên trình bày một cách tổng quan các vấn đề liên quan đến việc theo vết đối tượng
nói chung, bao gồm: quá trình theo vết đối tượng và một số nhóm phương pháp theo vết đối
tượng phổ biến. Trong đó tập trung vào phương pháp theo vết đối tượng sử dụng thuật toán
dự đoán, nổi bật trong số đó là giải thuật sử dụng bộ lọc Kalman. Chương này cũng trình
bày chi tiết cơ sở toán học và các dạng của bộ lọc Kalman, làm cơ sở cho việc theo vết bàn
tay ở chương 2.
Chƣơng 2: Sử dụng bộ lọc Kalman để theo vết vị trí bàn tay. Với đối tượng cụ
thể là bàn tay chuyển động, ở chương này, học viên đề xuất sử dụng các đặc trưng HaarLike kết hợp với thuật toán AdaBoost để phát hiện bàn tay. Sau đó sử dụng bộ lọc Kalman
để theo vết vị trí bàn tay chuyển động qua các khung hình theo thời gian thực. Tiếp theo,
học viên trình bày về quá trình xây dựng phần mềm sử dụng bộ thư viện OpenCV trên môi
trường Windows và các kết quả thực nghiệm theo vết bàn tay chuyển động.
Chƣơng 3: Ứng dụng hệ thống theo vết bàn tay để điều khiển thiết bị. Từ hệ
thống theo vết bàn tay đã xây dựng và kiểm thử ở chương 2, trong chương 3 học viên trình
bày về việc ứng dụng hệ thống này để điều khiển động cơ, qua đó điều khiển một webcam
giám sát quay theo các hướng khác nhau.


3


CHƢƠNG 1: TỔNG QUAN VỀ THEO VẾT ĐỐI TƢỢNG CHUYỂN
ĐỘNG
1.1. Giới thiệu chung
Theo vết đối tượng là một nhiệm vụ quan trọng trong lĩnh vực thị giác máy tính. Sự
phát triển mạnh mẽ của máy tính có tốc độ cao dung lượng lớn, sự phổ biến của các camera
video chất lượng cao và giá thành ngày càng thấp, và nhu cầu ngày càng lớn về phân tích
video tự động, … đã tạo ra rất nhiều sự quan tâm đối với các thuật toán theo vết đối tượng.
Có ba bước quan trọng trong phân tích video đó là: phát hiện các đối tượng chuyển động
cần quan tâm, theo vết các đối tượng này qua từng khung hình, và phân tích các đối tượng
theo vết để nhận ra hành vi của chúng.
Ở dạng đơn giản nhất, theo vết có thể được định nghĩa là sự dự đoán về quỹ đạo
chuyển động của một đối tượng trong mặt phẳng ảnh khi nó di chuyển xung quanh khung
cảnh. Nói cách khác, một bộ theo vết xem xét việc gán nhãn cho các đối tượng được theo
vết trong các khung hình khác nhau của một video. Ngoài ra, phụ thuộc vào lĩnh vực theo
vết, một bộ theo vết cũng có thể cung cấp các thông tin về đối tượng như phương hướng,
diện tích hay hình dạng của một đối tượng.
Có nhiều phương pháp tiếp cận khác nhau đã được đề xuất cho vấn đề theo vết đối
tượng chuyển động. Điểm khác biệt chủ yếu giữa các phương pháp dựa trên cách mà họ giải
quyết các câu hỏi:
 Biểu diễn đối tượng bằng cách nào thì phù hợp với việc theo vết?
 Các đặc trưng nào của bức ảnh sẽ được sử dụng?
 Sự chuyển động, vẻ bề ngoài, và hình dạng của đối tượng nên được mô hình hóa
như thế nào?
Câu trả lời cho những câu hỏi này phụ thuộc vào việc theo vết đối tượng được thực
hiện trong bối cảnh hay môi trường nào và cuối cùng các thông tin theo vết được sử dụng
vào mục đích gì. Có rất nhiều phương pháp theo vết đối tượng đã được để xuất để cố gắng
tìm lời giải đáp phù hợp cho các câu hỏi này trong những kịch bản khác nhau. Ở chương
này, học viên sẽ trình bày một cách tổng quan về một số nhóm phương pháp theo vết đối
tượng phổ biến, trong đó tập trung vào phương pháp theo vết đối tượng sử dụng thuật toán
dự đoán, nổi bật trong số đó là giải thuật sử dụng bộ lọc Kalman.



4

1.2. Theo vết đối tƣợng chuyển động
1.2.1. Mô hình tổng quát của hệ thống theo vết đối tượng
Trong lĩnh vực thị giác máy tính, qúa trình theo vết đối tượng chuyển động là một
quá trình lặp bao gồm một số bước chính như sau: thu nhận dữ liệu, tiền xử lý, phát hiện đối
tượng, theo vết đối tượng và ra quyết định điều khiển.
Camera
video số
Đọc hình
ảnh

Lặp lại

Bộ lưu trữ
Tiền xử lý
ảnh

Xuất lệnh
điều khiển

Phát hiện
đối tượng

Theo vết đối
tượng

Âm thanh, Các

cơ cấu chấp
hành, .v.v

Hình 1.1: Mô hình tổng quát của hệ thống theo vết đối tƣợng.

1.2.2. Biểu diễn đối tượng
1.2.3. Lựa chọn điểm đặc trưng của đối tượng để theo vết
Lựa chọn những đặc trưng phù hợp đóng một vai trò quan trọng trong việc theo vết
đối tượng. Nói chung, tính chất mà ta muốn có được nhất ở một đặc trưng thị giác đó là tính
duy nhất, nghĩa là mỗi đối tượng có một đặc trưng duy nhất để có thể được phân biệt một
cách dễ dàng trong một không gian có nhiều đối tượng. Thông thường, các thuật toán theo
vết sử dụng kết hợp nhiều đặc trưng lại với nhau để có thể biểu thị chính xác đối tượng
mong muốn theo vết. Chi tiết về các điểm đặc trưng về thị giác được liệt kê trong tài liệu
tham khảo [9] như sau:
 Đặc trƣng về màu sắc.
 Đặc trƣng về cạnh (edges).
 Đặc trƣng optical flow.
 Đặc trƣng kết cấu (texture).

1.2.4. Phát hiện đối tượng
Mỗi phương pháp theo vết đòi hỏi một cơ chế phát hiện đối tượng qua từng khung
hình hoặc phát hiện đối tượng khi lần đầu tiên nó xuất hiện trong video. Phương pháp tiếp
cận chung cho việc phát hiện đối tượng đó là phát hiện trong một khung hình duy nhất. Tuy


5
nhiên, một số phương pháp phát hiện đối tượng sử dụng thông tin liên quan đến thời gian
thời gian được tính từ một chuỗi các khung hình để giảm số lần phát hiện sai. Đối với việc
phát hiện đối tượng, có một vài phương pháp phổ biến được mô tả như trong tài liệu [9] là:
 Phát hiện điểm.

 Phƣơng pháp trừ nền (Background Subtraction).
 Phân đoạn (Segmentation).
 Phƣơng pháp máy học.

1.2.5. Theo vết đối tượng
Mục đích của một hệ thống theo vết đối tượng là ghi nhận được thông tin về quỹ đạo
chuyển động của một đối tượng theo thời gian bằng cách xác định vị trí của nó trong từng
khung hình của video. Theo vết có hai định nghĩa khác nhau [27], một là xác định vị trí của
một đối tượng hay nhiều đối tượng trong một khoảng thời gian sử dụng camera. Định nghĩa
thứ hai về mặt kỹ thuật theo vết là vấn đề ước lượng (dự đoán) quỹ đạo hay đường đi của
một đối tượng khi mà nó di chuyển quanh một khung cảnh.
Trong tài liệu tham khảo [9], các phương pháp theo vết đối tượng được phân loại
thành ba nhóm chính dựa trên mô hình đối tượng được sử dụng như trong hình 1.3 như sau:
Theo vết đối
tượng

Theo vết điểm

Theo vết dựa trên
nhân

Bộ lọc Kalman

So khớp mẫu

Bộ lọc Partical

Mean Shift

Multiple

Hypothesis
Tracking

Theo vết dựa trên
bóng

Theo vết dựa trên
đường viền

So khớp hình
dạng
Support Vector
Machine

Layering Based
Tracking

Hình 1.3: Một số phƣơng pháp theo vết đối tƣợng

1.3. Tổng quan về bộ lọc Kalman
Bộ lọc Kalman là một phương pháp hiệu quả để ước lượng các trạng thái, trong đó
dự đoán trạng thái của đối tượng bằng mô hình trạng thái, và ước lượng hàm mật độ xác
suất hậu nghiệm bằng mô hình quan sát. Khi các đặc tính động của trạng thái đối tượng (mô
hình trạng thái và mô hình quan sát) đáp ứng cả điều kiện tuyến tính và có phân bố Gauss,


6
bộ lọc Kalman có thể đạt được giải pháp tối ưu với bình phương lỗi là tối thiểu [21]. Ý
tưởng của bộ lọc Kalman được sử dụng rộng rãi từ khi nó được giới thiệu trong lĩnh vực
theo vết đối tượng video. Trong theo vết đối tượng video, bộ lọc Kalman thường sử dụng

nhiễu Gauss để biểu diễn sự bất định của mô hình trạng thái và mô hình quan sát và sử dụng
tính bất định để làm cân bằng một cách tự động các tác động của các quan sát và sự dự đoán
đến các kết quả của việc theo vết. Nếu xuyên nhiễu giữa chuỗi video là không nhiều, thì sự
xấp xỉ tính bất định của các trạng thái đối tượng bằng mô hình Gauss là hợp lý. Tuy nhiên,
nếu có xuyên nhiễu mạnh trong chuỗi video, thì việc sử dụng bộ lọc Kalman thì không hợp
lý nữa. Để giải quyết vấn đề theo vết các hệ thống phi tuyến tính, giải thuật Kalman mở
rộng (Extended Kalman Filter – EKF) được đề xuất. EKF cung cấp một phương pháp được
tuyến tính hóa cho các hệ thống phi tuyến, và sau đó theo vết bằng Kalman Filter. Bộ lọc
Kalman mở rộng có lợi thế là sự tính toán đơn giản, nhưng khi các hệ thống có bậc phi
tuyến cao, bộ lọc Kalman mở rộng sẽ không thực hiện tốt nữa. Bộ lọc Unscented Kalman
Filter (UKF) là một phương pháp tiếp cận khác cho các hệ thống phi tuyến. Nó giới thiệu bộ
lọc Monte Carlo trong đó sử dụng một tập các điểm mẫu rời rạc để mô tả giá trị trung bình
và phương sai của hàm mật độ xác suất hậu nghiệm của hàm trạng thái. Nó có thể đạt được
hiệu quả lọc trong các hệ thống phi tuyến trong việc tránh xử lý trực tiếp sự tuyến tính của
các hệ thống phi tuyến

1.4. Bộ lọc Kalman tiêu chuẩn
1.4.1 Hệ thống và mô hình quan sát
Bộ lọc Kalman giải quyết bài toán tổng quát là cố gắng ước lượng trạng thái x n
của một quá trình điều khiển rời rạc theo thời gian được mô tả bởi phương tình sai phân
tuyến tính ngẫu nhiên (1.1) và mô hình không gian trạng thái được thể hiện ở hình 1.4:
xk 1  Fk xk  Bk uk  wk

(1.1)

zk  H k xk  vk

(1.2)

Hình 1.4: Mô hình không gian trạng thái



7

1.4.2 Nguồn gốc tính toán của bộ lọc
1.4.3. Điều kiện không chệch
1.4.4. Độ lợi Kalman
1.4.5. Tổng hợp các công thức chính
Các phương trình của bộ lọc Kalman được chia thành hai nhóm: cập nhật theo thời
gian (time update) và cập nhật theo giá trị đo lường (measurement update). Chúng ta có thể
coi các phương trình cập nhật theo thời gian là các phương trình dự đoán (predictor
equations), trong khi đó các phương trình cập nhật theo giá trị đo lường là các phương trình
sửa sai (corrector equations).
 Quá trình dự đoán

xˆk 1|k  Fk xˆk|k  Bk uk

(1.34)

Pk 1|k  Fk Pk |k FkT  Qk

(1.35)

zˆk 1|k  H k 1 xˆk 1|k

(1.36)

yk 1  zk 1  H k 1 xˆk 1|k

(1.37)


Sk 1  H k 1Pk 1|k H kT1  Rk 1

(1.38)

Kk 1  Pk 1|k H kT1Sk11

(1.39)

xˆk 1|k 1  xˆk 1|k  Kk 1 yk 1

(1.40)

Pk 1|k 1   I  K k 1H k 1  Pk 1|k

(1.41)

 Quá trình cập nhật

1.5. Bộ lọc Kalman mở rộng
1.5.1. Quá trình dự đoán
1.5.2. Dự đoán đo lường và sự cải tiến
1.5.3. Quá trình cập nhật
1.5.4. Tổng hợp các công thức chính
 Quá trình dự đoán:

xˆk 1|k  f  xk , uk , k 

(1.55)


T

Pk 1|k

 f 
 f 
   Pk|k    Qk
 x 
 x 

(1.56)


8
 Quá trình cập nhật:

xˆk 1|k 1  xˆk 1|k  K k 1  zk 1  h  xˆk 1|k 

(1.57)

Pk 1|k 1  Pk 1|k  K k 1Sk 1K kT1

(1.58)

T

 h 
K k 1  Pk 1|k   S k11
 x 


(1.59)

T

 h 
 h 
S k 1    Pk 1|k    Rk 1
 x 
 x 

(1.60)

1.6. Bộ lọc Unscented Kalman
Nguyên tắc cơ bản của Unscented Kalman là biến đổi Unscent[3]. Về cơ bản, đây là
một phương pháp tính toán thống kê một biến ngẫu nhiên sau khi biến đổi hông tuyến tính.
Cho biến ngẫu nhiên n chiều: x k với giá trị xˆ k trung bình và ma trận hiệp phương sai Pk .
Mạch lọc Unscented Kalman mô tả trạng thái với một tập hợp tối thiểu các điểm (sigma)
mẫu được chọn lọc cẩn thận. 2L + 1 điểm sigma được chọn xung quanh ước lượng trước đó,
với L là kích thước của không gian trạng thái. Sau đó một trọng số xác suất được gán cho
những điểm sigma. Tiếp theo, các điểm sigma này biến đổi bằng cách sử dụng biến đổi
Unscent để đưa ra một ước lượng mới cho biến trạng thái. Biến trạng thái sau đó được hiệu
chỉnh bằng cách biến đổi các điểm sigma thông qua các mô hình đo lường để tính toán độ
lợi Kalman. Cuối cùng, ước lượng được hiệu chỉnh sử dụng độ lợi Kalman.

1.6.1. Quá trình dự đoán
1.6.2. Quá trình cập nhật
1.7. Kết luận chƣơng 1
Ở chương này, học viên đã trình bày một cách tổng quan các vấn đề liên quan đến
việc theo vết đối tượng nói chung, bao gồm: mô hình tổng quát của hệ thống theo vết đối
tượng, các cách thức biểu diễn đối tượng, lựa chọn các đặc trưng để theo vết và một số

nhóm phương pháp theo vết đối tượng phổ biến. Trong số các nhóm phương pháp theo vết
đối tượng, phương pháp sử dụng bộ lọc Kalman được biết đến như là một phương pháp theo
vết đơn giản và hiệu quả. Cùng với các dạng khác nhau (KF, EKF và UKF), bộ lọc Kalman
có thể được sử dụng trong cả các hệ thống đo lường có nhiễu tuyến tính cũng như nhiễu phi
tuyến.


9

CHƢƠNG 2: SỬ DỤNG BỘ LỌC KALMAN ĐỂ DỰ ĐOÁN
CHUYỂN ĐỘNG CỦA BÀN TAY
2.1. Giới thiệu chung
Quá trình theo vết bàn tay chuyển động, được thể hiện như hình 2.1, bao gồm các
bước chính là: thu nhận dữ liệu video, tiền xử lý, phát hiện bàn tay và theo vết chuyển động
bàn tay.
Tiền xử lý

Phát hiện bàn
tay

Theo vết bàn
tay
Chuỗi hình
ảnh

Dấu vết chuyển
động

Hình 2.1: Quá trình theo vết bàn tay chuyển động


2.2. Phát hiện bàn tay
2.1.1. Đặc trưng Haar-like
Phát hiện đối tượng sử dụng đặc trưng Haar-like được Paul Viola và Jones công bố
năm 2011. Hình dưới đây mô tả 4 đặc trưng Haar-like cơ bản như sau:

Hình 2.2: Các đặc trƣng Haar-like cơ bản

Để phát hiện khuôn mặt các đặc trưng Haar-like cơ bản trên được mở rộng [25][26]
thành nhóm các đặc trưng cạnh, đặc trưng đường và đặc trưng tâm như hình 2.3.
Đặc trƣng đƣờng:

Đặc trƣng cạnh:


10
Đặc trƣng trung tâm:
Hình 2.3: Các đặc trƣng Haar-like mở rộng

2.1.2. Thuật toán Adaboost
AdaBoost[29] là một bộ phân loại mạnh phi tuyến phức, hoạt động trên nguyên tắc
kết hợp tuyến tính các bộ phân loại yếu để tạo nên một bộ phân loại mạnh. AdaBoost sử
dụng trọng số để đánh dấu các mẫu khó nhận dạng. Trong quá trình huấn luyện cứ mỗi bộ
phân loại yếu được xây dựng thì thuật toán sẽ tiến hành cập nhật lại trọng số để chuẩn bị
cho việc xây dựng bộ phân loại tiếp theo. Cập nhật bằng cách tăng trọng số của các mẫu
nhận dạng sai và giảm trọng số của các mẫu được nhận dạng đúng bởi bộ phân loại yếu vừa
xây dựng. Bằng cách này thì bộ phân loại sau có thể tập trung vào các mẫu mà bộ phân loại
trước nó làm chưa tốt. Cuối cùng các bộ phân loại yếu sẽ được kết hợp lại tùy theo mức độ
tốt của chúng để tạo nên một bộ phân loại mạnh.

2.1.3. Mô hình phân tầng Cascade

Cascade of Boosted Classifiers là mô hình phân tầng với mỗi tầng là một mô hình
AdaBoost sử dụng bộ phân lớp yếu là cây quyết định với các đặc trưng Haar-Like. Mô hình
Cascade of Classifiers được xây dựng nhằm rút ngắn thời gian xử lý, giảm thiểu nhận dạng
lầm (false alarm) cho bộ phân loại.

2.1.4. Quá trình phát hiện bàn tay sử dụng đặc trưng Haar-like
Quá trình phát hiện vị trí bàn tay được thể hiện ở hình 2.6.

Hình 2.6: Quá trình phát hiện bàn tay sử dụng đặc trƣng Haar-like


11

2.3. Giải thuật Kalman với đối tƣợng là bàn tay chuyển động.
2.3.1. Mô tả hệ thống
Vector trạng thái của quá trình này tại khung hình thứ k là x k   xk , yk , xk , yk  , trong
T

đó, xk và yk lần lượt là vận tốc chuyển động của bàn tay theo phương OX và OY.

xk 1  Fxk  Buk  wk

(2.1)

zk  Hxk  vk

(2.2)

Trong đó wk  N  0, Q  và giả sử u k  0


 t 4 4
0
t 3 2
0 


4
3
0

t
4
0

t
2


Q   a2  3

0
t 2
0 
 t 2
 0
t 3 2
0
t 2 

1

0
F  
0

0

0 t
1 0
0 1
0 0

0
t 
0

1

(2.4)

(2.5)

1 0 0 0 
H  

0 1 0 0 

(2.7)

R  E vk vkT    z2 


(2.8)

2.3.2. Chu trình giải thuật
Chu trình của bộ lọc Kalman là một chu trình lặp, trong đó quá trình dự đoán và quá
trình cập nhật được lặp lại một cách tuần hoàn.
 Quá trình dự đoán
xˆk 1|k  Fxˆk|k

(2.9)

Pk 1|k  FPk|k F T  Q

(2.10)

yk 1  zk 1  Hxˆk 1|k

(2.13)

Sk 1  HPk 1|k H T  R

(2.14)

Kk 1  Pk 1|k H T ( HPk1H T  R)1  Pk 1|k H T Sk11

(2.15)

 Quá trình cập nhật


12


xˆk 1|k 1  xk 1|k  Kk 1 yk 1

(2.16)

Pk 1|k 1  ( I  Kk 1H ) Pk 1|k

(2.17)

2.4. Xây dựng chƣơng trình phần mềm theo vết bàn tay sử dụng bộ lọc Kalman.
2.4.1. Một số hàm và thư viện OpenCV được sử dụng
a) Hàm phát hiện đối tượng detectMultiSale()
b) Phân lớp cho bộ lọc Kalman trong OpenCV
2.4.2. Chương trình theo vết bàn tay sử dụng bộ lọc Kalman
Chương trình theo vết bàn tay được thiết kế theo mô hình phân lớp, trong đó gồm có
5 lớp chính, được mô tả như hình 2.8 là: HandTrackingDlg, Processor, Detector, Ctracker
và Kalman. Ở điều kiện hoạt động bình thường (người dùng không tác động vào giao diện),
chương trình theo vết bàn tay là một chu trình lặp, thực hiện như lưu đồ thuật toán hình 2.9.
Sự kiện timer hiện
tại

Đọc 1 bức ảnh mới

Lật bức ảnh

Phát hiện và tìm vết
bàn tay

Hiển thị hình ảnh


Sự kiện timer kế tiếp

Hình 2.9: Chu trình chính của chƣơng trình theo vết bàn tay


13

Phát hiện vùng bàn tay
m_cDetector->detectObject(img);

Số lượng bàn tay
m_NumOfObjects = m_cDetector->GetNumOfObjects()

m_NumOfObjects > 0

Sai
Đúng
Tính vị trí trung tâm của vùng bàn tay
m_PointCenter = m_cDetector->GetPointCenter()

Theo vết bàn tay
m_tracker->Update(m_PointCenter)

Vẽ vùng bàn tay và quỹ đạo chuyển động vào
bức ảnh

Hình 2.10: Lƣu đồ thuật toán quá trình Phát hiện và tìm vết bàn tay.

Đọc file cascade
hand_cascade.load(link)


Sai

Chưa khởi tạo bộ theo vết?
tracks.size() == 0

Đúng
Tiền xử lý bức ảnh
cvtColor(img, frame_gray, CV_BGR2GRAY);
equalizeHist(frame_gray, frame_gray);

Phát hiện bàn tay
hand_cascade.detectMultiScale()

Hands.size() > 0

Sai
Đúng

Khởi tạo
CTrack* tr = new CTrack();
tracks.push_back(tr);

Tính trạng thái dự đoán Kalman Filter
tracks[0]->KF->GetPrediction();

Cập nhật dự đoán Kalman Filter
tracks[0]->KF->Update();

Lưu thông lại thông tin bàn tay

m_lstPointCenter.push_back(PointCenter);
m_lstRectsBlob.push_back(hands[0]);

Cập nhật quỹ đạo

Hình 2.11: Lƣu đồ thuật toán phát hiện bàn

Hình 2.12: Lƣu đồ thuật toán chƣơng trình

tay

theo vết bàn tay


14

2.5. Các kết quả thực nghiệm
Trong quá trình thực nghiệm, học viên sử dụng file cascade tham khảo ở trang web
[31], cho quá trình phát hiện bàn tay. File cascade này được huấn luyện để nhận dạng được
bàn tay nắm như hình 2.13. Quá trình thực nghiệm được thực hiện trên phiên bản OpenCV
2.4.10, phần mềm Visual Studio 2013 chạy trên hệ điều hành Windows 7, 32 bít, 4G RAM.
Bắt đầu quá trình theo vết bàn tay, ta cần phát hiện bàn tay trong các khung hình
riêng lẻ sử dụng hàm
minSize,

maxSize).

detectMultiScale(image, objects, scaleFactor, minNeighbors, flags,

Tham số quan trọng ảnh


hưởng tới kết quả của việc phát hiện đó là
scaleFactor.

Để tìm ra tham số hợp lý, học viên

đã thu cố định một video, trong đó bàn tay có vị
trí và kích thước gần như cố định, sau đó thay
đổi các tham số của hàm

detectMultiScale(),

chạy chương trình và đo thời gian thực hiện hàm này và kết quả phát hiện của nó. Kết quả
thực nghiệm phát hiện bàn tay thể hiện ở bảng 2.1, trong đó kích thước cửa sổ phát hiện
được khởi tạo là 50x50 pixels, và các kết quả có được là các giá trị trung bình của 200 lần
thực hiện.
Bảng 2.1: Kết quả thực nghiệm phát hiện bàn tay
Kích thƣớc (pixels)
Chiều Chiều
Diện
rộng
cao
tích

scaleFactor

Thời gian
thực hiện
(ms)


Tỷ lệ phát
hiện thành
công

1.01

77.84

100%

146.13

146.13

21353.98

1.05

38.52

100%

146.29

146.29

21400.76

1.10


27.36

100%

145.65

145.65

21213.92

1.20

21.86

100%

148.11

148.11

21935.09

1.50

19.61

100%

182.00


182.00

33124.00

2.00

18.73

94%

192.00

192.00

36864.00

2.50

18.76

100%

150.00

150.00

22500.00

2.75


16.22

100%

182.00

182.00

33124.00

3.00

14.09

0%

0.00

0.00

0


Diện tích đối tượng

15
38000
36000
34000
32000

30000
28000
26000
24000
22000
20000
1.00

1.50

2.00
scaleFactor

2.50

3.00

Hình 2.14: Đồ thị thể hiện diện tích vùng đối tƣợng đƣợc phát hiện theo tham số
scaleFactor.

scaleFactor = 1.01

scaleFactor = 1.1

scaleFactor = 1.5

scaleFactor = 2.0

scaleFactor = 2.5


scaleFactor = 2.75

Hình 2.15: Hình ảnh thực tế vùng bàn tay đƣợc phát hiện

Như đề cập ở mục 2.2.3, phần chu trình giải thuật Kalman theo vết bàn tay, ma trận
hiệp phương sai của nhiễu đo lường R được xác định trước. R được đo offline bằng cách
cho một số giá trị đo mẫu, khảo sát và xác định sự biến đổi của nhiễu đo lường. Để khảo sát
sự ảnh hưởng của tham số nhiễu đo lường  z2 đến hiệu năng của bộ lọc Kalman, trong phần
thực nghiệm này học viên sử dụng webcam để ghi lại một video bàn tay chuyển động. Từ
video đã thu nhận được, học viên tiến hành chạy chương trình theo vết bàn tay với các tham


16
số nhiễu đo lường  z2 khác nhau, sau đó biểu diễn quỹ đạo chuyển động bàn tay trước và
sau khi sử dụng bộ lọc Kalman thành đồ thị như hình 2.16.
400
Đo lường
Dự đoán R = [0.01]
Dự đoán R = [0.1]
Dự đoán R = [0.4]
Dự đoán R = [0.8]

350

Vị trí theo trục OY

300
250
200
150

100
50
150

200

250

300
Vị trí theo trục OX

350

400

450

Hình 2.16: Khảo sát các tham số nhiễu đo lƣờng R khác nhau với  a2  0.5 .

Từ hình 2.16 ta thấy việc lựa chọn giá trị phương sai R của nhiễu đo lường vk ảnh
hưởng đến tốc độ ước lượng và tốc độ bám sát của hệ thống. Điều này có thể dễ dàng nhận
ra từ phương trình tính độ lợi Kalman K k . Ta thấy K k tỉ lệ nghịch với R, như vậy, giá trị R
lớn thì tốc độ ước lượng chậm hơn, giá trị ước lượng có vẻ ít tin tưởng hơn vào giá trị đo
được. Còn với giá trị R nhỏ hơn thì ngược lại, tốc độ ước lượng nhanh hơn, bộ lọc tin tưởng
hơn vào giá trị đo được. Quan sát trên hình 2.16, với giá trị R = [0.01] thì đường dự đoán
bám rất sát với đường quỹ đạo đo lường, kể cả tại những thời điểm vị trí thay đổi đột ngột.
Với giá trị R lớn hơn thì độ bám sát giảm đi, các đường quỹ dạo xa đường đo lường hơn, tuy
nhiên ta thấy đường quỹ đạo được ước lượng với tham số R lớn thì mịn hơn và ít chịu tác
động của nhiễu đo lường hơn. Qua đây ta thấy được, việc lựa chọn thông số R của nhiễu đo
lường là rất quan trọng, đòi hỏi chúng ta phải dung hòa giữa tốc độ bám sát và độ phẳng của

kết quả ước lượng.


17

500
400
300
200

Vị trí bàn tay theo trục OX

600

Đo lường
Dự đoán

100

Bước thời gian

0

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49

Hình 2.17: Xử lý các trƣờng hợp bất thƣờng

Trong quá trình phát hiện có một số khung hình bộ phát hiện phát hiện nhầm vị trí và
một số trường hợp bàn tay di chuyển quá nhanh làm bộ phát hiện không đáp ứng kịp gây ra
nhiễu lớn đối với quá trình theo vết. Các trường hợp này gọi chung là các trường hợp bất

thường, và ta sẽ cố gắng để loại bỏ nó trước khi đưa vào quá trình theo vết. Tại các khung
hình xảy ra sự bất thường về chuyển động, ta sẽ cập nhật sự dự đoán vị trí bàn tay sử dụng
vị trí từ khung hình trước đó, mà không cập nhật vị trí bàn tay tại khung hình hiện tại nữa.

2.6. Kết luận chƣơng 2
Ở chương 2, học viên đã trình bày chi tiết về quá trình phát hiện và theo vết cho đối
tượng bàn tay chuyển động. Trong đó trình bày chi tiết về thuật toán phát hiện đối tượng sử
dụng các đặc trưng Haar-Like kết hợp với giải thuật Adaboost để phát hiện nhanh vùng bàn
tay trong các bức ảnh riêng lẻ. Với vị trí vùng bàn tay đã phát hiện được, học viên đã xây
dựng mô hình toán học và chương trình phần mềm cho giải thuật Kalman để theo vết bàn
tay chuyển động qua các khung hình thu nhận từ webcam theo thời gian thực. .


18

CHƢƠNG 3: ỨNG DỤNG HỆ THỐNG THEO VẾT BÀN TAY ĐỂ
ĐIỀU KHIỂN THIẾT BỊ
3.1. Giới thiệu chung
3.2. Sơ đồ chức năng của hệ thống.
Mô hình hệ thống sử dụng 2 webcam, một webcam sử dụng để thu nhận dữ liệu cho
hệ thống theo vết bàn tay, webcam còn lại được gắn trên động cơ để ghi lại khung cảnh
xung quanh nơi cần giám sát.

Hình 3.1: Sơ đồ hệ thống ứng dụng theo vết bàn tay

3.3. Thiết kế hệ thống
3.3.1. Thiết kế phần cứng
Sơ đồ nguyên lý kết nối phần cứng thể hiện trên hình 3.7:

Hình 3.7: Sơ đồ kết nối phần cứng



19

3.3.2. Thiết kế phần mềm
a) Chương trình theo vết bàn tay
Chương trình được thiết kế theo mô hình phân lớp bao gồm 5 lớp như ở chương 2 là:
HandTrackingDlg, Processor, Detector, Ctracker, Kalman Filter, và bổ sung thêm lớp Serial
phục vụ cho giao tiếp UART giữa máy tính và board Arduino.

Giao diện tương tác

HandTrackingDlg

Serial

Processor

CTracker

Detector

Kalman

Hình 3.8: Mô hình phân lớp của chƣơng trình ứng dụng theo vết bàn tay

Hàm truyền vị trí qua giao tiếp UART được gọi trực tiếp từ lớp trên cùng là
HandTrackingDlg. Trong đó, lưu đồ thuật toán của đoạn chương trình chính được sửa lại từ
hình 2.9 như sau:
Sự kiện timer hiện

tại

Đọc 1 bức ảnh mới
m_cam >> frame

Lật bức ảnh
flip(frame, frame, 1)
Phát hiện và tìm vết bàn tay
m_cProcessor->progress(frame)

Số lượng bàn tay
numObject = m_cProcessor->GetNumObject();

numObject > 0

Truyền đi vị trí bàn tay qua UART

Hiển thị hình ảnh

Sự kiện timer kế tiếp

Hình 3.9: Lƣu đồ thuật toán chƣơng trình ứng dụng theo vết bàn tay


20

b) Chương trình Arduino
Board mạch Arduino cần được lập trình để có thể nhận được chuỗi bản tin vị trí mà
máy tính gửi xuống, sau đó thực hiện phân tích chuỗi bản tin để có được thông tin vị trí bàn
tay dưới dạng số.

Khởi tạo UART
Serial.begin(115200);

Khởi tạo Servo
Hori_Servo.attach(HORI_SERVO_PIN);
Vert_Servo.attach(VERT_SERVO_PIN);

Nhận được dữ liệu UART
Serial.available() > 0

Sai

Đúng
Đọc ký tự đến khi nhận được ‘\n’
Serial.readBytesUntil('\n', readBuff, INPUT_SIZE)

Phân tích để thu được giá trị số
parseMessage(readBuff, " ", u16PointBuff);

Điều khiển Servo
Hori_Servo.write(u16PointBuff[0]);
Vert_Servo.write(u16PointBuff[1]);

Hình 3.11: Lƣu đồ thuật toán chƣơng trình Arduino

3.4. Kết quả thực hiện
Trên môi trường lập trình Visual studio kết hợp với bộ thư viện MFC được tích hợp
sẵn, học viên đã xây dựng được giao diện cho chương trình hệ thống theo vết bàn tay dùng
trong việc điều khiển webcam giám sát.



21

(a) Giao diện điều khiển

(b) Giao diện giám sát

Hình 3.13: Giao diện ứng dụng theo vết bàn tay điều khiển động cơ

Sử dụng cổng COM ảo trên máy tính để “bắt” bản tin vị trí bàn tay truyền qua UART
ta nhận được kết quả như trên hình 3.14.

Hình 3.14: Sử dụng cổng COM ảo để “bắt” bản tin vị trí bàn tay

Từ bước thiết kế phần cứng, học viên đã thiết kế được mô hình thực tế của hệ thống
được thể hiện trên hình 3.15.


22

(a) Webcam 2 dùng trong giám sát được gắn với khung động cơ

(b) Kết nối với board mạch Arduino
Hình 3.15: Hình ảnh thực tế về mô hình của ứng dụng

Qua quá trình chạy thực nghiệm hệ thống điều khiển, học viên thấy rằng cơ cấu động
cơ Servo SG90 đáp ứng tốt với các chuyển động bàn tay, nghĩa là với tốc độ di chuyển của
bàn tay, mà hệ thống theo vết vẫn phát hiện được, thì động cơ cũng điều khiển webcam di
chuyển theo đúng các vị trí mà bàn tay đi qua. Trên thực tế thì tốc độ đáp ứng của động cơ
Servo còn nhanh hơn tốc độ theo vết bàn tay hiện tại, vì theo nhà sản xuất tốc độ quay của

Servo là 60 độ / 0.1giây. Học viên cũng đã thử nghiệm lập trình trên phần mềm Processing
để đọc về vị trí chuột máy tính sau đó cũng gửi vị trí đó qua UART để điều khiển Servo và
nhận thấy rằng tốc độ của Servo còn có thể đáp ứng được theo cả tốc độ điều khiển chuột
máy tính.

3.5. Kết luận chƣơng 3
Trong chương 3 học viên đã trình bày chi tiết về quá trình thiết kế hệ thống ứng dụng
theo vết bàn tay vào điều khiển động cơ Servo qua đó điều khiển webcam quay theo các
hướng khác nhau. Hệ thống sử dụng 2 webcam, trong đó một dùng để thu nhận dữ liệu cho
hệ thống theo vết bàn tay, webcam còn lại được gắn với động cơ để dùng cho mục đích
giám sát. Qua quá trình thực nghiệm học viên thấy rằng mô hình ứng dụng này có thể đáp
ứng được tính thời gian thực và có thể thực hiện trong nhiều điều kiện khác nhau về môi
trường chiếu sáng cũng như trong điều kiện bức ảnh nền thay đổi.


23

KẾT LUẬN VÀ KHUYẾN NGHỊ
Sau thời gian gần 6 tháng nghiên cứu với sự nỗ lực của bản thân và sự hướng dẫn tận
tình của thầy TS.Nguyễn Ngọc Minh, em đã hoàn thành luận văn “Dự đoán chuyển động
của bàn tay sử dụng bộ lọc Kalman” theo như các nội dung và yêu cầu đặt ra trong bản đề
cương đã được duyệt.
Kết quả, luận văn đã đạt được những nội dung cụ thể như sau:
- Trình bày một cách tổng quan các vấn đề liên quan đến theo vết đối tượng chuyển
động trong lĩnh vực thị giác máy tính, bao gồm: mô hình tổng quát của hệ thống theo vết đối
tượng, các cách biểu diễn đối tượng, lựa chọn các đặc trưng để theo vết, các phương pháp
phát hiện đối tượng và một số nhóm phương pháp theo vết đối tượng phổ biến. Theo vết đối
tượng là một vấn đề phức tạp bao gồm nhiều quá trình bắt đầu từ thu nhận hình ảnh, tiền xử
lý, phát hiện đối tượng và cuối cùng là theo vết đối tượng. Ở mỗi giai đoạn thì lại có nhiều
phương pháp khác nhau để thực hiện, và tùy vào từng kịch bản và ứng dụng mà người thiết

kế sẽ quyết định để lựa chọn ra phương pháp phù hợp nhất. Ví dụ trong hệ thống giám sát
có camera cố định và biết trước mô hình nền, thì có thể sử dụng phương pháp trừ nền để
phát hiện nhanh vùng đối tượng chuyển động qua các bức ảnh; còn trong trường hợp camera
chuyển động và đối tượng có hình dạng và vẻ bề ngoài ít thay đổi trong quá trình theo vết
thì nên sử dụng thuật toán máy học như: AdaBoost, mạng neural, cây quyết định, support
vector machines, … để phát hiện đối tượng và sử dụng giải thuật dự đoán như bộ lọc
Kalman hay Patical để chính xác hóa dấu vết chuyển động của đối tượng.
- Trình bày được mô hình toán học, nguồn gốc và các biến thể của bộ lọc Kalman.
Đây là một phương pháp hiệu quả để ước lượng các trạng thái, trong đó dự đoán trạng thái
của đối tượng bằng mô hình trạng thái và ước lượng hàm mật độ xác suất hậu nghiệm bằng
mô hình quan sát. Bộ lọc Kalman tiêu chuẩn có thể đạt được giải pháp tối ưu với bình
phương lỗi là tối thiểu khi mô hình hệ thống đáp ứng điều kiện tuyến tính và phân bố Gauss.
Trong điều kiện mô hình hệ thống theo vết là phi tuyến thì bộ lọc Kalman tiêu chuẩn không
thực hiện tốt nữa, khi đó ta có thể nghiên cứu để sử dụng bộ lọc Kalman ở rộng hay bộ lọc
UKF, đây là hai biến thể của bộ lọc Kalman.
- Từ lý thuyết về phát hiện đối tượng và lý thuyết về bộ lọc Kalman, trong chương 2
của luận văn, học viên đã đề xuất sử dụng các đặc trưng Haar-like kết hợp với thuật toán
AdaBoost cho phần phát hiện bàn tay, sau đó xây dựng được mô hình toán học của bộ lọc
Kalman để theo vết vùng bàn tay chuyển động qua các khung hình video.


×