Mục lục
Mở đầu .1
Phần 1: LÝ THUYẾT XỬLÝ ẢNH .2
Chương 1: Lý Thuyết xửlý ảnh 2
1.1:Thu nhận ảnh và sốhóa 2
1.2:Phân tích ảnh .2
1.3:Quyết định .3
Chương 2: Thu nhận hình ảnh .3
2.1:Thu nhận ảnh .3
2.2:Lưu ảnh .7
Chương 3: Phân tích ảnh . 8
3.1:Khái niệm pixel và pixil lân cận 8
3.2:Một sốcông cụtrợgiúp xửlý ảnh 8
3.2.1:Tích chập .8
3.2.2:Kỹthuật lọc số .11
3.2.3:Biến đổi Fourier . 11
3.3:Tiền xửlý 16
3.3.1:Phương pháp tiền xửlý trong miền không gian .16
3.3.2:Phương pháp tiền xửlý trong miền tần số .17
3.4:Làm trơn ảnh . 18
3.4.1:Lấy trung bình các điểm ảnh lân cận, lọc tuyến tính .18
3.4.2:Phương pháp lọc trung vị .19
3.4.3:Trung bình hóa hình ảnh .19
3.4.4:Làm trơn hình ảnh nhịphân .20
3.5:Phát hiện biên .22
3.6:Lập ngưỡng 25
Phần 2: PHẦN THỰC NGHIỆM: .26
Chương 1: Ngôn ngữlập trình .28
Chương 2:Điều khiển công LPT trên Win200/NT/XP .31
Chương 3:Minh họa thuật toán và chương trình .34
Tài liệu tham khảo: .52
62 trang |
Chia sẻ: netpro | Lượt xem: 1806 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Khóa luận Xử lý ảnh và ứng dụng theo dõi đối tượng chuyển động, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ược nên từ công thức (3.14) ta có:
V(k,l) = ∑−
=
1
0
1 N
mN
WNkn u(m,n) W∑−
=
1
0
N
n
N
ln (3.21)
Từ công thức (3.21) , cách tính DFT hai chiều như sau:
-Tính DFT 1 chiều với mỗi giá trị của X (theo cột)
-Tính DFT 1 chiều theo hướng ngược lại (theo hàng) với giá trị thu được ở trên.
3.3 Tiền xử lý
Có hai phương pháp cơ bản được sử dụng trong tiền xử lý ảnh. Phương pháp thứ
nhất dựa vào các kỹ thuật tiền xử lý trong miền không gian và phương pháp thứ
hai sử dụng các khái niệm trong miền tần số thông qua biến đổi Fourier.
3.3.1 Phương pháp tiền xử lý trong miền không gian.
Thuật ngữ miền không gian ở đây muốn nói đến số lượng pixel tạo nên một hình
ảnh. Các phương pháp tiền xử lý trong miền không gian là các thủ tục tác động trực
tiếp lên các pixel tạo lên hình ảnh đó. Các hàm tiền xử lý trong miền không gian có
thể được viết như sau:
g(x,y) =h[f(x.y)] (3.22)
Ở đây f(x,y) là hàm điểm ảnh chưa được xử lý.
g(x,y) là hàm điểm ảnh đã được xử lý.
h là toán tử áp lên f. Dạng đơn giản nhất của h là lân cận có kúch tghước1x1, khi
đó g chỉ phụ thuộc vào giá trị của f tại (x,y) và h trở thành hàn ánh xạ cường độ
sáng điểm ảnh.
Một trong những kỹ thuật được sử dụng rộng rãi nhất là sử dụng mặt nạ nhân
chập. Trên hình 3.4 minh hoạ một mặt nạ là một mảng 2 chiều có kích thước 3x3,
các hệ số của mặt nạ được chọn để phát hiện một thuộc tính cho trước trong một
hình ảnh.
Hình 3.4. Một lân cận kích thước 3x3 quanh điểm (x,y)
y
(x,y)
x
•
Để hiểu rõ về mặt nạ nhân chập ta xét một ví dụ cụ thể sau. Giả sử chúng ta có
một hình ảnh có cường độ không đổi chứa một số điểm ảnh tách rời nhau, cường độ
của các điểm ảnh này khác với nền. Các điểm ảnh này có thể được phát hiện bằng một
mặt nạ nhân chập có kích thước 3x3 với các hệ số đã chọn trên hình 3.5
Hình 3.5. Mặt nạ dung để xác định các điểm ảnh
Tách biệt trên một nền không đổi
-1 -1 -1
-1 8 -1
-1 -1 -1
Thủ tục phát hiện điểm ảnh như sau: Cho tâm của mặt nạ chuyển động xung quanh
hình ảnh. Tại mỗi vị trí pixel trong hình ảnh, ta nhân mỗi pixel nằm trong vùng mặt
nạ tương ứng ; Nghĩa là pixel ở tâm của mặt nạ được nhân với 8, còn 8 pixel lân
cận được nhân với –1. Sau đó cộng kết quả của 9 phép nhân này lại. Nếu tất cả các
pixel trong mặt nạ có cùng giá trị (tức nền không đổi), thì tổng sẽ bằng 0. Ngược
lại nếu tâm của mặt nạ trùng với một trong các điểm ảnh cần xác định, thì tổng sẽ
khác 0. Nếu điểm ảnh cần xác định không nằm đúng tâm của mặt nạ, tổng cũng sẽ
khác 0, nhưng giá trị biên độ của đáp ứng sẽ yếu hơn. Những đáp ứng yếu hơn này
có thể loại bỏ bằng cách so sánh tổng với một ngưỡng.
Xét một mặt nạ có các hệ số w1, w2,….w9 và 8 điểm ảnh lân cận của điểm ảnh
(x,y) như hình 3.6. Ta có thể khái quát hoá một hàm tiền xử lý cho một mặt nạ 3x3
như sau:
h[f(x,y)]= w1f(x-1, y-1) +w3f(x-1, y+1) +w4f(x, y-1) +w5f(x,y)+w6f(x,y+1)
+w7f(x+1,y-1)+w8f(x+1,y) +w9f(x+1, y+1) (3.23)
Hình 3.6. Mặt nạ tổng quát kích thước
3x3 trình bày các hệ số và vị trí pixel hình
ảnh tương ứng.
W1
(x-1,y-1)
W2
(x-1,y)
W3
(x-1,y+1)
W4
(x, y-1)
W5
(x,y)
W6
(x,y+1)
W7
(x+1, y-1)
W8
(x+1, y)
W9
(x+1,
y+1)
3.3.2 Phương pháp tiền xử lý trong miền tần số.
Thuật ngữ miền tần số ở đây có nghĩa là tổng số pixel phức được tạo ra từ việc lấy
biến đổi Fourier hình ảnh . Khái niệm “tần số” thường được sử dụng trong giải
thích biến đổi Fourier và suy ra từ bản chất của biến đổi Fourier là tổ hợp của các
hàm sin phức. Phương pháp naỳ đóng vai trò rất quan trọng trong lĩnh các vực như
phân tích chuyển động của một vật và miêu tả vật.
Xét các hàm rời rạc của một biến, f(x), x=0, 1, …., N-1. Biến đổi Fourier thuận của
hàm f(x) là:
F(u) = ∑−
=
1
0
1 N
xN
f(x)e-2jπux / N (3.24)
với u = 0, 1, 2,…..N-1. Trong phương trình này j=√-1 và u gọi là biến tần số. Biến đỏi
Fourier ngược cho lại f(x) được định nghĩa như sau:
f(x) = e( )∑−
=
1
0
N
u
uF 2jπux / N (3.25)
Nếu tính trực tiếp từ các phương trình (3.24) và (3.25) với u=x=0,1, 2, ...N-1 thì
phải thực hiện khoảng N2 phép cộng và phép nhân. Sử dụng thuật toán biến đổi
Fourier nhanh cho phép giảm đáng kể số lượng phép tính xuống còn N.log2 N phép
tính, ở đây N được giả sử là một số nguyên mũ 2.
Cặp biến đổi Fourier hai chiều của hình ảnh NxN được định nghĩa như sau:
F(u,v) =
N
1 ∑−
=
1
0
N
x
∑−
=
1
0
N
y
f(x,y)e-j2π (ux+vy)/N (3.26)
với u,v=0,1,2..., N-1 và
f(x,y) =
N
1 ∑−
=
1
0
N
u
∑−
=
1
0
N
v
F(u,v)ej2π (ux+vy)/N (3.27)
với x,y=0, 1, 2,...N-1.
Bằng cách coi biên của vật như mảng một chiều các điểm, sau đó tính biến đổi
Fourier các phần tử của mảng đó, từ các giá trị F(u) thu được có thể biết được dạng
biên của vật. Biến đổi Fourier một chiều cũng là một công cụ rất mạnh trong việc
phát hiện chuyển động của vật. Tuy vẫn còn hạn chế về mặt tính toán nhưng biến
đổi Fourier rời rạc có rất nhiều ứng dụng trong các lĩnh vực tái tạo ảnh, cải thiện
ảnh và khôi phục ảnh. Đối với biến đổi Fourier liên tục, hai chiều, việc tính toán có
thể đạt tới tốc độ ánh sáng nhờ sử dụng các thiết bị quang học .
3.4 Làm trơn ảnh.
3.4.1 Lấy trung bình các điểm ảnh lân cận- Lọc tuyến tính.
Lấy trung bình các điểm ảnh lân cận là một kỹ thuật miền không gian đơn giản để
làm trơn ảnh. Cho một hình ành f(x,y) , thủ tục sẽ tạo ra một hình ảnh đã làm trơn
g(x,y), cường độ tại mỗi điểm (x,y) của ảnh này có được bằng cách lấy trung
bình các giá trị cường độ các điểm ảnh của f nằm trong một lân cận xác trước định
của (x,y). Nói cách khác, ảnh đã được làm nhẵn có được bằng cách sử dụng
phương trình:
G(x,y) =
( )∑∈Smnp ,
1 f(n,m) (3.28)
với mọi x,y nằm trong f(x,y) , S là tập hợp tọa độ các điểm trong lân cận (x,y) gồm cả
(x,y) và P là tổng số điểm trong lân cận.
3.4.2. Phương pháp lọc điểm giữa (lọc trung vị)_ Lọc phi tuyến.
Một trong những khó khăn chủ yếu của phương pháp lấy trung bình các điểm ảnh
lân cận là nó làm mờ biên của hình ảnh và các chi tiết sắc nét khác. Sự mờ này có
thể làm giảm đáng kể nhờ việc sử dụng bộ lọc điểm giữa ở đây chúng ta sẽ thay
cường độ của mỗi điểm ảnh bằng độ lớn cường độ của điểm giữa trong một lân cận
xác định trước của điểm ảnh đó thay vì lấy trung bình các điểm ảnh.
Để thực hiện lọc điểm giữa trong một lân cận của một điểm ảnh, trước tiên phải sắp
xếp các giá trị của pixel và các lân cận của nó, xác định điểm giữa và gán giá trị
này cho pixel. Ví dụ: trong lân cận 3x3 điểm giữa là giá trị lớn nhất thứ 5, trong
lân cận 5x5 điểm giữa là giá trị lớn nhất thứ 13v.v…Khi trong lân cận có nhiều giá
trị giống nhau, ta nhóm các giá trị bằng nhau như :giả sử một lân cận 3x3 có các
giá trị (10,20,20,20,15,20,20,25,100). Các giá trị này được sắp xếp như
sau(10,15,20,20,20,20,25,100) và các điểm giữa của lân cận này là 20 Như vậy
thực chất của việc lọc điểm giữa là ép các điểm có cường độ khác biệt giống các
lân cận của nó hơn, tức làm loại bỏ các điểm nhọn cường độ xuất hiện trong các
mặt nạ lọc.
3.4.3 Trung bình hoá hình ảnh
Xét một hình ảnh nhiễu g(x,y) tạo ra do cộng nhiễu n(x,y) vào hình ảnh f()x,y tức
là:
G(x,y) = f(x,y) +n(x,y) (3.29)
ở đây giả sử nhiễu là không tương quan và có giá trị trung bình bằng 0. Mục tiêu của
phương pháp trung bình hoá là tạo ra một hình ảnh tốt hơn bằng cách cộng các hình
ảnh nhiễu cho trước gi(x,y), i=1,2,…K .
Nếu nhiễu thoả mãn các ràng buộc nêu trên, bài toán sẽ là đơn giản và hình ảnh
g(x,y) được tạo ra bằng cách lấy trung bình K hình ảnh nhiễu khác nhau.
g (x,y) =
K
1 ∑
=
K
i 1
g(x,y) (3.30)
do đó ta có:
E { g (x,y)} = f(x,y) (3.31)
Và :
σ
g
2 (x,y) =
K
1 σ
n
2 (x,y) (3.32)
ở đây E { g (x,y)} là giá trị mong đợi của g , σ
g
2 (x,y), và σ
n
2 (x,y) là các biến của g và
n tại toạ độ (x,y). Độ lệch chuẩn tại bất kỳ điểm nào trong hình ảnh trung bình được
cho bởi:
σ
g
(x,y) =
K
1 σ
n
(x,y) (3.33)
3.4.4 Làm trơn hình ảnh nhị phân
Trong ảnh nhị phân điểm đen được quy định là 1 và điểm trắng được quy định là 0.
Vì hình ảnh nhị phân có hai giá trị nhiễu trong trường hợp này tạo ra các hiệu ứng
như biên mấp mô, các lỗ nhỏ, thiếu góc và các điểm bị tách ra.
Ý tưởng cơ bản là kiểm tra một hàm BOOL đối với lân cận tâm tại pixel p và gán p
là 1 hoặc 0 phụ thuộc vào sự sắp xếp về mặt không gian và giá trị của các pixel lân
cận. Do hạn chế về thời gian xử lý nên việc phân tích chỉ giới hạn trong 8 lân cận
của p, lân cận này cho một mặt nạ kích thước 3x3 như hình 3.7.
Hình 3.7. Các lân cận của p sử dụng để làm nhẵn ảnh
a b c
d p e
f g h
nhị phân điểm tối là một và điểm sang là 0
Làm nhẵn ảnh nhị phân được tiến hành theo các bước sau:
1. bổ xung các lỗ nhỏ
2. bổ xung các khấc trong các cạnh
3. Loại bỏ các điểm 1 biệt lập
4. loại bỏ các biếu nhỏ dọc các cạnh
5. bổ xung các góc thiếu
Hai quá trình làm nhẵn đầu tiên được thực hiện bằng cách dung biểu thức Bool sau:
Bi =p+b.g.(d+e) +d.e(b+g) (3.34)
ở đây “.” Và “+” lần lượt là ký hiệu của AND và OR. Theo qui ước, pixel trong mặt
nạ được gán là 1 và pixel trắng được gán là 0. Do đó nếu Bi =1, p được gán là 1, ngược
lại p được gán là 0. Phương trình (3.34) được áp dụng đồng thời cho tất cả các pixel,
trong đó giá trị tiếp theo của mỗi vị trí pixel được xác định trước khi các pixel khác đã
bị thay đổi.
Bước 3,4 được thực hiện tương tự bằng cách đánh giá biểu thức Bool sau:
B2 =p{(a+b+c). (e+g+h)+(b+c+e).(d+f+g)} (3.35)
đồng thời cho tất cả các pixel . Và p=1 nếu B2 =0.
Các điểm thiếu ở góc phải trên được bổ xung bằng biểu thức sau:
B= p (d.f.g) . )( hecba ++++ +p (3.36)
ở đây dấu gạch trên cho biết phần bù logic. Tương tự, các điểm thiếu góc phải dưới
trái trên, và trái dưới được bố sung bằng các biểu thức:
B= p (a.b.d) . )( hecgf ++++ +p (3.37)
B= p (e.g.h) . )( fdcab ++++ +p (3.38)
Và
B= p (b.c.e) . )( fdhag ++++ +p (3.39)
Bốn biểu thức này thực hiện bước 5 của thủ tục làm trơn ảnh:
Ví dụ
1
1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1
1 1
1
1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1
1
1
3.9(a) Hình ảnh gốc 3.9(b) Ảnh sau khi áp dụng B1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
3.9 (c) Ảnh sau khi áp dụng B2 3.9 (d) Ảnh cuối cùng sau bước 5
x
1
1 1 1 1 1 1 x
x 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1
x x
3.5 Phát hiện biên
Phát hiện biên đóng vai trò quan trọng trong nhìn thấy máy, được coi là
bước xử lý khởi đầu cho rất nhiều bài toán phát hiện vật.
3.5.1 Nguyên tắc.
Về cơ bản ý tưởng phát hiện biên của vật là tính đạo hàm cục bộ được minh
hoạ trên hình 1.10.
ảnh
Tiết diện
của đường
nằm ngang
Đạo hàm
bậc nhất
Đạo hàm
bậc hai
( a ) ( b )
Hình 3.10. Quá trình phát hiện biên bằng phương pháp lấy đạo hàm
a) Vật sang trên nền đen
b) Vật sang trên nền sang
Toán tử độ dốc: Độ dốc của một hình ảnh f(x,y) tại vị trí (x,y) được định nghĩa
như vectơ hai chiều :
G{f(x,y)} = = ⎥⎦
⎤⎢⎣
⎡
Gy
Gx
⎥⎥
⎥⎥
⎥⎥
⎥
⎦
⎤
⎢⎢
⎢⎢
⎢⎢
⎢
⎣
⎡
y
f
x
f
δ
δ
δ
δ (3.40)
G cho biết hướng tốc độ thay đổi cực đại của f tại vị trí (x,y). Tuy nhiên, trong phát
hiện biên chỉ quan tâm đến giá trị biên độ của véctơ và được gọi là độ dốc và được
ký hiệu là :
G[f(x,y)], ở đây:
G[f(x,y)] = [Gx2 +Gy2]⅟2 = ⎢⎣
⎡ ⎟⎠
⎞⎜⎝
⎛
x
f
δ
δ ⎥⎦
⎤
⎟⎟⎠
⎞
⎜⎜⎝
⎛
y
f
δ
δ (3.41)
Lấy xấp xỉ, ta có:
G[f(x,y)] = |Gx| + |Gy| (3.42)
Việc lấy xấp xỉ dễ thực hiện với phần cứng:
Từ phương trình (3.41) việc tính toán độ dốc dựa vào các đạo hàm bậc nhất
xf δδ và yf δδ . Có một số cách để tính các đạo hàm bậc nhất này trong hình ảnh số.
Một trong các phương pháp đó là sử dụng các vi phân bậc nhất giữa các pixel liền kề
nhau, nghiã là:
Gx = x
f
δ
δ = f(x,y) –f(x-1, y) (3.43)
và:
Gx = x
f
δ
δ = f(x,y) –f(x,y-1) (3.44)
Đối với lân cận kích thước 3x3 tâm tại (x,y), Gx, Gy được tính như sau:
Gx= x
f
δ
δ =
( ) ( ) ( )[ ] ( ) ( ) ( )[ ]
( ) ( )cbaihg
yxfyxfyxfyxfyxfyxf
++−++=
−++−+−−−+++++−+
22
1,1,121,11,1,121,1
(3.45)
Và : Gx= x
f
δ
δ = ( ) ( ) ( )[ ]1,11,21,1 ++++++− yxfyxfyxf
- ( ) ( ) ( )1,11,21,1 −++−+−− yxfyxfyxf
(3.46) ( ) ( gdaec ++−++= 212 )
ở đây các lân cận của (x,y) được biểu diễn bởi các chữ cái từ a đến i. Một lân cận 3x3
cảu (x,y) dung các chữ cái này được trình bày trên hình 3.11a
-1 0 1
-2 0 2
-1 0 1
-1 -2 -1
0 0 0
1 2 1
a b c
d (x,y) e
g h i
3.11(a) Lân cận 3x3 của (x,y) 3.11(b) Mặt nạ để tính Gx 3.11 (c) Mặt nạ để tính
Gy
Việc tính toán độ dốc trên vùng 3x3 có ưu điểm hơn so với dung các phương
trình (3.39) và (3.40) là tăng giá trị trung bình, do đó làm giảm độ dốc giảm nhạy đối
với nhiễu. Dựa {vào phương pháp mặt nạ ta có thể tính Gx theo mặt nạ hình 3.11b và
Gy được tính theo mặt nạ hình 3.11 c. Hai mặt nạ này thường được gọi là các toán tử
Sobel. Các đáp ứng cảu hai mặt nạ này tại điểm (x,y bất kỳ được kết hợp nhờ hai
phương trình (3.37 và (3.38) để có được sự xấp xỉ độ dốc tại điểm đó. Bằng cách di
chuyển các mặt nạ này khắp hình ảnh f(x,y sẽ thu được độ dốc của tất cả các điểm
trong ảnh.
Có nhiều phương pháp tạo ra ảnh lối ra g(x,y ) dựa vào tính toán độ dốc. Phương pháp
đơn giản nhất cho giá trị g tại (x,y) bằng độ dốc của ảnh lối vào tại điểm đó nghĩa là:
G(x,y) = G ( )[ ]yxf , (3.47)
Phương pháp khác tạo ảnh nhị phân bằng cách dùng quan hệ sau:
G(x,y) = (3.48)
⎪⎩
⎪⎨
⎧
0
1
ở đây T là ngưỡng không âm. Trong trường hợp này chỉ các pixel mép mà độ dốc của
chúng lớn hơn T mới được coi là quan trọng . Do đó sử dụng phương trình (3.44) có
thể được xem như là một thủ tục lấy ra những pixel được đặc trưng bởi sự chuyển
dịch đáng kể về cường độ sáng.
Toán tử Laplacian.: Laplacian là một toán tử đạo hàm bậc hai được định nghĩa như
sau:
L = ([ ]yxf , )
2
2
x
f
δ
δ +
2
2
y
f
δ
δ (3.49)
Với các ảnh số, Laplacian được định nghĩa như sau:
L = ([ ]yxf , ) ( ) ( ) ( ) ( )[ ]1,1,,1,1 −+++−++ yxfyxfyxfyxf -4f (x,y) (3.46)
Laplician sẽ bằng 0 trong các vùng không đổi và trên phần dốc của mép. Thực hiện
phương trình (3.46) có thể dựa vào mặt nạ như trong hình 3.10
Hình 3.12. Mặt nạ để tính Laplician
Laplician phản ứng với những sự dịch chuyển về cường độ, toán tử này ít khi được sử
dụng một mình để phát hiện biên. Vì là đạo hàm bậc hai nên nó không nhạy với nhiễu.
Do đó toán tử này thường được coi như bộ phát hiện việc thiết lập pixel cho trước là ở
trên mặt nạ đen hay trắng của mép.
0 1 0
1 4 1
0 1 0
3.6 Lập ngưỡng
Phân ngưỡng là một trong những kỹ thuật chủ yếu được sử dụng tỷong các hệ
thống nhìn trong công nghiệp để phát hiện vật, nhất là trong các ứng dụng đòi hỏi năng
suất dữ liệu cao.
Giả sử biểu đồ cường độ được trình bày trong hình 3.13a tương ứng với một
hình ảnh f(x,y) tạo thành các vật sáng trên nền đen, các pixel nền và vật này có các
cường độ được nhóm thành hai mode trội chủ yếu. Cách để phân chia các vật thành hai
mode là chọn một ngưỡng T và so sánh cường độ của vật với ngưỡng đó. Do đó, một
điểm (x,y) bất kỳ có f(x,y) >T được gọi là một điểm của vật: ngược lại nó là một điểm
của nền. Trong hợp tổng quát hơn được trình bày trong hình 3.13b. Trong trường hợp
này biểu đồ hình ảnh được đặc trưng bởi 3 mode trội (ví dụ hai vật sang trên một nền
tối). Ở đây, ta cũng dung phương pháp cơ bản trên, phân các điểm có T1 < f(x,y) [ 2T <
T1 vào một lớp đối tượng, các điểm có f(x,y) > T2 cho một lớp đối tượng khác và
thuộc nền nếu f(x,y) [ . Loại ngưỡng đa mức này nói chung là độ tin cậy kém hơn 1T
loại ngưỡng đơn mức do sự khó khăn trong việc thiết lập ngưỡng đa mức để tách hiệu
quả các vùng mong muốn, nhất là khi số mode biểu đồ tương ứng là lớn.
T
T1 T2
Hình 3.13. Lược đồ cường độ (a). Một ngưỡng (b) Nhiều ngưỡng
Dựa vào các khái niệm ở trên ta có thể xem lập ngưỡng như là một phép toán như
sau:
T= T ( ) ( )[ ]yxfyxpyx ,,,,
ở đây f(x,y) là cường độ của điểm (x,y)
p(x,y) biểu thị một vài thuộc tính cục bộ của điểm này. Ví dụ như cường độ trung
bình của lân cận có tâm tại (x,y)
Một ảnh g(x,y) đã lấy ngưỡng được định nghĩa như sau:
1 if f(x,y) > T (3.50)
G(x,y) =
0 if f(x,y) T ≤
Do đó bằng cách kiểm tra g(x,y) ta thấy các pixel có giá trị 1 (hoặc mức cường độ
quy ước khác) tương ứng với vật, còn pixel có giá trị không ứng với nền.
Khi T chỉ phụ thuộc vào f(x,y), ngưỡng được gọi là toàn cục hay ngưỡng đơn (hình
3.10a). Nếu T phụ thuộc cả f(x,y) và p(x,y), ngưỡng cục bộ hay đa ngưỡng (hình
3.10b). Ngoài ra nếu T phụ thuộc vào các tọa độ x và y, nó được gọi là ngưỡng .
PHẦN 2:PHẦN THỰC NGHIỆM
Hình P2.1: Mô hình thực nghiệm : camera và mạch đk motơ bước.
• TÓM TẮT MÔ HÌNH SẢN PHẨM WEBCAM TỰ ĐỘNG THEO
DÕI ĐỐI TƯỢNG DI CHUYỂN:
Như là một phần của đề tài, tôi đã cho thực hành cho camera theo dõi vật dựa
trên phần cứng đơn giản.Với mục tiêu minh hoạ cho đề tài nên các phần cứng và
chương trình đã được đơn giản hoá …như là camera chỉ bám vật theo hai chiều trái và
phải, chương trình cũng chỉ cho phép điều khiển camera bám theo một vật chuyển
động duy nhất.Tuy nhiên ở phần lý thuyết sau đây tôi sẽ cố gắng trình bày những gì tốt
nhất của đề tài thực sự có thể làm được.Nền tảng cho chương trình ở đây là thư viện
mã mở của Microsoft: AVICap và được triển khai trên nền của ngôn ngữ lập trình
Visual C++ vesion 6.0.
webcam
USB camera
LPT port
Môtơ
Bước
PC
Hình P2.2: Sơ đồ khối mô hình thưc nghiệm
CHƯƠNG 1: NGÔN NGỮ LẬP TRÌNH
1.1 Giới thiệu
Hiện nay có rất nhiều ngôn ngữ lập trình mới và mạnh. Các ngôn ngữ lập trình trên
Window vừa có khả năng như các ngôn ngữ chạy trong DOS vừa có khả năng
cung cấp một giao diện trực quan giúp người sử dụng giao tiếp với ứng dụng một
cách
dễ dàng. Ngôn ngữ lập trình Visual C++ là một trong những ngôn ngữ như vậy. Trong
luận văn sẽ sử dụng ngôn ngữ này.
1.2 Một số hàm và thủ tục xử lý ảnh
1.2.1 Tạo một số cửa sổ hiện ảnh.
Để tạo một cửa sổ ta dùng hàm “capCreateCaptureWindow”
Ví dụ:
HWndc = capCreateCaptureWindow (
(LPSTR) “My Capture Window”, // tên cửa sổ
WS_CHILD | WS_VISIBLE, // tên cửa sổ
0, 0, 160, 120, // vị trí và kích thước của cửa sổ
(HWND) hwndParent,
(int) nID/ * child ID */);
1.2.2 Kết nối với thiết bị thu ảnh.
Để kết nối và dừng kết nối cửa sổ hiện ảnh với thiết bị thu ảnh dùng macro
“capDriverDisconnect”.
Ví dụ:
fOK = SendMessage (hWndc, WM_CAP_DRIVER_CONNECT, 0, 0L);
CapDriverDisconnect(hWndC);
1.2.3. Thiết lập trạng thái của cửa sổ hiện ảnh.
Để thiết lập kích thước của cửa sổ hiện ảnh cho tất cả các chiều hình ảnh nhận
được từ macro “capGetStatus” trong cấu trúc CAPSTATUS ta sử dụng hàm
“SetWindowPos”.
Ví dụ:
CAPSTATUS CapStatus;
CapGetStatus (hWndC, &CapStatus, sizeof (CAPSTATUS) );
SetWindowPos (hWndC, NULL, 0, 0, CapStatus.uiImageWidth,
CapStatus.uiImageHeight, SWP_NOZORDER |SWP_NOMOVE);
1.2.4. Hiển thị các hộp thoại để thiết lập các thông số của hình ảnh.
Mỗi cửa sổ hiện ảnh có thể cung cấp 3 hộp thoại khác nhau dùng để điều khiển
các khía cạnh của quá trình số hóa hình ảnh và hiện ảnh. Trước khi hiển thị mỗi hộp
thoại cần gọi macro “capDriverGetCaps” và kiểm tra cấu trúc CAPDRIVERCAPS
khai báo xem cửa sổ hiện ảnh có hiện thị hộp thoại hay không.
Ví dụ:
CAPDRIVERCAPS CapDriverCaps;
CapDriverGetCaps (hWndC, & CapDrvCaps, sizeof (CAPDRIVERCAPS) );
// hiện thị hộp thoại nguồn hình ảnh.
If (CapDriverCaps.fHasDlgVideoSource)
CapĐlgVideoSource (hWndC);
// hiện thị hộp thoại khuôn dạng hình ảnh.
If (CapDriverCaps.fHasDlgVideoFormat)
{
CapĐlgVideoFormat (hWndC);
// Có các kích thước hình ảnh mới không?
CapGetStatus (hWndC, &CapStatus, sizeof (CAPSTATUS));
// nếu có báo cho cửa sổ tra về sự thay đổi kích thước.
}
// hiển thị hộp thoại hiển thị hình ảnh.
If (CapDriverCaps.fHasDlgVideoDisplay)
CapDgVideoDisplay (hWndC);
1.2.5. Lấy và thiết lập khuôn dạng hình ảnh.
Cấu trúc BITMAPINFO có chiều dài thay đổi để cung cấp các khuôn dạng dữ
liệu nén chuẩn. Vì chiều dài của cấu trúc là thay đổi, nên trong các ứng dụng luôn luôn
cần phải xác định kích cỡ và cấp phát bộ nhớ cho cấu trúc trước khi tìm kiếm khuôn
dạng hình ảnh. Marco “capGetVideoFormatSize” để xác định kích cỡ bộ đệm và hàm
“capGetVideoFormat” để xác định khuôn dạng hình ảnh hiện tại .
Ví dụ:
LPBITMAPINFO lpbi;
DWORD dwSize;
DwSize =capGetVideoFormatSize (hwndC);
lpbi= GlobalAllocPtr (GHND, dwSize);
capGetVideoFormat (hwndC, lpbi, dwSize);
Các ứng dụng có sử dụng marco “capSetVideoFormat” (hoặc thông báo WM
CAP SET VIDEOFORMAT) để gửi cấu trúc tiêu đề BITMAPINFO tới các cửa sổ bắt
ảnh. Vì các khuôn dạng hình ảnh ứng với thiết bị riêng nên trong ứng dụng cần kiểm
tra giá trị trả về để xác định khuôn dạng có được chấp nhận hay không.
1.2.6. Duyệt trước hình ảnh
Để thiết lập tốc độ hiển thị khung cho mode duyệt trước ta sử dụng macro
“capPreviewRate” và sử dụng macro “capPreview” để thay thế cửa sổ hiện ảnh
trong mode duyệt trước.
Ví dụ:
CapPreviewRate (hWndC, 66); // tốc độ hiển thị tính bằng ms
CapPreview (hWndC, TRUE); // bắt đầu duyệt
// Duyệt
capPreview (hWndC, FALSE); // Ngừng duyệt
1.2.7. Thay đổi thiết lập cho hình ảnh hiện.
Để thay đổi tốc độ hiện hình ảnh từ giá trị mặc định ta sử dụng các macro
“capPreviewGetSetup” và “capCaptureSetSetup”
Ví dụ:
CAPTUREPARMS CaptureParms;
Float FramesPerSec = 10,0;
CapCaptureGetSetup (hwndC, &CaptureParms, sizeof (CAPTUREPARMS));
CaptureParms.dwRequestMicroSecPerDFrame = (DWORD) (1.0e6/ FramesPerSec);
CapCaptureSetup (hWndC, & CaptureParms, sizeof (CAPTUREPARMS));
1.2.8. Thêm các hàm Callback cho một ứng dụng.
Một ứng dụng có thể đăng ký hàm gọi lại với cửa sổ hiện ảnh để nó thông báo ứng
dụng trong các tình huống sau:
• Thay đổi trạng thái
• Có lỗi xảy ra
• Các bộ đệm âm thanh và khung hình ảnh có thể sử dụng
• ứng dụng đang thực thi
Ví dụ tạo một cửa sổ hình ảnh và đăng ký các hàm Callback khung, chuỗi hình ảnh,
lỗi và trạng thái. Ví dụ cũng đưa vào một câu lệnh đơn giản để ngăn chặn hàm
Callback.
Ví dụ:
Case WM_CREATE:
{
char achDeviceName [80];
char achDeviceVersion [100];
char achBuffer [100];
WORD wDriverCount = 0;
WORD wIndex;
WORD wError;
HMENU hMenu;
// taọ cửa sổ hiện hình ảnh sử dụng macro “capCreateCaptureWIndow”.
GhWndCap = capCreateCaptureWindow ((LPSTR) “CaptureWindow”,
WS_CHILD | WS_VISIBLE, 0, 0,160, 120, (HWND) hWnd, (int) 0),
Đăng ký hàm callback lỗi sử dụng macro “capSetCallbackOnError”.
CapSetCallbackOnError (ghWndCap, fpErrorCallback);
// Đăng ký hàm Callback trạng thái sử dụng macro “capSetCallbackOnStatus”.
CapSetCallbackOnStatus (ghWndCap, fpStatusCallback);
// Đăng ký hàm Callback trạng thái sử dụng macro “ capSerCallbackOnStatus”.
CapSetCallbackOnFrame (ghWndCap, fpFrameCallback);
//Kết nối vưói thiết bị thu ảnh.
Break;
}
case WM_CLOSE
{
// Để ngừng callback khung sử dụng macro “capSetCallbackOnFrame”. Tương tự với
các hàm callback khác.
CapSetCallbackOnFrame (hWndC, NULL);
Break;}
CHƯƠNG 2: ĐIỀU KHIỂN CỔNG LPT TRÊN
WINDOWS NT/2000/XP
2.1 Đặt vấn đề
Viết chương trình giao tiếp với cổng song song của máy tính thật đơn giản với
Dos và cả với Win95/98.Chúng ta có thể sử dụng các hàm Inportb() và Outportb() hay
là _inp() và _outp() một cách trực tiếp và không mắc phải bất cứ vấn đề gì.Nhưng khi
làm việc với các hệ điều hành mới hơn như là WinNT4, Win2000 hay là WinXP, mọi
điểu tưởng như đơn giản đó không còn nữa. Khi chúng ta cố gắng chạy một chương
trình sử dụng các hàm thông thường như là inportb() , outportb() hay là _inport() và
_outp() trên hệ điều hành như Win2000, lập tức sẽ xuất hiện thông báo lỗi như sau :
"The exception privileged instruction occurred in the application at location ...."
Khi bắt đầu nhìn thấy thông báo trên, ta có thể nghĩ rằng “Mình đã mắc lỗi
ở đâu đó trong chương trinh ?” nhưng rõ ràng chương trình chạy tốt trên Win98
…vậy thì lỗi là do đâu ?Câu trả lời sẽ được giải đáp ở ngay sau đây.
Là một biện pháp bảo mật hệ thống , Windows NT hạn chế một số đặc
quyền của các loại ngôn ngữ lập trình khác chạy trên nó. Windows sắp xếp tất cả các
chương trình thành hai loại , đó là mode người dùng (user mode) và mode nhân(kenel
mode); chạy trên mode ring3() (với mode người dùng) và mode ring() với mode nhân.
Mode người dùng bị hạn chế sử dụng các hàm liên quan đến IN, OUT …Nên khi mà
hệ điều hành phát hiện chương trình ở mode người dùng đang cố gắng chạy các hàm
đó, Hệ điều hành sẽ lập tức dừng chương trình đó lại và đưa ra thông báo lỗi như ta
thấy.
Cuối cùng là các giao tiếp sẽ bị chặn đứng bởi hệ điều hành khi ta cố gắng
thực thi các lệnh đọc và viết thông qua cổng song song.Nhưng trong khi đó , đối với
các chương trình thực hiện ở mức nhâ
Các file đính kèm theo tài liệu này:
- Xử lý ảnh và ứng dụng theo dõi đối tượng chuyển động.pdf