1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nhan dang bien so xe

61 254 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 61
Dung lượng 3,79 MB

Nội dung

Công cụ nhận dạng Biển số xe ô tô, kỹ thuật xử lý ảnh số, nhận dạng và phát hiện đối tượng. Tổng quan về ngôn ngữ lập trình C, C và thư viện openCV. Đề tài gồm có 4 chương và kết luận Chương 1: tổng quan về ngôn ngữ lập trình C, C và thư viện opencv Chương 2: Tổng quan về xử lý ảnh số: tìm hiểu các kênh màu Chương 3: Nhận dạng và phát hiện đối tượng trong xử lý ảnh số Chương 4: Phần mềm nhận dạng biển số xe Kết luận Tài liệu tham khảo

Trang 1

KHOA CÔNG NGHỆ THÔNG TINTRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT VĨNH LONG

Trang 2

LỜI CẢM ƠN

Từ những ngày đầu còn bỡ ngỡ với những trang giáo trình cao cấp và phươngpháp học mới, chúng tôi gặp rất nhiều khó khăn trong việc tiếp thu các kiến thức mớicũng như làm quen với một phương pháp học tập mới Nhưng các thầy cô của trường đặcbiệt là các thầy cô giảng viên bộ môn Tin học đã tận tình dạy dỗ và chỉ bảo chúng tôi vềkiến thức cũng như cách học mới Từ việc cảm thấy khó khăn tiếp cận kiến thức mới mẻnày, giờ đây nó đã trở nên thú vị đối với chúng tôi, niềm đam mê tìm tòi trong lập trìnhcộng với sự chỉ bảo của thầy cô đã giúp chúng tôi vượt qua khó khăn ban đầu

Để hoàn thành Đồ án một cách tốt nhất chúng tôi đã được sự quan tâm, giúp đỡhết sức nhiệt tình của Cô ThS Trần Thu Mai, những kiến thức về Thư viện OpenCV rấtmới và khá khó hiểu nhưng cô đã hướng dẫn chi tiết, tỉ mỉ giúp chúng tôi hoàn thành Đồ

án này

Cuối cùng, nhóm chúng tôi xin gửi lời cảm ơn chân thành đến Cô ThS Trần ThuMai, quý bạn bè đã giúp chúng tôi trong suốt thời gian qua để hoàn thành Đồ án

Trang 3

LỜI NÓI ĐẦU

Xử lý và nhận dạng là một trong những lĩnh vực từ lâu được nhiều người quantâm Nó đã được ứng dụng vào nhiều lĩnh vực như:

 Trong y học: Cải thiện ảnh X-quang và nhận dạng đường biên mạch máu từ ảnhchụp bằng tia X, ứng dụng vào các xét nghiệm lâm sàng như phát hiện và nhậndiện u não, nội soi cắt lớp…

 Trong thiên văn học: Hệ thống chụp hình gắn liền trên tàu vũ trụ hạn chế về kíchthước và trong lượng, do đó chất lượng hình ảnh nhận được bị giảm như bị mờ,méo hình học và nhiễu nền Các hình ảnh đó được xử lý bằng máy tính

 Trong các lĩnh vực công nghiệp, người máy ngày càng đóng vai trò quan trọng.Chúng thực hiện các công việc nguy hiểm, đòi hỏi có tốc độ và độ chính xác caovượt quá khả năng con người Người máy trở nên tinh vi hơn và thị giác máy tínhđóng vai trò quan trọng hơn Người ta sẽ không chỉ đòi hỏi người máy phát hiện

và nhận dạng các bộ phận công nghiệp mà còn phải hiểu được những gì chúng tathấy và đưa ra hành động phù hợp Xử lý ảnh sẽ tác động đến thị giác của máytính

 Ngoài ra, xử lý nhận dạng còn được ứng dụng trong các lĩnh vực khác ít được nóiđến hơn Chắng hạn như ứng dụng phần mềm nhận dạng biển số xe trong các bãigiữ xe, giám sát tự động phương tiện giao thông Trong đồ án này, nhóm thực hiện

xin trình bày một ứng dụng của xử lý và nhận dạng ảnh số là NHẬN DẠNG BIỂN SỐ XE.

Trân Trọng

Trang 4

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN

MỤC LỤC

Trang 5

CHƯƠNG 1 TỔNG QUAN NGÔN NGỮ LẬP TRÌNH VÀ THƯ VIỆN

OPENCV 1

1.1.1.Giới thiệu ngôn ngữ lập trình C++ 1

1.1.2 Lập trình hướng đối tượng trong C++ 2

1.1.3 Visual Studio Code - Môi trường phát triển ứng dụng C++ 2

1.1.4 Tạo và biên dịch và chạy chương trình C++ 3

1.2.1 Giới thiệu Ngôn ngữ lập trình C# 4

1.2.2 Quá trình dịch chương trình C# 5

1.3.1 Giới thiệu về thư viện OpenCV 7

1.3.2 Hướng dẫn sử dụng thư viện OpenCV trên Window 9

CHƯƠNG 2 TỔNG QUAN VỀ XỬ LÝ ẢNH 15

2.1 Xử lý ảnh là gì? 15

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

2.2.1 Một số khái niệm cơ bản 15

2.2.2 Nắn chỉnh biến dạng 16

2.2.3 Khử nhiễu 17

2.2.4 Chỉnh mức xám 17

2.2.5 Phân tích ảnh 17

2.2.6 Nhận dạng 18

2.2.7 Nén ảnh 19

2.3 Thu nhận và biểu diễn ảnh 20

2.3.1 Màu sắc 20

2.3.2 Mô hình màu RGB (Red, Green, Bule) 20

2.3.3 Mô hình màu CMY (Cyan, Magenta, Yellow) 21

2.3.4 Mô hình màu HSV (Hue, Saturation, Value) 22

2.3.5 Mô hình màu HLS 23

2.4 Thu nhận, các thiết bị thu nhận ảnh 24

2.4.1 Giai đoạn lấy mẫu 25

2.4.2 Lượng tử hóa 26

2.5 Biểu diễn ảnh 26

2.5.1 Mô hình Raster 26

2.5.2 Mô hình Vector 27

CHƯƠNG 3 NHẬN DẠNG VÀ PHÁT HIỆN ĐỐI TƯỢNG TRONG XỬ LÝ ẢNH SỐ 29

3.1.Thuật toán Canny 29

3.1.1 Giới thiệu thuật toán Canny 29

3.1.2 Các bước thực hiện thuật toán Canny 29

3.1.3 Mô tả chi tiết từng bước của thuật toán 29

Trang 6

3.2.Kỹ thuật Contour Tracing 35

3.2.1 Khái niệm Contour 35

3.2.2 Các thuật toán Contour Tracing 36

CHƯƠNG 4 PHẦN MỀM NHẬN DẠNG BIỂN SỐ XE 38

4.1 Nhận dạng biển số xe 38

4.2 Phát hiện vùng chứa biển số xe và cách ly kí tự 38

4.3 Nhận dạng kí tự 40

4.4 Cài đặt chương trình Nhận dạng biển số xe ô tô 42

4.4.1 Giải thuật 43

4.4.2 Cài đặt chương trình 44

KẾT LUẬN 54

TÀI LIỆU THAM KHẢO 55

Trang 7

CHƯƠNG 1 TỔNG QUAN NGÔN NGỮ LẬP TRÌNH VÀ

THƯ VIỆN OPENCV

1.1.1 Giới thiệu ngôn ngữ lập trình C++

Ngôn ngữ lập trình C++ được phát triển từ ngôn ngữ C Nó chính là mở rộng của ngônngữ C, có nghĩa là nó được bổ sung các đặc tính mới của ngôn ngữ lập trình hướng đối tượng.Trước đó ngôn ngữ C là ngôn ngữ bậc cao được biết đến với khả năng chạy được trên hầu hếtcác máy tính và độc lập với phần cứng

Sử dụng ngôn ngữ lập trình C cho hầu hết các nền tảng phần cứng Chính vì tính phổ biếnnày, người ta đã phải thực hiện chuẩn hóa ngôn ngữ lập trình C Tổ

chức ANSI (AmericanNational Standards Institute) và ISO (International Organization For

Standardization) đã kết hợp và tiến hành chuẩn hóa ngôn ngữ này

Ngôn ngữ lập trình C++ được phát triển bởi Bjarne Stroustrup vào đầu những năm 80 tạiphòng thí nghiệm Bell C++ so với ngôn ngữ lập trình C có 2 điểm mở rộng như sau :

+ Bổ sung thêm tham chiếu, hàm chồng, tham số mặc định

+ Hỗ trợ lập trình hướng đối tượng

Ngoài ra nếu không xét đến lập trình hướng đối tượng trong ngôn ngữ C++, thì các lập trìnhviên ngôn ngữ C hoàn toàn có khả năng code trên ngôn ngữ C++ với các đặc điểm mở rộngnhư :

+ Cung cấp khả năng viết các dòng chú thích mới

+ Khả năng khai báo linh hoạt hơn

+ Cho phép định nghĩa lại các hàm, các hàm có thể cùng tên nhưng thực hiện các nhiệm

vụ khác nhau Khi thực hiện gọi hàm, trình biên dịch sẽ phân biệt thông qua kiểu và sốtham số truyền vào của hàm để xác định đúng hàm nào thực hiện khi chạy

+ Bổ sung cách thức cấp phát và thu hồi bộ nhớ động như : new và delete

+ Cung cấp khả năng định nghĩa các hàm inline để tăng tốc độ thực hiện chương trình.+ Tạo các biến tham chiếu tới các biến khác

Trang 8

1.1.2 Lập trình hướng đối tượng trong C++

C++ cung cấp cách thức lập trình hướng đối tượng cho các lập trình viên thực hiện mộtcách dễ dàng Các đặc trưng chính của ngôn ngữ lập trình hướng đối tượng đều được ngônngữ lập trình C++ đáp ứng, bao gồm :

+ Lớp : Lớp trong lập trình hướng đối tượng bao gồm các thành phần dữ liệu như thuộc

tính và phương thức, thể hiện của lớp đó chính là các đối tượng, C++ cung cấp cách thứcđịnh nghĩa lớp và tạo đối tượng thể hiện lớp một cách dễ dàng thông qua hàm new và sửdụng phương thức khởi tạo của lớp Phương thức khởi tạo được gọi đến tại thời điểm mộtđối tượng của lớp được tạo ra

+ Đóng gói dữ liệu : Trong lập trình hướng đối tượng người sử dụng chỉ cần biết chức

năng của phương thức mà không cần biết nội dung phương thức đó thực hiện như thếnào Tính năng nay là tính đóng gói về chức năng Ngoài ra các thuộc tính của lớp thườngchứa dữ liệu, chỉ có các phương thức trực thuộc lớp đó hoặc các lớp kế thừa hoặc các lớpbạn mới có thể truy cập tới các thuộc tính đó Cái này người ta gọi là tính đóng gói gắnvới thuộc tính Với ngôn ngữ C++ sử dụng các từ khóa public, private, protected, … để

xử lý đặc tính này

+ Tình thừa kế : Thừa kế cho phép định nghĩa 1 lớp dựa trên lớp cơ sở C++ thực hiện

điều này một cách dễ dàng, nó cho phép 1 lớp có thể kế thừa từ 1 lớp ( Kế thừa đơn) hoặc

có thể kế thừa từ nhiều lớp (đa kế thừa)

+Tính đa hình : Tính đa hình xuất hiện khi chúng ta thực hiện kế thừa Có nghĩa là 1

phương thức khi được gọi sẽ được xác định tại thời điểm chạy chương trình (Phươngthức đó có thể là phương thức tại lớp dẫn xuất hoặc phương thức tại lớp cơ sở)

1.1.3 Visual Studio Code - Môi trường phát triển ứng dụng C++

Trình biên dịch trực ngôn ngữ thuộc GCC có thể được cài đặt trên nhiều hệ điều hànhkhác nhau, ngoài ra nó có thể tích hợp với các bộ công cụ phát triển phần mềm thông dụng và

mã nguồn mở như như eclipse, visual studio code

Sau khi cài đặt thành phần mở rộng C/C++ chú ý là thành phần mở rộng C/C++ khôngbao gồm trình biên dịch và debugs, chúng ta cần phải cài đặt MinGW cho window, Xcodecho MacOS và Gcc cho Linux và Unix

Page 2

Trang 9

1.1.4 Tạo và biên dịch và chạy chương trình C++

Tiến trình xử lý của một chương trình C++ được mô tả như hình sau :

Mô tả tiến trình xử lý :

Bước 1 : Soạn thảo chương trình (Editor)

Sử dựng các trình soạn thảo văn bản để viết chương trình ví dụ trình soạn thảo vi và emacstrong hệ điều hành Linux Hoặc sử dụng các chương trình đóng gói của các hãng phát triển đểviết chương trình như Eclipse, Microsoft Visual Code hoặc Visual Studio Sau khi soạn thảoxong ghi ra file có đuôi mở rộng là cpp

Bước 2 : Tiền xử lý (Preprocessor)

Trong hệ thống C++ , tiền xử lý được tiến hành một cách tự động trước khi giai đoạn dịchchương trình bắt đầu

Bước tiền xử lý tương ứng với việc cập nhật nội dung chương trình nguồn, chủ yếu dựa trênviệc diễn giải các mã lệnh rất đặc biệt gọi là các chỉ thị dẫn hướng của bộ tiền xử lý(destination directive of preprocessor); các chỉ thị này được nhận biết bởi chúng bắt đầu bằng

ký hiệu (symbol) #

Hai chỉ thị quan trọng nhất là:

+ Chỉ thị sự gộp vào của các tập tin nguồn khác: #include

Trang 10

+ Chỉ thị việc định nghĩa các macros hoặc ký hiệu: #define

Bước 3 : Biên dịch chương trình (Compiner)

Trình biên dịch thực hiện biên dịch chương trình C++ sang mã ngôn ngữ máy có thể hiểuđược Khi thực hiện biên dịch nếu lỗi xảy ra, lập trình viên phải quay về bước 1 để chỉnh sửachương trình

Bước 4 : Liên kết

Tại giai đoạn này chương trình C++ chứa các tham chiếu tới các hàm lớp thư viên được càiđặt bởi các thư viện chuẩn được cung cấp sẵn hoặc các thư viện do các nhà phát triển xâydựng nên

Bước 5 : Nạp chương trình

Trước khi chương trình được thực thi, chương trình phải được nạp vào trong bộ nhớ Tại giaiđoạn này hệ điều hành cấp phát vùng bộ nhớ cần thiết để các đối tượng cần thiết để thực thichương trình

Giai đoạn 6 : Thực thi

CPU Tiến hành thực thi các nghiệp vụ của chương trình

1.2.1 Giới thiệu Ngôn ngữ lập trình C#

C # là một ngôn ngữ lập trình hiện đại được phát triển bởi Microsoft và được phêduyệt bởi European Computer Manufacturers Association (ECMA) và International StandardsOrganization (ISO).C # được phát triển bởi Anders Hejlsberg và nhóm của ông trong việcphát triển .Net Framework C # được thiết kế cho các ngôn ngữ chung cơ sở hạ tầng(Common Language Infrastructure – CLI), trong đó bao gồm các mã (Executable Code)

và môi trường thực thi (Runtime Environment) cho phép sử dụng các ngôn ngữ cấp cao khácnhau trên đa nền tảng máy tính và kiến trúc khác nhau

Vai trò C# trong NET Framework:

 NET runtime sẽ phổ biến và được cài trong máy client

o Việc cài đặt App C# như là tái phân phối các thành phần NET

o Nhiều App thương mại sẽ được cài đặt bằng C#

 C# tạo cơ hội cho tổ chức xây dựng các App Client/Server n-tier

Page 4

Trang 11

 Kết nối ADO.NET cho phép truy cập nhanh chóng & dễ dàng với SQL Server, Oracle…

 Cách tổ chức NET cho phép hạn chế những vấn đề phiên bản

o Loại bỏ “DLL Hell”…

 ASP.NET viết bằng C#

o GUI thông minh

o Chạy nhanh hơn (đặc tính của NET)

o Mã ASP.NET ko còn là mới hỗn độn

o Khả năng bẫy lỗi tốt, hỗ trợ mạnh trong quá trình xây dựng App Web

1.2.2 Quá trình dịch chương trình C#

 Mã nguồn C# (tập tin *.cs) được biên dịch qua MSIL

o MSIL: tập tin exe hoặc dll

 MSIL được CLR thông dịch qua mã máy

o Dùng kỹ thuật JIT (just-in-time) để tăng tốc độ

Sử dụng C#, ta có thể tạo ra rất nhiều kiểu ứng dụng, ở đây ta quan tâm đến ba kiểu ứng dụngchính: Console, Window và ứng dụng Web

Ứng dụng Console

 Giao tiếp với người dùng bằng bàn phím

 Không có giao diện đồ họa (GUI)

Ứng dụng Console là ứng dụng có giao diện text, chỉ xử lý nhập xuất trên màn hìnhConsole, tương tự với các ứng dụng DOS trước đây Ứng dụng Console thường đơn giản, ta

Trang 12

có thể nhanh chóng tạo chương trình hiển thị kết xuất trên màn hình Do đó, các minh hoạ, ví

dụ ngắn gọn ta thường sử dụng dạng chương trình Console để thể hiện

Để tạo ứng dụng Console ta làm như sau:

Trong Visual Studio, chọn File → New → Project Visual Studio sẽ trình bày hộp thoạiNew Project Trong hộp thoại New Project, kích biểu tượng ứng dụng ConSole (ConsoleApplication) Trong ô name, gõ tên chương trình (dự án) Trong ô Location, gõ tên của thưmục mà ta muốn Visual Studio lưu dự án Nhấn OK Visual Studio sẽ hiển thị cửa sổ Ta nhậpcode vào trong cửa sổ này

Ứng dụng Windows Form

 Giao tiếp với người dùng bằng bàn phím và mouse

 Có giao diện đồ họa và xử lý sự kiện

Là ứng dụng được hiển thị với giao diện cửa sổ đồ họa Chúng ta chỉ cần kéo và thả cácđiều khiển (control) lên cửa sổ Form Visual Studio sẽ sinh mã trong chương trình để tạo ra,hiển thị các thành phần trên cửa sổ

Để tạo ứng dụng Window ta làm như sau:

File → New → Project Visual Studio sẽ trình bày hộp thoại New Project Trong hộpthoại New Project, kích biểu tượng ứng dụng Windows (Windows Application) Trong ôName, gõ tên mô tả chương trình mà ta dự định tạo (tên dự án) Tiếp theo, trong ô Location,

gõ tên của thư mục mà ta muốn Visual Studio lưu dự án Nhấn OK Visual Studio sẽ hiển thịcửa sổ thiết kế Ta có thể kéo và thả các thành phần giao diện (control) lên Form Để hiển thịcửa sổ Toolbox chứa những điều khiển mà ta có thể kéo và thả lên Form, ta chọn View →Toolbox từ menu

Biên dịch và chạy chương trình: Để biên dịch chương trình, ta chọn Build → Build

Solution Để chạy chương trình, ta chọn Debug → Start Nếu ta có thay đổi nội dung củaForm, như đặt thêm điều khiển khác lên Form chẳng hạn, ta phải yêu cầu Visual Studio biêndịch lại

Ứng dụng Web

 Kết hợp với ASP NET, C# đóng vài trò xử lý bên dưới (underlying code)

 Có giao diện đồ họa và xử lý sự kiện

Page 6

Trang 13

Môi trường NET cung cấp công nghệ ASP.NET giúp xây dựng những trang Web động.

Để tạo ra một trang ASP.NET, người lập trình sử dụng ngôn ngữ biên dịch như C# để viết mã

Để đơn giản hóa quá trình xây dựng giao diện người dùng cho trang Web, NET giới thiệucông nghệ Webform Cách thức tạo ra các Web control tương tự như khi ta xây dựng ứngdụng trên Window Form

1.3.1 Giới thiệu về thư viện OpenCV

OpenCV (Open Source Computer Vision) là một thư viện mã nguồn mở về thị giácmáy với hơn 500 hàm và hơn 2500 các thuật toán đã đư ợc tối ưu về xử lý ảnh, và các vấn đềliên quan tới thị giác máy OpenCV được thiết kế một cách tối ưu, sử dụng tối đa sức mạnhcủa các dòng chip đa lõi… để thực hiện các phép tính toán trong thời gian thực, nghĩa là tốc

độ đáp ứng của nó có thể đủ nhanh cho các ứng dụng thông thường OpenCV là thư việnđược thiết kế để chạy trên nhiều nền tảng khác nhau (cross-patform), nghĩa là nó có thể chạytrên hệ điều hành Window, Linux, Mac, iOS … Việc sử dụng thư viện OpenCV tuân theo các

quy định về sử dụng phần mềm mã nguồn mở BSD do đó bạn có thể sử dụng thư viện này một

cách miễn phí cho cả mục đích phi thương mại lẫn thương mại

Dự án về OpenCV được khởi động từ những năm 1999, đến năm 2000 nó được giới

thiệu trong một hội nghị của IEEE về các vấn đề trong thị giác máy và nhận dạng, tuy nhiên

bản OpenCV 1.0 mãi tới tận năm 2006 mới chính thức được công bố và năm 2008 bản 1.1(pre-release) mới được ra đời Tháng 10 năm 2009, bản OpenCV thế hệ thứ hai ra đời (thườnggọi là phiên bản 2.x), phiên bản này có giao diện của C++ (khác với phiên bản trước có giaodiện của C) và có khá nhiều điểm khác biệt so với phiện bản thứ nhất

Thư viện OpenCV ban đầu được sự hỗ trợ từ Intel, sau đó được hỗ trợ bở WillowGarage, một phòng thí nghiệm chuyên nghiên cứu về công nghệ robot Cho đến nay, OpenCVvẫn là thư viện mở, được phát triển bởi nguồn quỹ không lợi nhuận (none -profit foundation)

và được sự hưởng ứng rất lớn của cộng đồng

Cho tới nay, trải qua hơn 6 năm từ lúc phiên bản OpenCV đầu tiên được công bố, đã cólần lượt nhiều phiên bản OpenCV ra đời, tuy nhiên có thể chia thư viện này thành hai bảnchính dựa trên những đặc điểm khác biệt lớn nhất của chúng: phiên bản OpenCV thế hệ thứnhất (hay còn gọi là phiên bản OpenCV 1.x) và phiên bản OpenCV thứ hai (hay còn gọi là

Trang 14

phiên bản OpenCV 2.x) Sau đây ta sẽ chỉ ra một số điểm khác biệt cơ bản giữa hai phiên bảnnày.

- OpenCV 1.x (bao gồm bản 1.0 và bản pre-release 1.1) dựa trên giao diện C, cấu trúccủa một ảnh số dựa trên cấu trúc của IplImage, trong khi thư OpenCV 2.x dựa trên giao diệnC++, cấu trúc của ảnh số, ma trận dựa trên cấu trúc của cv::Mat

- Trong OpenCV 1.x, người sử dụng phải hoàn toàn quản lý bộ nhớ của các đối tượng,nghĩa là khi một đối tượng mới được tạo ra, ta phải luôn chú ý để giải phóng nó khi khôngcòn sử dụng nữa (trong nhiều trường hợp có thể sẽ bị tràn bộ nhớ nếu không chú ý đều này),trong khi thư viện OpenCV 2.x việc quản lý bộ nhớ trở nên dễ dàng hơn nhờ các hàm hủy cáccác lớp đối tượng trong OpenCV 2.x đã thực hiện điều này khi một đối tượng không còn được

Trong khi đó, OpenCV 2.x thực hiện như sau:

Page 8

Trang 15

- Ta thấy rằng đối tượng ảnh gray trong OpenCV 2.x không cần phải khởi tạo, đối tượng storage (đối tượng trung gian, không có ý nghĩa về mặt sử dụng) cũng không cần phải khởi

tạo (và do đó không cần giải phóng)

- Thư viện OpenCV 1.x tuy chứa một lượng lớn hàm xử lý và thuật toán, tuy nhiên nóvẫn ở dạng sơ khai Thư viện OpenCV 2.x đã được bổ xung khá nhiều hàm, thuật toán vàđược tối ưu khá nhiều đặc biệt trong các khía cạnh về phát hiện đối tượng (detection), nhậndạng đối tượng (partten regconition) và theo dỗi đối tượng (tracking) Hơn thế nữa, tuy cógiao diện là C++ nhưng OpenCV 2.x vẫn dữ một phần giao diện C để tương thích với cácphiên bản của OpenCV 1.x …

Từ một số đặc điểm trên ta có thể thấy rằng thư viện OpenCV phiên bản 2.x là có nhiều điểmnổi trội hơn so với phiên bản 1.x, Tuy nhiên trong một số trường hợp như ở các hệ thốngnhúng khi mà trình dịch chỉ đơn thuần chấp nhận ngôn ngữ C thì phiển bản 1.x vẫn còn giátrị Trong cuốn sách này, các nội dung cài đặt, thuật toán, ứng dụng … chỉ dành cho OpenCVphiên bản 2.x trên nền tảng hệ điều hành Window

1.3.2 Hướng dẫn sử dụng thư viện OpenCV trên Window

Trước hết ta cần download thư viện OpenCV về máy tính, tốt hơn là luôn downloadbản mới nhất tại địa chỉ http://sourceforge.net/projects/opencvlibrary/ Chọn bản đã build sẵnphù hợp với hệ điều hành đang dùng, bản OpenCV được sử dụng là bản 2.4.3 với lần updatecuối cùng là vào ngày 25 tháng 12 năm 2012 Sau khi download về máy, tiến hành cài đặt

bình thường, ta để mặc định thư mục cài đặt là C:\ thư mục cài đặt xong sẽ có dạng C:\opencv Tiếp theo ta sẽ tiến hành tùy chỉnh để có thể làm việc với OpenCV qua hai IDE

thông dụng là Microsoft Visual Studio và Eclipse CDT

Trên Microsoft Visual Studio

Trang 16

Phiên bản Visual studio sử dụng ở đây là phiên bản Visual Studio 2010, các phiên bản trước

ta hoàn toàn có thể cấu hình một cách tương tự.Tạo một project mới: New > Project, trongcửa sổ New Project chọn Visual C++, Win32console application Đặt tên project là opencv

Chọn OK, sau đó nhấn Next, hộp thoại tiếp theo xuất hiện, ở hộp thoại này ta chọn Application type là Console application và Additional option là Empty project, nhấn Finish

để kết thúc quá trình khởi tạo

Page 10

Trang 17

Project mới được tạo ra là project hoàn toàn trống, ta phải thêm vào đó ít nhất một file

nguồn để chương trình có thể chạy được, trong Solution Explorer ta click chuột phải vào Source Files, chọn Add -> New Item… Hộp thoại Add New Item hiện ra, ta chọn kiểu cần thêm vào là C++ File(.cpp) đồng thời trong ô Name ta đặt tên cho file thêm vào, giả sử là FirstApp.cpp Bây giở trong file này ta có thể thêm vào các #include và gọi hàm main() để

chạy chương trình

Để chương trình có thể chạy được với thư viện OpenCV ta cần tùy chỉnh lại một số thuộctính của project như sau

Vào Project -> Properties (hoặc nhấn tổ hợp phím Alt + F7) để mở hộp thoại Properties

Hộp thoại opencv Property Pages hiện ra, trong mục Configuration Properties chọn VC++ Directories, tương ứng bên phải, ta tìm mục Include Directories và Library Directories Ta sẽ chỉ đường dẫn hai thư mục này đến các phần tương ứng của thư viện OpenCV Mục Include Directories, ta tùy chỉnh ở ô bên phải tới C:\opencv\build\include Mục Library Directories trỏ đến thư mục C:\opencv\build\x86\vc10\lib nếu như ta sử dụng hệ điều hành 32bit hoặc C:\opencv\build\x64\vc10\lib cho hệ điều hành 64bit.

Tiếp theo, trong hộp thoại opencv Property Pages -> Configuration Properties -> Linker chọn Input, tương ứng ở ô bên phải, thêm vào các giá trị cho mục Additional Dependencies là

Trang 18

opencv_core243d.lib, opencv_imgproc243d.lib, opencv_highgui243d.lib.

Chú ý là các lib thêm vào sẽ tương ứng với các header ta khai báo trong chương trình,

và tùy thuộc vào mục đích sử dụng mà ta có thể thêm vào các lib các nhau, giả sử ta cần sửdụng tới các hàm về video, khi đó ta them header #include<opencv2/video/video.hpp> thì trong phần Additional Dependencies ta phải khai báo thêm opencv_video243d.lib Chữ d đứng cuối các file trên thể hiện ta đang hoạt động ở chế độ debug, ta có thể thêm các lib không có chữ “d” ở cuối như opencv_core243.lib … trong chế độ release Tuy nhiên khi đang còn học tập và cần nhiều chỉnh sửa ta nên để ở chế độ debug.

Cuối cùng, khi dịch xong một chương trình, để nó có thể chạy được ta cần chú ý tới

các file *.dll Cách đơn giản nhất là ta copy các file *.dll tương ứng (như opencv_core243d.dll, opencv_imgproc243d.dll) vào thư mục chứa file chạy của chương trình (file *.exe) Các file *.dll này nằm trong mục C:\opencv\build\x86\bin với win 32 bit hoặc C:\opencv\build\x64\bin với win 64 bit Với các phiên bản OpenCV cũ hơn, ta cần copy luôn file tbb_debug.dll (trong chế độ debug) hoặc tbb.dll (trong chế độ release) vào thư mục chứa file *.exe tbb.dll (Thread building block) là file khá quan trọng, thiếu nó chương trình sẽ báo

lỗi

Sau khi đã hoàn tất việc chỉ dẫn thư mục chứa header, library và link tới các library tươngứng, ta có thể include các header của opencv vào chương trình và có thể gọi các hàm làmviệc của OpenCV

Page 12

Trang 19

Với Eclipse CDT

Khởi động Eclipse, Từ cửa sổ Eclipse chọn New -> C++ Project , hộp thoại C++Project xuất hiện, trong hộp thoại ta chọn Project name là opencv, Project type là HelloWorld C++ Project (Có thể chọn là Empty Project), Toolchains là MinGW GCC, Chọn Finish

và ta có một Project mới Bây giờ tùy chỉnh cho project này hoạt động được với OpenCV.Trong cửa sổ của Eclipse chọn Project ->Properties, cửa sổ Properties hiện ra Tron cửa sổProperties chọn C/C++ Build->Settings Trong tab Tool Settings Ở phần GCC C++

Compiller chọn Include rồi dẫn đường dẫn tới mục Include của OpenCV là

C:\opencv\build\include

Trang 21

CHƯƠNG 2 TỔNG QUAN VỀ XỬ LÝ ẢNH

2.1 Xử lý ảnh là gì?

Con người thu nhận thông tin qua các giác quan, trong đó thị giác đóng vai trò quantrọng nhất Những năm trở lại đây với sự phát triển của phần cứng máy tính, xử lý ảnh và đồhoạ đó phát triển một cách mạnh mẽ và có nhiều ứng dụng trong cuộc sống Xử lý ảnh và đồhoạ đóng một vai trò quan trọng trong tương tác người máy

Quá trình xử lý ảnh được xem như là quá trình thao tác ảnh đầu vào nhằm cho ra kếtquả mong muốn Kết quả đầu ra của một quá trình xử lý ảnh có thể là một ảnh “tốt hơn” hoặcmột kết luận

Ảnh

“Tốt hơn”

Kết luận

Trang 22

Error: Reference source not foundHình 2.2 Các bước cơ bản trong một hệ thống xử lý ảnh

Ảnh thu nhận thường bị biến dạng do các thiết bị quang học và điện tử

Hình 2.3 Ảnh thu nhận và ảnh mong muốn

Để khắc phục người ta sử dụng các phép chiếu, các phép chiếu thường được xây dựng trêntập các điểm điều khiển

Giả sử (Pi, Pi’) i = có n các tập điều khiển

Hệ quyết định

Đối sánh rút

ra kết luận Hậu

xử lý

Trang 23

Giả sử ảnh bị biến đổi chỉ bao gồm: Tịnh tiến, quay, tỷ lệ, biến dạng bậc nhất tuyến tính Khi

Có 2 loại nhiễu cơ bản trong quá trình thu nhận ảnh

 Nhiều hệ thống: là nhiễu có quy luật có thể khử bằng các phép biến đổi

 Nhiễu ngẫu nhiên: vết bẩn không rõ nguyên nhân  khắc phục bằng các phép lọc

 Tăng số mức xám: Thực hiện nội suy ra các mức xám trung gian bằng kỹ thuật nộisuy Kỹ thuật này nhằm tăng cường độ mịn cho ảnh

2.2.5 Phân tích ảnh

Trang 24

Là khâu quan trọng trong quá trình xử lý ảnh để tiến tới hiểu ảnh Trong phân tích ảnhviệc trích chọn đặc điểm là một bước quan trọng Các đặc điểm của đối tượng được trích chọntuỳ theo mục đích nhận dạng trong quá trình xử lý ảnh Có thể nêu ra một số đặc điểm củaảnh sau đây:

Đặc điểm không gian: Phân bố mức xám, phân bố xác suất, biên độ, điểm uốn v.v

Đặc điểm biến đổi: Các đặc điểm loại này được trích chọn bằng việc thực hiện lọc vùng

(zonal filtering) Các bộ vùng được gọi là “mặt nạ đặc điểm” (feature mask) thường là cáckhe hẹp với hình dạng khác nhau (chữ nhật, tam giác, cung tròn v.v )

Đặc điểm biên và đường biên: Đặc trưng cho đường biên của đối tượng và do vậy rất hữu

ích trong việc trích trọn các thuộc tính bất biến được dùng khi nhận dạng đối tượng Các đặcđiểm này có thể được trích chọn nhờ toán tử gradient, toán tử la bàn, toán tử Laplace, toán tử

“chéo không” (zero crossing) v.v Việc trích chọn hiệu quả các đặc điểm giúp cho việcnhận dạng các đối tượng ảnh chính xác, với tốc độ tính toán cao và dung lượng nhớ lưutrữ giảm xuống

2.2.6 Nhận dạng

Nhận dạng tự động (automatic recognition), mô tả đối tượng, phân loại và phân nhómcác mẫu là những vấn đề quan trọng trong thị giác máy, được ứng dụng trong nhiều ngànhkhoa học khác nhau Tuy nhiên, một câu hỏi đặt ra là: mẫu (pattern) là gì? Watanabe, mộttrong những người đi đầu trong lĩnh vực này đã định nghĩa: “Ngược lại với hỗn loạn (chaos),mẫu là một thực thể (entity), được xác định một cách ang áng (vaguely defined) và có thể gáncho nó một tên gọi nào đó” Ví dụ mẫu có thể là ảnh của vân tay, ảnh của một vật nào đóđược chụp, một chữ viết, khuôn mặt người hoặc một ký đồ tín hiệu tiếng nói Khi biết mộtmẫu nào đó, để nhận dạng hoặc phân loại mẫu đó có thể:

Hoặc phân loại có mẫu (supervised classification), chẳng hạn phân tích phân biệt

(discriminant analyis), trong đó mẫu đầu vào được định danh như một thành phần của mộtlớp đã xác định

Hoặc phân loại không có mẫu (unsupervised classification hay clustering) trong đó các mẫu

được gán vào các lớp khác nhau dựa trên một tiêu chuẩn đồng dạng nào đó Các lớp này chođến thời điểm phân loại vẫn chưa biết hay chưa được định danh

Page 18

Trang 25

Hệ thống nhận dạng tự động bao gồm ba khâu tương ứng với ba giai đoạn chủ yếu sau đây:

1o Thu nhận dữ liệu và tiền xử lý

2o Biểu diễn dữ liệu

3o Nhận dạng, ra quyết định

Bốn cách tiếp cận khác nhau trong lý thuyết nhận dạng là:

1o Đối sánh mẫu dựa trên các đặc trưng được trích chọn

2o Phân loại thống kê

3o Đối sánh cấu trúc

4o Phân loại dựa trên mạng nơ-ron nhân tạo

Trong các ứng dụng rõ ràng là không thể chỉ dùng có một cách tiếp cận đơn lẻ để phân loại

“tối ưu” do vậy cần sử dụng cùng một lúc nhiều phương pháp và cách tiếp cận khác nhau Dovậy, các phương thức phân loại tổ hợp hay được sử dụng khi nhận dạng và nay đã có nhữngkết quả có triển vọng dựa trên thiết kế các hệ thống lai (hybrid system) bao gồm nhiều môhình kết hợp

Việc giải quyết bài toán nhận dạng trong những ứng dụng mới, nảy sinh trong cuộc sốngkhông chỉ tạo ra những thách thức về thuật giải, mà còn đặt ra những yêu cầu về tốc độ tínhtoán Đặc điểm chung của tất cả những ứng dụng đó là những đặc điểm đặc trưng cần thiếtthường là nhiều, không thể do chuyên gia đề xuất, mà phải được trích chọn dựa trên các thủtục phân tích dữ liệu

2.2.7 Nén ảnh

Nhằm giảm thiểu không gian lưu trữ Thường được tiến hành theo cả hai cách khuynhhướng là nén có bảo toàn và không bảo toàn thông tin Nén không bảo toàn thì thường có khảnăng nén cao hơn nhưng khả năng phục hồi thì kém hơn Trên cơ sở hai khuynh hướng, có 4cách tiếp cận cơ bản trong nén ảnh:

 Nén ảnh thống kê: Kỹ thuật nén này dựa vào việc thống kê tần xuất xuất hiện của giátrị các điểm ảnh, trên cơ sở đó mà có chiến lược mã hóa thích hợp Một ví dụ điển hình cho

kỹ thuật mã hóa này là *.TIF

Trang 26

 Nén ảnh không gian: Kỹ thuật này dựa vào vị trí không gian của các điểm ảnh đểtiến hành mã hóa Kỹ thuật lợi dụng sự giống nhau của các điểm ảnh trong các vùng gầnnhau Ví dụ cho kỹ thuật này là mã nén *.PCX

 Nén ảnh sử dụng phép biến đổi: Đây là kỹ thuật tiếp cận theo hướng nén không bảotoàn và do vậy, kỹ thuật thướng nến hiệu quả hơn *.JPG chính là tiếp cận theo kỹ thuật nénnày

 Nén ảnh Fractal: Sử dụng tính chất Fractal của các đối tượng ảnh, thể hiện sự lặp lạicủa các chi tiết Kỹ thuật nén sẽ tính toán để chỉ cần lưu trữ phần gốc ảnh và quy luật sinh raảnh theo nguyên lý Fractal

2.3 Thu nhận và biểu diễn ảnh

2.3.1 Màu sắc

Mắt người có thể phân biệt được vài chục màu nhưng chỉ có thể cảm nhận được hàngngàn màu Ba thuộc tính của một màu đó là: Sắc (Hue), Độ thuần khiết (Saturation), và độsáng hay độ chói (Itensity)

Trong xử lý ảnh và đồ họa, mô hình màu là một chỉ số kỹ thuật của một hệ tọa độ màu

3 chiều với tập các màu nhỏ thành phần có thể trông thấy được trong hệ thống tọa độ màuthuộc một gam màu đặc trưng Ví dụ như mô hình màu RGB (Red, Green, Blue): là một đơn

vị tập các màu thành phần sắp xếp theo hình lập phương của hệ trục tọa độ Đề các

Mục đích của mô hình màu là cho phép các chỉ số kỹ thuật quy ước của một số loạimàu sắc thích hợp với các màu sắc của một số gam màu khác Chúng ta có thể nhìn thấytrong mô hình màu này, không gian màu là một tập hợp nhỏ hơn của không gian các màu cóthể nhìn thấy được, vì vậy một mô hình màu không thể được sử dụng để định rõ tất cả có thểnhìn thấy Sau đây, ta xem xét một số mô hình hay được sử dụng nhất

2.3.2 Mô hình màu RGB (Red, Green, Bule)

Màu đỏ, lục – xanh lá cây, lam – xanh da trời (RGB) được sử dụng phổ biến nhất.Những màu gốc RGB được thêm vào những màu gốc khác điều đó tạo nên sự đóng góp riêngcủa từng màu gốc được thêm cùng nhau để mang lại kết qaủ Tập hợp màu nhỏ thành phầnsắp xếp theo khối lập phương đơn vị Đường chéo chính của khối lập phương với sự cân bằng

về số lượng từng màu gốc tương ứng với các mức độ xám với đen là (0,0,0) và trắng (1,1,1)

Page 20

Trang 27

Hình 2.4 Mô hình màu RGB

2.3.3 Mô hình màu CMY (Cyan, Magenta, Yellow)

Là phần bù tương ứng cho các màu đỏ, lục, lam và cúng được sử dụng như những bộlọc loại trừ các màu này từ ánh sáng trắng Vì vậy CMY còn được gọi là các phần bù loại trừcủa màu gốc Tập hợp màu thành phần biểu diễn trong hệ tọa độ Đề-các cho mô hình mầuCMY cũng giống như cho mô hình màu RGB ngoại trừ màu trắng (ánh sáng trắng), được thaythế màu đen (không có ánh sáng) ở tại nguồn sáng Các màu thường được tạo thành bằngcách loại bỏ hoặc được bù từ ánh sáng trắng hơn là được thêm vào những màu tối

Trang 28

Khi bề mặt được bao phủ bởi lớp mực màu xanh tím, sẽ không có tia màu đỏ phảnchiếu từ bề mặt đó Màu xanh tím đã loại bỏ phần màu đỏ phản xạ khi có tia sáng trắng, màbản chất là tổng của 3 màu đỏ, lục, lam Vì thế ta có thể coi màu Cyan là màu trắng trừ đimàu đỏ và đó cũng là màu lam cộng màu lục Tương tự như vậy ta có màu đỏ thẫm (magenta)hấp thụ màu lục, vì thế nó tương đương với màu đỏ cộng màu lam Và cuối cùng màu vàng(yellow) hấp thụ màu lam, nó sẽ bằng màu đỏ cộng với lục.

Khi bề mặt của thực thể được bao phủ bởi xanh tím và vàng, chúng sẽ hấp thụ hết cácphần màu đỏ và xanh lam của bề mặt Khi đó chỉ tồn tại duy nhất màu lục bị phản xạ từ sựchiếu sáng của ánh sáng trắng Trong trường hợp khi bề mặt được bao phủ bởi cả 3 màu xanhtím, vàng, đỏ thẫm, hiện tượng hấp thụ xảy ra trên cả 3 màu đỏ, lục và lam Do đó, màu đen

sẽ màu của bề mặt Những mối liên hệ này có thể được miêu tả bởi:

2.3.4 Mô hình màu HSV (Hue, Saturation, Value)

Các mô hình màu RGB, CMY được định hướng cho phần cứng trái ngược với mô hìnhmàu HSV của Smith hay còn được gọi là mẫu HSB với B là Brightness (độ sáng), được địnhhướng người sử dụng dựa trên cơ sở nền tảng về trực giác về tông màu, sắc độ và sắc thái mỹthuật

Hệ thống tọa độ có dạng hình trụ và tập màu thành phần của không gian bên trong môhình màu được xác định là hình nón hoặc hình chóp sáu cạnh như trong hình 1.7 Đỉnh hìnhchóp là sáu cạnh khi V= 1 chứa đựng mối quan hệ giữa các màu sáng và những màu trên mặtphẳng với V= 1 đều có màu sáng

Page 22

Hình 2.6 Sự biến đổi từ RGB thành CMY

Trang 29

Hình 2.7 Mô hình màu HSV

Sắc màu (hue) hoặc H được đo bởi góc quanh trục đứng với màu đỏ là 0o, màu lục là

120o, màu lam là 240o (xem hình 1.7) Các màu bổ sung trong hình chóp HSV ở 180o đối diệnvới màu khác Giá trị của S là một tập các giá trị đi từ 0 trên đường trục tâm (trục V) đến 1trên các mặt bên tại đỉnh của hình chóp sáu cạnh Sự bão hòa được đo tương đối cho gammàu tương ứng với mô hình màu này

Mô hình màu dạng hình chóp sáu cạnh này đường cao V với đỉnh là điểm gốc tọa độ(0,0) Điểm ở đỉnh là màu đen có giá trị tọa độ màu V= 0, tại các điểm này giá trị của H và S

là không liên quan với nhau Khi điểm có S= 0 và V= 1 là điểm màu trắng, những giá trịtrung gian của V đối với S= 0 (trên đường thẳng qua tâm) là các màu xám Khi S= 0 giá trịcủa H phụ thuộc được gọi bởi các quy ước không xác định, ngược lại khi S khác 0 giá trị của

H sẽ là phụ thuộc

Như vậy một màu nào đó V= 1, S= 1 là giốg như màu thuần khiết trong mỹ thuật được

sử dụng như điểm khởi đầu trong các màu pha trên Thêm màu trắng phù hợp để giảm S(không có sự thay đổi V) tạo nên sự thay đổi sắc thái của gam màu Sự chuyển màu được tạo

ra bởi việc giữ S= 1 và giảm V tạo nên sự thay đổi ề sắc độ và tông màu tạo thành bởi việcthay đổi cả hai S và V

2.3.5 Mô hình màu HLS

Mô hình màu HLS được xác định bởi tập hợp hình chóp sáu cạnh đôi của không gianhình trụ Sắc màu là góc quanh trục đứng cảu hình chóp sáu cạnh đôi với màu đỏ tại góc 0o.Các màu sẽ xác định theo thứ tự giống như trong biểu đồ CIE khi ranh giới của nó bị xoay

Trang 30

ngược chiều kim đồng hồ: Màu đỏ, màu vàng, màu lục, màu xanh tím, màu lam và đỏ thẫm.Điều này cũng giống như thứ tự sắc xếp trong mẫu hình chóp sáu cạnh đơn HSV.

Chúng ta có thể xem mẫu HLS như một sự biến dạng cảu mẫu HSV mà trong đó mãunày màu trắng được kéo hướng lên hình chóp sáu cạnh phía trên từ mặt V= 1 Như với mẫuhình chóp sáu cạnh đơn, phần bổ sung của một màu sắc được đặt ở vị trí 180o hơn là xunhquanh hình chóp sáu cạnh đôi, sự bão hòa được đo xung quanh trục đứng, từ 0 trên trục tới 1trên bề mặt Độ sáng bằng không cho màu đen và bằng một cho màu trắng

2.4 Thu nhận, các thiết bị thu nhận ảnh

Các thiết bị thu nhận ảnh bao gồm camera, scanner các thiết bị thu nhận này có thể choảnh đen trắng

Các thiết bị thu nhận ảnh có 2 loại chính ứng với 2 loại ảnh thông dụng Raster, Vector Các thiết bị thu nhận ảnh thông thường Raster là camera các thiết bị thu nhận ảnhthông thường Vector là sensor hoặc bàn số hoá Digitalizer hoặc được chuyển đổi từ ảnhRaster

Nhìn chung các hệ thống thu nhận ảnh thực hiện 1 quá trình

 Cảm biến: biến đổi năng lượng quang học thành năng lượng điện (giai đoạn lấy mẫu)

 Tổng hợp năng lượng điện thành ảnh (giai đoạn lượng tử hóa)

Page 24

Hình 2.8 Mô hình màu HLS

Ngày đăng: 28/05/2018, 22:05

TỪ KHÓA LIÊN QUAN

w