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

Ứ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

97 4 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 đề Ứ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
Tác giả Thân Đức Trường
Người hướng dẫn TS. Nguyễn Văn Thái
Trường học Trường Đại Học Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh
Chuyên ngành Kỹ Thuật Điện 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 97
Dung lượng 10,73 MB

Cấu trúc

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

Nội dung

TỔNG QUAN

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 (OCR) bắt nguồn từ công nghệ máy điện báo, với mục tiêu phát triển một thiết bị đọc cho người mù Thiết bị này cho phép chuyển đổi văn bản thành âm thanh thông qua một máy quét văn bản phẳng kết hợp với bộ tổng hợp văn bản thành lời nói, mang lại khả năng tiếp cận thông tin cho người khiếm thị.

Công nghệ nhận dạng ký tự quang học (OCR) đã phát triển mạnh mẽ và mở rộng ứng dụng, bao gồm nhập dữ liệu cho tài liệu kinh doanh, nhận dạng biển số xe, và chuyển đổi tài liệu in thành phiên bản văn bản Ngoài ra, OCR còn hỗ trợ tìm kiếm thông tin chính xác từ hình ảnh, giúp người dùng dễ dàng truy cập tài liệu khi có hình ảnh liên quan.

Việc nhập dữ liệu từ hóa đơn giúp doanh nghiệp nắm bắt tình hình thu chi, nguyên vật liệu, nguồn vốn và số lượng sản phẩm Tuy nhiên, quá trình này tốn nhiều thời gian khi phải nhập từng thông tin Giải pháp hiệu quả là sử dụng phần mềm nhận dạng ký tự, cho phép trích xuất thông tin từ hóa đơn nhanh chóng và chuyển đổi thành văn bản dữ liệu Nhờ đó, người nhập liệu chỉ cần hiệu chỉnh và sử dụng dữ liệu, tiết kiệm thời gian và giảm tải khối lượng công việc.

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

Nhận dạng ký tự quang học (OCR) là phần mềm máy tính giúp chuyển đổi hình ảnh chữ viết thành văn bản tài liệu Công nghệ này đã ra đời từ đầu thế kỷ 20 và đóng vai trò quan trọng trong nghiên cứu nhận dạng mẫu, trí tuệ nhân tạo và thị giác máy.

Hiện nay, Tesseract, một mã nguồn mở được Google tài trợ, là công cụ tiêu biểu trong nghiên cứu nhận dạng ký tự quang học Tesseract có khả năng nhận diện ký tự bằng 108 ngôn ngữ khác nhau trên toàn cầu, với độ chính xác vượt quá 90% tùy thuộc vào từng ngôn ngữ.

In the article "Text Detection and Character Recognition in Scene Images with Unsupervised Feature Learning," a team of researchers from Stanford University's Computer Science Department, including Adam Coates, Blake Carpenter, Carl Case, Sanjeev Satheesh, Bipin Suresh, Tao Wang, David J Wu, and Andrew Y Ng, presented a method for detecting and recognizing characters in outdoor images using unsupervised learning techniques, achieving an impressive accuracy of 85.5%.

Trong bài viết "Trích xuất và phân tích thông tin văn bản từ hình ảnh bằng các kỹ thuật xử lý ảnh số", tác giả Partha Sarathi Giri từ Khoa Điện tử và Truyền thông, M.E.M.S, Balasore, Odisha đã giới thiệu hai phương pháp để trích xuất văn bản từ hình ảnh: 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ở.

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

Yi Chiang và Craig A Knoblock từ trường Đại học Nam California đã trình bày phương pháp nhận dạng ký tự trên bản đồ Raster, với kỹ thuật xác định nhãn cho các đoạn ký tự có kích cỡ và phương hướng khác nhau Họ xoay các nhãn ký tự theo chiều kim đồng hồ và ngược chiều kim đồng hồ để đạt được chiều đúng trước khi tiến hành nhận dạng ký tự, sử dụng phần mềm ABBYY FineReader 10 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 và Musab Al-qudah cũng đề xuất một phương pháp tiền xử lý cho nhận dạng ký tự thông qua phân tích và trích xuất các điểm đặc trưng.

Trong bài báo “Text Extraction and Recognition from Mixed Images” của L Ramesh và E Dinesh, nhóm tác giả đề xuất một phương pháp phân vùng các vùng màu tương đương, chia thành ba cụm: cụm chưa thông tin, cụm nền và cụm nhiễu Sau đó, họ 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ử Kết quả nhận dạng cho thấy hiệu suất tốt, tuy nhiên, vẫn xuất hiện một số lỗi trong những hình ảnh có nền phức tạp.

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", 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à Võ Phương Bình giới thiệu phương pháp nhận dạng bìa sách tiếng Việt Nhóm đã áp dụng mã nguồn mở Tesseract để thực hiện nhận dạng ký tự, đạt độ chính xác khoảng 80%.

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 đóng vai trò quan trọng trong việc nhận diện và trích xuất thông tin từ các tờ hóa đơn bán hàng Nghiên cứu này thuộc đề tài tốt nghiệp thạc sĩ chuyên ngành Kỹ thuật Điện Tử, tập trung vào việc cải thiện hiệu suất và độ chính xác của quá trình nhận dạng dữ liệu Việc ứng dụng công nghệ xử lý ảnh không chỉ giúp tự động hóa quy trình quản lý hóa đơn mà còn nâng cao hiệu quả trong việc phân tích thông tin kinh doanh.

Mục tiêu nghiên cứu của bài viết là phát triển một chương trình có khả năng nhận dạng và trích xuất thông tin từ tờ hóa đơn bán hàng Người nghiên cứu hy vọng rằng đề tài này sẽ góp phần vào sự phát triển của lĩnh vực thị giác tại Việt Nam trong tương lai Đối tượng nghiên cứu được xác định là xây dựng chương trình nhận dạng và trích xuất thông tin hiệu quả.

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

Để nhận dạng và trích xuất thông tin từ tờ hóa đơn bán hàng, cần thực hiện các nhiệm vụ như xác định dòng và tách ký tự, huấn luyện nhận dạng và lưu trữ ký tự.

Nhiệm vụ xác định dòng và tách ký tự là quá trình xác định vị trí các dòng có chứa ký tự và phân tách chúng thành từng ký tự độc lập để nhận dạng Để thực hiện nhiệm vụ này, chúng ta sử dụng thư viện mã nguồn mở OpenCV cùng với một số phân lớp của phần mềm QT Creator trên nền tảng C++.

Nhiệm vụ huấn luyện dữ liệu bao gồm việc tạo ra một tập mẫu ký tự, từ đó tiến hành huấn luyện để xây dựng một thư viện ký tự nhận dạng dựa trên thuật toán SVM (Support Vector Machines).

Nhiệm vụ nhận dạng và lưu trữ ký tự là bước cuối cùng sau khi tách từng ký tự và xây dựng thư viện huấn luyện Để thực hiện nhận dạng, chúng ta so sánh các ký tự vừa tách với thư viện đã được huấn luyện nhằm xác định ký tự chính xác Sau khi nhận dạng, ký tự sẽ được lưu trữ theo địa chỉ đã xác định trong nhiệm vụ đầu tiên, với dữ liệu được lưu dưới dạng file Excel Phần mềm QT Creator và các phân lớp của nó sẽ được sử dụng để hoàn thành 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

- Đề tài thực hiện nhận dạng và trích xuất thông tin từ mẫu hóa đơn được đánh máy bằng chữ in hoa font chữ Arial cỡ chữ từ 12 tới 16

- Các mẫu hóa đơn không có Merge dòng, hình ảnh hóa đơn được chụp có độ rõ nét, không quá mờ, không nghiêng.

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ế

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

CƠ SỞ LÝ THUYẾT

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

Xử lý ảnh là một lĩnh vực khoa học và công nghệ phát triển nhanh chóng, liên quan đến việc thu nhận và xử lý hình ảnh từ các nguồn như camera và vệ tinh Quá trình này bao gồm việc số hóa tín hiệu và nâng cao chất lượng ảnh, giúp hình ảnh trở nên rõ nét và đẹp hơn Ảnh được coi là thông tin về hình dáng, màu sắc của vật thể mà con người có thể quan sát được Đối tượng chính của xử lý ảnh là ảnh chụp tự nhiên, với mục tiêu cải thiện nội dung thông qua dữ liệu ảnh Ảnh đơn, hay ảnh tĩnh, thể hiện dữ liệu trên mặt phẳng ảnh qua hàm độ chói I(x,y), trong khi ảnh động là chuỗi các ảnh liên tiếp được chụp trong thời gian.

Trong ảnh số, dữ liệu được biểu diễn thông qua ba hàm độ chói của ba màu cơ bản: đỏ (R), xanh lá (G) và xanh lam (B), với giá trị độ chói nằm trong khoảng 0 đến IMAX Ảnh số là hình thức lưu trữ và thể hiện ảnh tĩnh, được tạo ra thông qua quá trình lấy mẫu và lượng tử hóa Ảnh được biểu diễn dưới dạng ma trận điểm ảnh I[m,n], trong đó mỗi phần tử là một pixel Giá trị của pixel phụ thuộc vào loại ảnh: ảnh nhị phân chỉ cần 1 bit cho mỗi pixel, trong khi ảnh đa mức xám yêu cầu 8 bits/pixel cho 256 mức giá trị từ 0 đến 255 Ảnh màu có thể cần từ 8 bits trở lên tùy thuộc vào chất lượng màu và số lượng màu được sử dụng.

Hệ màu RGB yêu cầu 24 bits/pixel, tương ứng với 3 kênh màu mỗi kênh 8 bits Do đó, việc xử lý ảnh trở thành quá trình thao tác trên 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 ma trận điểm ảnh I[m,n], trong đó mỗi điểm ảnh có tọa độ [m,n] và giá trị màu I Các phép xử lý ảnh tác động vào tọa độ của điểm ảnh, thay đổi vị trí và hình khối trong ảnh, được gọi là xử lý hình học Ngoài ra, chúng cũng tác động đến giá trị màu I của điểm ảnh, được gọi là xử lý nội dung Các phép xử lý hình học thường không thay đổi nội dung ảnh và được sử dụng phổ biến trong hiển thị hình ảnh, trong khi xử lý nội dung làm thay đổi giá trị màu của điểm ảnh, tạo ra những hiệu ứng cảm nhận khác nhau.

Nhiều khi, không phải bức ảnh nào cũng rõ nét và đẹp, đặc biệt là những vật thể vốn đã xấu, khiến cho ảnh chụp của chúng cũng không thể đẹp được Thậm chí, khi ảnh càng rõ nét, cái xấu càng trở nên nổi bật, vì vậy, chúng ta không mong muốn ảnh rõ hơn mà lại muốn làm mờ đi để che bớt khuyết điểm Để đạt được điều này, ta sử dụng bộ lọc thông thấp (Lowpass filter) để chỉ giữ lại những sóng có tần số thấp, loại bỏ các sóng tần số cao thể hiện độ sắc nét, bởi vì những sóng này chỉ tạo ra nhiễu.

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

Khoảng cách giữa các điểm ảnh cần được lựa chọn sao cho mắt người cảm nhận được sự liên tục của hình ảnh Việc xác định khoảng cách phù hợp sẽ tạo ra mật độ phân bổ, tương ứng với độ phân giải, được phân bố theo trục x và y trong không gian hai chiều.

Để giảm thiểu không gian lưu trữ, nén ảnh thường được thực hiện theo hai cách: nén có bảo toàn và nén không bảo toàn thông tin Nén không bảo toàn thường đạt tỷ lệ nén cao hơn nhưng khả năng phục hồi kém hơn Dựa trên hai phương pháp này, có bốn cách tiếp cận cơ bản trong nén ảnh.

Kỹ thuật nén ảnh thống kê dựa trên việc phân tích tần suất xuất hiện của các giá trị điểm ảnh, từ đó phát triển các chiến lược mã hóa hiệu quả Một ví dụ tiêu biểu cho phương pháp mã hóa này là định dạng *.TIF.

Nén ảnh không gian là một kỹ thuật mã hóa dựa trên vị trí không gian của các điểm ảnh, tận dụng sự tương đồng giữa các điểm ảnh trong các vùng lân cận Một ví dụ tiêu biểu cho kỹ thuật này là mã nén *.PCX.

Nén ảnh sử dụng phép biến đổi là kỹ thuật nén không bảo toàn, mang lại hiệu quả cao hơn so với các phương pháp khác Định dạng JPG là một ví dụ điển hình cho kỹ thuật này.

Nén ảnh Fractal là một kỹ thuật sử dụng tính chất Fractal để thể hiện sự lặp lại của các chi tiết trong hình ảnh Kỹ thuật này cho phép lưu trữ chỉ phần gốc của ảnh cùng với quy luật sinh ra ảnh dựa trên nguyên lý Fractal, giúp tiết kiệm dung lượng lưu trữ mà vẫn đảm bảo chất lượng hình ảnh.

Trong quá trình xử lý ảnh, các đặc điểm của đối tượng được chọn lọc tùy theo mục đích nhận dạng Một số đặc điểm quan trọng của ảnh bao gồm màu sắc, hình dạng, kết cấu và kích thước, giúp tăng cường độ chính xác trong việc nhận diện đối tượng.

• Đặ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ác đặc điểm loại này được xác định thông qua kỹ thuật lọc vùng (zonal filtering), sử dụng các bộ vùng hay còn gọi là “mặt nạ đặc 10 điểm” (feature mask) Những mặt nạ này thường có hình dạng đa dạng như hình chữ nhật, tam giác, hoặc cung tròn.

Đặc điểm biên và đường biên của đối tượng là yếu tố quan trọng, giúp xác định các thuộc tính bất biến cần thiết cho việc nhận dạng đối tượng Những đặc điểm này có thể được trích xuất thông qua các toán tử như gradient, la bàn, Laplace và toán tử "chéo không" (zero crossing).

Không gian màu

Không gian màu là mô hình toán học mô tả màu sắc bằng số học, với nhiều loại khác nhau phục vụ cho các mục đích cụ thể Bài viết này sẽ khám phá ba không gian màu cơ bản thường được sử dụng, bao gồm hệ không gian màu RGB, HSV và CMYK.

Không gian màu xám là một loại không gian màu trong đó mỗi điểm ảnh chỉ mang cường độ thông tin, thường được gọi là ảnh đen trắng Tuy nhiên, thuật ngữ này không hoàn toàn chính xác, vì ảnh đen trắng chỉ có hai mức giá trị là 0 (màu đen) và 1 (màu trắng), trong khi ảnh xám có 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.

RGB là không gian màu phổ biến trong đồ họa máy tính và các thiết bị kỹ thuật số, dựa trên sự kết hợp của ba màu cơ bản: đỏ (R), xanh lục (G) và xanh lam (B) Không gian màu này cho phép mô tả đa dạng các màu sắc khác nhau.

Ảnh số được mã hóa bằng 24bit, với 8bit cho mỗi kênh màu R, G, B, cho phép mỗi kênh nhận giá trị từ 0-255 Sự kết hợp của các giá trị khác nhau từ các kênh màu tạo ra nhiều màu sắc đa dạng, tổng cộng lên đến 16,7 triệu màu sắc.

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

Màu trắng có giá trị RGB (255, 255, 255), màu vàng là (255, 255, 0), và màu tím đậm có giá trị (64, 0, 128) Khi sử dụng 16bit để mã hóa một kênh màu, tổng dãi màu cho cả ba kênh sẽ đạt tới 3*2^16, tạo ra một số lượng màu sắc rất lớn.

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

CMYK là không gian màu phổ biến trong ngành in ấn, sử dụng bốn màu cơ bản để pha trộn mực in Ba màu chính được sử dụng là C (Cyan - lục lam), M (Magenta - đỏ tươi), và Y (Yellow - vàng), cùng với màu K (Black - đen) để tạo ra nhiều sắc thái khác nhau Hệ màu này giúp đảm bảo chất lượng in ấn cao và chính xác.

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

Khi kết hợp màu hồng xẫm với vàng, ta sẽ có màu đỏ, trong khi màu xẫm kết hợp với xanh lơ sẽ tạo ra màu xanh lam Sự kết hợp của ba màu này sẽ cho ra màu đen, nhưng màu đen ở đây không phải là đen tuyệt đối mà thường có độ tương phản lớn Trong ngành in, để tiết kiệm mực, người ta thường thêm màu đen vào để in các chi tiết màu đen thay vì phải kết hợp ba màu sắc trên Do đó, hệ màu CMYK ra đời, trong đó chữ K đại diện cho màu đen (Black), có lẽ vì chữ B đã được sử dụng để biểu thị màu xanh (Blue), nên chữ cái cuối cùng K được chọn để biểu diễn màu đen.

Hệ màu CMYK hoạt động trên nguyên lý loại bỏ màu trắng từ nền giấy trắng Khi in, ba màu C (cyan), M (magenta), và Y (yellow) được sử dụng theo tỷ lệ khác nhau để tạo ra màu sắc mong muốn Để in màu đen, thay vì kết hợp ba màu, người ta sử dụng mực đen Nguyên lý này khác với hệ RGB, nơi các màu được kết hợp để tạo ra ánh sáng.

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

HSV và HSL là hai không gian màu phổ biến trong chỉnh sửa ảnh, phân tích ảnh và thị giác máy tính Hệ không gian này dựa trên ba thông số chính để mô tả màu sắc, trong đó H đại diện cho 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 thường được mô tả dưới dạng hình trụ hoặc hình nón, trong đó vòng tròn từ 0 đến 360 độ đại diện cho trường màu sắc (Hue) Bắt đầu từ màu đỏ (red primary) ở 0 độ, tiếp theo là màu xanh lục (green primary) tại 120 độ, và từ 120 đến 240 độ là sự chuyển đổi từ xanh lục sang xanh lam (green primary – blue primary) Cuối cùng, từ 240 đến 360 độ, màu sắc chuyển từ xanh lam về màu đen và quay trở 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à yếu tố phụ trong hệ màu CMYK, được sử dụng để in các điểm màu đen Để chuyển đổi từ không gian màu RGB sang CMYK, trước tiên cần chuyển RGB sang CMY, sau đó xác định thành phần K để hoàn tất quá trình chuyển đổi từ CMY sang CMYK.

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

Việc xác định giá trị của K là một thách thức khác, do nó phụ thuộc vào nhà sản xuất công nghệ in Tuy nhiên, từ góc độ lý thuyết, có thể chấp nhận rằng

❖ Chuyển từ CMY sang CMYK:

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

Và K = K Trong đó C, M, Y, K được làm tròn tới chỉ số nguyên

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: Đặt M = Max(R, G, B), m = Min(R, G, B) và C = M - m

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 đó, ta tính:

X = C (1 - |H' mod 2 -1|) Ta biểu diễn hệ (R1, G1, B1) như sau:

Cuối cùng để xác định R, G, B ta cộng cùng một lượng vào từng thành phần với giá trị: m = V – C (2.6)

Nếu H không xác định được Nếu 0 ≤ H' < 1

Nếu 1 ≤ H' < 2 Nếu 2 ≤ H' < 3 Nếu 3 ≤ H' < 4 Nếu 4 ≤ H' < 5 Nếu 0 ≤ H' < 1

CÔNG CỤ

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

OpenCV (Open Source Computer Vision) là thư viện mã nguồn mở chuyên về thị giác máy, cung cấp hơn 500 hàm và 2500 thuật toán tối ưu cho xử lý ảnh và các vấn đề liên quan Thư viện này được thiết kế để tận dụng sức mạnh của các chip đa lõi, cho phép thực hiện các phép tính toán trong thời gian thực, đáp ứng nhanh chóng cho các ứng dụng thông thường OpenCV hỗ trợ nhiều nền tảng khác nhau như Windows, Linux, Mac và iOS Việc sử dụng thư viện tuân theo quy định mã nguồn mở BSD, cho phép sử dụng miễn phí cho cả mục đích thương mại và phi thương mại.

Dự án OpenCV bắt đầu từ năm 1999 và được giới thiệu tại hội nghị IEEE về thị giác máy và nhận dạng vào năm 2000 Bản OpenCV 1.0 chính thức ra mắt vào năm 2006, tiếp theo là bản 1.1 (pre-release) vào năm 2008 Đến tháng 10 năm 2009, phiên bản thứ hai của OpenCV, thường được gọi là phiên bản 2.x, đã được phát hành.

Thư viện OpenCV, ban đầu được Intel hỗ trợ và sau đó là Willow Garage - một phòng thí nghiệm nghiên cứu công nghệ robot, hiện vẫn là một thư viện mã nguồn mở OpenCV được phát triển bởi một quỹ phi lợi nhuận, duy trì sự phát triển và cải tiến liên tục.

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

3.1.2.1 Đọc ảnh, hiển thị và lưu ảnh

Để đọc file ảnh thành mảng NumPy, sử dụng cú pháp image = cv2.imread("tham số"), trong đó tham số là đường dẫn đến hình ảnh Sau khi thực hiện, ta nhận được mảng NumPy tên là image, chứa các thông số về file ảnh như chiều dài, chiều rộng và số kênh NumPy lưu trữ các thông số này để phục vụ cho việc xử lý ảnh.

Một bức ảnh có hai chiều X và Y, với gốc tọa độ nằm tại pixel ở góc trên bên trái Chiều X được đo từ trái sang phải, trong khi chiều Y được đo từ trên xuống dưới Trong NumPy, số lượng pixel theo chiều Y được biểu thị bằng image.shape[0] và số lượng pixel theo chiều X được biểu thị bằng image.shape[1].

Mỗi pixel trong ảnh được biểu thị dưới dạng xám (grayscale) hoặc màu (color), với thông số image.shape[2] cho biết số kênh của mỗi pixel Ảnh màu sử dụng hệ màu RGB có 3 kênh, trong khi ảnh xám chỉ có 1 kênh duy nhất.

Hàm cv2.imshow() trong OpenCV được sử dụng để hiển thị hình ảnh trong một cửa sổ, với cú pháp là cv2.imshow("Tên hiển thị", image) Tham số "Tên hiển thị" được đặt trong dấu ngoặc kép để xác định tên cho cửa sổ hiển thị, trong khi tham số image là một mảng Numpy chứa dữ liệu của file ảnh.

Để hiển thị ảnh, người xem cần có thời gian chờ để hình ảnh xuất hiện trên màn hình Thời gian chờ được khai báo bằng lệnh cv2.waitKey(time), trong đó tham số time được tính bằng mili giây Nếu muốn hình ảnh hiển thị mãi mãi, ta đặt tham số thời gian bằng 0, tức là sử dụng cv2.waitKey(0).

Chúng ta có thể hiển thị thông tin cần thiết về hình ảnh như chiều dài, chiều rộng, số pixel và giá trị màu tại một điểm ảnh bằng 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)

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

Hàm cv2.imwrite() được sử dụng để lưu hình ảnh sau khi thực hiện các thao tác chỉnh sửa Tham số đầu vào bao gồm tên và định dạng mới của hình ảnh được đặt trong dấu ngoặc kép, cùng với tham số image là một mảng Numpy chứa thông tin của tệp ảnh cần lưu.

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

Để chuyển đổi giữa các không gian màu, ta sử dụng hàm cv2.cvtColor() với cú pháp: gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) Trong đó, image là mảng Numpy chứa thông tin ảnh gốc cần chuyển đổi, và cv2.COLOR_BGR2GRAY là tham số xác định không gian màu đích Cú pháp này cho phép chuyển đổi từ không gian màu RGB sang không gian màu xám, với kết quả được lưu trong mảng Numpy có tên là gray.

Chúng ta có thể chuyển đổi giữa các không gian màu khác nhau bằng cách thay đổi thông số lựa chọn Ví dụ, để chuyển đổi từ RGB sang HSV, ta sử dụng tham số cv2.COLOR_BGR2HSV, và để chuyển đổi từ RGB sang CMYK, tham số 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)

Để chuyển đổi ảnh xám thành ảnh nhị phân, ta sử dụng các tham số như image, là mảng Numpy chứa thông số hình ảnh; Tin, là ngưỡng nhập vào; và Tout, là giá trị mức xám thay đổi cho các điểm ảnh lớn hơn ngưỡng T Ví dụ, khi đặt Tout = 250, các điểm ảnh có giá trị lớn hơn T sẽ được chuyển thành 250 Tham số cv2.THRESH_BINARY được sử dụng để xác định cách so sánh giá trị điểm ảnh với ngưỡng.

- 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

Kết quả được lưu với hai thông số chính: Ngưỡng T, dùng để chuyển đổi ảnh xám thành ảnh nhị phân, trong đó T = Tin, và một mảng Numpy tên là thresh, chứa thông tin của ảnh nhị phân sau khi 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):

❖ Phương pháp Otsu: Đây là phương pháp xác định ngưỡng dựa trên biểu đồ (Histograms) mức xám Với cú pháp:

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

PHẦN MỀM QT CREATOR

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ó ý kiến cho rằng Nokia nên tập trung vào việc khuếch trương thương hiệu để xây dựng nền tảng di động, thay vì chỉ thu lợi từ phí bản quyền bộ thư viện Qt Mặc dù việc sử dụng Widgets có thể mang lại sự yên tâm khi phát triển phần mềm thương mại, nhưng do dự án này là của một cá nhân và cộng đồng không có lợi nhuận cao, nên việc phát triển và hỗ trợ không thể so sánh với Qt.

Phiên bản mới Qt 4.7 sắp ra mắt sẽ tích hợp Qt Quick, một công nghệ giao diện người dùng hiện đại cho phép phát triển ứng dụng tương tác với chuyển động và điều khiển bằng cảm ứng Bên cạnh đó, phiên bản này cũng sẽ có bản cập nhật cho 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

Hiện nay, QT hỗ trợ gần 1600 lớp học, trong đó người nghiên cứu đã sử dụng một số lớp để thực hiện đề tài của mình.

QList là một trong những lớp lưu trữ chung của Qt, cho phép lưu trữ các mục trong một danh sách Nó cung cấp quyền truy cập thông qua các chỉ số, cho phép người dùng lưu và xóa các mục dựa trên chỉ số một cách dễ dàng.

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

To iterate through a QList in C++, use a for loop combined with the at() method to display data on the screen The at() method takes an index as an input parameter For example, you can loop through the elements of the Weekdays list and output each element using the following code: ```cppfor (int i = 0; i < Weekdays.size(); ++i) { out

Ngày đăng: 23/12/2023, 21:15