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

(Luận văn thạc sĩ) Ứng dụng xử lý ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hóa đơn bán hàng

86 11 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

Tiêu đề (Luận văn thạc sĩ) Ứng dụng xử lý ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hóa đơn bán hàng
Người hướng dẫn TS. Nguyễn Văn Thái, TS. Nguyễn Đăng Khoa
Trường học Trường Đại học Nguyễn Tất Thành
Chuyên ngành Xử lý ảnh và Nhận dạng ký tự
Thể loại Luận văn thạc sĩ
Năm xuất bản 2017
Thành phố Tp. Hồ Chí Minh
Định dạng
Số trang 86
Dung lượng 6,88 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • Chương 1: TỔNG QUAN (10)
    • 1.1 Tính cấp thiết của đề tài, ý nghĩa khoa học và thực tiễn của đề tài (10)
    • 1.2 Tổng quan về hướng nghiên cứu (10)
    • 1.3 Mục đích nghiên cứu và đối tượng nghiên cứu của đề tài (12)
    • 1.4 Nhiệm vụ và giới hạn của đề tài (12)
      • 1.4.1 Nhiệm vụ (12)
      • 1.4.2 Giới hạn đề tài (13)
    • 1.5 Phương pháp nghiên cứu (13)
  • Chương 2: CƠ SỞ LÝ THUYẾT (15)
    • 2.1 Phương pháp xử lý ảnh (15)
      • 2.1.1 Tổng quan (15)
      • 2.1.2 Điểm ảnh (16)
      • 2.1.3 Độ phân giải của ảnh (17)
      • 2.1.4 Nén ảnh (17)
      • 2.1.5 Trích chọn đặc điểm (18)
    • 2.2 Không gian màu (18)
      • 2.2.1 Không gian màu xám (18)
      • 2.2.2 Không gian màu RGB (19)
      • 2.2.3 Không gian màu CMYK (19)
      • 2.2.4 Không gian màu HSV (20)
      • 2.2.5 Chuyển đổi giữa các không gian màu (21)
  • Chương 3: CÔNG CỤ (23)
    • 3.1 Mã nguồn mở thị giác máy (OpenCV – Open Source Computer Vision) (23)
      • 3.1.1 Giới thiệu (23)
      • 3.1.2 Một số phép xử lý trong OpenCV (23)
    • 3.2 PHẦN MỀM QT CREATOR (33)
      • 3.2.1 Giới thiệu (33)
      • 3.2.2 Các lớp của QT Creator (33)
      • 3.2.3 GUI trên QT Creator (37)
  • Chương 4: GIẢI THUẬT SVM (SUPPORT VECTOR MACHINES) (0)
    • 4.1 Giới thiệu (42)
    • 4.2 Ứng dụng (43)
    • 4.3 SVM tuyến tính (43)
      • 4.3.1 Biên cứng (44)
      • 4.3.2 Biên mềm (45)
    • 4.4 SVM phi tuyến (45)
    • 4.5 Tính toán bộ phân loại SVM (46)
      • 4.5.1 Bài toán gốc (47)
      • 4.5.2 Bài toán đối ngẫu (47)
      • 4.5.3 Thủ thuật kernel (48)
      • 4.5.4 Các phương pháp hiện đại (48)
    • 4.6 Giảm thiểu sai số thực nghiệm (49)
      • 4.6.1 Giảm thiểu sai số (50)
      • 4.6.2 Chuẩn hóa và ổn định (50)
      • 4.6.3 SVM và sự mất bản lề (50)
      • 4.6.4 Hàm mục tiêu (51)
    • 4.7 Thuộc tính (52)
      • 4.7.1 Lựa chọn thông số (52)
      • 4.7.2 Các hạn chế (52)
  • Chương 5: GIẢI THUẬT (53)
    • 5.1 Lưu đồ giải thuật (53)
      • 5.1.1 Lưu đồ giải thuật tổng quát (53)
      • 5.1.2 Lưu đồ giải thuật chương trình tách ký tự (54)
      • 5.1.3 Lưu đồ giải thuật chương trình huấn luyện (55)
      • 5.1.4 Lưu đồ giải thuật chương trình nhận dạng và lưu trữ (56)
    • 5.2 Xác định dòng và tách ký tự (57)
      • 5.2.1 Các bước xử lý cơ bản (57)
      • 5.2.2 Xóa các đường kẻ (58)
      • 5.2.3 Tách dòng và ký tự (60)
    • 5.3 Huấn luyện (63)
      • 5.3.1 Tạo tập mẫu huấn luyện (63)
      • 5.3.2 Huấn luyện tạo thư viện nhận dạng (65)
    • 5.4 Nhận dạng và lưu trữ (68)
  • Chương 6: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN (73)
    • 6.1 Kết quả (73)
    • 6.2 Hướng phát triển (74)
  • Tài liệu tham khảo (78)

Nội dung

(Luận văn thạc sĩ) Ứng dụng xử lý ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hóa đơn bán hàng(Luận văn thạc sĩ) Ứng dụng xử lý ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hóa đơn bán hàng(Luận văn thạc sĩ) Ứng dụng xử lý ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hóa đơn bán hàng(Luận văn thạc sĩ) Ứng dụng xử lý ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hóa đơn bán hàng(Luận văn thạc sĩ) Ứng dụng xử lý ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hóa đơn bán hàng(Luận văn thạc sĩ) Ứng dụng xử lý ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hóa đơn bán hàng(Luận văn thạc sĩ) Ứng dụng xử lý ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hóa đơn bán hàng(Luận văn thạc sĩ) Ứng dụng xử lý ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hóa đơn bán hàng(Luận văn thạc sĩ) Ứng dụng xử lý ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hóa đơn bán hàng(Luận văn thạc sĩ) Ứng dụng xử lý ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hóa đơn bán hàng(Luận văn thạc sĩ) Ứng dụng xử lý ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hóa đơn bán hàng(Luận văn thạc sĩ) Ứng dụng xử lý ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hóa đơn bán hàng(Luận văn thạc sĩ) Ứng dụng xử lý ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hóa đơn bán hàng(Luận văn thạc sĩ) Ứng dụng xử lý ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hóa đơn bán hàng(Luận văn thạc sĩ) Ứng dụng xử lý ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hóa đơn bán hàng(Luận văn thạc sĩ) Ứng dụng xử lý ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hóa đơn bán hàng(Luận văn thạc sĩ) Ứng dụng xử lý ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hóa đơn bán hàng

Trang 1

LỜI CAM ĐOAN

Tôi cam đoan đây là công trình nghiên cứu của tôi

Các số liệu, kết quả nêu trong luận văn là trung thực và chưa từng được ai công

bố trong bất kỳ công trình nào khác

Tp Hồ Chí Minh, ngày … tháng … năm 2017

(Ký tên và ghi rõ họ tên)

Trang 2

LỜI CẢM TẠ

Lời đầu tiên em xin gửi đến Thầy, TS Nguyễn Văn Thái lời cảm ơn chân thành

và sâu sắc nhất về sự giúp đỡ của Thầy Trong suốt thời gian thực hiện luận văn, mặc dù rất bận rộn trong công việc nhưng Thầy vẫn giành rất nhiều thời gian và tâm huyết trong việc hướng dẫn em Thầy đã cung cấp cho em rất nhiều hiểu biết về một lĩnh vực mới khi em bắt đầu thực hiện luận văn Thầy luôn định hướng, góp ý, và sửa chữa những sai sót giúp em không bị lạc lối Những chỉ bảo của Thầy là những con đường, hướng đi đúng đắn giúp em tự tin phát huy những cái đã làm được, bổ sung những gì thiếu sót và sữa chữa những sai sót để có thể hoàn thiện đề tài

Ngoài ra, em cũng xin gửi lời cảm ơn tới thầy Ts Nguyễn Đăng Khoa đang giảng dạy tại Trường Cao đẳng Công nghệ Huế Cảm ơn thầy cũng đã bỏ thời gian công sức hỗ trợ, gợi ý cho em một số hướng đi giúp em hoàn thành được đề tài này Bên cạnh đó, em xin cảm ơn sự dạy dỗ tận tình của các thầy, cô trong khoa Điện - Điện Tử Những kiến thức mà thầy cô truyền đạt là một tài sản vô giá và những kinh nghiệm mà thầy cô chỉ bảo là hành trang giúp em bước đi trên đường đời

Đồng thời, cho con gửi lời cảm ơn đến công ơn sinh thành và dạy dỗ của cha

mẹ Gia đình luôn là nguồn động viên và hỗ trộ lớn nhất trong suốt thời gian con thực hiện đề tài cũng như trong suốt những năm tháng con lớn khôn Cha mẹ luôn là điểm tựa cho con trong những khi khó khăn và là động lực cho con phấn đấu trong học tập Một lần nữa con xin gửi lời biết ơn sâu sắc nhất đến cha mẹ

Cuối cùng, tôi xin cảm ơn sự giúp đỡ của những bạn bè Những năm tháng học tập là biết bao sự gắn bó, hỗ trợ, động viên của các bạn trong việc học, cũng như những giúp đỡ để tôi có thể hoàn thành luận văn này

Tp Hồ Chí Minh, tháng , năm 2017

Trang 3

TÓM TẮT

Việc trích xuất thông tin từ các tờ hóa đơn có vai trò rất quan trọng trong việc tiết kiệm thời gian và công sức để nhập liệu Để trích xuất được các tờ hóa đơn ta cần thực hiện những nhiệm vụ sau:

Xác định dòng và tách ký tự ở đây ta sử dụng thư viện mã nguồn mở OpenCV

và các lớp của QT Creator để xử lý Đầu tiên xác định dòng ta sẽ sử dụng các hàm Erode và Dilate để loại bỏ nhiễu và nối các ký tự chung một dòng lại với nhau sau

đó vẽ đường bao và lưu địa chỉ từng dòng trong lớp QList và tách rời từng dòng ra khỏi hình ảnh Kế tiếp ta tiến hành tách ký tự tương tự như tách dòng ta sẽ đánh dấu từng ký tự bằng cách vẽ các đường thẳng màu trắng có kích thước bằng chiều cao đường bao từng ký tự và những chỗ không có điểm trắng nào thì ta không vẽ, sau

đó cũng vẽ đường bao và lưu lại địa chỉ của từng ký tự trong lớp QList Rồi tách từng ký tự và thay đổi kích thước từng hình chứa ký tự thành 80x80 pixel để tiện huấn luyện

Huấn luyện dữ liệu ta sẽ chuẩn bị tập mẫu và xác định những đặc trưng và sử dụng giải thuật SVM kết hợp với hàm Kernel RBF để huấn luyện dữ liệu và lưu lại thành thư viện huấn luyện

Sau khi tách được từng ký tự và có được thư viện huấn luyện ta tiến hành đem

ký tự đi nhận dạng sau đó lần lượt lưu lại theo địa chỉ đã lưu từ trước vào một file đạng text Sau đó tiến hành chuyển dữ liệu trong file text sang một file Exel để tiện theo dõi và chỉnh sửa

Độ chính xác trong nhận dạng nhận được dựa trên việc nhận dạng với 100 mẫu nhận dạng vào khoảng 70% với dạng ký tự và lên tới 80% với dạng số học

Một số nguyên nhân ảnh hưởng tới độ chính xác:

- Chưa triệt được hết nhiễu trắng dẫn đễn nhận dạng sai

- Số lượng mẫu huấn luyện còn ít

- Một số ký tự chưa được tách rời hoàn toàn dẫn đến nhận dạng không đúng

- Chưa sắp xếp được nội dung dữ liệu vào đúng ô Exel

Trang 4

SUMMARY

Data extraction from bills is important in saving time and effort in data entry

To extract information from a bill we need to perform the following tasks:

Defining lines and separating characters here we use the open source library OpenCV and QT Creator classes for processing First, determine the line we will use the Erode and Dilate functions to eliminate noise and connect one line common characters, then draw the contours and save each line address in the QList class then separate each line from the image Next, we separate the characters similar to do with lines we will mark each character by drawing white lines that are the same height as the contours height At where have no white points aren’t drawn, then draw the boundary and save the address of each character in the QList class Last, separate each character and resize each image to 80x80 pixels for easy training Training data: fist, we prepare the example to train and identify features and using the SVM algorithm combined with the RBF Kernel function to train the data and store it into the training library

After extracting each character and having the training library, we proceed to get the character to recognize and then save saved with address in advance to a text file Then move the data in the text file to an Exel file for easy tracking and editing Accuracy in recognition is based on identification with 100 identities up to 70%

in character form and up to 80% in arithmetic form

Some reasons influence accuracy:

- White noise affects false identification

- The number of training samples is small

- Some characters are not completely separated so misidentified

- Data is not correctly placed in Exel

Trang 5

MỤC LỤC

TRANG

LÝ LỊCH KHOA HỌC i

LỜI CAM ĐOAN iii

LỜI CẢM TẠ iv

MỤC LỤC vii

DANH SÁCH CÁC HÌNH x

Chương 1: TỔNG QUAN 1

1.1 Tính cấp thiết của đề tài, ý nghĩa khoa học và thực tiễn của đề tài 1

1.2 Tổng quan về hướng nghiên cứu 1

1.3 Mục đích nghiên cứu và đối tượng nghiên cứu của đề tài 3

1.4 Nhiệm vụ và giới hạn của đề tài 3

1.4.1 Nhiệm vụ 3

1.4.2 Giới hạn đề tài 4

1.5 Phương pháp nghiên cứu 4

Chương 2: CƠ SỞ LÝ THUYẾT 6

2.1 Phương pháp xử lý ảnh 6

2.1.1 Tổng quan 6

2.1.2 Điểm ảnh 7

2.1.3 Độ phân giải của ảnh 8

2.1.4 Nén ảnh 8

2.1.5 Trích chọn đặc điểm 9

2.2 Không gian màu 9

2.2.1 Không gian màu xám 9

2.2.2 Không gian màu RGB 10

Trang 6

2.2.3 Không gian màu CMYK 10

2.2.4 Không gian màu HSV 11

2.2.5 Chuyển đổi giữa các không gian màu 12

Chương 3: CÔNG CỤ 14

3.1 Mã nguồn mở thị giác máy (OpenCV – Open Source Computer Vision) 14

3.1.1 Giới thiệu 14

3.1.2 Một số phép xử lý trong OpenCV 14

3.2 PHẦN MỀM QT CREATOR 24

3.2.1 Giới thiệu 24

3.2.2 Các lớp của QT Creator 24

3.2.3 GUI trên QT Creator 28

Chương 4: GIẢI THUẬT SVM (SUPPORT VECTOR MACHINES) 33

4.1 Giới thiệu 33

4.2 Ứng dụng 34

4.3 SVM tuyến tính 34

4.3.1 Biên cứng 35

4.3.2 Biên mềm 36

4.4 SVM phi tuyến 36

4.5 Tính toán bộ phân loại SVM 37

4.5.1 Bài toán gốc 38

4.5.2 Bài toán đối ngẫu 38

4.5.3 Thủ thuật kernel 39

4.5.4 Các phương pháp hiện đại 39

4.6 Giảm thiểu sai số thực nghiệm 40

4.6.1 Giảm thiểu sai số 41

Trang 7

4.6.2 Chuẩn hóa và ổn định 41

4.6.3 SVM và sự mất bản lề 41

4.6.4 Hàm mục tiêu 42

4.7 Thuộc tính 43

4.7.1 Lựa chọn thông số 43

4.7.2 Các hạn chế 43

Chương 5: GIẢI THUẬT 44

5.1 Lưu đồ giải thuật 44

5.1.1 Lưu đồ giải thuật tổng quát 44

5.1.2 Lưu đồ giải thuật chương trình tách ký tự 45

5.1.3 Lưu đồ giải thuật chương trình huấn luyện 46

5.1.4 Lưu đồ giải thuật chương trình nhận dạng và lưu trữ 47

5.2 Xác định dòng và tách ký tự 48

5.2.1 Các bước xử lý cơ bản 48

5.2.2 Xóa các đường kẻ 49

5.2.3 Tách dòng và ký tự 51

5.3 Huấn luyện 54

5.3.1 Tạo tập mẫu huấn luyện 54

5.3.2 Huấn luyện tạo thư viện nhận dạng 56

5.4 Nhận dạng và lưu trữ 59

Chương 6: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN 64

6.1 Kết quả 64

6.2 Hướng phát triển 65

Tài liệu tham khảo 69

Trang 8

DANH SÁCH CÁC HÌNH

Hình 1.1: Sơ đồ khối hệ thống nhận dạng và trích xuất thông tin hóa đơn 4

Hình 3.2: Kết quả khi sử dụng hàm intersected() và hàm United() 26Hình 3.3: Kết quả trả về khi sử dụng các hàm tọa độ 27

Hình 3.10: Sơ đồ liên kết Objects, Signals và Slots 32

Hình 5.2: Lưu đồ giải thuật chương trình tách ký tự 45Hình 5.3: Lưu đồ giải thuật chương trình huấn luyện 46Hình 5.4: Lưu đồ giải thuật chương trình tách ký tự 47Hình 5.5: Giao diện chương trình lựa chọn hình ảnh 48Hình 5.6: Giao diện chương trình hiển thị hình ảnh được chọn 49

Trang 9

Hình 5.17: Giao diện huấn luyện tạo thư viện 58

Hình 5.19: Các folder chứa mẫu huấn luyện trong folder Training 59Hình 5.20: Giao diện chương trình nhận dạng ký tự 60Hình 5.21: Giao diện chương trình lưu trữ dữ liệu 61

Hình 6.4: Nhận dạng sai do chưa tách hoàn toàn ký tự 66

Hình 6.6: Thử nghiệm với việc thêm một số mẫu mới 67

Trang 10

Chương 1: TỔNG QUAN

1.1 Tính cấp thiết của đề tài, ý nghĩa khoa học và thực tiễn của đề tài

Nhận dạng ký tự quang học được khởi nguồn từ các công nghệ liên quan đến máy điện báo và được ra đời nhằm mục đích tạo ra một máy đọc cho người mù, tức

là sẽ tạo ra cho người mù một máy tính đọc văn bản và chuyển văn bản đó thành tiếng thông qua một máy quét văn bản dạng phẳng và một bộ tổng hợp văn bản thành lời nói

Sau một quá trình phát triển công nghệ nhận dạng ký tự quang học ngày càng phát triển và có thêm nhiều ứng dụng khác như: Nhập dữ liệu cho các tài liệu kinh doanh, nhận dạng biển số xe, tạo ra các phiên bản dưới dạng văn bản của một tài liệu in, giúp tìm kiếm thông tin chính xác hơn từ một hình ảnh ví dụ như tìm kiếm tài liệu khi có hình ảnh chứa thông tin tài liệu đó…

Việc nhập dữ liệu thông tin từ các tờ hóa đơn có ý nghĩa giúp một công ty hay một doanh nghiệp nắm được tình hình hoạt động của công ty về vấn đề thu, chi và những vấn đề khác như nguyên vật liệu, nguồn vốn cũng như số lượng sản phẩm đã được bán ra và còn tồn kho như thế nào Công việc này đòi hỏi thời gian rất lớn khi phải nhập thông tin từng tờ hóa đơn cũng như nhập từng chữ từng từ trên những tờ hóa đơn Để khắc phục vấn đề này thì việc có một chương trình có thể nhận dạng ký

tự và trích xuất thông tin từ những tờ hóa đơn là rất quan trọng nó có thể nhanh chóng nhận dạng được thông tin trong tờ hóa đơn và chuyển nó thành một văn bản

dữ liệu người nhập liệu chỉ cần hiệu chỉnh và sử dụng dữ liệu trong văn bản đó giúp tiết kiệm thời gian nhập liệu Như vậy, công việc sẽ tiến hành nhanh chóng và giúp giảm tải khối lượng công việc cho người nhập liệu

1.2 Tổng quan về hướng nghiên cứu

Nhận dạng ký tự quang học (Optical character recognition – OCR) là một dạng phần mềm máy tính được tạo ra để nhận dạng và chuyển các hình ảnh chữ viết thành các văn bản tài liệu được ra đời được ra đời khá sớm vào đầu thế kỷ 20 Nhận dạng ký tự quang học cũng là một dạng nghiên cứu trong nhận dạng mẫu, trí tuệ nhân tạo và thị giác máy

Trang 11

Ngày nay đã có rất nhiều công trình nghiên cứu về nhận dạng ký tự trong đó tiêu biểu là mã nguồn mở Tesseract Đây là một mã nguồn mở trong lĩnh vực nhận dạng ký tự quang học được Google tài trợ Ngày nay, mã nguồn mở Tesseract có khả năng nhận dạng được ký tự với 108 ngôn ngữ khác nhau trên thế giới với độ chính xác lên tới trên 90% với tùy từng ngôn ngữ

Trong bài báo “Text Detection and Character Recognition in Scene Images with Unsupervised Feature Learning” của nhóm tác giả Adam Coates, Blake Carpenter, Carl Case, Sanjeev Satheesh, Bipin Suresh, Tao Wang, David J Wu, Andrew Y Ng thuộc Khoa Khoa học Máy tính của Trường Đại học Stanford ở Mỹ đã trình bày về việc xác định và nhận dạng ký tự trong những bức ảnh ngoại cảnh với phương pháp học không giám sát với độ chính xác lên tới 85,5%.[1]

Trong bài báo “Text Information Extraction And Analysis From Images Using Digital Image Processing Techniques” của tác giả Partha Sarathi Giri của Khoa Điện tử và Truyền thông, M.E.M.S, Balasore, Odisha đã trình bày thuật toán phân tích và trích xuất ký tự từ hình ảnh sử dụng kỹ thuật xử lý ảnh số với hai phương pháp được đề xuất để trích xuất văn bản từ hình ảnh là phương pháp cạnh cơ sở và phương pháp liên kết các thành phần cơ sở.[2]

Với bài báo “Automatic Text Recognition From Raster Maps” của tác giả

Yao-Yi Chiang và Craig A Knoblock đến từ trường Đại học Nam California trình bày

về phương pháp nhận dạng ký tự trên bản đồ Raster với những ký tự khác nhau về kích cỡ và phương hướng dòng với kỹ thuật xác định nhãn cho các đoạn ký tự, sau

đó xoay luân phiên các nhãn ký tự theo chiều kim đồng hồ và ngược chiều kim đồng hồ cho đến khi nhận được chiều đúng, rồi tiến hành nhận dạng ký tự, Nhiệm

vụ nhận dạng ký tự trong bài báo sử dụng phần mềm ABBYY FineReader 10.[3] Trong bài báo “An Arabic Baseline Estimation Method Based on Feature Points Extraction” của nhóm tác giả Arwa AL-Khatatneh, Sakinah Ali Pitchay and Musab Al-qudah có đưa ra một phương pháp tiền xử lý cho việc nhận dạng ký tự thông qua việc phân tích và trích xuất các điểm đặc trưng của các đoạn ký tự.[4]

Trong bài báo “ Text Extraction and Recognition from Mixed Images” của nhóm tác giả L Ramesh, E Dinesh có đưa ra phương pháp phân vùng các vùng

Trang 12

màu tương đương và chia làm 3 cụm là cụm chưa thông tin, cụm nền và cụm nhiễu sau đó tiến hành ghép nối các cụm bằng các kỹ thuật ghép nối phần tử Về kết quả nhận dạng đem lại kết quả tốt tuy nhiên trong một số hình ảnh có nền phức tạp thì xuất hiện một số lỗi.[5]

Trong bài báo “Nhận Dạng Bìa Sách Tiếng Việt Cho ứng Dụng Quản Lý Sách” của nhóm tác giả Phan Thị Thanh Nga, Nguyễn Thị Huyền Trang, Nguyễn Văn Phúc, Thái Duy Quý, Võ Phương Bình trình bày về phương pháp nhận dạng bìa sách tiếng việt, ở đây nhóm tác giả sử dụng mã nguồn mở Tesseract cho việc nhận dạng ký tự và độ chính xác vào khoảng 80%.[6]

1.3 Mục đích nghiên cứu và đối tượng nghiên cứu của đề tài

Với tính cấp thiết của đề tài như trên thì người nghiên cứu đã lựa chọn đề tài

“ỨNG DỤNG XỬ LÝ ẢNH TRONG VIỆC NHẬN DẠNG VÀ TRÍCH XUẤT THÔNG TIN, DỮ LIỆU TRONG CÁC TỜ HÓA ĐƠN BÁN HÀNG” làm đề tài tốt nghiệp thạc sĩ chuyên ngành Kỹ thuật Điện Tử của mình

Với mục đích nghiên cứu là có thể xây dựng được một chương trình có thể nhận dạng và trích xuất được thông tin trong các tờ hóa đơn bán hàng, người nghiên cứu

hi vọng đề tài của mình sẽ đóng góp được một phần nhỏ kiến thức cho việc phát triển lĩnh vực thị giác ở Việt Nam trong tương lai Người nghiên cứu xác định đối tượng nghiên cứu của mình là xây dựng chương trình nhận dạng và trích xuất

1.4 Nhiệm vụ và giới hạn của đề tài

Trang 13

Nhiệm vụ huấn luyện dữ liệu: Tạo tập mẫu ký tự, sau đó từ tập mẫu tiến hành huấn luyện để có được một thư viện ký tự nhận dạng dựa trên giải thuật SVM (Support Vector Machines)

Nhiệm vụ nhận dạng và lưu trữ: Đây là nhiệm vụ cuối cùng sau khi ta tách được từng ký tự và đã có thư viện huấn luyện ta tiến hành nhận dạng ký tự Để nhận dạng

ký tự ta tiến hành so sánh những ký tự ta mới tách được từ nhiệm vụ trên với thư viện nhận dạng đã huấn luyện để có thể nhận dạng được ký tự ta nhận dạng ký tự ta tiến hành lưu trữ ký tự lại theo địa chỉ đã được xác định trong nhiệm vụ đầu tiên Và

dữ liệu sẽ được lưu trữ dưới dạng file Exel Ta sử dụng các phân lớp của phần mềm lập trình QT Creator để giải quyết nhiệm vụ này

Hình 1.1: Sơ đồ khối hệ thống nhận dạng và trích xuất thông tin hóa đơn

1.5 Phương pháp nghiên cứu

Trong quá trình nghiên cứu, người nghiên cứu sử dụng các phương pháp sau:

- Phương pháp phân tích và tổng hợp lý thuyết: được sử dụng trong quá trình nghiên cứu lý thuyết được trình bày trong phần cơ sở lý thuyết

- Phương pháp phân loại và hệ thống hóa lý thuyết: được dùng trong quá trình tham khảo các bài báo khoa học trong nước và quốc tế

Trang 14

- Phương pháp mô hình hóa: được dùng trong quá trình xây dựng nên sơ đồ khối của hệ thống đề tài

- Phương pháp quan sát khoa học: được dùng nhiều khi tiến hành thực nghiệm

- Phương pháp thực nghiệm khoa học: được sử dụng trong quá trình tiến hành thực nghiệm đề tài

- Phương pháp phân tích tổng kết kinh nghiệm: được thực hiện trong quá trình kiểm tra và đánh giá dữ liệu thu được từ kết quả thực nghiệm

Trang 15

Chương 2: CƠ SỞ LÝ THUYẾT

2.1 Phương pháp xử lý ảnh

2.1.1 Tổng quan

Xử lý ảnh là một lĩnh vực mang tính khoa học và công nghệ Nó là một ngành khoa học mới mẻ so với nhiều ngành khoa học khác nhưng tốc độ phát triển của nó rất nhanh, kích thích các trung tâm nghiên cứu, ứng dụng, đặc biệt là máy tính chuyên dụng riêng cho nó Xử lý ảnh là một quá trình liên tục Đầu tiên là thu nhận ảnh từ camera, vệ tinh hay các bộ cảm ứng,… Tiếp theo tín hiệu lấy vào sẽ được số hóa thành tín hiệu số và chuyển qua giai đoạn xử lý, phân tích hay lưu trữ lại Việc

xử lý ảnh chính là tăng cường ảnh, tức là làm cho ảnh trở nên đẹp hơn, tốt hơn và rõ hơn

Ảnh có thể được hiểu là thông tin (về đường nét, hình khối, màu sắc…) của vật thể hay quang cảnh được chiếu sáng mà con người cảm nhận và quan sát được bằng mắt và hệ thống thần kinh thị giác Đối tượng chính của xử lý ảnh chính là ảnh chụp

tự nhiên Quá trình xử lý ảnh được hiểu là xử lý nội dung thông qua dữ liệu ảnh, qua đó nâng cao chất lượng ảnhhiển thị hay đạt được một yêu cầu cảm quan nào đó Ảnh thông thường được hiểu là dữ liệu trên một mặt phẳng ảnh, ta còn gọi là ảnh đơn (Image), hay ảnh tĩnh Ngoài ảnh đơn, ta còn gặp dạng chuỗi các ảnh được chụp liên tiếp nhau thông qua mối quan hệ về thời gian, ảnh đó gọi là chuỗi ảnh, (hay ảnh động, phim) Ở đây ta chỉ quan tâm đến đối tượng là ảnh đơn Ảnh đơn biểu diễn dữ liệu ảnh thông qua (các) hàm độ chói của các biến tọa độ trong mặt phẳng ảnh: I(x,y)

Đối với ảnh đơn sắc, hay ảnh mức xám, dữ liệu hình ảnh được biểu diễn dưới dạng một hàm độ chói I(x,y) Với các giá trị I(x,y), x, y là các số thực, và ta có

0 ≤ I(x,y) ≤ IMAX Với ảnh màu, dữ liệu ảnh được biểu diễn thông qua 3 hàm độ chói của 3 màu cơ bản R (đỏ), G (xanh lá), B (xanh lam): IR(x,y), IG(x,y) , IB(x,y) Ảnh

số là một dạng biểu diễn, lưu trữ và thể hiện ảnh tĩnh Ảnh số thực chất là ảnh chụp (mặt phẳng ảnh gồm vô số điểm với vô số các giá trị màu khác nhau) 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 (rời rạc hóa về mặt giá trị

Trang 16

dữ liệu) Ảnh số được biểu diễn dưới dạng một ma trận điểm ảnh I[m,n] (với m nằm trong đoạn [0 M], n nằm trong đoạn [0 N]) , mỗi phần tử của ma trận đó gọi là một điểm ảnh – pixel Trong đó giá trị của mỗi điểm ảnh lại phụ thuộc vào từng loại ảnh: Ảnh nhị phân: một điểm ảnh chỉ nhận 2 mức giá trị nên cần 1 bit lưu trữ Ảnh

đa mức xám: giá trị điểm ảnh được chia thành 256 mức [0…255] nên ta cần 8 bits/pixel Với ảnh màu: tùy thuộc vào số lượng màu, chất lượng màu mà ta cần 8,

16, 24 bits/pixel Với hệ màu cơ bản RGB ta cần 3*8 = 24 bits/pixel Đến đây việc

xử lý ảnh trở thành việc xử lý các phần tử của ma trận điểm ảnh

Một bức ảnh số được biểu diễn bởi một ma trận điểm ảnh I[m,n], trong đó một điểm ảnh được đặc trưng bởi tọa độ [m,n] và giá trị màu I Như vậy, các phép xử lý ảnh có thể tác động vào tọa độ của các điểm ảnh, làm thay đổi vị trí của các điểm ảnh, hình khối trong ảnh, ta gọi đó là các phép xử lý về hình học Bên cạnh tác độngvào tọa độ của các điểm ảnh, các phép xử lý ảnh cũng có tác động đến giá trị màu I của các điểm ảnh, ta gọi đó là các phép xử lý về nội dung Nhìn chung các phép xử lý hình học không làm thay đổi nội dung của ảnh và được ứng dụng phổ biến trong quá trình hiển thị hình ảnh Các phép xử lý về nội dung tác động làm thay đổi các thành phần về mặt giá trị màu của điểm ảnh, từ đó mang lại những hiệu quả về cảm nhận khác nhau

Tuy nhiên, nhiều khi không phải ảnh nào cũng rõ nét cũng đẹp, chẳng hạn những vật thể mà bản thân nó đã xấu thì ảnh chụp của nó không thể đẹp được.Thậm chí ảnh chụp càng rõ nét thì càng xấu, vì cái xấu đã được soi rất rõ, rất kỹ Do đó, đối với những ảnh như vậy, ta không mong muốn nó rõ thêm nữa, mà muốn nó mờ

đi để che bớt khuyết điểm của vật trong ảnh Lúc này, ta chỉ giữ lại những sóng với tần số thấp trong miền tần số (Lowpass filter), bỏ đi các sóng có tần số cao thể hiện

độ sắc nét của ảnh Bởi vì, các sóng này giờ đây chỉ đóng vai trò nhiễu mà thôi

2.1.2 Điểm ảnh

Ảnh gốc (ảnh tự nhiên) là ảnh liên tục về không gian và độ sáng Để xử lý bằng máy tính, ảnh cần phải được số hoá Số hoá ảnh là sự biến đổi gần đúng một ảnh liên tục thành một tập điểm phù hợp với ảnh thật về vị trí (không gian) và độ sáng (mức xám) Khoảng cách giữa các điểm ảnh đó được thiết lập sao cho mắt người

Trang 17

không phân biệt được ranh giới giữa chúng Mỗi một điểm như vậy gọi là điểm ảnh (PEL: Picture Element) hay gọi tắt là Pixel Trong khuôn khổ ảnh hai chiều, mỗi

pixel ứng với cặp tọa độ (x, y)

Điểm ảnh (Pixel) là một phần tử của ảnh số tại toạ độ (x, y) với độ xám hoặc

màu nhất định Kích thước và khoảng cách giữa các điểm ảnh đó được chọn thích hợp sao cho mắt người cảm nhận sự liên tục về không gian và mức xám (hoặc màu) của ảnh số gần như ảnh thật Mỗi phần tử trong ma trận được gọi là một phần tử ảnh

2.1.3 Độ phân giải của ảnh

Độ phân giải (Resolution) của ảnh là mật độ điểm ảnh được ấn định trên một ảnh số được hiển thị

Theo định nghĩa, khoảng cách giữa các điểm ảnh phải được chọn sao cho mắt người vẫn thấy được sự liên tục của ảnh Việc lựa chọn khoảng cách thích hợp tạo

nên một mật độ phân bổ, đó chính là độ phân giải và được phân bố theo trục x và y

trong không gian hai chiều

2.1.4 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 khuynh hướ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ó 4 cá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

• 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ần nhau 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ảo toà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én này

Trang 18

• 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ại củ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

• Đặ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ệc nhậ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ưu trữ giảm xuống

2.2 Không gian màu

Không gian màu là một mô hình toán học dùng để mô tả các màu sắc trong thực tế được biểu diễn dưới dạng số học Trên thực tế có rất nhiều không gian màu khác nhau được mô hình để sử dụng vào những mục đích khác nhau Trong bài này

ta sẽ tìm hiểu qua về ba không gian màu cơ bản hay được nhắc tới và ứng dụng nhiều, đó là hệ không gian màu RGB, HSV và CMYK

2.2.1 Không gian màu xám

Không gian màu xám là một không gian màu trong đó giá trị của mỗi điểm ảnh là một đơn mẫu, có nghĩa là nó chỉ mang cường độ thông tin Hình ảnh của loại này còn được gọi là ảnh đen trắng tuy nhiên cách gọi này chưa thực sự chính xác vì hình ảnh đen trắng chỉ mang hai mức giá trị mức 0 là màu đen và mức 1 là màu

Trang 19

trắng, còn ảnh xám là dải màu với 255 mức giá trị với màu đen ở giá trị 0 và màu trắng giá trị 255

2.2.2 Không gian màu RGB

RGB là không gian màu rất phổ biến được dùng trong đồ họa máy tính và nhiều thiết bị kỹ thuật số khác Ý tưởng chính của không gian màu này là sự kết hợp của 3 màu sắc cơ bản: màu đỏ (R, Red), xanh lục (G, Green) và xanh lam (B, Blue) để mô

tả tất cả các màu sắc khác

Nếu như một ảnh số được mã hóa bằng 24bit, nghĩa là 8bit cho kênh R, 8bit cho kênh G, 8bit cho kênh B, thì mỗ kênh này màu này sẽ nhận giá trị từ 0-255 Với mỗi giá trị khác nhau của các kênh màu kết hợp với nhau ta sẽ được một màu khác nhau, như vậy ta sẽ có tổng cộng 255x255x255 = 1.66 triệu màu sắc.[7]

Ví dụ: Màu đen là sự kết hợp của các kênh màu (R, G, B) với giá trị tương ứng (0, 0, 0), màu trắng có giá trị (255, 255, 255), màu vàng có giá trị (255, 255, 0), màu tím đậm có giá trị (64, 0, 128) Nếu ta dùng 16bit để mã hóa một kênh màu (48bit cho toàn bộ 3 kênh màu) thì dãi màu sẽ trải rộng lên tới 3*2^16 = Một con số rất lớn

Hình 2.1: Không gian màu RGB

2.2.3 Không gian màu CMYK

CMYK là không gian màu được sử dụng phổ biến trong ngành công nghiệp in ấn.Ý tưởng cơ bản của hệ không gian này là dùng 4 màu sắc cơ bản để phục vụ cho việc pha trộn mực in Trên thực tế, người ta dùng 3 màu là C=Cyan: lục lam,

M = Magenta: hồng xẫm, và Y=Yellow: vàng để biểu diễn các màu sắc khác nhau

Trang 20

Nếu lấy màu hồng xẫm cộng với vàng sẽ ra màu đỏ, màu xẫm kết hợp với xanh lơ

sẽ cho xanh lam Sự kết hợp của 3 màu trên sẽ cho ra màu đen, tuy nhiên màu đen

ở đây không phải là đen tuyệt đối và thường có độ tương phản lớn, nên trong ngành

in, để tiết kiệm mực in người ta thêm vào màu đen để in những chi tiết có màu đen thay vì phải kết hợp 3 màu sắc trên Và như vậy ta có hệ màu CMYK chữ K ở đây

là để kí hiệu màu đen (Black), có nhẽ chữ B đã được dùng để biểu diễn màu Blue nên người ta lấy chữ cái cuối K để biểu diễn màu đen?

Nguyên lý làm việc của hệ màu này như sau : Trên một nền giấy trắng, khi mỗi màu này được in lên sẽ loại bỏ dần đi thành phần màu trắng 3 màu C, M, Y khác nhau in theo những tỉ lệ khác nhau sẽ loại bỏ đi thành phần đó một cách khác nhau

và cuối cùng cho ta màu sắc cần in Khi cần in màu đen, thay vì phải in cả 3 màu người ta dùng màu đen để in lên Nguyên lý này khác với nguyên lý làm việc của hệ RGB ở chỗ hệ RGB là sự kết hợp của các thành phần màu, còn hệ CMYK là sự loại

bỏ lẫn nhau của các thành phần màu

Hình 2.2: Không gian màu CMYK

2.2.4 Không gian màu HSV

HSV và cũng gần tương tự như HSL là không gian màu được dùng nhiều trong việc chỉnh sửa ảnh, phân tích ảnh và một phần của lĩnh vực thị giác máy tính Hệ không gian này dựa vào 3 thông số sau để mô tả màu sắc H = Hue: màu sắc,

S = Saturation: độ đậm đặc, sự bão hòa, V = Value: giá trị cường độ sáng

Không gian màu này thường được biểu diễn dưới dạng hình trụ hoặc hình nón Theo đó, đi theo vòng tròn từ 0 – 360o là trường biểu diễn màu sắc(Hue) Trường

Trang 21

này bắt đầu từ màu đỏ đầu tiên (red primary) tới màu xanh lục đầu tiên (green primary) nằm trong khoảng 0 – 120o từ 120 – 240o là màu xanh lục tới xanh lam (green primary – blue primary) Từ 240 - 360 là từ màu đen tới lại màu đỏ

Hình 2.3: Không gian màu HSV

2.2.5 Chuyển đổi giữa các không gian màu

2.2.5.1 Chuyển đổi giữa RGB và CMYK

Thành phần K là thành phần phụ dùng để in cho những điểm màu có màu đen trong hệ CYMK, do vậy để chuyển không gian màu từ RGB sang CMYK trước hết

ta chuyển RGB sang CMY sau đó tìm thành phần K còn lại để chuyển từ CMY sang CMYK

❖ Công thức chuyển từ RGB sang CMY:

(C', M', Y') = ((255 - R), (255 - G), (255 - B)) (2.1) Việc tính giá trị của K lại là một vấn đề khác vì nó liên quan tới nhà sản xuất công nghệ in, tuy nhiên về mặt lý thuyết có thể chấp nhận rằng:

K = min {C'/2,55, M'/2,55, Y'/2,55}, như vậy 0 ≤ K ≤100 (2.2)

❖ Chuyển từ CMY sang CMYK:

- Nếu K = 100 thì C = M = Y =0 (trường hợp in màu đen)

Trang 22

2.2.5.2 Chuyển đổi giữa RGB và HSV

❖ Giả sử ta có một điểm màu có giá trị trong hệ RGB là (R, G, B) ta chuyển sang không gian HSV như sau:

Trong trường hợp V hoặc C bằng 0, S = 0

Để chuyển từ HSV sang RGB ta làm như sau:

Giả sử ta có không gian màu HSV với H = [0, 360], S = [0, 1], V = [0, 1] Khi

C)(X,0,

C)X,(0,

X)C,(0,

C,0)(X,

X,0)(C,(0,0,0)

)B

Trang 23

Chương 3: CÔNG CỤ

3.1 Mã nguồn mở thị giác máy (OpenCV – Open Source Computer Vision) 3.1.1 Giới thiệu

OpenCV (Open Source Computer Vision) là một thư viện mã nguồn mở về thị giác má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ạnh củ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ạy trê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 đó, thư viện này có thể được sử dụng miễn phí cho cả mục đích phi thương mại lẫn thương mại.[11]

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 tới 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ường gọi là phiên bản 2.x)

Thư viện OpenCV ban đầu được sự hỗ trợ từ Intel, sau đó được hỗ trợ bởi Willow Garage, một phòng thí nghiệm chuyên nghiên cứu về công nghệ robot Cho đến nay, OpenCV vẫ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)

cv2.imread() với với tham số là đường dẫn của hình ảnh Sau bước này, ta nhận

được một mảng NumPy là image Mảng Numpy chứa các thông số về file ảnh, gồm

có chiều dài, chiều rộng và số kênh Cách NumPy lưu các thông số về bức ảnh:

Trang 24

Một bức ảnh có 2 chiều X và Y, gốc toạ độ tại pixel trên cùng bên trái của bức ảnh Chiều X từ trái sang phải và chiều Y từ trên xuống dưới NumPy lưu số pixel: image.shape[0] là số pixel theo chiều Y và image.shape[1] là số pixel theo chiều X

Mỗi pixel trên bức ảnh được biểu thị dưới một trong 2 dạng: Xám (grayscale) hoặc dạng ảnh màu (color) Thông số image.shape[2] lưu số kênh biểu thị mỗi pixel Với ảnh màu hiển thị trên RGB thì số kênh là 3, còn với ảnh xám (grayscale) chúng ta chỉ có 1 channel duy nhất

❖ Hiển thị ảnh:

Cú pháp: cv2.imshow("Tên hiển thị", image)

Hàm cv2.imshow() là hàm hiển thị hình ảnh ra một cửa sổ với các tham số: Tên

hiển thị được đặt trong dấu " " để đặt tên cho cửa sổ hình ảnh Tham số image là một mảng Numpy chứa các thông số của 1 file ảnh

Ngoài ra để hiển thị ảnh mà người xem có thể nhìn thấy được hình ảnh cần

có một thời gian chờ để ảnh hiển thị trên màn hình Để khai báo thời gian chờ ta

dùng lệnh cv2.waitKey(time) ở đây tham số time là thời gian chờ tính theo đơn vị

mili giây và hiển thị hình ảnh trong thời gian này Để hình ảnh hiển thị trên màn

hình mãi mãi ta đặt tham số thời gian bằng 0 cv2.waitKey(0)

Ngoài ra ta cũng có thể hiển thị một số thông tin cần thiết về một hình ảnh ví dụ

như chiều dài, chiều rộng, số pixel, giá trị màu tại một điểm ảnh qua lệnh print

Ví dụ: Hiển thị thông tin về kích thước của hình ảnh:

print image.shape[0] (Hiển thị chiều dài ảnh)

print image.shape[1] (Hiển thị chiều cao ảnh)

❖ Lưu ảnh:

Cú pháp: cv2.imwrite("Tên.định dạng", image)

Hàm cv2.imwrite() là hàm lưu hình ảnh sau khi tiến hành một số thao tác chỉnh

sửa hình ảnh Với các tham số: là tên và định dạng mới của hình ảnh được đặt trong dấu " " và tham số image là một mảng Numpy chứa các thông số của 1 file ảnh cần lưu

3.1.2.2 Chuyển đổi giữa các không gian màu

Cú pháp: gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

Trang 25

Để chuyển đổi giữa các không gian màu ta sử dụng hàm cv2.cvtColor() Với

các tham số: image là một mảng Numpy chứa thông số ảnh gốc cần chuyển,

cv2.COLOR_BGR2GRAY là tham số chọn không gian màu để chuyển đổi ví dụ

như trong cú pháp mẫu này ta chuyển đổi không gian màu RGB sang không gian

màu xám và kết quả chuyển đổi được lưu trong một mảng Numpy được đặt tên là

gray

Ta có thể chuyển đổi giữa các không gian khác bằng cách thay đổi thông số

chọn không gian màu chuyển đổi như: Chuyển đổi từ RGB sang HSV ta đặt tham

số lựa chọn là cv2.COLOR_BGR2HSV, từ RGB sang CMYK ta đặt tham số lựa

chọn là cv2.COLOR_BGR2CMYK…

3.1.2.3 Ảnh nhị phân và ngưỡng

Ảnh nhị phân là ảnh mà giá trị của các điểm ảnh chỉ được biểu diễn bằng hai

giá trị 0 hoặc 255 tương ứng với hai màu đen hoặc trắng Để chuyển đổi một ảnh

xám sang ảnh nhị phân ta dựa vào một giá trị ngưỡng T với phương pháp chuyển tất

cả các điểm ảnh có giá trị mức xám nhỏ hơn hoặc bằng ngưỡng T thành giá trị 0

ứng với màu đen ( f(x,y) ≤ T  f(x,y) = 0) và ngược lại những điểm ảnh có giá trị

mức xám lớn hơn ngưỡng T thì chuyển thành giá trị 255 ứng với màu trắng ( f(x,y) > T  f(x,y) = 255)

Trong OpenCV hỗ trợ hàm cv2.threshold để chuyển ảnh xám sang ảnh nhị

phân với cú pháp:

(T, thresh) = cv2.threshold(image, Tin, Tout, cv2.THRESH_BINARY)

Với các tham số: image là mảng Numpy chứa thông số của hình ảnh, Tin là

ngưỡng ta nhập vào để chuyển đổi ảnh xám thành ảnh nhị phân, Tout là giá trị mức

xám được thay đổi giá trị điểm ảnh lớn hơn ngưỡng T (Ví dụ: ta đặt Tout = 250 thì

các điểm ảnh có giá trị mức xám lớn hơn T thì sẽ chuyển thành 250)

cv2.THRESH_BINARY là tham số lựa hình thức để so sánh giá trị điểm ảnh với

ngưỡng với hai giá trị là:

- cv2.THRESH_BINARY: Được gọi là nhị phân hóa thuận (f(x,y) ≤ T 

f(x,y) = 0 và f(x,y) > T  f(x,y) = Tout)

- cv2.THRESH_BINARY_INV: Được gọi là nhị phân hóa nghịch (f(x,y) ≤ T

 f(x,y) = Tout và f(x,y) > T  f(x,y) = 0)

Trang 26

Và kết quả được lưu với 2 thông số là: Ngưỡng T là ngưỡng để chuyển đổi ảnh

xám thành ảnh nhị phân trong trường hợp này T = Tin Và một mảng Numpy được đặt tên là thresh chứa thông tin của ảnh nhị phân sau khi được chuyển đổi

Ngoài ra, ta còn có một số phương pháp xác định ngưỡng tự động ví dụ như phương pháp Otsu và phương pháp ngưỡng thích nghi (Adaptive Threshold):

Với các tham số giống như trong phương pháp nhị phân hóa dạng tổng quát đã

đề cập ở trên với chút thay đổi là: tham số Tin trong trường hợp này là tham số

"don’t care" tức là giá trị Tin không có ảnh hưởng tới kết quả ngưỡng xác định bằng phương pháp Otsu ngoài ra ta thêm một tham số nữa là cv2.THRESH_OTSU

là tham số lựa chọn phương pháp lấy ngưỡng ở đây là phương pháp Otsu

❖ Phương pháp ngưỡng thích nghi (Adaptive Threshold):

Đây là phương pháp xác định ngưỡng dựa trên dựa trên những điểm ảnh lân cận nhau bằng cách xác định một cửa sổ chứa hình ảnh và ngưỡng theo từng vùng Với cú pháp:

thresh = cv2.adaptiveThreshold(image, Tout,

cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, wx, wy)

Với phương pháp này ta sử dụng hàm cv2.adaptiveThreshold các tham số

image, Tout và cv2.THRESH_BINARY giống như trong phương pháp nhị phân

hóa dạng tổng quát đã đề cập ở trên Và một số tham số khác như:

cv2.ADAPTIVE_THRESH_MEAN_C là tham số lựa chọn phương pháp như ở

đây ta lựa chọn phương pháp lấy ngưỡng bằng trung bình cộng các giá trị điểm ảnh

có trong cửa sổ Ngoài ra, ta còn có phương pháp lấy trung bình Gaussian bằng cách

đặt tham số lựa chọn phương pháp là cv2.ADAPTIVE_THRESH_GAUSSIAN _C,

hai tham số wx và wy là tham số đặt kích thước của cửa sổ để tính ngưỡng Do

phương pháp này có thể cho ngưỡng khác nhau ứng với mỗi pixel nên kết quả chỉ

trả về mảng thresh

Trang 27

3.1.2.4 Histogram và cân bằng histogram

Histogram của một ảnh là một biểu đồ nói lên mối quan hệ giữa các giá trị của pixel ảnh (điểm ảnh) và tần suất xuất hiện của chúng Nhìn vào biểu đồ histogram ta

có thể đoán được một ảnh sáng tối như thế nào

Nếu một ảnh có histogram lệch về phía phải biểu đồ, ta nói ảnh đó thừa sáng Nếu lệch về phía trái thì ảnh đó thiếu sáng Hình bên dưới mô tả histogram của một ảnh xám, ảnh này có histogram lệch về phía trái của biểu đồ và do đó ảnh này là khá tối Đối với ảnh màu, ta có thể tính toán histogram cho từng kênh màu một

Hình 3.1: Biểu đồ histogram của ảnh xám Hàm tính toán histogram có cú pháp:

hist = cv2.calcHist(image, kênh, mặt nạ, kích thước, phạm vi)

Trong đó có các tham số image là mảng Numpy chứa thông tin ảnh, kênh là

danh sách kênh cần tính toán histogram, với một ảnh xám chỉ có một kênh nên danh

sách là [0] và với ảnh màu RGB có ba kênh nên danh sách sẽ là [0,1,2], mặt nạ là

tham số được cung cấp để chỉ tính histogram cho những pixel trong mặt nạ, khi

không sử dụng mặt nạ thì ta đặt giá trị tham số này làn none, kích thước là tham số cho thấy thông tin số ngăn chứa giá trị của biểu đồ, phạm vi là tham số chỉ mức độ

dao động của giá trị các điểm ảnh ở đây giả sử ta cho phạm vi dao động từ [0 – 255] thì ta cần đặt tham số là [0 – 256] vì giá trị 256 là giá trị không bao gồm nên không được xét đến và được bỏ qua

❖ Cân bằng histogram

Cân bằng histogram (histogram equalization) là phương pháp làm cho biểu đồ histogram của ảnh được phân bố một cách đồng đều Đây là một biến đổi khá quan

Trang 28

trọng giúp nâng cao chất lượng ảnh, thông thường đây là bước tiền xử lý cho hình ảnh vào cho các bước tiếp theo

Để cân bằng histogram ta sử dụng hàm cv2.equalizeHist()

Image: Là ảnh ngõ vào, yêu cầu là ảnh đơn kênh 8 bit Các điểm ảnh không

bằng không được gán là 1 và các điểm ảnh bằng 0 được gán là 0, vì vậy ảnh ngõ vào được coi là một ảnh nhị phân Ta có thể sử dụng các phương pháp phân đoạn ảnh để chuyển ảnh thành ảnh nhị phân

Contours: Là kết quả đường bao thu được và được lưu dưới dạng vector điểm Hierarchy: Vectơ tùy chọn ngõ ra, chứa thông tin về topo hình ảnh Nó có

nhiều yếu tố như số lượng các đường viền, Đối với mỗi đường viền thứ i contours[i], các thành phần hierarchy[i][0], hiearchy[i][1], hiearchy[i][2] và hiearchy[i][3] được thiết lập chỉ số từ 0 và dựa trên các chỉ số trong contours để ta phân cấp đường viền theo các cấp bậc tương ứng Nếu đối với đường viền i không

có cạnh liền kề trước hoặc sau nó thì các yếu tố tương ứng hierarchy[i] sẽ là âm

Mode: Các chế độ để tìm biên

- CV_RETR_EXTERNAL: Chế độ này chỉ lấy ra các đường bao ngoài

cùng Nó thiết lập hierarchy[i][2] = hierarchy[i][3] = -1 cho tất cả các đường viền

Trang 29

- CV_RETR_LIST: lấy tất cả các đường bao mà không cần thiết lập bất kỳ

mối quan hệ phân cấp nào

- CV_RETR_CCOMP: lấy ra tất cả các đường bao và sắp xếp chúng thành hệ

thống phân cấp hai cấp Ở cấp cao nhất, có các đường bao bên ngoài của các phần

tử Ở cấp độ thứ hai, có những đường bao của các lỗ trống Nếu có một đường bao bên trong một lỗ của một phần tử có liên kết, nó vẫn nằm ở mức cao nhất

- CV_RETR_TREE lấy tất cả các đường bao và tái tạo lại toàn bộ thứ bậc của

các đường bao lồng nhau

Method: Các phương pháp xấp xỉ đường bao

- CV_CHAIN_APPROX_NONE: Lưu trữ hoàn toàn tất cả các đường viền

Trang 30

- CV_CHAIN_APPROX_SIMPLE: Nén các đoạn thằng theo chiều ngang,

dọc, và chéo lại chỉ giữ lại các điểm đầu cuối Ví dụ, một đường bao hình chữ nhật

sẽ được mã hoá thành 4 điểm

- CV_CHAIN_APPROX_TC89_L1, CV_CHAIN_APPROX_TC89_KCOS:

Áp dụng một trong những ưu điểm của thuật toán xấp xỉ Teh-Chin

3.1.2.6 Biến đổi hình thái

Phép biến đổi hình thái là một số thao tác đơn giản dựa trên hình dạng hình ảnh Nó thường được thực hiện trên các hình ảnh nhị phân Nó cần hai ngõ vào, một

là hình ảnh ban đầu của chúng ta, thứ hai được gọi là cấu trúc phần tử (structuring element) hoặc hạt nhân (kernel) quyết định bản chất của hoạt động Có hai phép biến đổi hình thái cơ bản là Erosion and Dilation Sau đó các biến thể của nó giống như Open, Close, Gradient…

❖ Xói mòn (Erosion)

Ý tưởng cơ bản về xói mòn tương tự như sự xói mòn đất, nó làm xói mòn các đường biên của đối foreground (Ở đây, đối tượng chính luôn là màu trắng) Hạt nhân sẽ trượt qua hình ảnh (như trong hội tụ 2D) Một pixel trong ảnh ban đầu (hoặc 1 hoặc 0) sẽ có giá trị là 1 chỉ khi tất cả các điểm ảnh dưới hạt nhân là 1, nếu không nó bị ăn mòn (được gán bằng không)

Vì vậy, tất cả các điểm ảnh gần biên sẽ được loại bỏ tùy thuộc vào kích thước của hạt nhân Vì vậy, độ dày hoặc kích thước của foreground chính giảm chỉ đơn giản là vùng trắng trong hình ảnh giảm trong hình ảnh Nó rất hữu ích để loại bỏ nhiễu trắng nhỏ, tách hai vật thể được liên kết với nhau

Ví dụ, ta sẽ sử dụng một hạt nhân 5x5 với mang giá trị 1:

❖ Giãn nở (Dilation)

Trường hợp này ngược với hình thái xói mòn Ở đây, một pixel sẽ là '1' nếu ít nhất một điểm ảnh dưới hạt nhân là '1' Vì vậy, nó làm tăng vùng màu trắng trong hình ảnh hoặc kích thước của foreground tăng lên Thông thường, trong trường hợp như loại bỏ nhiễu, sự xói mòn thường được theo sau đó là sự giãn nở Bởi vì, xói

Erode

Trang 31

mòn sẽ làm giảm nhiễu trắng, nhưng cũng làm giảm đối tượng của chúng ta Vì vậy,

ta cần mở rộng nó lại Vì nhiễu biến mất, chúng sẽ không trở lại, nhưng diện tích đối tượng của chúng ta tăng lên Nó cũng rất hữu ích trong việc nối các phần vỡ của một vật thể

❖ Mở (Opening)

Hình thái mở chỉ là một tên khác của sự xói mòn tiếp theo đó là sự giãn nở Nó rất hữu ích trong việc loại bỏ nhiễu, như đã giải thích ở trên Ở đây, để sử dụng hình thái này chúng ta sử dụng hàm:

morphologyEx ( img , MORPH_OPEN , hạt nhân )

❖ Đóng (Closing)

Hình thái này ngược với hình thái mở nó thực hiện giãn nở trước sau đó xói mòn Nó rất hữu ích trong việc loại bỏ các điểm đen bên trong đối tượng Ta sử dụng hàm:

morphologyEx ( img , MORPH_CLOSE, hạt nhân )

❖ Gradient

Hình thái này là hiệu số của hình thái giãn nở và xói mòn Kết quả sẽ trong như lấy đường bao của đối tượng

❖ Cấu trúc phân tử

Trong OpenCV có hỗ trợ hàm getStructuringElement() để ta xác định dạng

cấu trúc phân tử hay hạt nhân để thực hiện biến đổi hình thái

Dilate

Trang 33

3.2 PHẦN MỀM QT CREATOR [10]

3.2.1 Giới thiệu

Đây là nền tảng xây dựng các ứng dụng chạy được trên nhiều hệ điều hành Phần lớn các ứng dụng xây dựng bằng Qt đều có giao diện đồ họa, do vậy Qt còn được coi như là một bộ công cụ (widget toolkit) Ban đầu Qt ra đời như một sản phẩm thương mại và cũng được dùng để viết môi trường KDE, nhưng về sau được

bổ sung giấy phép LGPL, theo đó có thể được sử dụng tự do để phát triển các phần mềm nguồn mở hay đúng hơn là có thể sử dụng trong các phần mềm thương mại nếu muốn Bản quyền thương mại của Qt hiện nay đã được chuyển qua hình thức thu phí hỗ trợ Bạn có thể dùng Qt như một thư viện để viết phần mềm thương mại, nếu có sửa đổi nào trong bộ nguồn chính của Qt thì bạn phải cung cấp mã nguồn đã sửa ra chứ không yêu cầu phải mở toàn bộ mã nguồn hay phải mua giấy phép thương mại như trước kia

Cũng có ý kiến cho rằng đây là cái bẫy của Qt, nhưng cũng có ý kiến cho rằng Nokia cần khuếch trương thương hiệu để làm nền tảng cho di động hơn là thu vài đồng lẻ từ phí bản quyền bộ thư viện Qt Nếu bạn muốn yên tâm hơn khi viết phần mềm thương mại thì có thể lựa chọn thêm Widgets, tuy nhiên do là dự án cá nhân của một bác sĩ và cộng đồng không có lợi nhuận nhiều nên không phát triển và hỗ trợ tốt như của Qt

Phiên bản mới Qt 4.7 sắp được phát hành sẽ bao gồm Qt Quick, kĩ thuật giao diện người dùng (UI) mới cho phép tạo các ứng dụng có chuyển động và được điều khiển bằng tay chạm Ngoài ra, còn có bản cập nhật của Qt WebKit

3.2.2 Các lớp của QT Creator

Trong QT Creator có hỗ trợ các lớp giúp ta thực hiện nhiều thao tác khác nhau

Số lượng các lớp mà QT hỗ trợ ngày nay lên tới gần 1600 lớp Trong số đó người nghiên cứu có sử dụng một số lớp sau để thực hiện đề tài của mình:

3.2.2.1 QList

QList: là một trong các lớp lưu trữ chung của Qt Nó lưu trữ các mục trong một

danh sách cung cấp quyền truy thông qua các chỉ số lưu và xóa dựa trên chỉ số

Cách sử dụng QList:

Ví dụ: Khởi tạo QList dưới dạng danh sách các thứ trong tuần

QList<QString> Weekdays = {"Mon", "Tue", "Wed", "Thu"};

Trang 34

Ta duyệt qua QList bằng vòng lặp for và in dữ liệu ra màn hình bằng phương thức at() Phương thức này nhận tham số đầu vào là chỉ số phần tử.

for (int i=0; i < Weekdays.size(); ++i)

{

out << Weekdays.at(i) << endl;

}

Dùng toán tử << để chèn một phần tử mới vào sau QList

Weekdays << "Fri" << "Sat" << "Sun"

3.2.2.2 QRect

Lớp QRect định nghĩa một hình chữ nhật trong mặt phẳng sử dụng độ chính

xác số nguyên

Hình chữ nhật thường được biểu diễn dưới dạng góc trên bên trái và kích

thước Kích thước (chiều rộng và chiều cao) của một QRect luôn là tương đương

với hình chữ nhật toán học cơ sở cho việc dựng hình của nó

Một QRect có thể được tạo ra với một bộ số nguyên gồm đỉnh, chiều rộng và chiều cao, hoặc từ QPoint (là một lớp được sử dụng để định nghĩa tọa độ của một điểm trong không gian) và QSize (là một lớp được sử dụng để xác định kích thước

của một đối tượng hai chiều và được quy định là chiều rộng và chiều cao) Đoạn code sau tạo ra hai hình chữ nhật giống hệt nhau

QRect r1(100, 200, 11, 16);

QRect r2(QPoint (100, 200), QSize (11, 16));

Lớp QRect cung cấp một số hàm trả về các tọa độ hình chữ nhật khác nhau và cho phép điều khiển chúng QRect cũng cung cấp các hàm để di chuyển hình chữ nhật liên quan đến các tọa độ khác nhau Ngoài ra có hàm moveTo() với chức năng

di chuyển hình chữ nhật, di chuyển góc trên bên trái của hình chữ nhật tới các tọa

độ nhất định Ngoài ra, hàm translate() di chuyển hình chữ nhật cho độ lệch tương ứng với vị trí hiện tại, và hàm translate() trả về một bản sao của hình chữ nhật này Hàm size() trả về kích thước của hình chữ nhật tương tự như lớp QSize Kích thước cũng có thể được lấy ra riêng biệt bằng cách sử dụng các hàm width()

và height() Để thao tác các kích thước sử dụng các hàm setSize(), setWidth()

Trang 35

hoặc setHeight() Ngoài ra, kích thước có thể được thay đổi bằng cách áp dụng một trong các hàm thiết lập tọa độ hình chữ nhật, ví dụ, setBottom() hoặc setRight() Hàm contains() cho biết liệu một điểm nhất định nằm bên trong hình chữ nhật hay không, và hàm intersects() trả về kết quả TRUE nếu hình chữ nhật này cắt với một hình chữ nhật cho trước Lớp QRect cũng cung cấp hàm intersected() trả về

hình chữ nhật giao điểm và hàm united() trả về hình chữ nhật bao quanh hình chữ nhật đã cho:

Hình 3.2: Kết quả khi sử dụng hàm intersected() và hàm United()

Lớp QRect cung cấp số hàm trả về các tọa độ hình chữ nhật khác nhau và cho phép điều khiển chúng QRect cũng cung cấp các chức năng để di chuyển hình chữ

nhật liên quan đến các tọa độ khác nhau

Ví dụ các hàm left(), setLeft() và moveLeft() trong đó: left() trả về kết quả là tọa độ x của cạnh trái hình chữ nhật, setLeft() thiết lập cạnh bên trái của hình chữ

nhật với tọa độ x đã cho (có thể thay đổi chiều rộng, nhưng sẽ không thay đổi cạnh

bên phải của hình chữ nhật) và moveLeft() di chuyển toàn bộ hình chữ nhật theo

chiều ngang, đưa cạnh bên trái của hình chữ nhật tới tọa độ x và kích thước của nó không thay đổi

Lưu ý vì một số lý do lịch sử, các giá trị được trả về bởi các hàm bottom()

và right() sẽ sai lệch so với góc dưới bên phải của hình chữ nhật: hàm right() trả về kết quả left() + width() - 1 và hàm bottom() trả về kết quả top() + height() - 1 Tương tự như vậy là cho kết quả trả về tọa độ khi sử dụng hàm bottomRight() Ngoài ra, tọa độ x và y của các hàm topRight() và bottomLeft(), tương ứng, cũng

có độ sai lệch so với cạnh phải và cạnh dưới

Trang 36

Hình 3.3: Kết quả trả về khi sử dụng các hàm tọa độ

Để tìm chính xác tọa độ của góc dưới bên phải nên sử dụng x() + width()

và y () + height() thay cho right() và bottom() Và để khắc phục vấn đề này QT cũng đưa ra một giải pháp khác là sử dụng lớp QRectF: Lớp QRectF định nghĩa một hình chữ nhật trong mặt phẳng sử dụng chính xác tọa độ, và các hàm

QRectF :: right() và QRectF :: bottom() sẽ trả về chính xác tọa độ bên phải và

bên dưới

3.2.2.3 QString

Lớp QString cung cấp một chuỗi ký tự Unicode

QString chứa một chuỗi các QChar 16 bit , trong đó mỗi QChar tương ứng

với một ký tự Unicode 4.0

Khởi tạo một chuỗi: QString str = "Hello";

Như trên ta khởi tạo được 1 chuỗi là "Hello" với kích thước dữ liệu là 5

Ta cũng có thể khởi tạo chuỗi dưới dạng mảng của QChar:

static const QChar data[4] = {0x0055, 0x006e, 0x10e3, 0x03a3};

QString str (data, 4);

Cách tiếp cận khác là đặt kích thước của chuỗi bằng cách sử dụng hàm resize()

và để khởi tạo các ký tự dữ liệu cho mỗi ký tự QString sử dụng địa chỉ bắt đầu từ

0, giống như mảng của C ++

QString str;

str resize (4);

str [0] = QChar ( 'U' );

Trang 37

str [1] = QChar ( 'n' );

str [2] = QChar ( 0x10e3 );

str [3] = QChar ( 0x03a3 );

3.2.2.4 QVector

QVector là một lớp của QT cho phép lưu trữ dữ liệu theo kiểu danh sách Các

phần tử trong lớp QVector nằm kế tiếp nhau trong bộ nhớ và có thể truy cập thông

qua chỉ số nên có tốc độ truy xuất dữ liệu rất nhanh nếu số lượng phần tử không nhiều

Khởi tạo vector:

Ví dụ trên tạo ra một vector lưu trữ các số nguyên

QVector<int> vals = {1, 2, 3, 4, 5};

Phương thức size() trả về kích thước của vector – số lượng các phần tử có trong

vector

out << "Kich thuoc cua vector la:"<< vals.size() << endl;

Truy xuất phần tử đầu tiên với phương thức first()

out << "Phan tu dau tien la: "<< vals.first() << endl;

Truy xuất phần tử cuối cùng với phương thức last()

out << "Phan tu cuoi cung la: "<< vals.last() << endl;

Phương thức append() chèn một phần tử vào sau vector

vals.append(6);

Phương thức prepend() chèn một phần tử vào đầu vector

vals.prepend(0);

3.2.3 GUI trên QT Creator

Để thuận tiện cho việc sử dụng và theo dõi trong quá trình viết, kiểm tra chương trình, cũng như quá trình sử dụng sau này trên Qt Creator cũng hỗ trợ việc thiết kế giao diện như các ngôn ngữ lập trình hướng sự kiện khác với sự hỗ trợ của GUI (Graphical User Interface)

Trang 38

3.2.3.1 Các bước lập trình GUI trên Qt:

Ta mở chương trình Qt và chọn Create Project để tạo một dự án mới

Hình 3.4: Giao diện chương trình Qt Creator Sau đó, ta chọn Qt Gui Application để khởi tạo chương trình có hỗ trợ lập trình với Gui

Hình 3.5: Lựa chọn chức năng lập trình với GUI

Trang 39

Tiếp theo ta chọn Choose và thiết lập thông tin project như: tên project, địa điểm lưu… Sau khi thiết lập xong chương trình sẽ được khởi tạo và xuất hiện các file chương trình cơ bản

Hình 3.6: Giao diện project sau khi thiết lập

Ta chọn vào mục Forms và chọn tới file có tên là mainwindow.ui để mở giao

diện thiết kế form

Hình 3.7: Giao diện thiết kế form Tương tự như các ngôn ngữ lập trình hướng sự kiện khác ta cũng từ bảng công

cụ chọn đối tượng mình cần tác động như: Button, Text, Label… vẽ ra khu vực

Trang 40

form có sẵn Sau đó, ta thiết lập các thông số cho các đối tượng như tên đối tượng, kích thước, nhãn hiển thị…

Hình 3.8: Form thiết kế hoàn chỉnh Sau khi thiết kế xong form hoàn chỉnh ta tiến hành viết chương trình điều khiển cho các đối tượng để thực hiện các thao tác ta mong muốn bằng cách nhấp chuột

phải chọn Go to slot chương trình sẽ xuất hiện bảng các sự kiện cho đối tượng, sau

khi lựa chọn sự kiện chương trình tự động chuyển tới file chương trình

Mainwindow.cpp với sự kiện tương ứng với đối tượng đã chọn Sau đó, ta tiến

hành lập trình điều khiển đối tượng thực hiện các sự kiện tương ứng để hoàn thành nhiệm vụ đã đề ra

Hình 3.9: Bảng các sự kiện các đối tượng

Ngày đăng: 09/12/2022, 11:56

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Adam Coates, Blake Carpenter, Carl Case, Sanjeev Satheesh, Bipin Suresh, Tao Wang, David J. Wu, Andrew Y. Ng. Text Detection and Character Recognition in Scene Images with Unsupervised Feature Learning.ICDAR, 2011 Sách, tạp chí
Tiêu đề: Text Detection and Character Recognition in Scene Images with Unsupervised Feature Learning
Tác giả: Adam Coates, Blake Carpenter, Carl Case, Sanjeev Satheesh, Bipin Suresh, Tao Wang, David J. Wu, Andrew Y. Ng
Năm: 2011
[2] Parthasarathi Giri. Text Information Extraction And Analysis From Images Using Digital Image Processing Techniques. Special Issue of International Journal on Advanced Computer Theory and Engineering (IJACTE), ISSN (Print) : 2319 – 2526, Volume-2, Issue-1, 2013, pp. 66-71 Sách, tạp chí
Tiêu đề: Text Information Extraction And Analysis From Images Using Digital Image Processing Techniques
Tác giả: Parthasarathi Giri
Nhà XB: International Journal on Advanced Computer Theory and Engineering (IJACTE)
Năm: 2013
[3] Chiang, Yao-Yi, and Craig A. Knoblock. Automatic Text Recognition from Raster Maps. 2010 Sách, tạp chí
Tiêu đề: Automatic Text Recognition from Raster Maps
Tác giả: Chiang, Yao-Yi, Craig A. Knoblock
Năm: 2010
[4] Arwa AL-Khatatneh, Sakinah Ali Pitchay and Musab Al-qudah. An Arabic Baseline Estimation Method Based on Feature Points Extraction.In: Proceedings of the World Congress on Engineering. 2017 Sách, tạp chí
Tiêu đề: An Arabic Baseline Estimation Method Based on Feature Points Extraction
Tác giả: Arwa AL-Khatatneh, Sakinah Ali Pitchay, Musab Al-qudah
Năm: 2017
[5] L. Ramesh, E. Dinesh. Text Extraction and Recognition from Mixed Images. Journal of Chemical and Pharmaceutical Sciences ISSN, 974:2115 Sách, tạp chí
Tiêu đề: Text Extraction and Recognition from Mixed Images
Tác giả: L. Ramesh, E. Dinesh
Nhà XB: Journal of Chemical and Pharmaceutical Sciences
[6] Phan Thị Thanh Nga, Nguyễn Thị Huyền Trang, Nguyễn Văn Phúc, Thái Duy Quý, Võ Phương Bình . Nhận Dạng Bìa Sách Tiếng Việt Cho Ứng Dụng Quản Lý Sách. Tạp chí Khoa học Đại học Đà Lạt, 2017, 7.2: 142- 152 Sách, tạp chí
Tiêu đề: Nhận Dạng Bìa Sách Tiếng Việt Cho Ứng Dụng Quản Lý Sách
Tác giả: Phan Thị Thanh Nga, Nguyễn Thị Huyền Trang, Nguyễn Văn Phúc, Thái Duy Quý, Võ Phương Bình
Nhà XB: Tạp chí Khoa học Đại học Đà Lạt
Năm: 2017
[8] Simon Tong and Daphne Koller. Support vector machine active learning with applications to text classification. Journal of machine learning research 2.Nov (2001): 45-66 Sách, tạp chí
Tiêu đề: Support vector machine active learning with applications to text classification
Tác giả: Simon Tong, Daphne Koller
Nhà XB: Journal of Machine Learning Research
Năm: 2001
[9] Terrence S. Furey, Nello Cristianini, Nigel Duffy, David W. Bednarski Michèl Schummer, David Haussler. Support vector machine classification and validation of cancer tissue samples using microarray expression data. Bioinformatics 16.10 (2000): 906-914 Sách, tạp chí
Tiêu đề: Support vector machine classification and validation of cancer tissue samples using microarray expression data
Tác giả: Terrence S. Furey, Nello Cristianini, Nigel Duffy, David W. Bednarski, Michèl Schummer, David Haussler
Nhà XB: Bioinformatics
Năm: 2000
[10] Ray Rischpater. Application development with qt creator. Packt Publishing Ltd, 2013 Sách, tạp chí
Tiêu đề: Application development with Qt Creator
Tác giả: Ray Rischpater
Nhà XB: Packt Publishing Ltd
Năm: 2013

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm