Professional Documents
Culture Documents
Ứng dụng xử lý ảnh trong điều khiển robot tự động
Ứng dụng xử lý ảnh trong điều khiển robot tự động
COM
MỤC LỤC
MỤC LỤC..............................................................................................................1
CHƯƠNG 1............................................................................................................9
1
EBOOKBKMT.COM
2
EBOOKBKMT.COM
2.1.3.1 Lớp....................................................................................................36
2.1.4.1 Kế thừa.............................................................................................39
2.1.4.2 Đa hình.............................................................................................39
ROBOT TỰ ĐỘNG..............................................................................................47
3
EBOOKBKMT.COM
3.2.2 Quá trình thu ảnh và các yêu cầu của hệ thống......................................55
3.3 Tính toán khoảng cách dựa trên ảnh thu được................................................59
KẾT LUẬN..........................................................................................................64
4
EBOOKBKMT.COM
LỜI CẢM ƠN
Lời đầu tiên cho em gửi lời cảm ơn chân thành nhất tới tất cả các thầy, cô
giáo Trường Đại học Công nghệ Thông tin & Truyền thông - Đại học Thái
Nguyên nói chung và các thầy cô giáo trong Bộ môn Các Hệ thống Thông tin nói
riêng. Các thày, cô đ-ã tận tình giảng dạy, trang bị cho em vốn kiến thức cũng
như những kinh nghiệm quý báu để em có thể đạt được kết quả tốt nhất trong
học tập cũng như trong công việc của em sau này. Đặc biệt em xin chân thành
cảm ơn thầy giáo Tiến sỹ Phạm Đức Long đã trực tiếp hướng dẫn giúp đỡ em
trong thời gian làm đồ án vừa qua. Trong thời gian hướng dẫn tuy thầy rất bận
nhưng thầy vẫn dành thời gian chỉ bảo truyền đạt cho em những kinh nghiêm và
những định hướng cho đồ án của em đảm bảo kết quả, và hoàn thành đúng thời
gian theo quy định. Cuối cùng em xin cảm ơn sự giúp đỡ, động viên của gia
đình, bạn bè dành cho em trong suốt thời gian qua.
5
EBOOKBKMT.COM
Đồ án tốt nghiệp là sản phẩm tổng hợp toàn bộ các kiến thức mà sinh viên
đã học được trong suốt thời gian học tập tại trường đại học. Ý thức được điều đó,
với tinh thần nghiêm túc, tự giác cùng sự lao động miệt mài của bản thân và sự
hướng dẫn tận tình của thầy giáo Tiến sỹ Phạm Đức Long em đã hoàn thành đồ
án tốt nghiệp của mình.
Em xin cam đoan: nội dung đồ án của em không sao chép nội dung cơ bản từ các
đồ án khác và sản phẩm của đồ án là của chính bản thân em nghiên cứu xây dựng
lên. Mọi thông tin sai lệch em xin hoàn toàn chịu trách nhiệm trước hội đồng bảo
vệ.
Sinh viên
6
EBOOKBKMT.COM
Ngày nay công nghệ thông tin ngày càng không thể thiếu với đời sống của
con người với tốc độ phát triển vũ bão của công nghệ thông tin làm cho việc luân
chuyển thông tin trở nên cực kỳ nhanh chóng và vai trò của thông tin ngày càng
trở nên quan trọng. Cùng với sự phát triển chung của thế giới và khu vực trong
những năm gần đây ngành tin học Việt Nam cũng có những bước phát triển vượt
bậc.
Trong thời đại mới việc đẩy mạnh ứng dụng công nghệ thông tin vào thực
tiễn là một mục tiêu được Nhà nước quan tâm và phát triển. Việc nắm bắt, khai
thác, xử lý thông tin càng nhanh, càng linh hoạt, càng chính xác bao nhiêu thì kết
quả thành công càng cao.
Với mong muốn tìm hiểu,tiếp cận với công nghệ thông tin trong thời đại mới
để có thêm kiến thức cho con đường lập nghiệp trong tương lai, em đã chọn đề
tài: Ứng dụng xử lý ảnh trong điều khiển robot tự động.
Xây dựng chương trình cho camera đặt trên một robot tự động xác định hướng và
khoảng cách tới một đối tượng để cung cấp thông tin cho máy tính điều khiển
robot.
Trên cơ sở đó, nội dung của đề tài gồm 3 chương sau:
Mặc dù đã cố gắng nhưng chắc chắn đồ án của em không tránh khỏi những
thiếu sót và hạn chế. Em rất mong nhận được sự đóng góp ý kiến của các
thầy(cô) giáo để đề tài của em hoàn thiện hơn.
Em xin chân thành cảm ơn!
7
EBOOKBKMT.COM
8
EBOOKBKMT.COM
CHƯƠNG 1
Xử lý ảnh là một lĩnh vực đang được quan tâm, xử lý ảnh có quan hệ mật
thiết với nhận thức về ảnh của con người. Tổng quát với hệ thống xử lý ảnh như
sau:
9
EBOOKBKMT.COM
trữ, hoạc được đem ra đối sánh để đưa ra kết luận. Một số hệ thống có thể bao
gồm các chức năng lấy mẫu và số hóa ảnh.
Có nhiều loại file ảnh khác nhau: file bitmap, file jpeg, file gif,. Ảnh gốc sau
khi đã số hóa được đưa vào máy tính để xử lý. Và tùy theo từng ứng dụng cụ thể
mà chọn ra các cách xử lý thích hợp.
Muốn xử lý ảnh trên máy tính ta cần phải số hóa ảnh, tức là đưa ảnh từ
thực tế vào máy tính. Ta dùng các thiết bị thu nhận như: Camera cộng với bộ
chuyển đổi tương tự số AD (Analog to Digital) hoặc máy quét chuyên dụng.
10
EBOOKBKMT.COM
Ảnh có thể biểu diễn dưới dạng tương tự hoặc tín hiệu số. Trong biểu diễn số
của các ảnh đa mức xám, một ảnh được biểu diễn dưới dạng một ma trận hai
chiều. Mỗi phần tử của ma trận biểu diễn cho mức xám, hay cường độ sáng của
ảnh tại vị trí đó. Mỗi phần tử trong ma trận được gọi là phần tử ảnh, thông
thường ký hiệu là PEL (Picture Element) hoặc là điểm ảnh (Pixel).
Với ảnh đen trắng: Nếu dùng 8 bit (1 byte) để biểu diễn mức xám thì số các mức
xám có thể biểu diễn được là 28 hay 256. Mỗi mức xám được biểu diễn dưới dạng
là một số nguyên nằm trong khoảng từ 0 đến 255, với mức xám 0 biểu diễn cho
mức cường độ sáng nhất và 255 biểu diễn cho mức cường độ đen nhất.
Với ảnh màu: Cách biểu diễn cũng tương tự như đối với ảnh đen tráng, chỉ khác
là các số tại mỗi phần tử của ma trận biểu diễn cho ba màu riêng rẽ gồm : Đỏ
(red), lục (green), lam (blue). Để biểu diễn cho một điểm ảnh màu cần 24bit, 24
bit này được chia thành ba khoảng 8bit. Mỗi khoảng này biểu diễn cho cường độ
sáng của một trong các màu chính. Để hiểu được việc số hóa ảnh ta xem hình4.
Trong đó độ sáng trung bình của mỗi hình chữ nhật bằng giá trị một điểm ảnh.
11
EBOOKBKMT.COM
12
EBOOKBKMT.COM
ngẫu nhiên do chuyển động giữa camera và các đối tượng được chụp, nhiễu do
khí quyển.
Khôi phục ảnh dùng các bộ lọc để lọc các ảnh bị nhiễu để giảm tối thiểu
sự ảnh hưởng của các loại nhiễu này cho ra ảnh kết quả càng gần giống với ảnh
gốc càng tốt. Hiệu quả của các bộ lọc khôi phục ảnh phụ thuộc vào sự nhận biết
về quá trình nhiễu cùng với quá trình thu nhận ảnh. Khôi phục ảnh thường được
xử lý trên miền tần số là chủ yếu. Bao gồm các kỹ thuật lọc ngược, lọc bình
thường tối thiểu.
Phân đoạn ảnh(Segmentation) là một hướng riêng của phân tích ảnh. Phân
đoạn ảnh bao gồm các kỹ thuật phân tách các đối tượng của ảnh thành những đối
tượng có những nét đặc trưng của nó oặc tách biệt hoàn toàn giữa đối tượng và
nền. Mục đích là để cho dễ quan sát và xử lý.
13
EBOOKBKMT.COM
Đây là một kỹ thuật khá đơn giản: để tăng thêm độ sáng, tất cả các Pixel của
ảnh cần được cộng thêm giá trị điều chỉnh vào mọi kênh màu RGB. Tuy kỹ thuật
này đơn giản nhưng nó đem lại hiệu quả khá cao và rất hay được sử dụng trong
lĩnh vực xử lý ảnh. Nó giúp ích rất nhiều trong các ngành như y học, địa lý, quân
sự,... trong việc phân tích và nhận dạng.
Ở đây điều chỉnh Brightness không chỉ được sử dụng để làm sáng lên những
ảnh tối mà còn được sử dụng để làm tối đi các ảnh sáng. Một ảnh sáng hoàn toàn
đơn giản là tất cả các Pixel đều màu trắng trong khi một ảnh tối tất cả các Pixel
đều màu tối. Sự khác nhau duy nhất trong làm tối một ảnh là trừ đi giá trị điều
chỉnh vào mỗi kênh màu R - G - B của ảnh.
Đối với mỗi kênh màu, chúng chỉ nhận các giá trị [0..255]. Chính vì thế khi
tăng cường hay giảm độ sáng của một ảnh ta phải chú ý đến ngưỡng của các
kênh. Điều đó có nghĩa là với mỗi kênh màu của một Pixel nếu nhỏ hơn 0 thì ta
phải gán bằng 0 và nếu lớn hơn 255 thì ta phải gán bằng 255.
g(x,y) = f(x,y) + b
Trong đó b là hằng số cộng thêm vào giá trị màu f(x,y). Độ sáng của ảnh tăng
nếu b > 0, và giảm bớt nếu b < 0.
14
EBOOKBKMT.COM
Để cho thuật giả này nhanh hơn, chúng ta phân ra hai mức làm sáng
(Lightening) và làm tối (Darkening). Việc phân ra làm hai mức là có hai lý do.
Thứ nhất là khi làm sáng ảnh thì không phải kiểm tra nếu giá trị màu dưới 0 và
khi làm tối ảnh cũng không phải kiểm tra nếu giá trị màu trên 255. Lý do thứ hai
quan trọng hơn. Đó là một Byte chỉ giữ những giá trị giữa 0 và 255. Mà phạm vi
điều chỉnh màu lại nằm trong [-255..255]. Điều đó có nghĩa là nếu chúng ta
không phân ra làm hai mức thì giá trị điều chỉnh màu phải là Int và khi đó việc
xử lý tốn thêm thời gian sau mỗi vòng lặp.
Else // Brightness=False
Với biến điều chỉnh màu Adjustment được khai báo kiểu Byte.
15
EBOOKBKMT.COM
Hình 4: Ảnh gốc (a); ảnh đã giảm độ sáng (b); ảnh đã được tăng cường độ sáng
(c).
Sử dụng giải thuật này, ta có kết quả như trong hình 4. Ta nhận thấy rằng
những điểm đã sáng trắng trong ảnh gốc không được làm sáng hơn và các điểm
đã tối đen trong ảnh gốc cũng không được làm tối hơn.
16
EBOOKBKMT.COM
Hình sau mô tả việc tăng và giảm độ tương phản đối với ảnh gốc.
Hình 5: (a) Ảnh gốc; (b) Ảnh đã giảm độ tương phản; (c) Ảnh đã tăng độ tương
phản.
17
EBOOKBKMT.COM
(a) (b)
18
EBOOKBKMT.COM
như sau:
2 2 2 1 2
2 4 2 3 4
2 2 2
B1: Thêm các Pixel có mức xám = 0 vào xung quanh biên I sao cho kích
thước của ảnh là (M+2*H-2)x(N+2*K-2).
0 0 0 0 0
2 2 2 0 2 2 2 0
2 4 2 0 2 4 2 0
2 2 2 0 2 2 2 0
0 0 0 0 0
1 2 4 3 1 2 3 8 7 6
3 4 2 1 4 0 5 5 0 4
T T’ 6 7 8 3 2 1
B3: Dịch chuyển mẫu T’ trên ảnh I theo trật tự từ trên xuống dưới, từ trái sang
phải sao cho pham vi mẫu của T’ nằm trong ảnh I. Ở mỗi lần dịch chuyển, pixel
ảnh kết quả tương ứng có mức xám bằng giá trị lớn nhất của tổng các cặp pixel
19
EBOOKBKMT.COM
của mẫu T’ và ảnh I tương ứng. Kết quả thu được có thể giảm đi cùng một giá trị
xám thích hợp.
0 0 0 0 0 4 4 4 4 2 2 2 2
0 2 2 2 0 4 6 6 6 2 4 4 4
0 2 4 2 0 4 6 8 8 2 4 6 6
0 2 2 2 0 4 6 8 8 2 4 6 6
0 0 0 0 0
+k +k
∑ ∑
A=C**B= c1 i=−k j=−k C(i,j).B(x-i, y-j) + c0
20
EBOOKBKMT.COM
+ Kế tiếp các ảnh một cách tuần hoàn và tạo ra một tín hiệu tuần
hoàn.
21
EBOOKBKMT.COM
0 1 0 1 1 1 1 1 1 1 2 1
1 1 1 1 1 1 1 2 1 2 4 2
0 1 0 1 1 1 1 1 1 1 2 1
Lọc tuyến tính ngoài làm trơn nhiễu còn có thể trích chọn biên (nổi biên). Dễ
dàng nhận thấy rằng biên là điểm có độ biến thiên nhanh về giá trị mức xám.
Theo quan điểm về tần số tín hiệu, các điểm biên ứng với các thành phần tần số
cao. Do vậy, ta có thể dùng bộ lọc thông cao để cải thiện: lọc các thành phần tần
số thấp và chỉ giữ lại thành phần tần số cao. Vì thế, lọc thông cao thường được
dùng làm trơn biên trước khi tiến hành các thao tác với biên ảnh. Dưới đây là một
số mặt nạ dùng trong lọc thông cao:
-1 -1 -1 0 -1 0
-1 9 -1 -1 5 -1
-1 -1 -1 0 -1 0
22
EBOOKBKMT.COM
Các nhân chập thông cao thông thường có đặc tính chung là tổng các hệ số
của bộ lọc bằng 1. Nguyên nhân chính là ngăn cản sự tăng quá giới hạn của các
giá trị mức xám (các giá trị điểm ảnh vẫn giữ được giá trị của nó một cách gần
đúng không thay đổi quá nhiều với giá trị thực).
a) Lọc trung vị
Điểm ảnh đầu vào sẽ được thay thế bằng trung vị các điểm ảnh. Kỹ thuật này
đòi hỏi giá trị các điểm ảnh phải được sắp theo thứ tự tăng hay giảm dần. Kích
thước của sổ cũng được chọn (2k+1)x(2k+1). Lọc trung vị có tác dụng sau:
+ Hữu ích cho việc loại bỏ các điểm ảnh hay các hàng mà vẫn bảo toàn độ
phân giải.
+ Hiệu quả giảm các điểm nhiễu trong cửa sổ lớn hơn hoặc bằng một nửa số
điểm trong cửa sổ.
Lọc giả trung vị tương tự như lọc trung vị nhưng giá trị được thay thế sẽ là
trung bình cộng của hai giá trị lớn nhất và nhỏ nhất trong mặt nạ
c) Lọc ngoài
Giả sử có một ngưỡng xám cho các mức nhiễu tức là các giá trị vượt quá mức
này thi coi là nhiễu. Khi đó với các điểm nhiễu sẽ được thay thế bằng giá trị
trung bình của các điểm lân cận nó theo một cửa sổ có tâm trùng với điểm ảnh
23
EBOOKBKMT.COM
đầu vào, thường là (2k+1)x(2k+1). Điều quan trọng ở đây đó là xác định ngưỡng
xám.
B3: Mức xám pixel ảnh có kết quả âm, có 2 cách khắc phục:
+ Biến đổi tổng thể mức xám: tìm giá trị xám nhỏ nhất p trong ảnh và
cộng tất cả các giá trị xám lên p để mức chênh lệch giữa các pixel là không đổi.
x’ = x +tx
y’ = y +ty
24
EBOOKBKMT.COM
T = 1 0 0
0 1 1
tx ty 1
x’ = x * Sx
y’ = y * Sy
Sx 0 0
T= 0 Sy 0
0 0 1
25
EBOOKBKMT.COM
trục mới xuất hiện bằng cách quay trục cũ đi một góc θ ngược chiều kim đồng
hồ, khi đó tọa độ mới được theo theo công thức
x’ = xcosθ - y.sinθ
y’ = x.sinθ + y.cosθ
[ ]
cos θ sin θ 0
T = −sin θ cos θ 0
Với T là ma trận quay: 0 0 1
Kết hợp phép tịnh tiến: Ta có thể kết hợp các phép tịnh tiến với cách kết
hợp hai ma trận tịnh tiến liên tiếp ta được một phép tịnh tiến được biểu
diễn như sau:
( ) ( )
100 100
T1 = 0 1 0 T2= 010
T x 1T y 11 T x 2T y 2 1
( )
1 0 0
T kh = 0 1 0
Tx 1+ Tx 2 Ty 1+ ty 2 1
Vậy kết hợp hai phép tịnh tiến là một phép tịnh tiến. Từ đó ta có kết hợp của
nhiều phép tịnh tiến cũng là một phép tịnh tiến.
Kết hợp các phép tỷ lệ: Ta có thể kết hợp các phép tỷ lệ với cách kết hợp
hai ma trận tỷ lệ liên tiếp ta được một phép tỷ lệ được biểu diễn như sau:
26
EBOOKBKMT.COM
T1 = ¿ T2 = ¿
( )
Sx 1∗Sx 2 0 0
Tkh = 0 Sy 1∗Sy 2 0
0 0 1
Vậy kết hợp hai phép tỉ lệ là một phép tỉ lệ. Dễ dàng mở rộng cho kết quả:
kết hợp của nhiều phép tỉ lệ cũng là một phép tỉ lệ.
( )
cos θ 1 sin θ 1 0
T1 = −sin θ 1 cos θ 1 0
0 0 1
( )
cos θ 2 sin θ 2 0
T2 = −sin θ 2 cos θ 2 0
0 0 1
( )
cos (θ 1+θ 2) sin(θ 1+θ 2) 0
Tkh = −sin (θ 1+θ 2) cos( θ1+θ 2) 0
0 0 1
Vậy kết hợp hai phép quay quanh gốc tọa độ là một phép quay quanh
gốc tọa độ. Từ đó dễ dàng suy ra kết hợp của nhiều phép quay quanh gốc
tọa độ cũng là một phép quay quanh gốc tọa độ.
27
EBOOKBKMT.COM
Ngôn ngữ C# khá đơn giản, chỉ khoảng 80 từ khóa và hơn mười mấy kiểu dữ
liệu được xây dựng sẵn. Tuy nhiên, ngôn ngữ C# có ý nghĩa cao khi nó thực thi
những khái niệm lập trình hiện đại. C# bao gồm tất cả những hỗ trợ cho cấu trúc,
thành phần component, lập trình hướng đối tượng. Những tính chất đó hiện diện
trong một ngôn ngữ lập trình hiện đại. Và ngôn ngữ C# hội đủ những điều kiện
như vậy, hơn nữa nó được xây dựng trên nền tảng của hai ngôn ngữ mạnh nhất là
C++ và Java..
C# là một trình biên dịch hướng .NET, tất cả các mã của C# luôn luôn chạy
trên trên môi trường .NET Framework. C# được thiết kế dùng riêng cho
Microsoft’s .NET Framework (một nền khá mạnh cho sự phát triển, triển khai,
thực hiện và phân phối các ứng dụng). Nó có thể sinh ra mã đích trong môi
trường .NET. Nó cũng là một ngôn ngữ hoàn toàn hướng đối tượng được thiết kế
dựa trên kinh nghiệm của các ngôn ngữ khác.
Trọng tâm của ngôn ngữ hướng đối tượng là lớp. Lớp định nghĩa kiểu dữ liệu
mới, cho phép mở rộng ngôn ngữ theo hướng cần giải quyết. C# có những từ
khóa dành cho việc khai báo lớp, phương thức, thuộc tính mới. C# hỗ trợ đầy đủ
khái niệm trụ cột trong lập trình hướng đối tượng: đóng gói, thừa kế, đa hình.
C# cũng hỗ trợ giao diện interface, nó được xem như một cam kết với một
lớp cho những dịch vụ mà giao diện quy định. Trong ngôn ngữ C#, một lớp chỉ
có thể kế thừa từ duy nhất một lớp cha, tức là không cho đa kế thừa như trong
ngôn ngữ C++, tuy nhiên một lớp có thể thực thi nhiều giao diện. Khi một lớp
thực thi một giao diện thì nó sẽ hứa là nó sẽ cung cấp chức năng thực thi giao
diện.
28
EBOOKBKMT.COM
Trong ngôn ngữ C#, những cấu trúc cũng được hỗ trợ, nhưng khái niệm
về ngữ nghĩa của nó thay đổi khác với C++. Trong C#, một cấu trúc được giới
hạn, là kiểu dữ liệu nhỏ gọn, và khi tạo thể hiện thì nó yêu cầu ít hơn về hệ điều
hành và bộ nhớ so với một lớp. Một cấu trúc thì không thể kế thừa từ một lớp hay
được kế thừa nhưng một cấu trúc có thể thực thi một giao diện.
Ngôn ngữ C# cung cấp những đặc tính hướng thành phần (component-
oriented), như là những thuộc tính, những sự kiện. Lập trình hướng thành phần
được hỗ trợ bởi CLR cho phép lưu trữ metadata với mã nguồn cho một lớp.
Metadata mô tả cho một lớp, bao gồm những phương thức và những thuộc tính
của nó, cũng như những sự bảo mật cần thiết và những thuộc tính khác. Mã
nguồn chứa đựng những logic cần thiết để thực hiện những chức năng của nó..
Do vậy, một lớp được biên dịch như là một khối self-contained, nên môi trường
hosting biết được cách đọc metadata của một lớp và mã nguồn cần thiết mà
không cần những thông tin khác để sử dụng nó.
C# là ngôn ngữ này cũng hỗ trợ việc truy cập bộ nhớ trực tiếp sử dụng kiểu
con trỏ của C++ và từ khóa cho dấu ngoặc [] trong toán tử. Các mã nguồn này là
không an toàn (unsafe). Và bộ giải phóng bộ nhớ tự động của CLR sẽ không thực
hiện việc giải phóng những đối tượng được tham chiếu bằng sử dụng con trỏ cho
đến khi chúng được giải phóng.
29
EBOOKBKMT.COM
nhận biết kích thước của một đối tượng (kiểu int có kích thước là 4 byte) và khả
năng của nó (như một đối tượng button có thể vẽ, phản ứng khi nhấn,...).
Tương tự như C++ hay Java, C# chia thành hai tập hợp kiểu dữ liệu chính:
Kiểu xây dựng sẵn (built- in) mà ngôn ngữ cung cấp cho người lập trình và kiểu
được người dùng định nghĩa (user-defined) do người lập trình tạo ra.
C# phân tập hợp kiểu dữ liệu này thành hai loại: Kiểu dữ liệu giá trị
(value) và kiểu dữ liệu tham chiếu (reference). Việc phân chi này do sự khác
nhau khi lưu kiểu dữ liệu giá trị và kiểu dữ liệu tham chiếu trong bộ nhớ. Đối với
một kiểu dữ liệu giá trị thì sẽ được lưu giữ kích thước thật trong bộ nhớ đã cấp
phát là stack. Trong khi đó thì địa chỉ của kiểu dữ liệu tham chiếu thì được lưu
trong stack nhưng đối tượng thật sự thì lưu trong bộ nhớ heap.
Tất cả các kiểu dữ liệu xây dựng sẵn là kiểu dữ liệu giá trị ngoại trừ các đối
tượng và chuỗi. Và tất cả các kiểu do người dùng định nghĩa ngoại trừ kiểu cấu
trúc đều là kiểu dữ liệu tham chiếu.
Ngôn ngữ C# đưa ra các kiểu dữ liệu xây dựng sẵn rất hữu dụng, phù hợp
với một ngôn ngữ lập trình hiện đại, mỗi kiểu dữ liệu được ánh xạ đến một kiểu
dữ liệu được hỗ trợ bởi hệ thống xác nhận ngôn ngữ chung (Common Language
Specification: CLS) trong MS.NET.
30
EBOOKBKMT.COM
31
EBOOKBKMT.COM
32
EBOOKBKMT.COM
33
EBOOKBKMT.COM
}]
34
EBOOKBKMT.COM
cần được thực hiện trong vòng lặp while thì phải đặt các lệnh này trong khối
lệnh.
Vòng lặp do...while
Đôi khi vòng lặp while không thoả mãn yêu cầu trong tình huống sau, chúng ta
muốn chuyển ngữ nghĩa của while là “chạy trong khi điều kiện đúng” thành ngữ
nghĩa khác như “làm điều này trong khi điều kiện vẫn còn đúng”. Nói cách khác
thực hiện một hành động, và sau khi hành động được hoàn thành thì kiểm tra
điều kiện. Cú pháp sử dụng vòng lặp do...while như
sau:
do
<Câu lệnh thực hiện>
while ( điều kiện )
Vòng lặp for
Vòng lặp for bao gồm ba phần chính:
Khởi tạo biến đếm vòng lặp
Kiểm tra điều kiện biến đếm, nếu đúng thì sẽ thực hiện các lệnh bên trong vòng
for
Thay đổi bước lặp
Cú pháp sử dụng vòng lặp for như sau:
for ([ phần khởi tạo] ; [biểu thức điều kiện]; [bước
lặp])
<Câu lệnh thực hiện>
Câu lệnh lặp foreach
Vòng lặp foreach cho phép tạo vòng lặp thông qua một tập hợp hay một mảng.
Đây là một câu lệnh lặp mới không có trong ngôn ngữ C/C++. Câu lệnh foreach
có cú pháp chung như sau:
foreach ( <kiểu tập hợp> <tên truy cập thành phần > in < tên tập hợp>)
<Các câu lệnh thực hiện>
35
EBOOKBKMT.COM
Do lặp dựa trên một mảng hay tập hợp nên toàn bộ vòng lặp sẽ duyệt qua
tất cả các thành phần của tập hợp theo thứ tự được sắp. Khi duyệt đến phần tử
cuối cùng trong tập hợp thì chương trình sẽ thoát ra khỏi vòng lặp foreach.
Câu lệnh nhảy break và continue
Khi đang thực hiện các lệnh trong vòng lặp, có yêu cầu như sau: không thực
hiện cáclệnh còn lại nữa mà thoát khỏi vòng lặp, hay không thực hiện các công
việc còn lại của vòng lặp hiện tại mà nhảy qua vòng lặp tiếp theo. Để đáp ứng
yêu cầu trên C# cung cấp hai lệnh nhảy là break và continue để thoát khỏi
vòng lặp. Break khi được sử dụng sẽ đưa chương trình thoát khỏi vòng lặp và
tiếp tục thực hiện các lệnh tiếp ngay sau vòng lặp. Continue ngừng thực hiện
các công việc còn lại của vòng lặp hiện thời và quay về đầu vòng lặp để thực
hiện bước lặp tiếp theo.
2.1.3.1 Lớp
Để định nghĩa một kiểu dữ liệu mới hay một lớp đầu tiên phải khai báo rồi
sau đó mới định nghĩa các thuộc tính và phương thức của kiểu dữ liệu đó. Khai
báo một lớp bằng cách sử dụng từ khoá class. Cú pháp đầy đủ của khai báo một
lớp như sau:
[Thuộc tính] [Bổ sung truy cập] class <Định danh lớp> [: Lớp cơ sở]
{
<Phần thân của lớp: bao gồm định nghĩa các thuộc tính và
phương thức hành động >
}
Định danh lớp chính là tên của lớp do người xây dựng chương trình tạo ra.
Tất cả các thành viên của lớp được định nghĩa bên trong thân của lớp, phần thân
này sẽ được bao bọc bởi hai dấu ({}).
Cũng như nhiều ngôn ngữ lập trình hướng đối tượng khác, kiểu trong C#
được định nghĩa là một lớp (class), và các thể hiện riêng của từng lớp được gọi là
đối tượng (object). Ngoài ra còn có các kiểu khác nhau ngoài kiểu lớp như kiểu
liệt kê, cấu trúc và kiểu ủy quyền (delegates).
36
EBOOKBKMT.COM
Hai thành phần chính cấu thành một lớp là thuộc tính hay tính chất và
phương thức hay còn gọi là hành động ứng xử của đối tượng. Trong C# hành vi
được định nghĩa như một phương thức thành viên của lớp. Phương thức chính là
các hàm được định nghĩa trong lớp. Do đó, ta còn có thể gọi các phương thức
thành viên là các hàm thành viên trong một lớp. Các phương thức này chỉ ra rằng
các hành động mà lớp có thể làm được cùng với cách thức làm hành động đó.
Thông thường, tên của phương thức thường được đặt theo tên hành động, ví dụ
như DrawLine() hay GetString().
37
EBOOKBKMT.COM
38
EBOOKBKMT.COM
Khi đó nếu các biến này không được gán lại trong các phương thức khởi dựng thì
nó sẽ có giá trị mà ta đa khởi tạo.
2.1.4.1 Kế thừa
Trong ngôn ngữ C#, quan hệ đặc biệt hóa được thực thi bằng cách sử dụng
sự kế thừa.Đây không phải là cách duy nhất để thực thi đặc biệt hóa, nhưng nó là
cách chung nhất và tự nhiên nhất để thực thi quan hệ này. Trong ngôn ngữ C# để
tạo một lớp dẫn xuất từ một lớp ta thêm dấu hai chấm vào sau tên lớp dẫn xuất và
trước tên lớp cơ sở:
public class ListBox : Window
Đoạn lệnh trên khai báo một lớp mới tên là ListBox, lớp này được dẫn xuất từ
Window.
Chúng ta có thể đọc dấu hai chấm có thể được đọc như là “dẫn xuất từ”. Lớp dẫn
xuất sẽ kế thừa tất cả các thành viên của lớp cơ sở, bao gồm tất cả các phương
thức và biến thành viên của lớp cơ sở. Lớp dẫn xuất được tự do thực thi các
phiên bản của một phương thức của lớp cơ sở. Lớp dẫn xuất cũng có thể tạo một
phương thức mới bằng việc đánh dấu với từ khóa new.
Các lớp không được kế thừa các phương thức khởi dựng của lớp cơ sở, do đó lớp
dẫn xuất phải thực thi phương thức khởi dựng riêng. Và chỉ có thể sử dụng
phương thức khởi dựng của lớp cơ sở thông qua việc gọi tường minh.
2.1.4.2 Đa hình
Đa hình được hiểu như là khả năng sử dụng nhiều hình thức của một kiểu,
đa hình có sức mạnh hơn kế thừa. Để tạo một phương thức hỗ tính đa hình,
chúng ta cần phải khai báo khóa virtual trong phương thức của lớp cơ sở.
39
EBOOKBKMT.COM
các lớp dẫn xuất. Những lớp trừu tượng được thiết lập như là cơ sở cho những
lớp dẫn xuất, nhưng việc tạo các thể hiện hay các đối tượng cho các lớp trừu
tượng được xem là không hợp lệ. Khi khai báo một phương thức là trừu tượng,
cần cấm bất cứ việc tạo thể hiện cho lớp này.
Phương thức trừu tượng được thiết lập bằng cách thêm từ khóa abstract vào đầu
của phần định nghĩa phương thức, cú pháp thực hiện như sau:
abstract public void DrawWindow( );
Do phương thức không cần phần thực thi, nên không có dấu ({}) mà chỉ có dấu
chấm phẩy (;) sau phương thức. Nếu một hay nhiều phương thức được khai báo
là trừu tượng, thì phần định nghĩa lớp phải được khai báo là abstract.
40
EBOOKBKMT.COM
Specification (CLS). Những ngôn ngữ .NET khác như VB.NET thì không hỗ trợ
việc nạp chồng toán tử, và một điều quan trọng để đảm bảo là lớp đó phải hỗ trợ
các phương thức thay thế cho
phép những ngôn ngữ khác có thể gọi để tạo ra các hiệu ứng tương tự.
Nạp chồng toán tử có thể làm cho mã nguồn của trực quan và những hành
động của lớp được xây dựng giống như các lớp được xây dựng sẵn. Tuy nhiên,
việc nạp chồng toán tử cũng có thể làm cho mã nguồn phức tạp một cách khó
quản lý và phá vỡ cách thể hiện thông thường để sử dụng những toán tử. Hạn chế
việc sử dụng tùy tiện các nạp chồng toán tử bằng những cách sử dụng mới và
những cách đặc trưng. Khi thực hiện nạp chồng toán tử cần quan tâm đến các luật
sau :
Định nghĩa những toán tử trong kiểu dữ liệu giá trị, kiểu do ngôn ngữ xây dựng
sẵn.
Cung cấp những phương thức nạp chồng toán tử chỉ bên trong của lớp nơi mà
những phương thức được định nghĩa.
Sử dụng tên và những kí hịêu qui ước được mô tả trong Common Language
Specification (CLS).
Phải cung cấp các phương thức thay thế cho toán tử được nạp chồng. Đa số các
ngôn ngữ điều không hỗ trợ nạp chồng toán tử.
Những lớp bên trong Framework được viết với ngôn ngữ được xác nhận là
chung nhất (CLS). CLS là một tập hợp các luật hay các quy tắc mà tất cả các
41
EBOOKBKMT.COM
ngôn ngữ thực hiện bên trong .NET platform phải tuân thủ theo. Tập hợp luật này
cũng bao gồm kiểu dữ liệu hệ thống chung. Lợi ích của CLS là mã nguồn được
viết trong một ngôn ngữ có thể được gọi sử dụng bởi một ngôn ngữ khác Bởi vì
thông thường bên trong Framework với CLS, chúng có thể sử dụng không chỉ
ngôn ngữ C# mà còn bất cứ ngôn ngữ tương thích với CLS như là Visual
Basic.NET và JScript.NET.
Kiểu dữ liệu trong namespace
Mã nguồn bên trong Framework được tổ chức bên trong namespace. Có hàng
trăm namespace bên trong Framework được sử dụng để tổ chức hàng ngàn lớp
đối tượng và các kiểu dữ liệu khác. Một vài namespace thì được lưu trữ bên trong
namespace khác.
Tiêu chuẩn ECMA
Không phải tất cả kiểu dữ liệu bên trong namespace thì cần thiết phải tương
thích với tất cả những ngôn ngữ khác. Những lớp đối tượng được chuẩn hóa thì
được định vị bên trong namespace System. Những namespace khác chứa những
lớp không được chuẩn hóa. Nếu một lớp không phải là một phần của tiêu chuẩn,
nó sẽ không được hỗ trợ trong tất cả hệ điều hành và môi trường thực thi mà
chúng được viết để hỗ trợ C#.
42
EBOOKBKMT.COM
Lớp Math
Phương thức Mô tả
Abs Trả về trị tuyệt đối của một số
Ceiling Trả về giá trị nhỏ nhất hay bằng giá trị đưa ra
Exp Trả về giá trị e với mũ đưa ra
Floor Trả về giá trị lớn nhất hay bằng giá trị đưa ra
IEEERemainder Trả về phần dư của phép chia hai hai số thực. Phép
chia này theo tiêu chuẩn của IEEE cho phép toán dấu
chấm động nhị phân.
Log Trả về giá trị logarit của giá trị đưa ra
Log10 Trả về giá trị logarit cơ số 10 của số đưa ra
Max Trả về số lớn trong hai số
Min Trả về số nhỏ trong hai số
Pow Trả về kết quả xy
Round Trả về giá trị được làm tròn
Sign Trả về giá trị dấu của một số. -1 nếu số âm và 1 nếu
số dương
Sqrt Trả về căn bậc hai của một số
Acos Trả về giá trị một góc mà cosin bằng với giá trị đưa ra
Asin Trả về giá trị một góc mà sin bằng với giá trị đưa ra
Atan Trả về giá trị của một góc mà tang bằng với góc đưa
43
EBOOKBKMT.COM
Ra
Atan2 Trả về giá trị của một góc mà tang bằng với tang của
điểm (x,y) đưa ra
Cos Trả về giá trị cosin của một góc đưa ra
Cosh Trả về giá trị hyperbolic cosin của góc đưa ra
Sin Trả về giá trị sin của góc đưa ra
Sinh Trả về giá trị hyperbolic của góc đưa ra
Tan Trả về giá trị tang của góc
Tanh Trả về giá trị hyperbolic tang của góc.
Bảng 8 : Phương thức của lớp Math
44
EBOOKBKMT.COM
Thứ tự của việc đọc một tập tin: Khi đọc hay viết một tập tin, cần thiết phải theo
một trình tự xác định. Các bước cơ bản để làm việc với một tập tin là:
Mở hay tạo mới tập tin
Thiết lập một luồng ghi hay đọc từ tập tin
Đọc hay ghi dữ liệu lên tập tin
Đóng lập tin lại
Window Form là công cụ dùng để tạo các ứng dụng Window, nó mượn các
ưu điểm mạnh của ngôn ngữ Visual Basic: dễ sử dụng, hỗ trợ mô hình RAD
đồng thời kết hợp với tính linh động, hướng đối tượng của ngôn ngữ C#.
Trong lớp Windows Form có rất nhiều phương thức khác nhau khi có một
sự kiện trên Form xảy ra. Bất kỳ một ứng dụng Windows Form nào cũng đều
thừa kế từ đối tượng Form, ta có thể dùng đối tượng này để tạo ra các cửa sổ
chuẩn như: các cửa sổ trôi (floating form), thanh công cụ (tools), hộp thoại
(dialog box)… Mọi điều khiển trong bộ công cụ của Windows Fomr (Label,
Button, ListBox…) đều thuộc vùng tên này.
ADO.NET tương tự như ADO, điểm khác biệt chính là ADO.NET là một
kiến trúc dữ liệu rời rạc, không kết nối (Disconnected Data Architecture). Với
kiến trúc này dữ liệu nhận về từ cơ sở dữ liệu và được lưu trong bộ nhớ cache
45
EBOOKBKMT.COM
của máy người dùng. Người dùng có thể thao tác trên dữ liệu mà họ nhận về và
chỉ kết nối đến cơ sở dữ liệu khi họ cần thay đổi các dòng dữ liệu hay yêu cầu dữ
liệu mới.
ADO.NET kết nối vào cơ sở dữ liệu để lấy dữ liệu và kết nối trở lại để cập
nhật dữ liệu khi người dùng thay đổi chúng. Hầu hết mọi ứng dụng đều sử dụng
nhiều thời gian cho việc đọc và hiển thị dữ liệu, vì thế ADO.NET đã cung cấp
một tập hợp con các đối tượng dữ liệu không kết nối cho các ứng dụng để người
dùng có thể đọc và hiển thị chúng mà không cần kết nối vào cơ sở dữ liệu. Có hai
thành phần chính của ADO.NET là truy cập và thao tác dữ liệu
46
EBOOKBKMT.COM
- DataAdapter: Cầu nối giữa đối tượng DataSet, DataTable với cơ sở dữ liệu
nguồn.
* DataSet :được thiết kế để có thể thích ứng với bất kỳ nguồn dữ liệu nào. Nó
chứa một hay nhiều đối tượng DataTable mà nó được tạo từ tập các dòng và cột
dữ liệu cùng với khóa chính, khóa ngoài, ràng buộc và các thông tin liên quan
đến đối tượng DataTable này.
47
EBOOKBKMT.COM
ROBOT TỰ ĐỘNG
Ý tưởng tự động hoá việc xếp rỡ hàng hoá tại các nhà kho, cảng đã được
các nhà nghiên cứu trong lĩnh vực tự động hoá đề ra từ những năm cuối của thế
kỷ 20. Ngoài các nhiệm vụ định vị các sản phẩm, xây dựng các hệ nâng chuyển
trong kho cảng một nhiệm vụ rất thiết thực và không kém phần lý thú là nghiên
cứu các xe nâng hàng tự động, không có người lái đã được nhiều nhóm nghiên
cứu tự động hoá và điều khiển thực hiện.
3.1.1 Nhiệm vụ
Ý tưởng tự động hoá việc xếp rỡ hàng hoá tại các nhà kho, cảng đã được
các nhà nghiên cứu trong lĩnh vực tự động hoá đề ra từ những năm cuối của thế
kỷ 20. Ngoài các nhiệm vụ định vị các sản phẩm, xây dựng các hệ nâng chuyển
trong kho cảng một nhiệm vụ rất thiết thực và không kém phần lý thú là nghiên
cứu các xe nâng hàng tự động, không có người lái đã được nhiều nhóm nghiên
cứu tự động hoá và điều khiển thực hiện. Một số tác giả đã sử dụng các cách
khác nhau như: tìm vị trí 3D của các giá đỡ hàng dựa trên các đặc điểm màu sắc
và hình học của chúng, sử dụng hai camera quang học hoặc hai laser scanner để
thực hiện tính toán khoảng cách đến đối tượng, hoặc sử dụng 1 camera để xác
định hướng và khoảng cách. Đã có một số sản phẩm xe nâng hàng có gắn camera
được điều khiển từ xa đã được đưa vào sử dụng. Người điều khiển xe thông qua
một màn hình điều khiển từ xa lái xe nâng hạ đến các vị trí cần thiết, thực hiện
các thao tác cần thiết. Tuy nhiên, cho đến nay các xe nâng hạ tự động hoàn toàn
không người lái thì mới đang ở dạng nghiên cứu và thực sự chưa có mẫu thương
phẩm nào trong thực tế.
48
EBOOKBKMT.COM
Một xe nâng hàng từ động (thực chất là một robot) có nhiệm vụ tiếp cận
một giá đỡ hàng để nâng giá đỡ (có hàng hoặc không có hàng) di chuyển đến một
vị trí khác và hạ nó xuống. Để xe tiếp cận được giá đỡ một số thông số cơ bản
cần được cung cấp cho bộ xử lý trên xe
Hình 9:Giá đỡ hàng tiêu chuẩn và các kích thước (dài x rộng x cao) mm. Từ trên
xuống dưới, từ trái qua phải: 2a): châu Âu (1200 x 800 x 144) 2b): Mỹ 2c): Hàn
Quốc (1100 x 1100 x 150) 2d): Trung Quốc (1100 x 1100 x 150).
49
EBOOKBKMT.COM
Oxyzcamera là hệ toạ độ của camera với các trục Ocxc, Ocxc, Ocxc.
Oxyzfork là hệ toạ độ của càng xe nâng với các trục Ofxf, Ofxf, Ofxf.
Oxyzbody là hệ toạ độ của xe nâng với các trục Obxb, Obxb, Obxb.
Nếu chúng ta chiếu song song xe nâng và giá đỡ lên mặt phẳng O wxwyw
thì góc giữa hình chiếu của trục đối xứng s-s của giá đỡ với trục O byb của xe
nâng được gọi là hướng của xe nâng với giá đỡ (hoặc ngược lại).
50
EBOOKBKMT.COM
của xe nâng đến tâm hình học theo ba chiều của giá đỡ. Nó là khoảng cách từ tâm
điểm tiêu cự của camera gắn trên xe nâng đến điểm tâm hình học của mặt trước
của giá đỡ.
Hình 11: Mô hình xác định khoảng cách sử dụng camera với hai mặt phẳng ảnh
và mặt phẳng đối tượng song song với nhau.
Giả sử mặt phẳng ảnh và mặt đối tượng song song với nhau. Các tia chiếu
và truc Ox cùng trong một mặt phẳng. Quan hệ giữa khoảng cách thực từ tiêu
điểm ống kính đến mặt phẳng đối tượng D và ảnh của đối tượng h, kích thước
thực của đối tượng H và tiêu cự f của ống kính. Các kích thước tính bằng
milimet.
H h
=
D f
H H
Từ đó suy ra : D=f =f
h n∗k
W
k=
N
51
EBOOKBKMT.COM
Trong trường hợp mặt phẳng ảnh của camera và mặt phẳng đối tượng
không song song với nhau chúng ta có mô hình. Trong mô hình này θ là góc
nghiêng của camera với mặt phẳng ngang theo phương đứng (góc til), Φ là góc
lệch của camera với trục đối xứng của đối tượng theo phương ngang (góc pan).
Hình 12: Mô hình camera pinhole khi mặt phẳng ảnh không song song mặt
phẳng đối tượng
52
EBOOKBKMT.COM
x là kích thước ảnh ngang - horizontal image dimension (tính bằng pixels),
Sx là kích thước sensor theo chiều ngang - the horizontal sensor size (tính bằng
mm),
Px kích thước sensor ngang - the horizontal sensor size tính bằng pixels.
Oy là kích thước ảnh đứng - vertical image dimension (tính bằng mm),
y là kích thước ảnh đứng - vertical image dimension (tính bằng pixels),
Sy kích thước sensor đứng - the vertical sensor size (tính bằng mm) và
Py là kích thước sensor đứng - vertical sensor size tính bằng pixels.
Khoảng cách từ tiêu điểm đến đường tâm của đối tượng theo phương X có thể
được tính toán như sau:
53
EBOOKBKMT.COM
Theo thông số kỹ thuật đã cho của ống kính và chiều cao hình học
của vị trí đặt camera chúng ta có kích thước và khoảng cách từ camera đến
đối tượng chiếu trên mặt phẳng xOy:
Các khoảng cách đối tượng thực có thể được tính từ các các góc và các giá trị đã
biết như sau:
54
EBOOKBKMT.COM
3.2.2 Quá trình thu ảnh và các yêu cầu của hệ thống
55
EBOOKBKMT.COM
Đối với nhiễu cộng ta dùng mạch xử lý tuyến tính để lọc nhiễu, còn đối với nhiễu
nhân thì ta dùng mạch xử lý phi tuyến để lọc nhiễu.
Đối với nhiễu đốm, nhiễu muối tiêu ta sử dụng thuật toán lọc trung vị. Ý tưởng
chính của thuật toán như sau: ta sử dụng một cửa sổ lọc (thường là ma trận 3×3)
quét qua lần lượt từng điểm ảnh của ảnh đầu vào input. Tại vị trí mỗi điểm ảnh
lấy giá trị của các điểm ảnh tương ứng trong vùng kích thước của ảnh gốc “lấp”
vào ma trận lọc. Sau đó sắp xếp các điểm ảnh trong cửa sổ này thành 1 dãy x 1 ;x2;
…;nn (tăng dần hoặc giảm dần tùy ý). Và tìm trung vị cho dãy nếu n lẻ thì x [ ]
n
2
+1
{
A ( x , y ) = 1 , khi B( x , y )≥ T với 0≤ T ≤ 255
0 , khi B ( x , y ) <T
Hàm này được hiện thực hóa bằng một bảng dò tìm(LUT- Look Up Table) trên
một ảnh xám B(x,y) được biến đổi thành một ảnh nhị phân A r(x,y), hay còn gọi
là một quá trình nhị phân hóa. Với phương pháp ngưỡng trên đây phân loại điểm
56
EBOOKBKMT.COM
ảnh dựa trên đặc tính chất “giá trị xám” của các điểm đối tượng và các điểm nền.
Đặc điểm của vùng lân cận điểm ảnh không được quan tâm đến. Khi quyết định
xem một điểm ảnh nào đấy có thuộc về đối tượng hay không phương pháp này
chỉ hướng theo giá trị xám của một điểm ảnh. Một kết quả như ý đòi hỏi có một
ngưỡng tối ưu được xác định, ngưỡng này có thể dễ dàng tìm được ở nhiều ứng
dụng.
Để dễ dàng xử lý trên ảnh của giá đỡ hàng (hàng) ta tiến hành phân
ngưỡng ảnh ban đầu thành gồm 2 màu đen và trắng với ngưỡng T = 128. Quá
trình tạo ảnh đen trắng sẽ giảm bớt nhiễu trên ảnh. Quá trình chuyển anh ban đầu
về anh đen trắng (quá trình phân ngưỡng) được thực hiện như sau:
Chuyển ảnh gốc về ảnh xám.
Biến đổi ảnh xám về ảnh nhị phân
for (y = 0; y < bm.Height - 1; y++)
{
for (x = 0; x < bm.Width - 1; x++)
{
c = bm.GetPixel(x, y);
if (c.R < band)
bitmap.SetPixel(x, y, Color.FromArgb(0, 0, 0));
else
bitmap.SetPixel(x, y, Color.FromArgb(255, 255, 255));
}
Qua các bước tiền xử lý (lọc nhiễu) và phân ngưỡng ta thu được ảnh gồm
2 màu đen và trắng. Ta lấy giá trị 0 và 1 của ảnh đen trắng lưu vào ma trận 2
chiều với số hàng là chiều cao của ảnh số cột là chiều rộng của ảnh. Ta tiến hành
xử lý trên ma trận nhị phân thu được.
57
EBOOKBKMT.COM
Hình 13:Ảnh gốc và ảnh sau khi thực hiện phân ngưỡng
Giả thiết mô hìnhxử lý được cho như sau:
- Hệ thống đèn chiếu sáng phải đảm bảo độ sáng để không làm nhòe ảnh
thu được.
58
EBOOKBKMT.COM
- Camera đặt chính diện với giá đỡ hàng (hàng) đảm bảo khung nhìn của
camera bao quát toàn bộ giá đỡ (hàng) trên nền trắng. Và khi đó quá
trình thu ảnh được thực hiện liên tục.
Dựa vào ảnh ta đưa ra các thông số về khoảng cách. Thông số về khoảng
cách được đưa ra dựa vào ảnh nên chất lượng ảnh sẽ quyết định đến sai số về
khoảng cách tính toán so với khoảng cách tính toán trong thực tế do đó ảnh thu
nhận được phải đảm bảo nét và ít nhiễu hay không có nhiễu, trong khi đó hệ
thống chiếu sáng không phải thiết kế phức tạp.
3.3 Tính toán khoảng cách dựa trên ảnh thu được
Chương trình xử lý ảnh đưa ra được chiều cao của ảnh để dựa vào đó ta có
thể áp dụng để tính khoảng cách dựa trên mô hình camera pihole.
Bắt đầu
1.Thu ảnh
K
Kết thúc
59
EBOOKBKMT.COM
-Tính chiều cao ảnh: Để tính chiều cao của ảnh ta thực hiện qua 2 bước:
Bước 1: Tính điểm đen có vị trí nhỏ nhất tính theo chiều rộng ảnh.
if (bm.GetPixel(x, y).G == 0)
{
Ymin = y;
goto A;
}
}
A: { }
Bước 2: Tính điểm đen có vị trí lớn nhất theo chiều rộng ảnh
for (int y = bm.Height-1 ; y >0; y--)
{
for (int x = 0; x < bm.Width-1 ; x++)
{
if (bm.GetPixel(x, y).G == 0)
{
Ymax = y;
goto B;
}
}
}
B: { }
60
EBOOKBKMT.COM
- Yêu cầu: Camera thu ảnh màu 24bit định dạng .bmp
Giao diện chương trình thực nghiệm và kết quả chương trình thực nghiệm :
61
EBOOKBKMT.COM
Tiếp tục: Tiếp tục thực hiện quá trình thu ảnh
Nhị phân: Thực hiện lấy ảnh và biến đổi ảnh màu sang ảnh nhị phân và tính toán
khoảng cách từ camera và kết quả tính toán được thu lại trong bảng sau:
62
EBOOKBKMT.COM
63
EBOOKBKMT.COM
KẾT LUẬN
1 . Đánh giá kết quả
Qua đợt làm đồ án tốt nghiệp này, với sự nỗ lực của bản thân và sự giúp
đỡ của thầy cô, các bạn, đặc biệt là thầy giáo Tiến sỹ Phạm Đức Long em đã
hoàn thành đề tài: “Ứng dụng xử lý ảnh trong điều khiển robot tự động”. Chương
trình đạt được một số kết quả như sau:
Chưa tính toán được các trường hợp hai mặt phẳng ảnh và mặt
phẳng đối tượng không song song và các góc khác nhau giữa
camera và đối tượng.
Chương trình được thực hiện trong phòng với các trường hợp
ảnh không có nhiễu.
Có thể phát triển ứng dụng để cải thiện được nhược điểm :
Tính toán các trường hợp hai mặt phẳng ảnh và mặt phẳng đối
tượng không song song và các góc khác nhau giữa camera và đối
tượng.
Đưa chương trình vào thực nghiệm thực tế.
64
EBOOKBKMT.COM
[1]. Đỗ Năng Toàn, Phạm Việt Bình, Giáo Trình Môn Học Xử Lý Ảnh,
trường đại học công nghệ thông tin và truyền thông ,ĐH thái nguyên, 2007.
[2]. Nguyễn Quang Hoan ,Giáo Trình Xử Lý Ảnh, học viện công nghệ bưu
chính viễn thông, 2006
[3]. Lương Mạnh Bá, Nguyễn Thanh Thủy, Nhập Môn Xử Lý Ảnh Số,
Nhà xuất bản Khoa học và Kỹ thuật, 2003.
[4] Phạm Hữu Khang, C# 2005 tập 2 lập trình windows form, nhà xuất
bản lao động - xã hội, 2006.
[5] Phương Lan, Phạm Hữu Khang, kỹ thuật lập trình C#.net toàn tập,
nhà xuất bản lao động - xã hội, 2005
[6]Website :
http://www.congdongcviet.com/
http://www.tailieu.vn/
http://www.codeproject.com/Articles/3703/How-to-Load-Display-images-
with-C
65