- Số bản vẽ tay Số bản vẽ trên máy tính
9. Đánh giá chun g( bằng chữ: Giỏi, Khá, TB ): Điểm
2.2 Ngôn ngữ lập trình C#
2.2.1 Tổng quan về ngôn ngữ lập trình C#
Ngôn ngữ C# (C-Sharp) là được phát triển bởi đội ngũ kỹ sư của Microsoft trong đó người dẫn đầu là Anders Hejlsberg và Scott Wiltamuth. Cả hai đều là những người nổi tiếng trong đó Anders Hejlsberg được biết đến là tác gả của Turbo Pascal, một ngôn ngữ lập trình PC phổ biến. Và ông đứng đầu nhóm thiết lế Borland Delphi, một trong những thành công đâug tiên của việc xây dựng môi trường phát triển tích hợp (IDE) cho lập trình client/server.
2.2.2 Đặc điểm ngôn ngữ lập trình C# a. C# là ngôn ngữ khá đơn giản a. C# là ngôn ngữ 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, lập trình hướng đối tượng và hơn nữa nó được sáng tạo ra dựa trên những ưu điểm của C++, Java, Smalltalk và bổ sung thêm những phần mới. Những tính chất đó hiện diện trong một ngôn ngữ lập trình hiện đại.
12 Trong C#, kiểu giá trị được cấp phát trên stack (ngăn xếp) và thời gian sống của chúng bị giới hạn trong phạm vi mà chúng khai báo
Kiểu Mô tả
Object Lớp cơ sở của tất cả các đối tượng trong C# String Dãy các ký tự ở dạng Unicode
Sbyte Số nguyên có dấu 8 bits Short Số nguyên có dấu 16 bits Int Số nguyên có dấu 32 bits Long Số nguyên có dấu 64 bits Byte Số nguyên không dấu 8 bits Ushort Số nguyên không dấu 16 bits Uint Số nguyên không dấu 32 bits Ulong Số nguyên không dấu 64 bits Float Số chấm động có độ chính xác hơn Double Số chấm động có độ chính xác đôi Bool Kiểu logic – True hoặc False
Char Ký tự Unicode
Decimal Số thập phân có 28 chữ số có nghĩa
Bảng 2.1: Các kiểu của C#.
b. C# là ngôn ngữ đối tƣợng
Không như các ngôn ngữ thủ tục, C# không quan tâm đến dữ liệu toàn cục hay các hàm toàn cục. Tất cả dữ liệu và phương thức được chứa trong hoặc là khai bao cấu trúc struct hoặc là class. Đây là khái niệm chính trong bất kỳ ngôn ngữ hướng đối tượng nào. Tất cả dữ liệu và các
Chương II: Cơ sở lý thuyết hệ thống
13 phương thức khai báo trên dữ liệu cần phải được đóng gói như một đơn vị chức năng. Các đơn vị chức năng này là những đối tượng có thể sử dụng lại, chúng độc lập và có thể tự hoạt động.
c. Khai báo lớp trong C#
Ngôn ngữ C# chứa những từ khóa cho việc khai báo những kiểu lớp đối tượng mới và những phương thức hay thuộc tính của lớp và cho việc thực thi đóng gói, kế thừa, và đa hình - ba thuộc tính cơ bản của bất cứ ngôn ngữ lập trình hướng đối tượng. Trong ngôn ngữ C# mọi thứ liên quan đến khai báo lớp điều được tìm thấy trong phần khai báo của nó. Định nghĩa một lớp trong ngôn ngữ C# không đòi hỏi phải chia ra tập tin header và tập tin nguồn giống như trong ngôn ngữ C++. Hơn thế nữa, ngôn ngữ C# hỗ trợ kiểu XML, cho phép chèn các tag XML để phát sinh tự động các document cho lớp. 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.
abstract default foreach object sizeof unsafe
as delegate goto operator stackalloc ushort
base do if out static using
bool double implicit override string virtual
break else in params struct volatile
byte enum int private switch void
case event interface protected this while
catch explicit internal public throw
char extern is readonly true
checked false lock ref try
14
const fixed namespace sbyte uint
continue float new sealed ulong
decimal for null short unchecked
Bảng2.2: Từ khóa của ngôn ngữ C#.
d. Hỗ trợ cấu trúc trong C#
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.
e. Cung cấp những đặc tính hƣớng thành phần (component-oriented)
Thành phần ở đây 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 (Common Language Runtime) 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ó.
f. Hỗ trợ việc truy cập bộ nhớ trực tiếp
Việc hỗ trợ bằng cách 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. 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.[4]
2.3 Các khái niệm và nền tảng xử lý ảnh 2.3.1 Không gian màu 2.3.1 Không gian màu
Màu được hình thành từ 2 nhân tố: thành phần màu sắc và độ sáng. Giá trị thành phần màu của một đối tượng xác định thuộc tính màu của đối tượng, độ sáng là thuộc tính của môi trường
Chương II: Cơ sở lý thuyết hệ thống
15 chứa đối tượng. Đối với một tấm ảnh màu chúng ta có thể nói về giá trị của cả thành phần màu sắc và độ sáng.
Không gian màu là một mô hình toán học mô tả cách mà màu sắc có thể được biểu diễn như những con số, thông thường là 3 hay 4 nhân tố. Phát hiện một đối tượng bằng cách sử dụng thuộc tính màu sắc của nó có thể không chính xác với sự thay đổi độ sáng xung quanh, khi sự thay đổi này cũng ảnh hưởng màu sắc biểu kiến của đối tượng. Màu của hình thường được biểu diễn trong không gian màu RGB, thành phần màu đỏ, xanh lá cây và xanh dương được lưu trong 3 ma trận độ sáng phân biệt. Mỗi ma trận có kích thước như hình RGB gốc và mật độ của điểm ảnh tương ứng từ mỗi ma trận để tạo màu sắc điểm ảnh thực tế tại một tọa độ được cho. Những biến thiên độ sáng môi trường cũng làm thay đổi nhiều giá trị RGB của điểm ảnh. Vì thế các không gian màu khác phù hợp hơn với thay đổi độ sáng môi trường nên được dùng.
a. Không gian màu GRAY
Một ảnh mức xám chỉ đơn giản là các màu sắc chỉ là màu xám. Lý do chuyển đổi màu sắc ảnh sang mức xám là lượng thông tin được cung cấp ít nhất cho mỗi điểm ảnh. Thực tế một màu xám là do các thành phần đỏ, xanh lá cây và xanh dương có mật độ bằng nhau trong không gian RGB, và vì nó cần để định rõ giá trị mật độ đơn cho mỗi điểm ảnh trong khi ba mật độ cần để xác định cho mỗi điểm ảnh trong một hình màu. Một chuyển đổi thông thường từ RGB sang Gray là:
Thông thường, độ xám được lưu trữ dưới dạng số nguyên 8 bit với 256 màu xám khác nhau từ đen sang trắng. Nếu các mức được phân phối như nhau thì sự khác biệt giữa mức xám liên tiếp là tốt hơn đáng kể so với sự nhận thức về mức xám của mắt người.
Ảnh xám vẫn còn rất phổ biến trong kỹ thuật ngày nay và thuật toán xử lý ảnh, chúng hoàn toàn đủ đáp ứng cho các vấn đề vì thế không cần sử dụng xử lý ảnh màu khó khăn và phức tạp hơn. Ví dụ, cho phát hiện/nhận dạng đối tượng, như là khuôn mặt, sử dụng khai triển trị riêng của ảnh phải được biểu diễn như ma trân đơn 2D vì thế ảnh mức xám thường được dùng.
16
b. Không gian màu HSV
Hệ thống điều phối màu HSV có mô hình là một hình nón. Vị trí dọc xác định độ sáng, vị trí góc – màu sắc, và góc (radian) – độ bão hòa. Màu sắc có tầm từ 0 tới 360 nhưng trong một vài ứng dụng nó có tầm từ 0 – 100%, độ bão hòa tầm từ 0 – 100%, và xác định vị trí tương đối từ các trục dọc đến biên của hình nón. Giá trị độ sáng của màu sắc và phạm vi của nó có tầm từ 0 – 100%.
Hình 2.4: Không gian màu HSV.
Các họa sĩ thông thường thích sử dụng mô hình màu HSV thay thế không gian màu cổ điển như RGB bởi vì nó tương tự như cách mà con người nhận dạng màu sắc. Ví dụ, chúng ta muốn thay đổi màu vàng chói sang màu xanh của một xe đang đi xuống một con đường, nhưng chúng ta muốn ảnh hưởng phần còn lại của khung cảnh, bao gồm nhưng điểm sáng và bóng của xe. Việc này là một nhiệm vụ khó trong RGB, nhưng nó đơn giản trong HSV. Bởi vì điểm ảnh vàng của xe có tầm đặc trưng của sắc, bất kể cường độ hoặc độ bão hòa, các điểm ảnh đó có thể bị cô lập dễ dàng và sắc của chúng bị thay đổi, do đó cung cấp một màu khác cho xe. Hầu hết các hệ thống xử lý hình ảnh kỹ thuật số hoạt động trên ảnh RGB, hoạt động đã mô tả phía trên sẽ được trình bày trong 3 bước:
- Chuyển đổi ảnh gốc RGB sang HSV. - Điều chỉnh giá trị sắc.
- Cuối cùng, chuyển đổi ảnh được sửa đổi sang RGB.
Nhiều giải thuật phát hiện khuôn mặt thực hiện dựa trên phát hiện màu da trước. Một quan niêm sai lầm phổ biến là các mô hình khác nhau được yêu cầu cho những chủng người khác nhau. Thực tế điều này ko đúng vì hầu như tất cả mọi người gần như cùng màu sắc. Những
Chương II: Cơ sở lý thuyết hệ thống
17 người da màu hầu như bao gồm tất cả các giá trị S cho một tầm giới hạn của giá trị màu sắc. Như là một kết quả, giá trị màu sắc của hình có thể dùng trong giải thuật phát hiện khuôn mặt.
c. Không gian màu XYZ
Không gian màu XYZ cho phép màu sắc được biểu diễn dưới dạng hỗn hợp của 3 giá trị nhân tố kích X, Y và Z. Các nhân tố kích thích xuất phát từ thực tế là kết quả nhận thức màu sắc từ võng mạc của mắt đáp ứng với 3 loại kích thích. Sau khi thử nghiệm, các CIE thiết lập một bộ giả sơ bộ XYZ mà tương ứng với cách hoạt động của võng mạc mắt.
Các CIE xác định sơ bộ để tất cả ánh sáng nhìn thấy ánh xạ vào hỗn hợp X, Y, Z và do đó Y xấp xỉ tương quan với độ sáng biểu kiến của một màu sắc. Nói chung, các hỗn hợp của các thành phần X, Y và Z được dùng để mô tả một màu sắc như là tỉ lệ phần trăm lớn hơn 0, trong một số trường hợp lớn hơn 100%.
Việc sử dụng thành phần Z của không gian màu XYZ cho hình ảnh khuôn mặt, tính toán trị riêng cho việc phát hiện mắt cho kết quả tốt hơn thay vì dùng thang đo GRAY của nó.
2.3.2 Ngƣỡng ảnh
Trong nhiều ứng dụng thị giác, nó rất hữu ích để có thể tách riêng các phần của hình ảnh tương ứng với đối tượng mà ta quan tâm, từ các vùng hình ảnh tương ứng với nền. Ngưỡng thường cung cấp một cách dễ dàng và thuận tiện để thực hiện phân đoạn này dựa trên cường độ khác nhau trong phần nổi và phần nền của một tấm hình. Thông thường ngưỡng có thể chia làm 2 loại: ngưỡng toàn cục (Global Thresholding) và ngưỡng thích nghi (Adaptive Thresholding).
a. Ngƣỡng toàn cục
Ngưỡng toàn cục là một phương thức chuyển đổi một ảnh gam màu xám sang ảnh nhị phân, là một loại đặc biệt gam màu xám chỉ có duy nhất 2 giá trị điểm ảnh đen và trắng, dùng giá trị ngưỡng cho toàn bộ ảnh. Một hay nhiều ngưỡng có thể xác định cho hình ảnh để có thể phân
18 cắt. Đối với giá trị ngưỡng đơn mỗi điểm ảnh được so sánh với ngưỡng này và nếu cường độ của điểm ảnh cao hơn ngưỡng, điểm ảnh được thiết lập màu trắng (hay đen), đầu ra cũng tương tự nếu nó thấp hơn ngưỡng, nó được thiết lập màu đen (hay trắng). Đối với nhiều giá trị ngưỡng thì có một dải cường độ sáng được thiết lập màu trắng trong khi vùng hình ảnh ngoài dải được thiết lập màu đen. Thông thường ngưỡng toàn cục với nhiều mức có thể được biểu điễn như sau:
Z là giá trị cường độ sáng.
b. Ngƣỡng thích nghi
Ngưỡng toàn cục dùng như là một ngưỡng cố định cho tất cả các điểm ảnh trong hình và do đó chỉ hoạt động nếu biểu đồ cường độ sáng của các hình ảnh đầu vào bao gồm những đỉnh được chia tương ứng để thiết kế đối tượng và nền. Do đó, nó không thể giải quyết với những thứ chứa trong hình, ví dụ, một độ chênh lệch ánh sáng lớn. Mặt khác, vùng ngưỡng thích nghi chọn ngưỡng khác nhau cho mỗi điểm ảnh dựa trên tầm của giá trị cường độ sáng trong vùng lân cận nó. Điều này cho phép ngưỡng của một tấm hình mà biểu đồ cường độ toàn cục không bao gồm đỉnh phân biệt và là một kết quả để giải quyết vấn đề của sự thay đổi điều kiện ánh sáng trong hình.
Có một vài cách cho việc tính toán vùng giá trị ngưỡng:
Điểm quan trọng trong ngưỡng thích ứng là chọn đúng kích cỡ khu vực cho mỗi điểm ảnh. Kích thước của khu vực này phải đủ lớn để bao đủ điểm ảnh nổi và nền, do đó một ngưỡng thấp sẽ được chọn. Mặt khác, chọn những vùng quá lớn có thể vi phạm các giả định về khoảng chiếu sáng đồng đều. Trong một số trường hợp, giá trị ngưỡng thích nghi có thể được cải thiện bằng cách trừ đi một giá trị không đổi từ giá trị trung bình mean – C. Xem xét biểu đồ giá trị cường độ sáng ngưỡng thích nghi là ngoài phạm vi luận văn này.
Chương II: Cơ sở lý thuyết hệ thống
19
Hình 2.5:Ảnh gốc và ngưỡng thích nghi nó với một cửa sổ 7x7, C=4
2.4 Thƣ viện OpenCV – EmguCV
2.4.1 Tổng quan về OpenCV và EmguCV a. OpenCV
OpenCV là một thư viện thị giác máy tính mã nguồn mở của Intel nó có thể làm đơn giản hóa công việc lập trình thị giác máy tính của bạn. OpenCV bao gồm nhiều khả năng tiên tiến – tìm, theo dõi, nhận dạng các bề mặt, lọc Kalman, là sự đa dạng của một hệ thống trí tuệ nhân tạo. Ngoài ra nó còn cung cấp các cơ sở thuật toán thị giác máy tính thông qua các giao diện lập trình ứng dụng ở mức thấp. Nó được đóng gói và hoàn toàn miễn phí, người dùng có thể sẵn sàng sử dụng cho những mục đích khác nhau của họ.
Intel đưa ra phiên bản OpenCV đầu tiên vào năm 1999. Ban đầu, nó chỉ là thư viện xử lý ảnh của Intel. Về sau, tính lệ thuộc đó đã được loại bỏ và bây giờ bạn có thể sử dụng OpenCV như một thư viện độc lập. OpenCV là một thư viện đa nền tảng, nó chấp nhận cả Window và Linux, hơn thế nữa gần đây là Mac OSX.[6]
b. EmguCV
EmguCV cũng là thư viện xử lý ảnh dành riêng cho C#, được xây dựng từ OpenCV và có phát triển thêm. Thực ra EmguCV là một phương thức đóng gói của OpenCV do đó EmgCV chỉ