Tải bản đầy đủ (.doc) (24 trang)

Điều khiển bám cho robot di động đa hướng dùng bộ điều khiển trượt

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.1 MB, 24 trang )

28
CHƯƠNG 2
CƠ SỞ LÝ THUYẾT
2.1

Giới thiệu phương pháp Lyapunov
Phương pháp Lyapunov cung cấp đủ điều kiện đủ để đánh giá tính ổn định của

hệ phi tuyến. Có thể áp dụng cho hệ phi tuyến bậc cao bất kỳ. Ngoài ra, có thể dùng
phương pháp Lyapunov để thiết kế các bộ điều khiển phi tuyến. Hiện nay phương
pháp Lyapunov là phương pháp được sử dụng rộng rãi nhất để phân tích và thiết kế
hệ phi tuyến.
2.2 Định lý ổn định thứ 2 của Lyapunov
Định lý ổn định thứ hai của Lyapunov ngày nay được sử dụng khá rộng rãi trong
lĩnh vực điều khiển tự động.
Định lý của Lyapunov dựa vào năng lượng, nếu năng lượng hệ thống cứ tiêu tán
mãi thì sau một thời gian hệ thống phải đứng yên ở điểm cân bằng. Như vậy khi
khảo sát sự ổn định của một hệ thống ta đi tìm một hàm vô hướng dương biểu thị
năng lượng và xét xem hàm này tăng hay giảm theo thời gian.
* Phát biểu định lý:
Xét hệ thống được mô tả bởi phương trình trạng thái:

X&= f ( X 1 ,X 2 ,.....,X n )

(2.1)

& X ) với mọi biến trạng thái ( X , X ,....., X n ) làm
Nếu tìm được một hàm V(
1 2
một hàm xác định dương sao cho đạo hàm của nó theo thời gian


X&= f ( X , X ,.....,X n ) dV( x ) là một hàm xác định âm thì hệ thống sẽ ổn định. Lúc
1 2
dt
này V(x) được gọi là hàm Lyapunov.

& X ) <0 : Hệ thống ổn định tiệm cận
* Khi V(x). V(
& X ) = 0 : Biên giới ổn định
* Khi V(x). V(
& X ) >0 : Hệ thống không ổn định
* Khi V(x). V(


29

Hình 2.1 Minh họa hàm Lyapunov
Ví dụ : Xét hệ lò xo ống nhúng có phương trình động lực học

&+ bx&&
mx&
x + k 0 x + k1 x 3 = 0

Hình 2.2 Ví dụ minh họa đinh lý Lyapunov
Cơ năng của hệ bao gồm động năng của vật khối lượng m và thế năng của lò xo:
V( x ) =

1

1
1

1
x
mx 2 + ∫0 ( k x + k x3 )dx = k x 2 + mx 2 + k x 4
0
1
2
2 0
2
4 1

(2.2)

Nhận thấy năng lượng V là một hàm xác định dương và bằng 0 ứng với điểm
cân bằng.
Đạo hàm của năng lượng theo thời gian:
&&
&+ ( k x + k x 3 )x&= −b x&3
V&( x ) = mxx
0
1

(2.3)


30
Đạo hàm của năng lượng là số âm nên năng lượng giảm liên tục đến khi x
giảm về 0 (hệ thống cân bằng ).
2.3 Lý thuyết điều khiển trượt
2.3.1


Giới thiệu chung
Phương pháp điều khiển trượt được công nhận là một trong những công cụ hiệu

quả để thiết kế bộ điều khiển mạnh mẽ cho đối tượng có phương trình động lực học
phi tuyến bậc cao phức tạp trong điều kiện không chắc chắn. Các nghiên cứu trong
lĩnh vực này đã được bắt đầu ở Liên Xô cũ khoảng năm 1950, và sau đó phương pháp
điều khiển trượt đã được sự chú ý ngày càng nhiều từ hiệp hội điều khiển quốc tế. Ưu
điểm chính của chế độ trượt là có độ nhạy thấp với sự biến đổi tham số của đối tượng
điều khiển và nhiễu bên ngoài mà nó giúp loại trừ sự cần thiết của mô hình chính xác.
Điều khiển trượt cho phép tách riêng chuyển động của toàn bộ hệ thống thành các
thành phần độc lập có kích thước thấp hơn và kết quả là làm giảm sự phức tạp của
phản hồi.
Điều khiển trượt đã trở thành loại điều khiển cơ bản trong hệ thống điều khiển
cấu trúc biến đổi (được gọi là VSC). VSC bao gồm một tập hợp các hệ thống con liên
tục với một logic chuyển mạch thích hợp và kết quả là những hoạt động điều khiển
là các hàm không liên tục của trạng thái hệ thống, các loại nhiễu và các ngõ vào tham
chiếu. (control systems, robotics and automation – Vol. XIII - Sliding Mode Control Vadim Utkin)
VSC là một kỹ thuật điều khiển phi tuyến mạnh mẽ kết hợp và khai thác các
tính năng hữu ích của các cấu trúc điều khiển khác nhau để cung cấp hiệu năng và
các thuộc tính mới mà không có bất kỳ các cấu trúc riêng lẽ nào tự chúng có thể thực
hiện được. Lý thuyết VSC đã cung cấp phương tiện hiệu quả để thiết kế bộ điều
khiển phản hồi trạng thái mạnh mẽ cho hệ thống động lực học không chắc chắn, điểm
đặc biệt quyết định củaVSC là kiểu trượt trên mặt chuyển đổi mà trong mặt này hệ
thống vẫn không nhạy cảm với các biến đổi của tham số bên trong và nhiễu bên
ngoài (Utkin, 1977; DeCarlo, et. al. 1988; Hung, et. al 1993)


31
Hay nói cách khác điều khiển trượt là một loại đặc biệt của VSC được đặc
trưng bởi một hệ luật điều khiển phản hồi và một quy tắc quyết định được gọi là hàm

chuyển đổi.

.
Hình 2.3 Các hệ thống có điều khiển trượt
(Robust Integral Sliding Mode Control of an Aerospace Launch Vehicle - M.
Bahrami, J. Roshanian, B. Ebrahimi)
Điều khiển trượt có hai chế độ liên tục với nhau (Utkin năm 1977, Utkin 1992).
Đầu tiên là chế độ tiếp cận hay chế độ mà quỹ đạo pha tiếp cận mặt trượt và thứ hai
là chế độ trượt có nghĩa là quỹ đạo pha sẽ trượt trên mặt trượt đến đích, điều này thể
hiện rõ trong hình 2.4

Hình 2.4 Hình chiếu quỹ đạo pha
Điều kiện trượt Lyapunov sẽ ép các trạng thái hệ thống đi đến một mặt trượt và
giữ cho chúng trượt trên mặt này, vì vậy một thiết kế SMC là bao gồm 2 giai đoạn,
thiết kế mặt trượt và thiết kế luật điều khiển. Trong chế độ tiếp cận, động lực học
điều khiển phụ thuộc vào các thông số hệ thống, nhưng trong chế độ trượt thì chỉ phụ
thuộc vào mặt trượt, đây là thuộc tính bất biến của chế độ trượt.


32
Như vậy đặc tính mạnh mẽ của điều khiển trượt truyền thống đối với các biến
đổi của tham số bên trong và nhiễu bên ngoài chỉ có thể đạt được sau khi xuất hiện
chế độ trượt và ở chế độ tiếp cận thì không được đảm bảo điều này. Chế độ trượt tích
phân sẽ loại trừ pha tiếp cận bằng cách ép cho xuất hiện kiểu trượt trong toàn bộ đáp
ứng hệ thống.
2.3.2 Thiết kế bộ điều khiển trượt
Xét hệ thống động học phi tuyến biểu diễn bởi phương trình vi phân sau:
(n)
x
= f ( x ) + b( x ).u


(2.4)

y=x
Trong đó :
x = [ x x& ... x ( n −1 ) ] T là vectơ trạng thái
f ( x ) : hàm chưa biết, nhưng bị chặn bởi hàm phi tuyến,
b( x ) : độ lợi điều khiển.
u : là tín hiệu điều khiển
y : là tín hiệu ra
n : là bậc của hệ thống
Các hàm f = f ( X ),g = g( X ) là các hàm phi tuyến. Gọi X d là tín hiệu đặt, giả thiết
X

d có đạo hàm theo t đến cấp n.

Định nghĩa:

 xd 
 (1) 
 x

X = d

d
 ... 
 x ( n−1 ) 
 d



(2.5)


33
x−x

  e 
d
 (1)
(1)   (1) 
 x − xd
  e
E=X−X =
 =  ... 
d
...


 x( n−1 ) − x ( n−1 )  e( n−1 ) 


d

(2.6)

Mục tiêu điều khiển là xác định luật điều khiển u sao cho sai lệch
tiến tới
E
không khi t → ∞ .
Định nghĩa hàm trượt:


S = f(x)

(2.7)

f ( x ) : hàm chưa biết, nhưng bị chặn bởi hàm phi tuyến .
Trong không gian n chiều phương trình S = 0 xác định mặt cong gọi là mặt
trượt (sliding surface). Sử dụng phương pháp Lyapunov, chọn một hàm xác định
dương V , thông thường chọn V có dạng:

1
V = STS
2

(2.8)

Tính đạo hàm bậc nhất của V , ta được :

V&= STS&

(2.9)

Từ phương trình V&= STS&, ta tìm chọn được luật điều khiển u nào đó và với
luật điều khiển u này ta chứng minh được V&≤ 0 khi đó theo định lý ổn định thứ hai
của Lyapunov thì các biến của hàm V tức mặt trượt S sẽ tiến về 0 khi t → ∞ . Điều
này đồng nghĩa với các sai lệch E cũng tiến về 0 khi t → ∞ . Hay nói cách khác các
quỹ đạo pha X của hệ thống được tiếp cận mặt trượt S và bên trên mặt trượt, quỹ
đạo pha X bám theo tín hiệu đặt X d một cách tiệm cận. (Hình 2.5) biểu diễn quá
trình tiếp cận của các quỹ đạo pha và quá trình trượt của chúng đến điểm cân bằng.



34
Hình 2.5 Biểu diễn hình chiếu của quỹ đạo pha
Hiện tượng chattering: Điều khiển trượt lý tưởng đòi hỏi luật điều khiển phải
thay đổi tức thời ngay tại thời điểm quỹ đạo pha của hệ thống vừa chạm vào mặt
trượt để đảm bảo khi S = 0 thì S&= 0 . Trong thực tế điều này không thể thực hiện
được do thời gian trễ hay quán tính của khâu chấp hành. Kết quả là quỹ đạo pha tiếp
tục vượt qua khỏi mặt trượt sau khi chạm vào nó và gây hiện tượng quỹ đạo pha dao
động quanh mặt trượt. Hiện tượng này được gọi là hiện tượng chattering và được
biểu diễn như trong (Hình 2.6). Do trong quá trình thiết kế người ta có sử dụng hàm
dấu sign( S ) để giúp cho V&≤ 0 . Để khắc phục hiện tượng trên người ta thay thế bằng
hàm sat( S )

Hình 2.6 Hiện tượng dao động (chattering)
2.4 CƠ BẢN VỀ XỬ LÝ ẢNH SỐ :
2.4.1 Giới thiệu về hệ thống xử lý ảnh :
Xử lý ảnh là một lĩnh vực mang tính khoa học và công nghệ. Nó là một ngành
khoa học mới mẻ so với các ngành khoa học khác nhưng tốc độ phát triển của nó rất
nhanh, kích thích các trung tâm nghiên cứu ứng dụng, đặc biệt là máy tính chuyên
dụng cho nó.
Xét các bước trong hệ thống xử lý ảnh số. Đầu tiên ảnh từ thế giới bên ngoài
được thu nhận qua các thiết bị thu ảnh như camera, máy chụp ảnh. Trước đây ảnh thu
được qua camera là ảnh tương tự nhưng gần đây với sự phát triển của công nghệ, ảnh
màu hay ảnh đen trắng lấy được từ camera sau đó được chuyển trực tiếp thành ảnh số
tạo thuận lợi cho xử lý tiếp theo. Mặt khác ảnh có thể thu được từ vệ tinh hoặc máy
quét ảnh. Hình dưới đây mô tả các bước quan trọng trong xử lý ảnh :


35


Hình 2.7 Các bước cơ bản trong xử lý ảnh
Sơ đồ này bao gồm các phần sau :
a) Phần thu nhận ảnh ( Image Acquisition)
Ảnh có thể được nhận qua camera màu hay đen trắng. Thường ảnh nhận được
qua camera là ảnh tương tự ( loại camera ống chuẩn CCIR với tần số 1/25, mỗi ảnh
25 dòng) hay camera đã số hóa ( như lọai CCD, Change Couple Device) là loại
photodiode tạo cường độ sáng tại mỗi điểm ảnh.
Camera thường là loại quét dòng ; ảnh tạo ra là ảnh hai chiều. Chất lượng của
ảnh phụ thuộc vào chất lượng thiết bị thu và môi trường.
b) Tiền xử lý (Image Pre-processing)
Sau bộ thu nhận ảnh có thể bị nhiễu hoặc có độ tương phản thấp nên cần đưa
vào bộ tiền xử lý để nâng cao chất lượng. Chức năng của bộ tiền xử lý là lọc nhiễu,
nâng cao độ tương phản,…
c) Phân đoạn (Segmentation) hay phân vùng ảnh
Phân vùng ảnh là tách một ảnh đầu vào thành các vùng thành phần để biểu
diễn phân tích, nhận dạng ảnh, ví dụ như khoanh vùng khuôn mặt để nhận dạng,
khoanh vùng mã vạch để đọc code. Đây là phần phức tạp và khó khăn nhất trong xử
lý ảnh và cũng dễ gây lỗi làm mất độ chính xác của ảnh.
d) Biểu diễn ảnh :
Đầu ra ảnh sau khi phân đoạn chứa các điểm ảnh ( ảnh đã phân đoạn ) cộng
với mã liên kết các vùng lân cận. Việc biến đổi các số liệu này thành dạng thích hợp
là cần thiết cho các xử lý tiếp theo bằng máy tính. Việc chọn các tính chất để thể hiện
ảnh gọi là trích chọn đặc trưng (Feature Selection) gắn với việc tách đặc tính của ảnh
dưới dạng các thông tin định lượng hoặc làm cơ sở để phân biệt lớp đối tượng này


36
với lớp đối tượng khác trong phạm vi ảnh nhận được. Ví dụ trong nhận dạng chữ viết
trên bì thư, ta phân biệt đặc trưng của kí tự này so với kí tự khác.
e) Nhận dạng và giải thích ảnh ( Image Recognition and Interpretation)

Nhận dạng ảnh là quá trình xác định ảnh. Quá trình được thực hiện nhờ so
sánh với mẫu chuẩn đã được học hoặc lưu từ trước. Giải thích là phán đoán theo ý
nghĩa trên cơ sở nhận dạng. Ví dụ một loạt chữ số và nét gạch ngang trên bì thư có
thể phán đoán là mã điện thoại. Theo lý thuyết về nhận dạng, các mô hình toán học
về ảnh được phân loại theo hai loại nhận dạng ảnh cơ bản:


Nhận dạng theo tham số



Nhận dạng theo cấu trúc

Một số đối tượng nhận dạng ảnh khá phổ biến hiện nay là nhận dạng kí tự
( chữ in, chữ viết tay, chữ kí điện tử), nhận dạng vân tay, nhận dạng mã vạch, nhận
dạng mặt người.
f) Cơ sở tri thức
Như đã nói ở trên, ảnh là một đối tượng khá phức tạp về đường nét, độ sáng
tối, dung lượng điểm ảnh, môi trường để thu ảnh phong phú kéo theo nhiễu. Trong
nhiều khâu xử lý và phân tích ảnh, ngòai việc đơn giản hóa các phương pháp toán
học đảm bảo cho việc xử lý, người ta mong muốn bắt chước quy trình tiếp nhận và
xử lý ảnh theo cách của con người. Vì vậy ở đây các cơ sở tri thức được phát huy.
2.4.2 Các khái niệm cơ bản xử lý ảnh


Phần tử ảnh:
Ảnh trong thực tế là một ảnh liên tục về không gian và giá trị độ sáng. Để có

thể xử lý bằng máy tính cần thiết phải đưa về dạng ảnh số. Trong quá trình số hóa,
người ta biến đổi tín hiệu liên tục sang tín hiệu rời rạc thông qua quá trình lấy mẫu

( rời rạc hóa không gian) và lượng tử hóa thành phần giá trị ( rời rạc hóa biên độ giá
trị) mà về nguyên tắc mắt thường không phân biệt được hai điểm kề nhau. Trong quá
trình này người ta sử dụng một khái niệm là Picture Element mà ta quen gọi là pixel.
Pixel là một điểm trên dữ liệu ảnh, các pixel được sắp xếp thành một mảng 2
chiều và được biểu diễn bằng các chấm hay ô vuông. Mỗi pixel là một kết quả lấy
mẫu của ảnh gốc, và càng nhiều mẫu thì việc biểu diễn ảnh càng chính xác hơn. Giá
trị của của mỗi pixel bao gồm tọa độ và giá trị màu sắc tùy vào ảnh nhị phân, ảnh
xám hay ảnh màu.


37

Hình 2.8 Biểu diễn ảnh bằng pixel trong ảnh đơn sắc, nửa bên trái là
dữ liệu ảnh, nửa bên phải là phần ảnh hiển thị, mỗi pixel biểu diễn
bằng 1 bit


Độ phân giải ảnh :
Độ phân giải ảnh ( resolution) là mật độ điểm ảnh ấn định trên một ảnh số được

hiển thị. Theo định nghĩa, khoảng cách giữa các điểm ảnh phải được chọn sao cho
mắt người vẫn thấy được sự liên tục của ảnh.
Ví dụ độ phân giải ảnh trên màn hình CGA ( Color Graphic Adapter) là một lưới
điểm theo chiều ngang màn hình: 320 điểm chiều dọc * 200 điểm ảnh (320x200) . Rõ
ràng cùng một độ phân giải thì màn hình 12’’ ta nhận thấy mịn hơn màn hình 17’’. Lý
do là cùng một mật độ ( độ phân giải ) thì diện tích màn hình rộng hơn thì độ mịn
( liên tục các điểm kém hơn).


Ảnh xám và ảnh màu :

Mức xám của ảnh số hay ảnh xám là trong đó giá trị của mỗi pixel là một giá

trị đơn, chỉ mang một thông tin về cường độ. Ảnh xám còn được gọi là ảnh trắng đen
với giá trị biến thiên từ đen với cường độ yếu nhất đến trắng với cường độ cao nhất.
Ảnh xám khác với ảnh trắng đen một bit với chỉ hai giá trị trắng và đen, trong khi ảnh
xám có các giá trị trung gian giữa trắng và đen.
Ảnh xám thu được từ việc đo cường độ ánh sáng mỗi pixel tại một tần số nhất
định trong dãy quang phổ ánh sáng, do đó nó được gọi là ảnh đơn sắc..
Ảnh xám được mã hóa bởi n bit sẽ có là 2 n mức, đi từ đen (mức 0) tới trắng
(mức 2n – 1). Các mức từ 1 đến 2n – 2 biểu diễn các sắc độ xám khác nhau.


38

Hình 2.9 Thang màu xám
Ảnh màu là ảnh mà mỗi pixel chứa 3 kênh màu: Đỏ (Red), Lục (Green) và
Lam (Blue) (hay còn gọi là hệ màu RGB). Cũng như ảnh xám, mỗi kênh màu trong
ảnh màu có thể được mã hoá n bit cho mỗi kênh. Như vậy 1 pixel sẽ được mã hoá bởi
3*n bit. Do đó dung lượng ảnh màu sẽ lớn hơn 3 lần so với ảnh xám có cùng mức mã
hoá.

Hình 2.10 Ví dụ về việc chia ảnh màu RBG thành các kênh màu và ảnh xám tương
đương của mỗi kênh màu.


Mẫu dương và mẫu âm :
Mẫu dương là những hình ảnh chứa đối tượng cần được xác định. Mẫu âm là

những hình ảnh không chứa đối tượng cần được xác định.



39

Hình 2.11 Một số mẫu dương dùng trong việc phát hiện khuôn mặt

Hình 2.12 Một số mẫu âm dùng trong việc phát hiện khuôn mặt


Histogram và cân bằng histogram :
Histogram là một xấp xỉ rời rạc của hàm phân phối xác suất biến ngẫu nhiên.

Trong ảnh xám, histogram là sự tính toán số pixel có cùng một giá trị trên gray-scale,
tức là tìm ra sự phân bố mức xám trong ảnh. Quá trình tính toán như sau:


Đối với một ảnh B bit, khởi động 2 B counter với giá trị 0



Quét qua tất cả cácpixel (x,y)



Khi f(x,y) = I, tăng giá trị cho counter thứ i

Việc cân bằng histogram là để tăng độ tương phản của ảnh số, thường nằm ở khâu
tiền xử lý, giúp cho các thuật toán có thể dễ dàng nhận diện các đặc tính có trong ảnh
như nhận dạng khuôn mặt, phát hiện biên,… Việc này rất hữu ích khi mà phần đối
tượng ( foreground) và phần nền ( background) cùng sáng hoặc cùng tối. Tuy nhiên
việc cân bằng histogram có thể gây nên những hiệu ứng không mong muốn, đôi khi



40
nó có thể tăng độ phân giải phần tín hiệu nhiễu và làm giảm phần đối tượng trong
ảnh.
Phương pháp cân bằng histogram có đưa ra một khái niệm hàm phân phối tích lũy
( cumulative distribution function) , giá trị hàm này tại mỗi này tại mỗi giá trị mức
xám bằng tổng các pixel có mức xám nhỏ hơn hoặc bằng giá trị đó. Để ý là sau khi
cân bằng thì phân phối tích lũy có dạng tuyến tính.

Hình 2.13 Ảnh trước và sau khi cân bằng histogram. Đường thẳng trong
đồ thị histogram là hàm tích lũy.
2.5 NHẬN DẠNG KHUÔN MẶT VỚI THUẬT TOÁN ADABOOST
Mục tiêu của quá trình nhận dạng là phân loại phân loại ảnh nhận được dựa trên
giá trị của các thuộc tính đơn giản. Có nhiều lý do để đưa đến việc dùng các thuộc
tính thay cho phân tích trên các pixel, lý do chính đó là các thuộc tính có thể được
dùng để mã hóa thành dạng kiến thức học mà nếu thực hiện dựa trên pixel sẽ chậm
hơn rất nhiều. Paul Viola và Michael Johns đã trình bày một phương pháp phát hiện
khuôn mặt bằng cách áp dụng chuỗi phân loại với thuật toán Adaboost trong bài báo
"Rapid Object Detection using a Boosted Cascade of Simple Features " [4].


41

Hình 2.14 Dạng thuộc tính Haar-like được dùng trong quá trình phát hiện khuôn
mặt : thuộc tính 2 hình chữ nhật ở hình A và B có tác dụng với cạnh, 3 hình chữ nhật
ở hình C có tác dụng với đường và 4 hình chữ nhật ở hình C có tác dụng với đường
chéo
Các thuộc tính đơn giản được sử dụng gợi nhớ đến các hàm cơ bản của Haar. Chi
tiết hơn chúng ta sử dụng 3 dạng thuộc tính như trên hình 5.8 . Giá trị của thuộc tính

2 hình chữ nhật là hiệu của tổng các pixel trong phần xám và các pixel trong phần
trắng. Hai hình chữ nhật này có thể nằm theo chiều dọc hoặc ngang nhưng với cùng
kích thước. Thuộc tính 3 hình chữ nhật tính tổng 2 phần ngoài rồi trừ cho tổng phần
trong. Cuối cùng, thuộc tính 4 hình chữ nhật tính hiệu của tổng 2 cặp hình chữ nhật
theo đường chéo.
Giả sử rằng độ phân giải cơ bản của bộ phát hiện là 24x24, một bộ thuộc tính đầy
đủ thì khá lớn, trên 180000 thuộc tính. Khác với cơ sở Haar, một tập các thuộc tính
như vậy là “quá đầy đủ” vì lý do: một tập cơ sở không có sự phụ thuộc tuyến tính
giữa các phần tử như hình ảnh cần xử lý sẽ có số phần tử tương ứng với số pixel là
576, quá nhỏ so với tập các thuộc tính !
2.5.1 Ảnh tích phân ( Integral Image):
Các thuộc tính hình chữ nhật có thể được tính tóan rất nhanh sử dụng cách biểu
diễn trung gian gọi là ảnh tích phân cho đối tượng ảnh. Ảnh tích phân tại vị trí (x,y)
chứa đựng tổng các pixel ở trên và bên trái của (x,y) cụ thể là:
ii ( x, y ) =



i ( x ', y ')

x '< x , y '< y

Với ii(x,y) là ảnh tích phân và i(x,y) là ảnh gốc. Sử dụng công thức lặp sau :
s ( x, y ) = s ( x, y − 1) + i ( x, y )
ii ( x, y ) = ii ( x − 1, y ) + s ( x, y )


42
Với s(x,y) là tổng tích lũy hàng, s(x,-1) = 0, và ii(-1,y) = 0, ảnh tích phân có thể
được tính khi quét qua ảnh gốc chỉ một lần.


Hình 2.15 Thuật toán tính ảnh tích phân: sau khi tính toán pixel tại vị trí 1 bằng
tổng các pixel trên và bên trái trong ảnh gốc tức A, giá trị tại vị trí 2 là A+B, vị trí 3
là A+C, vị trí 4 là A+B+C+D. Tổng các pixel trong D là : ( 4+1)-(2+3)
Với ảnh tích phân thì tổng của hình chữ nhật bất kì đều có thể tính dựa vào giá trị
ở 4 đỉnh. Hiệu giữa các tổng hình chữ nhật có thể được tính dựa trên 6 giá trị đỉnh
trong trường hợp thuộc tính 2 hình chữ nhật kề, 8 cho trường hợp 3 hình chữ nhật và
9 cho trường hợp 4 hình chữ nhật.
Các thuộc tính hình chữ nhật thì còn sơ khai nếu so với các phương pháp khác,
khi mà việc phát hiện biên và các thuộc tính cơ bản của ảnh số còn hạn chế. Tuy
nhiên, tập hợp các thuộc tính hình chữ nhật cung cấp một tập dữ liệu dồi dào cho việc
học hiệu quả. Khi kết hợp với ảnh tích phân, hiệu quả của tập các thuộc tính hình chữ
nhật sẽ bù lại phần nào mặt hạn chế của nó.
2.5.2 Các hàm học phân loại
Với một tập thuộc tính và một tập huấn luyện các ảnh dương và ảnh âm thì bất cứ
phương pháp học máy nào cũng có thể dùng để phân lọai. Trong hệ thống này, một
biến thể của AdaBoost được dùng để chọn một tập nhỏ các thuộc tính cũng như để
huấn luyện bộ phân loại. Trong dạng nguyên thủy, thuật toán AdaBoost dùng để tăng
tốc độ quá trình phân loại trên một thuật toán học đơn giản (nhiều khi còn yếu). Như
phần trên đã nói, chúng ta có 18000 thuộc tính cho một khung hình cần nhận dạng,
lớn hơn nhiều số pixel. Mặc dù mỗi thuộc tính được tính rất nhanh, để tính tóan hết


43
tập thuộc tính đó cũng là một vấn đề. Giả thuyết đặt ra là: chỉ một số lượng rất nhỏ
các thuộc tính được đưa vào bộ phân loại, việc cần làm là tìm ra các thuộc tính này.
Để hỗ trợ việc này, một thuật toán học đơn giản được thiết kế để lựa chọn 1 thuộc
tính hình chữ nhật phân lọai tốt nhất ảnh dương và ảnh âm. Với mỗi thuộc tính, thuật
tóan này tìm ra hàm phân lọai ngưỡng tối ưu nhất. Một bộ phân lọai h j ( x) bao gồm
một thuộc tính f j ( x) , một ngưỡng θ j ( x) và một phân cực p j chỉ ra hướng của dấu

bất đẳng thức :

1
h j ( x) = 
0

if
if

p j f j ( x ) < p jθ j
otherwise

Ở đây x là khung ảnh phụ 24x24 của một ảnh. Dưới đây là quá trình cụ thể của
thuật toán AdadBoost cho việc học phân loại, mỗi vòng boosting lựa chọn một thuộc
tính từ 18000 thuộc tính:


Cho một tập vào ra ( xi , yi ) với yi = 0,1 cho ngõ ra ảnh âm hay ảnh
dương



Khởi tạo các trọng số : w1,i =

1 1
, với yi = 0,1 và m, l là số mẫu âm
2m 1l

và dương.



Cho t = 1,..., T
1. Chuẩn hóa các trọng số:

wt ,i ¬

wt ,i
n

∑w
j =1

t, j

do đó

wt ,i

là phân bố xác suất

2. Đối với từng thuộc tính j, huấn luyện bộ phân loại h j giới hạn theo một
thuộc tính. Sai số được tính ứng với trọng số wt :

E j = ∑i wi h j ( xi ) − yi
3. Chọn bộ phân lọai ht với sai số ít nhất.


44
4. Cập nhật trọng số:


wt +1,i = wt ,i βt1−ei
trong đó ei = 0 nếu xi được phân loại đúng, e1 = 1 nếu ngược lại và

et
βt =
1 −et
Bộ phân lọai cuối cùng là :


1
h( x ) = 
0



T
t =1

αt ht ( x ) ≥

1
1 T
αt với αt = log

t =1
βt
2

Trên thực tế, không một thuộc tính đơn lẻ nào được phân lọai với sai số thấp.
Thuộc tính được lưa chọn trong những vòng đầu thuật tóan cho sai số trong khỏang

0.1-0.3. Thuộc tính được chọn trong những vòng sau, khi công việc trở nên khó hơn,
cho sai số trong khoảng 0.4-0.5 .
Đối với mục đích nhận dạng khuôn mặt người, những thuộc tính hình chữ nhật
đầu tiên được thuật toán AdaBoost chọn phải thật rõ ràng và dễ để nhận thấy. Thuộc
tính đầu tiên được chọn phản ánh tính chất vùng mắt thường tối hơn vùng mũi và
vùng má. Kích thước để nhận biết thuộc tính này tương đối lớn so với khung ảnh phụ
và không nên phụ thuộc vào kích thước và vị trí của khuôn mặt. Thuộc tính thứ hai
dựa trên tính chất vùng mắt thường tối hơn vùng sống mũi.

Hình 2.16 Hai thuộc tính đầu tiên được lựa chọn trong thuật toán AdaBoost
2.5.3 Chuỗi phân loại tập trung (Attentional Cascade)
Phần này mô tả thuật toán để xây dựng một chuỗi các bộ phân loại nhằm tăng
hiệu quả phát hiện đồng thời giảm triệt để thời gian tính toán. Chìa khóa của vấn đề
là một bộ phân loại kích thước nhỏ nhưng hiệu quả có thể được xây dựng qua việc


45
loại bỏ các khung hình phụ âm (negative sub-window) trong khi tìm kiếm trong tất cả
các trường hợp dương ( chẳng hạn điều chỉnh ngưỡng của bộ phân loại để các trường
hợp bị phát hiện nhầm là âm giảm về không). Các bộ phân loại đơn giản thì được sử
dụng trước tiên để loại bỏ phần lớn các khung hình phụ trước khi các bộ phân lọai
phức tạp được gọi.
Toàn bộ quá trình phát hiện có thể được mô tả bằng một cây quyết định suy giảm
dần mà ta gọi là chuỗi phân loại (cascade). Một kết quả dương của bộ phân loại
trước sẽ kích họat việc đánh giá của bộ phân loại sau, và kết quả dương của bộ phân
loại này lại kích hoạt bộ phân loại sau nữa,…Bất cứ kết quả âm của tầng phân loại
nào cũng sẽ loại bỏ khung hình phụ đó.
Ví dụ như tầng đầu tiên đạt hiệu quả cao được xây dựng từ bộ phân loại hai thuộc
tính ‘mạnh’ bằng cách giảm ngưỡng để hạn chế mẫu bị nhầm là âm. Việc tính toán
của tầng này sẽ tốn mất 60 lệnh vi xử lý, do đó khó có thể tìm ra một bộ lọc đơn giản

nào cho hiệu suất hơn.

Hình 2.17 Sơ đồ của chuỗi phát hiện (Detection Cascade)
Cấu trúc của chuỗi phát hiện phản ánh một điều là trong một ảnh đơn bất kỳ, một
lượng lớn các khung hình phụ sẽ là âm. Do đó, chuỗi phát hiện cố gắng lọai bỏ càng
nhiều khung hình âm ở những tầng đầu tiên càng tốt.
Do có hình dạng cây quyết định, các bộ phân loại sau sẽ được huấn luyện trên các
mẫu được thông qua ở tất cả các tầng trước. Kết quả là, công việc của tầng sau sẽ khó
hơn ở tầng trước. Do các mẫu được đưa đến các tầng sau thường khó nhận dạng hơn
các mẫu đển hình nên ở các tầng này tỉ lệ nhận dạng nhầm là sai cao hơn.


46
2.5.4 Huấn luyện một chuỗi phát hiện
Quá trình huấn luyện chuỗi phát hiện liên quan đến việc dung hòa hai vấn đề.
Chuỗi phát hiện với nhiều thuộc tính hơn sẽ nhận dạng chính xác hơn và tỉ lệ nhận
nhầm là âm sẽ thấp hơn. Tuy nhiên, chuỗi phát hiện với nhiều thuộc tính đòi hỏi thời
gian tính toán nhiều hơn. Về nguyên tắc, ta có thể định nghĩa một cấu trúc tối ưu mà
trong đó : số tầng, số thuộc tính mỗi tầng và ngưỡng của mỗi tầng phải được dung
hòa để tối thiểu hóa số thuộc tính. Việc tìm ra cấu trúc tối ưu này rất là khó khăn.
Trên thực tế, một cấu trúc rất đơn giản để tạo ra một bộ phân loại hiệu suất cao.
Mục tiêu được chọn là giảm tối thiểu việc phân loại nhầm là dương và tối đa hiệu
suất phát hiện đúng. Mỗi tầng được thêm các thuộc tính để cho đến khi tỉ lệ phân
loại nhầm là dương và tỉ lệ tìm kiếm đúng đạt được và được kiểm tra lại bằng một
tập mẫu kiểm chứng. Các tầng được thêm vào chuỗi phân loại cho đền khi đạt yêu
cầu về tỉ lệ phát hiện nhầm là dương và phát hiện đúng.

Hình 2.18 Một phần tập mẫu các khuôn mặt nhìn thẳng dùng trong huấn luyện.
2.6 THƯ VIỆN XỬ LÝ ẢNH OPENCV CỦA INTEL :
2.6.1 Giới thiệu :

OpenCV là thư viện mở dùng cho xử lý ảnh trên máy tính (computer vision)
có sẵn trên trang OpenCV được
thiết kế để làm cho việc tính toán trở nên thuận tiện hơn với các ứng dụng thời
gian thực. Một trong những mục tiêu của OpenCV là cung cấp một cấu trúc thị
giác máy tính dễ sử dụng cho người dùng để có thể xây dựng các ứng dụng xử lý
ảnh tương đối phức tạp một cách nhanh chóng. Thư viện OpenCV chứa hơn 500


47
hàm có thể ứng dụng trong nhiều lĩnh vực như giám sát nhà máy, phân tích ảnh y
khoa, an ninh và robotic. Do thị giác máy tính và việc học máy ( machine
learning) thường đi đôi với nhau nên OpenCV cũng kèm theo thư viện học máy
đầy đủ Machine Learning Library (MLL). Thư viện phụ này vào việc nhận dạng (
recognition ) và việc xếp nhóm ( clustering).
2.6.2 Các thành phần chức năng của OpenCv:


CXCORE : chứa các định nghĩa về các 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 các đại số tuyến tính ( linear algebra), phương pháp
thống kê ( statistic method), 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 đặ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 (computational geometry function) cũng được đặt ở đây.
 CVAUX : được mô tả trong tài liệu của OpenCv là chứa các mã đã lỗi thời
và các mã thử nghiệm. Tuy nhiên các giao diện đơn cho phần nhận diện
khuôn mặt cũng trong module này.
 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 và các khả năng cửa sổ đa nền

tảng.
CVCAM : chứa các giao diện cho video truy cập qua DirectX trên nền
Windows 32 bits.
2.6.3 Cấu trúc ảnh IplImage
IplImage là định dạng ảnh được giới thiệu và phát triển bởi Intel. Chuẩn
IplImage được sử dụng rộng rãi trong xử lý ảnh, tối ưu hóa quá trình xử lý nhờ
quản lý các nhóm dữ liệu dưới dạng các Field. Quá trình xử lý được thực hiện
trên các trường làm tăng khả năng linh hoạt và tốc độ xử lý dữ liệu. Định dạng
IplImage được dùng rộng rãi trong các bộ thư viện xử lý ảnh như IPL ( Image
Procesing Library) hay IPP ( Intergrated Performance Primitives), OpenCV,
AMM,...
Cấu trúc IplImage trong OpenCV như sau:
typedef struct _IplImage
{
int nSize;


48
int ID;
int nChannels;
int alphaChannel;

// OpenCV không sử dụng

int depth;
char colorModel[4]; // OpenCV không sử dụng
char channelSeq[4]; // OpenCV không sử dụng
int dataOrder;
int origin;
int align;


// OpenCV không sử dụng

int width;
int height;
struct _IplROI *roi;
struct _IplImage *maskROI; // bằng NULL trong OpenCV
void *imageId;

// bằng NULL trong OpenCV

struct _IplTileInfo *tileInfo; // bằng NULL trong OpenCV
int imageSize;
char *imageData;
int widthStep;
int BorderMode[4];

// OpenCV không sử dụng

int BorderConst[4];

// OpenCV không sử dụng

char *imageDataOrigin;
}
IplImage;
Các tham số:


nSize : Kích thước của ảnh




ID : Chỉ số version, luôn bằng 0



nChannels : Số kênh, các hàm của OpenCV đều hỗ trợ từ 1-4 kênh



alphaChannel : OpenCV không sử dụng



depth : Chiều sâu của pixel theo bit, có các dạng sau :
IPL_DEPTH_8U : unsigned 8-bit integer
IPL_DEPTH_8S : signed 8-bit integer


49
IPL_DEPTH_16U : unsigned 16-bit interger


dataOder : 0 = IPL_DATA_ORDER_PIXEL Các kênh màu đan xen
nhau,
1 = Các kênh màu tách rời




origin : Gốc tọa độ 0 = top-left origin, 1 = bottom-left origin



width : Bề rộng ảnh theo pixel



height : Chiều cao ảnh theo pixel



roi Region of Interest (ROI) nếu bằng NULL thì chỉ có vùng ROI được
xử lý



imageSize : Kích thước dữ liệu ảnh theo byte



imageData : Một pointer trỏ tới vùng địa chỉ ảnh



widthStep : The size of an aligned image row, in bytes

2.6.4 Các hàm dùng trong luận văn :
Thu nhận ảnh từ camera :




CvCapture* cvCaptureFromCAM(int index);
Trong đó index là chỉ số camera được sử dụng, nếu có 1 camera, index = -1
Chức năng : Thu nhận hình ảnh từ camera và trả về pointer có kiểu là
CVCapture.


Giải phóng camera :
void cvReleaseCapture( CvCapture**capture);
Trong đó capture là địa chỉ của Pointer có kiểu cvCapture



Lấy hình từ camera :
IplImage* cvRetrieveFrame( CvCapture* capture); hay
IplImage* cvQueryFrame( CvCapture* capture);



Đọc thuộc tính của camera
double cvGetCaptureProperty( CvCapture* capture, int property_id);
trong đó capture có kiểu CvCapture đại diện cho camera đang làm việc
property_id có thể có các giá trị sau :
CV_CAP_PROP_POS_MSEC : Camera frame timestamp
CV_CAP_PROP_POS_FRAMES: 0-based index of the frame to be
decoded/capture next.


50

CV_CAP_PROP_POS_AVI_RATIO : (Dùng cho file avi)
CV_CAP_PROP_FRAME_EIDTH : Bề rộng của video stream
CV_CAP_PROP_FRAME_HEIGHT: Bề cao của video stream
CV_CAP_PROP_FPS : frame per second
CV_CAP_PROP_FRAME_COUNT : Số thứ tự của frame
Đặt thuộc tính cho camera



int cvSetCaptureProperty ( CvCapture* capture, int property_id, double
value);
Trong đó capture có kiểu CvCapture* đại diện cho camera, property_id có
các giá trị như trong phần đọc thuộc tính của camera, value là gía trị của
thuộc tính.
Tạo một ảnh :



IplImage* cvCreateImage(CvSize size, int depth, int channels)
Hàm trả về một pointer trỏ đến hình ảnh có cấu trúc IplImage, trong đó :
size : Kích thước ảnh
depth : Số bit biểu diễn độ sáng tại mỗi pixel
channels : Số kênh
Giải phóng pointer trỏ tới ảnh:



void cvReleaseImage( IplImage** image);
Trong đó image là pointer trỏ tới hình ảnh có cấu trúc IplImage
Copy ảnh




void cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask = NULL);
Trong đó :
src : Ảnh nguồn
dst : Ảnh đích
mask : Mặt nạ phủ lên ảnh nguồn nếu ta chỉ muốn copy một phần ảnh.


Xác định vùng ảnh cần xử lý (ROI)
void cvSetImageROI(IplImage* image, CvRect rect);
Trích một cùng ảnh ban đầu thành một vùng ảnh mới, nằm trong hình chữ
nhật rect. Sau khi trích, image là pointer trỏ tới hình ảnh này.



Cân bằng histogram cho ảnh xám


51
Để thực hiện việc cân bằng histogram ta dùng hàm sau :
CVAPI(void) cvEqualizeHist( const CvArr*scr, const CvArr* dst)
Trong đó :
scr : Hình ảnh gốc ban đầu
dst : Hình ảnh sau khi cân bằng histogram
Phát hiện khuôn mặt trong ảnh


CvSeq*


cvHaarDetectObjects(const

CvHaarClassifierCascade*

cascade,

CvArr*

CvMemStorage*

storage,

image,
double

scale_factor=1.1, int min_neighbors = 3, int flags = 0,CvSize min_size =
cvSize(0,0))
Trong đó:


image : Ảnh cần phát hiện



cascade : Chuỗi phân lọai Haar dùng cho tính tóan bên trong



storage : Vùng nhớ chứa các kết quả trung gian trong quá

trình phân lọai
scale_factor : Tham số mà theo đó kích thước cửa sổ tìm



kiếm tăng lên sau mỗi chu kì quét, mặc định là 1.1 tức tăng 10%
min_neighbors : Số nhỏ nhất các hình chữ nhật kế cận cùng



phát hiện khuôn mặt. Điều này có nghĩa khuôn mặt được phát hiện nếu có
ít nhất một số hình chữ nhật có cùng kết quả dương chồng lấp lên nhau.
flags : Chế độ họat động, chỉ hỗ trợ



HAAR_DO_CANNY_PRUNNING
min_size : Kích thước cửa sổ nhỏ nhất khi bắt đầu tìm kiếm,



thường là 20x20 cho đối tượng là khuôn mặt. Hàm này tìm các vùng hình
chữ nhật trong hình có chứa khuôn mặt với chuỗi phân loại được huấn
luyện và trả về một mảng các hình chữ nhật. Trước khi gọi hàm này ta
phải load file dữ liệu trong OpenCv :
cascadefaces =
(CvHaarClassifierCascade*)cvLoad(filename_face,NULL,NULL,NULL);
với filename_face là đường dẫn đến file dữ liệu nằm trong phần dữ liệu
của OpenCv.




×