Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 65

EBOOKBKMT.

COM

MỤC LỤC

MỤC LỤC..............................................................................................................1

LỜI CẢM ƠN.........................................................................................................5

LỜI CAM ĐOAN...................................................................................................6

LỜI NÓI ĐẦU........................................................................................................7

DANH MỤC HÌNH ẢNH......................................................................................8

CHƯƠNG 1............................................................................................................9

TỔNG QUAN VỀ XỬ LÝ ẢNH...........................................................................9

1.1 Tổng quan về xử lý ảnh................................................................................9

1.2 Các vấn đề cơ bản trong xử lý ảnh.................................................................10

1.2.1 Một số khái niệm.....................................................................................10

1.2.2 Thu nhận ảnh...........................................................................................10

1. 2.3 Biểu diễn ảnh..........................................................................................11

1.2.4 Các lĩnh vực xử lý ảnh.............................................................................12

1.2.4.1 Nâng cao chất lượng ảnh..................................................................12

1.2.4.2 Khôi phục ảnh...................................................................................12

1.2.4.3 Phân tích ảnh....................................................................................13

1.2.4.4 Nén ảnh.............................................................................................13

1.2.4.5 Tổng hợp ảnh....................................................................................13

1.2.5 Một số hệ thống xử lý ảnh cơ bản...........................................................13

1.3 Một số phương pháp xử lý ảnh.......................................................................14

1. 3.1 Kỹ thuật tăng giảm độ sáng....................................................................14

1.3.2 Tăng giảm độ tương phản........................................................................16

1
EBOOKBKMT.COM

1.3.3 Tách ngưỡng............................................................................................18

1.3.4 Phép giãn ảnh đa cấp xám......................................................................18

1.3.4.1 Định nghĩa........................................................................................18

1.3.4.2 Thuật toán.........................................................................................18

1.3.5 Các tác động ảnh xám cục bộ.................................................................20

1.3.5.1 Tác động nhân chập ảnh...................................................................20

1.3.5.2 Các phương pháp lọc-làm nhẵn........................................................21

1.3.5.3 Bộ lọc phi tuyến................................................................................22

1.3.5.4 Lọc phi tuyến....................................................................................23

1.3.6 Phép co ảnh đa cấp xám..........................................................................24

1.3.6.1 Định nghĩa........................................................................................24

1.3.6.2 Thuật toán.........................................................................................24

1.3.7 Các phép biến đổi hình học.....................................................................24

1.3.7.1 Phép dịch ảnh....................................................................................24

1.3.7.2 Phép phóng to hoặc thu nhỏ ảnh.......................................................25

1.3.7.3 Phép quay ảnh...................................................................................25

1.3.7.4 Kết hợp các phép biến đổi hợp nhất.................................................26

CHƯƠNG 2 TỔNG QUAN VỀ C SHARP.........................................................28

2.1 Tổng quan về ngôn ngữ C sharp (C #)...........................................................28

2.1.1 Giới thiệu chung về ngôn ngữ C sharp (C#)............................................28

2.1.2 Nền tảng ngôn ngữ C#.............................................................................29

2.1.2.1 Kiểu dữ liệu......................................................................................29

2.1.2.2 Biến, hằng và toán tử........................................................................31

2.1.2.3 Câu lệnh............................................................................................32

2.1.3 Xây dựng lớp, đối tượng..........................................................................36

2
EBOOKBKMT.COM

2.1.3.1 Lớp....................................................................................................36

2.1.3.2 Thuộc tính truy cập...........................................................................37

2.1.3.3 Tham số của phương thức................................................................38

2. 1.3.4 Đối tượng.........................................................................................38

2.1.3.5 Khởi tạo biến thành viên...................................................................38

2.1.4 Kế thừa và đa hình...................................................................................39

2.1.4.1 Kế thừa.............................................................................................39

2.1.4.2 Đa hình.............................................................................................39

2.1.4.3 Lớp trừu tượng..................................................................................39

2.1.5 Nạp chồng toán tử....................................................................................40

2.1.6 Các lớp cơ sở .NET................................................................................41

2.1.6.1 Lớp đối tượng trong .NET Framework...........................................41

2.1.6.2 Lớp Timer........................................................................................42

2.1.6.3 Lớp về thư mục & hệ thống.............................................................42

2.1.6.4 Lớp Math.........................................................................................43

2.1.6.5 Lớp thao tác tập tin..........................................................................44

2.1.6.6 Làm việc với tập tin dữ liệu..............................................................44

2.1.7 Ứng dụng Window với Window Form....................................................45

2.1.8Truy cập dữ liệu với ADO.NET...............................................................45

CHƯƠNG 3 ỨNG DỤNG XỬ LÝ ẢNH TRONG ĐIỀU KHIỂN......................47

ROBOT TỰ ĐỘNG..............................................................................................47

3.1 Hoạt động của robot.......................................................................................48

3.1.1 Nhiệm vụ.................................................................................................48

3.1.2 Hướng của giá đỡ hàng so với xe nâng tự động.....................................49

3.1.3 Khoảng cách từ xe tự động đến giá đỡ hàng...........................................50

3
EBOOKBKMT.COM

3.1.4 Xác định khoảng cách..............................................................................50

3.1.5 Kích thước ảnh thực của đối tượng.........................................................52

3.2 Ứng dụng xử lý ảnh để tính khoảng cách.......................................................54

3.2.1 Mô tả bài toán..........................................................................................54

3.2.2 Quá trình thu ảnh và các yêu cầu của hệ thống......................................55

3.2.2.1 Đọc ảnh.............................................................................................55

3.2.2.2 Lọc nhiễu..........................................................................................55

3.2.2.3 Phân ngưỡng.....................................................................................56

3.3 Tính toán khoảng cách dựa trên ảnh thu được................................................59

3.4 Xây dựng chương trình...............................................................................60

3.4.1Môi trường ứng dụng................................................................................60

3.4.2 Chương trình............................................................................................61

3.4.2.1 Kết quả thực nghiệm.........................................................................61

KẾT LUẬN..........................................................................................................64

1 . Đánh giá kết quả..............................................................................................64

2. Hướng phát triển...............................................................................................64

TÀI LIỆU THAM KHẢO....................................................................................65

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.

Thái nguyên, tháng 06 năm 2012


Sinh viên
Nguyễn Thị Thu Hoàn

5
EBOOKBKMT.COM

LỜI CAM ĐOAN

Đồ á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

Nguyễn Thị Thu Hoàn

6
EBOOKBKMT.COM

LỜI NÓI ĐẦU

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.

Mục tiêu của đề tài cần giải quyết vấn đề sau:

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:

Chương 1 : Tổng quan về xử lý ảnh.

Chương 2 : Tổng quan về C sharp.

Chương 3: Ứng dụng xử lý ảnh để điều khiển robot tự động.

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

DANH MỤC HÌNH ẢNH


Hình 1: Các bước cơ bản của hệ thống xử lý ảnh..................................................9
Hình 2: Biểu diễn của một mức xám của ảnh số..................................................11
Hình 3: Hệ tọa độ màu RGB................................................................................12
Hình 4: Ảnh gốc (a); ảnh đã giảm độ sáng (b); ảnh đã được tăng cường độ sáng
(c)..........................................................................................................................16
Hình 5: (a) Ảnh gốc; (b) Ảnh đã giảm độ tương phản; (c) Ảnh đã tăng độ tương
phản......................................................................................................................17
Hình 6: (a):ảnh xám. (b):ảnh đen trắng...............................................................18
Hình 7: Kiến trúc ADO.NET................................................................................46
Hình 8: Xe nâng hàng có người lái......................................................................48
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
Hình 10: Các hệ tọa độ.........................................................................................50
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........................................................51
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
Hình 13:Ảnh gốc và ảnh sau khi thực hiện phân ngưỡng....................................58
Hình 14: Mô hình chương trình xử lý...................................................................58
Hình 15: Giao diện chương trình.........................................................................61
Hình 16: Giao diện thực hiện chính.....................................................................62

8
EBOOKBKMT.COM

CHƯƠNG 1

TỔNG QUAN VỀ XỬ LÝ ẢNH

1.1 Tổng quan về xử lý ảnh

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:

Hình 1: Các bước cơ bản của hệ thống xử lý ảnh


Theo sơ đồ trên, ảnh cần được xử lý sẽ thu qua hệ thống thu nhận ảnh. Hệ thống
thu ảnh này bao gồm các thiết bị chụp ảnh như camera, máy quét, máy scanner,
máy chụp hình, TiVi camera…
Ảnh sau khi thu nhận qua hệ thống thu nhận ảnh sẽ tiền xử lý, trích chọn đặc
trưng, hậu xử lý,sau đó ảnh đượclưu thành file để đưa vào máy tính xử lý, lưu

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.

1.2 Các vấn đề cơ bản trong xử lý ảnh

1.2.1 Một số khái niệm

 Pixel (Picture Element): Phần tử ảnh


Ảnh trong thực tế là một ảnh liên tục về không gian và về giá trị độ sáng.
Để có thể xử lý ảnh bằng máy tính cần thiết phải tiến hành số hóa ảnh. 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 về 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ị), về nguyên tắc bằng mắt thường không phâ biệt được hai
mức kề nhau. Do vậy người ta sử dụng khái niệm Pixel- phần tử ảnh. Mỗi pixel
gồm một cặp tọa độ x,y và màu. Cặp tọa độ x,y tạo nên độ phân giải (resolution).
 Ảnh: Là một tập hợp các điểm ảnh. Khi được số hóa, nó thường được biểu diễn
bởi mảng hai chiều l (n,p): n là số dòng, p là số cột. ta nói ảnh gồm n*p pixel. Ta
ký hiệu l (x,y) để chỉ một điểm ảnh.
 Mức xám (Gray level): Là kết quả của sự mã hóa tương ứng một cường độ sáng
của mỗi điểm ảnh với một giá trị số - kết quả của quá trình lượng tử hóa.
 Lược đồ mức xám (Histogram): Là mộ hàm cung cấp tần suất xuất hiện của mỗi
mức xám. Lược đồ mức xám được biểu diễn bởi hệ tọa độ vuông góc x,y. Trong
hệ tọa độ này, trục hoành biểu diễn số mức xám từ 0 đến N, N là số mức xám (Số
điểm ảnh có cùng mức xám).

1.2.2 Thu nhận ảnh

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

1. 2.3 Biểu diễn ảnh

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

Hình 2: Biểu diễn của một mức xám của ảnh số


Sau quá trình số hóa ta sẽ thu được một ma trận tương ứng với ảnh cần
xét, mỗi phần tử của ma trận tương úng với một điểm ảnh. Các điểm này thường
được đặc trưng bởi tọa độ màu RGB tương ứng với nó trong hệ tọa độ màu cơ
bản sau:

11
EBOOKBKMT.COM

Hình 3: Hệ tọa độ màu RGB


Về mặt toán học ta có thể xem ảnh như là một hàm hai biền(x,y), với x,y
là các biến tọa độ. Giá trị số tại điểm (x,y) tương ứng với giá trị xám hoặc độ
sáng của ảnh.

1.2.4 Các lĩnh vực xử lý ảnh

1.2.4.1 Nâng cao chất lượng ảnh


Nâng cao chất lượng ảnh là quá trình xử lý ảnh để nâng cao chất lượng của
ảnh. Nó làm nổi bật một số đặc tính nào đó của ảnh nhằm phục vụ cho hiển thị
hoặc các quá trình phân tích tiếp theo. Tùy theo các ứng dụng khác nhau mà
chúng ta có các kỹ thuật nâng cao chất lượng ảnh khác nhau. Nâng cao chất
lượng ảnh có quan hệ gần gũi với khôi phục ảnh. Khi một ảnh bị nhiễu, thì khôi
phục ảnh gốc thường đưa đến nâng cao chất lượng ảnh. Có một số khác biệt giữa
khôi phục và nâng cao chất lượng ảnh. Trong khôi phục ảnh, một ảnh gốc bị
nhiễu, và mục tiêu là làm cho ảnh sau khi xử lý càng giống ảnh gốc càng tốt. Còn
nâng cao chất lượng ảnh thì mục tiêu là làm cho ảnh sau khi xử lý được tốt hơn
khi chưa xử lý. Như vậy một ảnh không bị nhiễu thì không thể được xử lý bằng
các kỹ thuật khôi phục ảnh nhưng ảnh đó có thể được xử lý bằng các kỹ thuật
nâng cao chất lượng ảnh. Nhưng một ảnh bị nhiễu thì nó có thể được xử lý vừa
bằng các kỹ thuật khôi phục ảnh và nâng cao chất lượng ảnh.

1.2.4.2 Khôi phục ảnh


Bất kỳ ảnh nào được thu bằng các thiệt bị điện, hay quang điện, hay
quang học thường bị nhiễu bởi các môi trường cảm biến của các thiệt bị đó. Các
loại nhiễu có thể là nhiễu hệ thống, bị mờ do lệch tiêu điểm của camera, nhiễu

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.

1.2.4.3 Phân tích ảnh


Là quá trình suy luận, tính toán dựa vào các đặc tính thể hiện trên hình
ảnh để từ đó rút ra được các thông tin định lượng về ảnh. Phân tích ảnh có thể
tách biên các vật thể trên ảnh, đo lường, phân loại, mô tả, so sánh chúng. Mặt
khác, từ việc phân tích ảnh cũng có thể suy ra các số liệu thống kê về hình ảnh.

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

1.2.4.4 Nén ảnh


Nén ảnh bao gồm các kỹ thuật nén dữ liệu hình ảnh nhằm giảm tối thiểu dung
lượng ảnh, ảnh nén trước khi mô tả hay xử lý cần được giải nén.

1.2.4.5 Tổng hợp ảnh


Tạo ra hình ảnh từ những hình ảnh khác hoặc từ các số liệu không phải ảnh.
Quá trình tổng hợp ảnh được sử dụng khi một hình ảnh mà ta muốn có nhưng
không hề thu nhận được (do ảnh không có thực).

1.2.5 Một số hệ thống xử lý ảnh cơ bản


Một hệ thống xử lý ảnh cơ bản có thể bao gồm: Máy tính cá nhân kèm
theo vi mạch chuyển đổi đồ họa VGA hoặc SVGA, đĩa chứa các ảnh mà bạn
dùng để kiểm tra các thuật toán và một màn hình có hỗ trợ VGA hoặc SVGA.

13
EBOOKBKMT.COM

1.3 Một số phương pháp xử lý ảnh

1. 3.1 Kỹ thuật tăng giảm độ sáng


Tăng cường độ sáng (Brightness) của một ảnh có thể được hiểu như sự
phát sáng toàn bộ ảnh. Hay nói một cách cụ thể đó là sự phát sáng toàn bộ của
mọi Pixel trong ảnh đó.

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

Biểu thức cho kỹ thuật Brightness có dạng:

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.

Thuật toán chung được miêu tả bằng :

If (Brightness = True) Then // Tăng độ sáng

NewValue = OldValue + Adjustment;

14
EBOOKBKMT.COM

Else NewValue = OldValue - Adjustment; // Giảm độ sáng

If (NewValue < ValueMin) Then NewValue = ValueMin;

If (NewValue > ValueMax) Then NewValue = ValueMax;

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

Thuật toán trên có thể được cải tiến như sau:

If (Brightness = True) Then

NewValue = OldValue + Adjustment;

If (NewValue > 255) Then NewValue = 255;

Else // Brightness=False

NewValue = OldValue - Adjustment;

If (NewValue < 0) Then NewValue = 0;

Với biến điều chỉnh màu Adjustment được khai báo kiểu Byte.

15
EBOOKBKMT.COM

(a) (b) (c)

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.

1.3.2 Tăng giảm độ tương phản


Độ tương phản (Contrast) thể hiện sự thay đổi cường độ sáng của đối
tượng so với nền, hay nói cách khác, độ tương phản là độ nổi của điểm ảnh hay
vùng ảnh so với nền.
Ảnh số là tập hợp các điểm, mà mỗi điểm có giá trị độ sáng khác nhau. Ở đây,
độ sáng để mắt người dễ cảm nhận ảnh song không phải là quyết định. Thực tế
chỉ ra rằng hai đối tượng có cùng độ sáng nhưng đặt trên hai nền khác nhau sẽ
cho cảm nhận khác nhau. Vì vậy ta có thể thay đổi độ tương phản của ảnh sao
cho phù hợp.
Việc làm tăng độ tương phản rất hữu ích khi tiến hành xử lý trước theo
phương pháp phân ngưỡng. Bằng việc làm tăng độ tương phản, sự khác nhau của
giá trị nền và đối tượng, độ dốc của cạnh đối tượng được tăng lên. Do đó sau khi
làm tăng độ tương phản ta có thể tìm các giá trị màu thích hợp với một vùng sáng
hơn.
Trong một ảnh có độ tương phản cao, có thể xác định được các viền rõ ràng và
chi tiết khác nhau của ảnh đó được nổi bật. Còn trong một ảnh có độ tương phản
thấp, tất cả các màu đều gần như nhau gây khó khăn cho việc xác định các chi
tiết của ảnh.

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.

(a) (b) (c)

Hình 5: (a) Ảnh gốc; (b) Ảnh đã giảm độ tương phản; (c) Ảnh đã tăng độ tương
phản.

Biểu thức cho kỹ thuật Contrast có dạng:

g(x,y) = af(x,y) (3.3)


Trong đó a là hằng số nhân vào giá trị màu tại f(x,y). Độ sáng của ảnh tăng
nếu a > 1, và giảm bớt nếu a < 1.

Thuật toán được miêu tả như sau :


NewValue=OldValue/255; // Biến đổi đến một phần trăm
NewValue=NewValue - 0.5;
NewValue=NewValue*ContrastValue; //ContrastValue thuộc [-1,1]
NewValue=NewValue + 0.5;
NewValue=NewValue*255;
If (NewValue > 255) Then NewValue = 255;
If (NewValue < 0) Then NewValue = 0;
Biểu thức Brightness và Contrast có thể được kết hợp lại để có được biểu
thức sau:
g(x,y) = af(x,y) + b (*)
Từ biểu thức (*) có thể điều chỉnh cả giá trị Brightness và Contrast.

17
EBOOKBKMT.COM

1.3.3 Tách ngưỡng


Ta chọn hai mức Thấp - Min, Cao - Max và giá trị ngưỡng λ, khi đó giá trị
các pixel được định nghĩa lại như sau:

+ Inew(x, y) = Max nếu I(x, y) >= λ

+ Inew(x, y) = Min nếu I(x, y) < λ

Ví dụ ảnh phân ngưỡng theo 2 mức giá trị màu 0 và 255:

(a) (b)

Hình 6: (a):ảnh xám. (b):ảnh đen trắng

1.3.4 Phép giãn ảnh đa cấp xám

1.3.4.1 Định nghĩa


Với ảnh đa cấp xám IMxN, THxK là mẫu. Gọi R là ảnh kết quả của của phép
giãn ảnh I bởi mẫu T. Khi đó R có kích thước (M+H-1, N+K-1) và được xác định
như sau:

+ I(x, y) = 0 với x= -(H-1) . .-1 hoặc M .. M+H-2; y = -(K-1) . .-1 hoặc N ..


N+K-2

+ R(x, y) = Max {I(x-i, y-j)+T(i,j)} với i = 0..H-1; j = 0..K-1; x=0.. M+H-1;


y=0..N+K-1

1.3.4.2 Thuật toán

18
EBOOKBKMT.COM

VD: Cho ảnh I và mẫu T

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

B2: Quay mẫu T đi 180o được T’

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

1.3.5 Các tác động ảnh xám cục bộ

1.3.5.1 Tác động nhân chập ảnh


Phép nhân chập được định nghĩa như sau:

+k +k
∑ ∑
A=C**B= c1 i=−k j=−k C(i,j).B(x-i, y-j) + c0

Trong đó: c1 là hằng số để chia thang, c 0 là hằng số cộng thêm vào; c 0, c1 =


[0, 255]

: C là ma trận mặt nạ để thực hiện phép nhân chập. C thường có


kích thước (2k+1)x(2k+1).

Phép nhân chập có các tác dụng sau:

20
EBOOKBKMT.COM

+ Loại bỏ điểm mép, ở bộ lọc (2k+1)x(2k+1) xuất hiện một mép


với độ rộng là k.

+ Sao chép mép ảnh cũ sang ảnh mới.

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

+ Giảm các tín hiệu nhiễu.

1.3.5.2 Các phương pháp lọc-làm nhẵn


Trong nhiều lĩnh vực kỹ thuật, nhiễu đóng vai trò chủ yếu gây nên những
khó khăn khi ta cần phân tích một tín hiệu nào đó, cũng không loại trừ tín hiệu
ảnh. Giữa một ảnh thực và ảnh số hoá thu nhận được khác nhau khá nhiều vì có
nhiều quá trình can thiệp vào. Nguyên nhân là do nhiễu điện tử của máy thu hay
chất lượng kém của bộ số hoá. Ta xem xét biến nhiễu thể hiện trên ảnh thế nào.
Giả sử ảnh là một miền có mức xám đồng nhất, như vậy các phần tử của ma trận
biểu diễn ảnh sau quá trình số hoá phải có cùng giá trị. Nhưng thực tế quan sát ta
thấy: gần giá trị trung bình của mức xám có những phần tử trội lên khá nhiều. Đó
chính là hiện tượng nhiễu. Như vậy nhiễu trong ảnh số được xem như sự dịch
chuyển nhanh của tín hiệu thu nhận (tín hiệu ảnh I[m,n]) trên một khoảng cách
ngắn). Xem xét một cách tương đương trong không gian tần số, nhiễu ứng với
các thành phần tần số cao trong ảnh. Do vậy, người ta nghĩ đến việc biến đổi có
tính đến ảnh hưởng của các phần tử lân cận bằng cách lấy “tổ hợp” các điểm lân
cận này (trong không gian thực) hay lọc các thành phần tần số cao (trong không
gian tần số). Đây chính là kỹ thuật lọc (filtering). Cơ sở lý thuyết của kỹ thuật lọc
số là dựa trên tính dư thừa thông tin không gian: các pixel lân cận có thể có cùng
hoặc gần cùng một số đặc tính. Hơn nữa, nhiễu có thể coi như sự đột biến của
một điểm ảnh so với các điểm lân cận.
Trong kỹ thuật này, người ta sử dụng một mặt nạ và di chuyển khắp ảnh
gốc. Tuỳ theo cách tổ hợp điểm đang xét với các điểm lân cận mà ta có kỹ thuật
lọc tuyến tính hay phi tuyến. Điểm ảnh chịu tác động của biến đổi là điểm ở tâm
mặt nạ.

21
EBOOKBKMT.COM

1.3.5.3 Bộ lọc phi tuyến


Trong kỹ thuật lọc tuyến tính, ảnh thu được sẽ là tổng trọng số hay là
trung bình trọng số các điểm lân cận với nhân cuộn hay mặt nạ. Vì có nhiều loại
nhiễu can thiệp vào quá trình xử lý ảnh nên cần có nhiều bộ lọc thích hợp. Để
làm trơn nhiễu ta sử dụng các mặt nạ thông thấp. VD:

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

A. vùng lận B. vùng lân C. vùng lân D. Bộ lọc


cận 5 điểm cận 9 điểm cận 9 điểm Gauss cho 9
không cân cân bằng điểm
bằng

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

1.3.5.4 Lọc phi tuyến


Khác với lọc tuyến tính, kỹ thuật lọc phi tuyến coi một điểm ảnh kết
quả không phải là tổ hợp tuyến tính của các điểm lân cận. Người ta thường sử
dụng 3 bộ lọc đó là: trung vị, giả trung vị và lọc ngoài

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

b) Lọc giả trung vị

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ạ

Value = [ValueMin + ValueMax]/2.

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.

1.3.6 Phép co ảnh đa cấp xám

1.3.6.1 Định nghĩa


Với ảnh đa cấp xám IMxN, THxK là mẫu. Gọi R là ảnh kết quả của của phép
co ảnh I bởi mẫu T. Khi đó R có kích thước (M+1-H, N+1-K) và được xác định
như sau:

+ R(x, y) = Min {I(x+i, y+j)-T(i,j)} với i = 0..H-1; j = 0..K-1; x=0.. M+1-H;


y=0..N+1-K

1.3.6.2 Thuật toán


B1: Dịch chuyển mẫu T trên ảnh I theo trật tự từ trên xuống dưới và từ trái
sang phải sao cho mẫu 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ị nhỏ nhất của hiệu cặp giá trị pixel ảnh I
và mẫu T.

B2: Lặp lại B1 cho đến hết ảnh I.

B3: Mức xám pixel ảnh có kết quả âm, có 2 cách khắc phục:

+ Đặt các giá trị âm thành 0.

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

1.3.7 Các phép biến đổi hình học

1.3.7.1 Phép dịch ảnh


Là sự tịnh tiến gốc tọa độ, trong đó các trục của tọa độ sau phép biến đổi
sẽ di chuyển theo cùng hướng, việc phân chia thang trên tọa độ là không đổi. Gốc
tọa độ cũ (-tx, -ty) thì tọa độ (x’, y’) được tính như sau:

x’ = x +tx

y’ = y +ty

24
EBOOKBKMT.COM

Phép biến đổi có thể được mô tả dưới định thức sau:

T = 1 0 0

0 1 1

tx ty 1

1.3.7.2 Phép phóng to hoặc thu nhỏ ảnh


Còn được gọi là sự chia lại thang tọa độ. Khi chia thang tọa độ gốc và
hướng được giữ nguyên, chia thang tiến hành với hệ số chia thang Sx, Sy và các
tọa độ mới được tính toán theo công thức:

x’ = x * Sx

y’ = y * Sy

Phép biến đổi có thể được mô tả dưới định thức sau:

Sx 0 0

T= 0 Sy 0

0 0 1

1.3.7.3 Phép quay ảnh


Ngay từ khi xuất hiện, hiệu ứng quay ảnh đã gây ấn tượng lớn và thu hút
sự quan tâm của những người yêu thích xử lý ảnh. Thực ra đây là phương pháp
chuyển đổi các Pixel trong ảnh. Do không làm thay đổi giá trị màu trong ảnh nên
có thể thực hiện phương pháp này trên ảnh màu cũng như trên ảnh xám. Một ảnh
được xem như là một mảng hai chiều, chuyển đổi lại vị trí các Pixel là sắp xếp lại
mảng này. Khi quay thì sự chia thang giữ nguyên chỉ có hướng trục thay đổi. Còn

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

1.3.7.4 Kết hợp các phép biến đổi hợp nhất


Quá trình áp dụng các phép biến đổi liên tiếp để tạo nên một phép biến đổi tổng
thể được gọi là sự kết hợp các phép biến đổi (composing transformation).

 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

Ma trận kết hợp

( )
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ệ.

 Kết hợp các phép quay quanh gốc tọa độ:

( )
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

CHƯƠNG 2 TỔNG QUAN VỀ C SHARP

2.1 Tổng quan về ngôn ngữ C sharp (C #)


2.1.1 Giới thiệu chung về ngôn ngữ C sharp (C#)

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.

2.1.2 Nền tảng ngôn ngữ C#

2.1.2.1 Kiểu dữ liệu


Điều cốt lõi của lập trình hướng đối tượng là tạo ra các kiểu mới. Kiểu là
một thứ được xem như trừu tượng. Nó có thể là một bảng dữ liệu, một tiểu trình,
hay một nút lệnh trong một cửa sổ. Tóm lại kiểu được định nghĩa như một dạng
vừa có thuộc tính chung (properties) và các hành vi ứng xử (behavior) của nó
C# là ngôn ngữ lập trình mạnh về kiểu dữ liệu, một ngôn ngữ mạnh về
kiểu dữ liệu là phải khai báo kiểu của mỗi đối tượng khi tạo (kiểu số nguyên, số
thực, kiểu chuỗi, kiểu điều khiển...) và trình biên dịch sẽ giúp cho người lập trình
không bị lỗi khi chỉ cho phép một loại kiểu dữ liệu có thể được gán cho các kiểu
dữ liệu khác. Kiểu dữ liệu của một đối tượng là một tín hiệu để trình biên dịch

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

Kiểu C# Số Kiểu .NET Mô tả


byte
Byte 1 Byte Số nguyên dương không dấu từ 0-255
Char 2 Char Ký tự Unicode
Bool 1 Boolean Giá trị logic true/ false
Sbyte 1 Sbyte Số nguyên có dấu ( từ -128 đến 127)
Short 2 Int16 Số nguyên có dấu giá trị từ -32768 đến
32767.
Ushort 2 Uint16 Số nguyên không dấu 0 – 65.535
Int 4 Int32 Số nguyên có dấu –2.147.483.647 và
2.147.483.647
Uint 4 Uint32 Số nguyên không dấu 0 – 4.294.967.295
Float 4 Single Kiểu dấu chấm động, giá trị xấp xỉ từ 3,4E-
38 đến 3,4E+38, với 7 chữ số có nghĩa
Double 8 Double Kiểu dấu chấm động có độ chính xác gấp
đôi, giá trị xấp xỉ từ 1,7E-308 đến 1,7E+308,
với 15,16 chữ số có nghĩa.
decimal 8 Decime Có độ chính xác đến 28 con số và giá trị thập
phân, được dùng trong tính toán tài chính,
kiểu này đòi hỏi phải có hậu tố “m” hay “M”
theo sau giá trị.
Long 8 Int64 Kiểu số nguyên có dấu có giá trị trong
khoảng : -9.223.370.036.854.775.808 đến
9.223.372.036.854.775.807
Ulong 8 Uint64 Số nguyên không dấu từ 0 đến 0xffffffffffffffff
Bảng 3:Kiểu dữ liệu xây dựng sẵn

2.1.2.2 Biến, hằng và toán tử


a. Biến: Là một vùng lưu trữ ứng với một kiểu dữ liệu.
Biến có thể được gán giá trị và cũng có thể thay đổi giá trị trong khi thực
hiện các lệnh của chương trình.

31
EBOOKBKMT.COM

Khai báo: <kiểu_dữ_liệu> <tên_biến> [=<giá trị>];


b. Hằng: Hằng cũng là một biến nhưng giá tri của hằng không thay đổi
trong khi thực hiện các lệnh của chương trình. Hằng được phân thành 3
loại:
- Giá trị hằng(literal)
- Biểu tượng hằng(symbolic constants)
- Kiểu liệt kê(enumerations)
Khai báo: <const> <Kiểu_dữ_liệu> <tên_hằng>=<giá_trị>;
Hoặc: <enum> <tên_kiểu_liệt_kê>
{ <tên_hằng_1>=<giá_trị_số_1>,
…………..
<tên_hằng_n>=<giá_trị_số_n>;
}
c. Toán tử
- Toán tử toán học: +,-,*,/,%
- Toán tử tăng / giảm: +=,-=,*=,/=,%=
- Toán tử tăng giảm 1 đơn vị: ++,--
- Toán tử gán: =
- Toán tử quan hệ: ==, !=, >, >=, <, <=
- Toán tử logic: !, &&, ||
- Toán tử 3 ngôi: (điều kiện)?(biểu_thức_1): (biểu_thức_2);
2.1.2.3 Câu lệnh
Trong C# một chỉ dẫn lập trình đầy đủ được gọi là câu lệnh. Chương trình
bao gồm nhiều câu lệnh tuần tự với nhau.
Có hai loại câu lệnh phân nhánh trong C# là : phân nhánh không có điều
kiện (unconditional branching statement) và phân nhánh có điều kiện
(conditional branching statement). Ngoài ra còn có các câu lệnh làm cho một số
đoạn chương trình được thực hiện nhiều lần, các câu lệnh này được gọi là câu
lệnh lặp hay vòng lặp. Bao gồm các lệnh lặp for, while, do, in,và each.

32
EBOOKBKMT.COM

a. Câu lệnh phân nhánh không điều kiện


Phân nhánh không có điều kiện có thể tạo ra bằng hai cách: gọi một hàm
và dùng từ khoá. Để thực hiện phân nhánh ta gọi một trong các từ khóa sau: goto,
break, continue, return,statementthrow
b. Câu lệnh phân nhánh có điều kiện
Phân nhánh có điều kiện được tạo bởi các lệnh điều kiện. Các từ khóa của các
lệnh này như : if, else, switch. Sự phân nhánh chỉ được thực hiện khi biểu thức
điều kiện phân nhánh được xác định là đúng.
 Câu lệnh if...else
Câu lệnh phân nhánh if...else dựa trên một điều kiện. Điều kiện là một biểu
thức sẽ được kiểm tra giá trị ngay khi bắt đầu gặp câu lệnh đó. Nếu điều kiện
được kiểm tra là đúng, thì câu lệnh hay một khối các câu lệnh bên trong thân của
câu lệnh if được thực hiện.
Ta có cú pháp câu điều kiện if... else sau:
if (biểu thức điều kiện)
<Khối lệnh thực hiện khi điều kiện đúng>
[else
<Khối lệnh thực hiện khi điều kiện sai>]
Nếu các câu lệnh trong thân của if hay else mà lớn hơn một lệnh thì các
lệnh này phải được bao trong một khối lệnh, tức là phải nằm trong dấu khối { }:
if (biểu thức điều kiện)
{
<lệnh 1>
<lệnh 2>
….
}
[else
{
<lệnh 1>
<lệnh 2>
...

33
EBOOKBKMT.COM

}]

 Câu lệnh switch


Khi có quá nhiều điều kiện để chọn thực hiện thì dùng câu lệnh if sẽ rất rối
rắm và dài dòng, Các ngôn ngữ lập trình cấp cao đều cung cấp một dạng câu lệnh
switch liệt kê các giá trị và chỉ thực hiện các giá trị thích hợp. C# cũng cung cấp
câu lệnh nhảy switch có cú pháp sau:
switch (biểu thức điều kiện)
{
}
case <giá trị>:
<Các câu lệnh thực hiện>
<lệnh nhảy>
[default: <Các câu lệnh thực hiện mặc định>]
Tương tự như câu lệnh if, biểu thức để so sánh được đặt sau từ khóa
switch, tuy nhiên giá trị so sánh lại được đặt sau mỗi các từ khóa case. Giá trị
sau từ khóa case là các giá trị hằng số nguyên.
c. Câu lệnh lặp
C# cung cấp một bộ mở rộng các câu lệnh lặp, bao gồm các câu lệnh lặp for,
while và do... while. Ngoài ra ngôn ngữ C# còn bổ sung thêm một câu lệnh lặp
foreach. Cuối cùng là các câu lệnh nhảy như goto, break, continue, và return.
 Câu lệnh nhảy goto
Lệnh nhảy goto là một lệnh nhảy đơn giản, cho phép chương trình nhảy vô điều
kiện tới một vị trí trong chương trình thông qua tên nhãn. Cú pháp:
Tạo một nhãn
goto đến nhãn
 Vòng lặp while
Ý nghĩa của vòng lặp while là: “Trong khi điều kiện đúng thì thực hiện các
công việc này”. Cú pháp sử dụng vòng lặp while như sau:
while (Biểu thức)
<Câu lệnh thực hiện>
Biểu thức của vòng lặp while là điều kiện để các lệnh được thực hiện, biểu thức
này bắt buộc phải trả về một giá trị kiểu bool là true/false. Nếu có nhiều câu lệnh

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 Xây dựng lớp, đối tượng

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

2.1.3.2 Thuộc tính truy cập


Thuộc tính truy cập quyết định khả năng các phương thức của lớp bao
gồm việc các phương thức của lớp khác có thể nhìn thấy và sử dụng các biến
thành viên hay những phương thức bên trong lớp.

Thuộc tính Giới hạn truy cập


Public Không hạn chế. Những thành viên được đánh dấu
public có thể được dùng bởi bất kì các phương thức của
lớp bao gồm những lớp khác.
Private Thành viên trong một lớp A được đánh dấu là private
thì chỉ được truy cập bởi các phương thức của lớp A.
Protected Thành viên trong lớp A được đánh dấu là protected
thì chỉ được các phương thức bên trong lớp A và những
phương thức dẫn xuất từ lớp A truy cập.
Internal Thành viên trong lớp A được đánh dấu là internal thì
được truy cập bởi những phương thức của bất cứ lớp
nào trong cùng khối hợp ngữ với A.
protected internal Thành viên trong lớp A được đánh dấu là protected
internal được truy cập bởi các phương thức của lớp A,
các phương thức của lớp dẫn xuất của A, và bất cứ lớp
nào trong cùng khối hợp ngữ của A.
Bảng 5: Các thuộc tính truy cập của một lớp

37
EBOOKBKMT.COM

2.1.3.3 Tham số của phương thức


Trong các ngôn ngữ lập trình thì tham số và đối mục được xem là như
nhau, cũng tương tự khi đang nói về ngôn ngữ hướng đối tượng thì ta gọi một
hàm là một phương thức hay hành vi. Tất cả các tên này điều tương đồng với
nhau.
Một phương thức có thể lấy bất kỳ số lượng tham số nào, Các tham số này
theo sau bởi tên của phương thức và được bao bọc bên trong dấu ngoặc tròn ().
Mỗi tham số phải khai báo kèm với kiểu dữ liệu của nó. Bên trong thân của
phương thức, các tham số này như những biến cục bộ, giống như là khai báo
biến bên trong phương thức và khởi tạo giá trị bằng giá trị của tham số truyền
vào.

2. 1.3.4 Đối tượng


Những kiểu dữ liệu chuẩn của C# như int, char, float,… là những kiểu dữ
liệu giá trị, và các biến được tạo ra từ các kiểu dữ liệu này được lưu trên stack.
Tuy nhiên, với các đối tượng kiểu dữ liệu tham chiếu thì được tạo ra trên heap,
sử dụng từ khóa new để tạo một đối tượng:
ThoiGian t = new ThoiGian();
t thật sự không chứa giá trị của đối tượng ThoiGian, nó chỉ chứa địa chỉ của đối
tượng được tạo ra trên heap, do vậy t chỉ chứa tham chiếu đến một đối tượng.
C# cũng cung cấp cơ chế thu dọn (garbage collection) hay là hủy đối
tượng. Khi làm việc với các đoạn mã không được quản lý thì cần phải khai báo
tường minh các phương thức hủy để giải phóng các tài nguyên.

2.1.3.5 Khởi tạo biến thành viên


Các biến thành viên có thể được khởi tạo trực tiếp khi khai báo trong quá
trình khởi tạo, thay vì phải thực hiện việc khởi tạo các biến trong bộ khởi dựng.
Để thực hiện việc khởi tạo này rất đơn giản là việc sử dụng phép gán giá trị cho
một biến:
private int Giay = 30; // Khởi tạo
Việc khởi tạo biến thành viên sẽ rất có ý nghĩa, vì khi xác định giá trị khởi
tạo như vậy thì biến sẽ không nhận giá trị mặc định mà trình biên dịch cung cấp.

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 Kế thừa và đa hình

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

2.1.4.3 Lớp trừu tượng


Để yêu cầu các lớp con (lớp dẫn xuất) phải thực thi một phương thức của
lớp cơ sở, cần thiết kế một phương thức một cách trừu tượng. Một phương thức
trừu tượng không có sự thực thi. Phương thức này chỉ đơn giản tạo ra một tên
phương thức và ký hiệu của phương thức, phương thức này sẽ được thực thi ở

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.

2.1.5 Nạp chồng toán tử


Hướng thiết kế của ngôn ngữ C# là tất cả các lớp do người dùng định
nghĩa (userdefined classes) có tất cả các chức năng của các lớp đựơc xây dựng
sẵn.
Trong ngôn ngữ C#, các toán tử là các phương thức tĩnh, giá trị trả về của nó thể
hiện kết quả của một toán tử và những tham số là các toán hạng. Khi chúng ta tạo
một toán tử cho một lớp là chúng ta đã thực việc nạp chồng (overloaded) những
toán tử đó, cũng giống như là chúng ta có thể nạp chồng bất cứ phương thức
thành viên nào.
Cú pháp ngôn ngữ C# cho phép nạp chồng một toán tử bằng cách viết từ khóa
operator và theo sau là toán tử được nạp chồng. Từ khóa operator là một bổ
sung phương thức (method operator). Để nạp chồng toán tử cộng (+) chúng ta có
thể viết operator +.
Khi chúng ta viết:
Fraction theSum = firstFraction + secondFraction;
Thì toán tử nạp chồng + được thực hiện, với firstFraction được truyền vào như là
tham số
đầu tiên, và secondFraction được truyền vào như là tham số thứ hai.
Ngôn ngữ C# cung cấp khả năng cho phép nạp chồng toán tử cho các lớp
khác, thậm chí điều này không hoặc đề cập rất ít trong Common Language

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

2.1.6 Các lớp cơ sở .NET

2.1.6.1 Lớp đối tượng trong .NET Framework


NET Framework chứa số lượng nhiều những kiểu dữ lớp, những kiểu liệt
kê, những cấu trúc, những giao diện và nhiều kiểu dữ liệu khác nữa. Có hàng
ngàn số lượng các kiểu như trên. Những lớp này điều cho phép sử dụng trong
chương trình C#.
 Common Language Specification (CLS)

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

2.1.6.2 Lớp Timer


Kiểu dữ liệu DateTime, đây là một cấu trúc được chứa trong
namespace System bên trong thư viện cơ sở. Framework chứa một lớp Timer bên
trong namespace System.Timers. Lớp time dùng để tạo ra những chương trình có
liên quan đến thời gian như: dùng để thể hiện ngày giờ trên màn hình, tạo Timer
để tắt một chương trình khác vào một thời điểm đưa ra, back up một chương
trình quan trọng.

2.1.6.3 Lớp về thư mục & hệ thống


Đôi khi chúng ta cần biết thông tin hệ thống của máy mà chương trình
đang thực hiện, điều này không khó khăn gì, .NET có một số lớp cơ bản để thực
hiện việc này như : lớp Environment.

42
EBOOKBKMT.COM

2.1.6.4 Lớp Math


C# hỗ trợ các phép toán cơ bản như: cộng, trừ, nhân, chia, chia dư. Còn rất
nhiều các phép toán mạnh hơn và cũng thường sử dụng mà chúng chưa được
đềm cập tới. C# cung cấp một tập hợp các phép toán toán học bên trong những
lớp cơ sở. Chúng được chứa bên trong của namespace System.Math. Lớp Math là
lớp sealed, do đó không thể xây dựng một lớp mới mà kế thừa từ lớp này được.
Thêm vào đó tất cả những lớp và dữ liệu thành viên đều là tĩnh, do vậy không thể
tạo một đối tượng có kiểu Math. Lớp Math có một số phương thức như sau:

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

2.1.6.5 Lớp thao tác tập tin


Khả năng để viết thông tin vào trong một tập tin hay đọc thông tin từ trong
một tập tin có thể làm cho chương trình của có nhiều hiệu quả hơn. Hơn nữa, có
rất nhiều lần khi
chúng ta muốn có khả năng làm việc với những tập tin hiện hữu. C# hỗ trợ một
số lớp thao tac với tập tin như:
 Lớp File, lớp này được định vị bên trong
namespace System.OI. Lớp File chứa một số các phương thức tĩnh được sử dụng
để thao tác trên tập tin.
 Lớp FileInfo

2.1.6.6 Làm việc với tập tin dữ liệu


Với các tập tin dữ liệu thì việc quan trọng của tập tin là đọc và viết những
thông tin từ tập tin. Việc thường xuyên thực hiện là nhập xuất và cách tạo mới
một tập tin để ghi hay mở một tập tin đa tồn tại để đọc thông tin.
 Luồng nhập xuất: Thuật ngữ tập tin thì nói chung là liên quan đến những thông
tin lưu trữ bên trong ỗ đĩa hoặc trong bộ nhớ. Khi làm việc với tập tin, chúng ta
bao hàm với việc sử dụng một luồng. Một luồng được sử dụng để gởi và nhận
thông tin từ bộ nhớ, từ mạng, web, từ một chuỗi,...Một luồng còn được sử dụng
để đi vào và ra với một tập tin dữ liệu.

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

2.1.7 Ứng dụng Window với Window Form


Trước tiên chúng ta cần nhận rõ kiểu ứng dụng Windows, ứng dụng
Windows Form là ứng dụng Windows chạy trên Desktop hay trên một mạng cục
bộ LAN (Local-Area Network). Các ứng dụng Windows hiện nay có xu hướng
dùng các dịch vụ của Web. Windows dựa trên khuôn mẫu Form và sử dụng các
điều khiển(Control) như là Buttons, ListBox, Tetx…

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.

2.1.8Truy cập dữ liệu với ADO.NET


ADO.NET là một tập các lớp nằm trong bộ thư viện lớp cơ sở của .NET
Framework, cho phép các ứng dụng windows (như C#, VB.NET) hay ứng dụng
web (như ASP.NET) thao tác dễ dàng với các nguồn dữ liệu.

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

Hình 7: Kiến trúc ADO.NET


* .NET Data Provider :Chứa các đối tượng phục vụ cho việc thao tác trên cơ sở
dữ liệu được hiệu quả và nhanh chóng, nó bao gồm một tập các đối tượng
connection, command, DataReader và DataAdapter của kiến trúc kết nối.
- Connection: Đối tượng cho phép kết nối cơ sở dữ liệu như : SQL Server,
Oracle, ODBC, OLEDB, và My SQL.
- Command: Đối tượng cho phép truy cập cơ sở dữ liệu và thực thi phát biểu
SQL hay thủ tục nội tại, truyền tham số và trả về dữ liệu.
- DataReader: Bộ lọc dùng để đọc nhanh dữ liệu nguồn theo một chiề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.

ADO.NET có rất nhiều đối tượng như: Connection, Command, DataRead,


Dataset, DataAdapter dùng để thao tác với cơ sở dữ liệu.

47
EBOOKBKMT.COM

CHƯƠNG 3 ỨNG DỤNG XỬ LÝ ẢNH TRONG ĐIỀU KHIỂN

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 Hoạt động của robot

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

Hình 8: Xe nâng hàng có người lái

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

Xe tự động dùng 2 càng gắn ở đầu xe để móc vào 2 lỗ ở giá đỡ hàng.


Khoảng cách giữa hai càng đã được điều chỉnh cho đúng với khoảng cách giữa
hai lỗ trên giá đỡ. Với các pallet có chiều dài và chiều rộng khác nhau (kiểu EU
và kiểu Mỹ) trên mỗi mặt đều có 2 lỗ để móc vào nhưng kích thước và khoảng
cách giữa các lỗ không như nhau nên chương trình xử lý cần phân biệt được các
nhóm lỗ này. Với các pallet mà kích thước dài = kích thước rộng (pallet hình
vuông) như của Hàn Quốc và Trung Quốc (lục địa) thì không cần phân biệt sườn
dài hay sườn ngắn của pallet.

49
EBOOKBKMT.COM

3.1.2 Hướng của giá đỡ hàng so với xe nâng tự động


Hệ toạ độ của chúng ta được ký hiệu với các trục Ox, Oy, Oz. Trong đó O là gốc
toạ độ.
OxyzW là hệ toạ độ của không gian thực với các trục Owxw, Oyxy, Ozxz.

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.

Hình 10: Các hệ tọa độ

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

3.1.3 Khoảng cách từ xe tự động đến giá đỡ hàng


Đây là khoảng cách từ một điểm trên xe nâng đến một điểm trên giá đỡ.
Chúng ta có thể định nghĩa đó là khoảng cách giữa tâm hình học theo ba chiều

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á đỡ.

3.1.4 Xác định khoảng cách


Mô hình xác định khoảng cách sử dụng camera như sau:

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

n: số pixel của ảnh biểu diễn kích thước theo hướng h.


k: hệ số thể hiện số milimét/pixel.

W
k=
N

51
EBOOKBKMT.COM

W: Kích thước tấm sensor cảm biến ảnh


N: độ phân giải của cảm biến ảnh.
Trong thực tế chúng ta thường sử dụng chương trình xử lý ảnh bằng máy tính
(PC hoặc một hệ thống tính toán khác) khi đó chúng ta ánh xạ tấm sensor cảm
biến lên một màn hình máy tính. Lúc này:
W là kích thước của màn hình theo phương tính toán tính bằng milimét.
N: Tổng số pixel của màn hình theo phương tính toán.

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

3.1.5 Kích thước ảnh thực của đối tượng


Do tính đồng dạng của ảnh trên mặt phẳng ảnh và đối tượng trên mặt
phẳng đối tượng ta có thể xem xét quan hệ giữa kích thước thực X, Y và ảnh của
nó trên hai hướng tại mặt phẳng song song với mặt phẳng ảnh. Như vậy nếu ký
hiệu:

Ox là kích thước ảnh theo chiều ngang (tính bằng mm),

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.

Chúng ta có quan hệ:

Khi đã biết f, Px, Sx,x, Ox chúng ta có thể tính ra D

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:

 Chưa biết góc θ

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:

Đây là khoảng cách mà bộ xử lý điều khiển xe nâng hạ tự động cần biết để


điều khiển khi tiếp cận đến giá đỡ.
Các góc θ, λ và Φ có thể được tính từ các giá trị đã biết

 Trong trường hợp đã biết góc θ

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:

3.2 Ứng dụng xử lý ảnh để tính khoảng cách

3.2.1 Mô tả bài toán


Mục đích của bài toán là sử dụng camera thu ảnh và dựa vào ảnh để đưa ra
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 đối tượng với hai mặt phẳng ảnh và mặt phẳng đối tượng
song song với nhau và góc giữa camera gắn trên robot và đối tượng là vuông góc.

54
EBOOKBKMT.COM

3.2.2 Quá trình thu ảnh và các yêu cầu của hệ thống

3.2.2.1 Đọc ảnh


Quá trình đọc ảnh trong C# thường là ảnh 24 bit, tức là mỗi pixel 24
bits=3bytes. Mô tả như sau: Pixel đầu tiên của ảnh chiếm 3 byte đầu(0,1,2), pixel
thứ 2 chiếm 3 byte tiếp(3,4,5), cứ như thế... Để biết ảnh bm có kích thước bao
nhiêu, C# cung cấp 2 thuộc tính: bm.Width: số pixel trên một hàng(độ rộng) và
bm.Height: số hàng(độ cao). Như vậy, mỗi hàng của bức ảnh sẽ dùng hết
bm.Width*3 bytes để lưu thông tin(do mỗi pixel 3 byte). Tuy nhiên khi lưu vào
máy tính thì mỗi hàng của ảnh phải dùng nhiều hơn số byte đó để lưu, vì mục
đích lưu cả thông tin của biên. Để biết thức sự số byte này là bao nhiêu, đầu tiên
phải chuyển bm sang một lớp đệm, lớp BitmapData. Ta sử dụng kỹ thuật
LockBits.

Rectangle rec= new Rectangle (0, 0, bm.Width, bm.Height);


BitmapData bmData= bm.LockBit(rec, ImageLockMode.ReadWrite,
PixelFormat.Format24bppRgb);
Phương thức LockBits sẽ chuyển từ 1 ảnh, sang 1 vùng nhớ (bmData). Trên
ảnh bm, ta chỉ có thể xem nó, chứ không thể chỉnh sử pixel. Muốn sửa, phải
chuyển nó sang lớp BitmapData, trên đó có các thứ cần thiết để can thiệp vào
từng điểm ảnh.
Trong máy tính ảnh được biểu diễn như một dãy các byte nhớ đặt liên tiếp
nhau. Ta phải đọc file ảnh này vào một ma trận 2 chiều sao cho số hàng bằng
chiều cao của ảnh, số cột bằng chiều rộng của ảnh.
Tiến hành đọc các pixel của ảnh và tiến hành xử lý trên ma trận ảnh nhị phân
đã chuyển đổi.

3.2.2.2 Lọc nhiễu


Là phần tiền xử lý nhằm loại bỏ các nhiễu cơ bản trong quá trình thu ảnh.
Có rất nhiều loại nhiễu như: nhiễu cộng (additive noise), độc lập (independent),
nhiễu nhân, nhiễu đốm (speckle noise), nhiễu muối tiêu (salt-pepper noise).

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

nếu n chẵn thì x 2 []


n
hoặc
n
x +1
1 . Cuối cùng ta gán giá trị cho các điểm ảnh
theo:

I(p)= { I ( p )|I ( p )−Med( p)|≤θ


Med ( p ) Med ( p ) n ếu ng ư ợc lại

3.2.2.3 Phân ngưỡng


Đây là quá trình phân vùng ảnh dựa theo ngưỡng biên độ. Đặc tính đơn
giản nhất và có thể hữu ích nhất của ảnh đó là biên độ của các tính chất vật lý của
ảnh như: độ phản xạ, độ truyền sang, màu sắc hoặc đáp ứng đa phổ. Như vậy, có
thể dung biên độ để phân vùng khi mà biên độ đủ lớn đặc trưng cho ảnh. Thí dụ,
biên độ trong bộ cảm biến ảnh hồng ngoại có thể phản ánh vùng nhiệt độ thấp
hay vùng nhiệt độ cao hơn. Kỹ thuật phân ngưỡng theo biên độ rất có ích đối với
ảnh nhị phân như văn bản in, đồ họa, ảnh màu…
Trước hết cần đưa về ảnh nhị phân một cách đơn giản bằng một giá trị
ngưỡng. các điểm ảnh ở trên một ngưỡng T sẽ là đối tượng còn dưới ngưỡng T sẽ
là những điểm nền. ta có một hàm biến đổi tổng quát:

{
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ình 14: Mô hình chương trình xử lý


Mô hình bao gồm camera được gắn trên robot, giá đỡ hàng, hàng, hệ thống đèn
chiếu sáng, máy tính điều khiển robot…Phải đảm bảo yêu cầu :

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

Chương trình đưa ra thông số về khoảng cách là tương đối do có sai số


trong quá trình thu ảnh (nhiễu).

Quá trình xử lý ảnh:

Bắt đầu

1.Thu ảnh

2. Phân tích và biến đổi ảnh

3. Tính toán khoảng cách

4. Gửi thông tin đến PC điều khiển


robot
C
Tiếp tục?

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.

for (int y = 0; y < bm.Height-1; y++)


{
for (int x = 0; x < bm.Width-1 ; x++)
{

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: { }

3.4 Xây dựng chương trình

3.4.1Môi trường ứng dụng


- Hệ điều hành Windows .
- Sử dụng bộ công cụ phát triển Microsoft Visual Studio 2008 trên nền
tảng .NET Compact Frame Work. 3.5. Chương trình được xây dựng trên ngôn
ngữ lập trình C#.

60
EBOOKBKMT.COM

- Yêu cầu: Camera thu ảnh màu 24bit định dạng .bmp

3.4.2 Chương trình

3.4.2.1 Kết quả thực nghiệm


Thực nghiệm nhận biết đối tượng. Mô hình được thực hiện với đối tượng
là thùng cattong với kích thước 265 ×140 ×170 (dài × rộng × cao). Sử dụng
camera loại Vimicro USB PC Camera với tiêu cự ống kính 50mm đặt vuông góc
với đối tượng. Ánh sáng đèn tuýp ở độ cao 2000m, khoảng cách 2000 mm công
suất 36w.

Giao diện chương trình thực nghiệm và kết quả chương trình thực nghiệm :

Hình 15: Giao diện chương trình

61
EBOOKBKMT.COM

Hình 16: Giao diện thực hiện chính


Các nút:

Camera: Khởi động camera để tiến hành thu ảnh

Dừng: Tạm dừng việc thu ảnh

Tiếp tục: Tiếp tục thực hiện quá trình thu ảnh

Ảnh: Lấy ảnh mẫu

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

So sánh kết quả tính toán và kích thước thực

Khoảng cách (mm)


Thứ tự Thực tế Tính toán Sai số(%)
1 300 290 +3.3
2 400 382 +5
3 500 509 -2
4 450 433 +4
5 500 490 +2
6 550 525 +6
7 589 559 +5
8 651 650 +0.2
9 665 626 +5.8
10 400 388 +3
11 450 419 +6.9
12 400 378 +5.5
13 580 538 +7.2
14 300 292 +2.7

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:

 Giao diện đơn giản dễ sử dụng


 Đã hiển thị được thông tin về khoảng cách giữa đối tượng và
camera với trường hợp hai mặt phẳng ảnh và mặt phẳng đối tượng
song song với nhau và góc giữa camera gắn trên robot với đối
tượng là vuông góc.

Tuy nhiên chương trình còn một số hạn chế :

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

2. Hướng phát triển

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

TÀI LIỆU THAM KHẢO


Tiếng việt:

[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

You might also like