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ác công nghệ máy điện báo, với mục tiêu phát triển máy đọc cho người mù Công nghệ này cho phép chuyển đổi văn bản thành âm thanh thông qua việc sử dụng máy quét văn bản phẳng và bộ tổng hợp văn bản thành lời nói, mang lại sự tiện ích cho người khiếm thị trong việc tiếp cận thông tin.
Công nghệ nhận dạng ký tự quang học (OCR) đã phát triển mạnh mẽ và ứng dụng rộng rãi trong nhiều lĩnh vực, 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 văn bản Công nghệ này còn giúp cải thiện khả năng tìm kiếm thông tin chính xác từ hình ảnh, chẳng hạn như tìm kiếm tài liệu dựa trên hình ảnh chứa thông tin liên quan.
Việc nhập dữ liệu từ hóa đơn rất quan trọng cho doanh nghiệp, giúp theo dõi 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 do phải nhập từng thông tin trên hóa đơn Giải pháp hiệu quả là sử dụng phần mềm nhận dạng ký tự, cho phép tự động trích xuất thông tin từ hóa đơn 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 lại thông tin, 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 được thiết kế để 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 lĩnh vực nhận dạng mẫu, trí tuệ nhân tạo và thị giác máy.
Hiện nay, có nhiều nghiên cứu về nhận dạng ký tự, trong đó nổi bật là mã nguồn mở Tesseract, được Google tài trợ Tesseract là một công cụ nhận dạng ký tự quang học mạnh mẽ, có khả năng nhận diện 108 ngôn ngữ khác nhau trên thế giới Độ chính xác của Tesseract đạt trên 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 báo "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, đã trình bày hai phương pháp chính để trích xuất văn bản từ hình ảnh: phương pháp dựa trên cạnh 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 đã giới thiệu phương pháp nhận dạng ký tự trên bản đồ Raster với các ký tự khác nhau về kích cỡ và phương hướng Kỹ thuật này bao gồm việc xác định nhãn cho các đoạn ký tự, sau đó xoay các nhãn theo chiều kim đồng hồ và ngược chiều kim đồng hồ cho đến khi đạt được hướng chính xác, trước khi tiến hành nhận dạng ký tự bằ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ý 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 từ các đoạn ký tự.
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 thành ba cụm: cụm chưa thông tin, cụm nền và cụm nhiễu Sau đó, họ áp dụng các kỹ thuật ghép nối phần tử để kết nối các cụm này Kết quả nhận dạng cho thấy hiệu suất tốt, tuy nhiên vẫn gặp một số lỗi khi xử lý hình ảnh có nền phức tạp.
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à Võ Phương Bình trình bày phương pháp nhận dạng bìa sách tiếng Việt Nhóm tác giả đã sử 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 Đề tài này không chỉ giúp nâng cao hiệu quả quản lý dữ liệu mà còn góp phần vào việc tự động hóa quy trình thu thập thông tin Qua nghiên cứu, tôi mong muốn phát triển các giải pháp công nghệ tiên tiến, giúp cải thiện độ chính xác và tốc độ xử lý dữ liệu trong lĩnh vực thương mại.
Mục tiêu nghiên cứu của đề tài là xây dựng một chương trình có khả năng nhận dạng và trích xuất thông tin từ các tờ hóa đơn bán hàng Người nghiên cứu hy vọng rằng công trình của mình sẽ góp phần nhỏ vào việc phát triển lĩnh vực thị giác máy tại Việt Nam trong tương lai Đối tượng nghiên cứu được xác định rõ ràng là chương trình nhận dạng và trích xuất thông tin.
Nhiệm vụ và giới hạn của đề tài
1.4.1 Nhiệm vụ Để nhận dạng và trích xuất được thông tin trong một tờ hóa đơn bán hàng đề tài cần thực hiện những nhiệm vụ: Xác định dòng và tách ký tự, huấn luyện nhận dạng và lưu trữ ký tự Trong đó:
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 chứa ký tự và phân tách chúng thành các ký tự độc lập để nhận dạng Để thực hiện nhiệm vụ này, chúng tôi sử dụng thư viện mã nguồn mở OpenCV kết hợp với các phân lớp của 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ự, sau đó sử dụng tập mẫu này để huấn luyện và 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à có 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ự tách được với thư viện đã 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à dữ liệu sẽ được lưu dưới dạng file Excel Phần mềm lập trình QT Creator sẽ được sử dụng để thực hiện các phân lớp cần thiết cho 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ệ đang phát triển nhanh chóng, thu hút sự chú ý của các trung tâm nghiên cứu và ứng dụng, đặc biệt là trong việc phát triển máy tính chuyên dụng Quá trình này bắt đầu bằng việc thu nhận ảnh từ các nguồn như camera và vệ tinh, sau đó tín hiệu được số hóa và xử lý để nâng cao chất lượng hình ảnh Ảnh được hiểu là thông tin về đường nét, hình khối và màu sắc của vật thể mà con người có thể quan sát Đối tượng chính của xử lý ảnh là ảnh chụp tự nhiên, nhằm cải thiện nội dung và chất lượng hiển thị Ảnh đơn, hay ảnh tĩnh, biểu diễn dữ liệu thông qua hàm độ chói I(x,y), trong khi ảnh động là chuỗi các ảnh chụp liên tiếp.
Trong lĩnh vực xử lý ảnh, giá trị độ chói của ảnh màu được biểu diễn qua ba hàm R (đỏ), G (xanh lá), B (xanh lam): IR(x,y), IG(x,y), và IB(x,y), với điều kiện 0 ≤ I(x,y) ≤ IMAX Ảnh số là một dạng biểu diễn và lưu trữ ảnh tĩnh, được tạo ra từ quá trình lấy mẫu và lượng tử hóa, trong đó ảnh được biểu diễn dưới dạng ma trận điểm ảnh I[m,n] Mỗi phần tử trong ma trận gọi là pixel, với giá trị phụ thuộc vào loại ảnh: ảnh nhị phân chỉ cần 1 bit cho 2 mức giá trị, ảnh đa mức xám cần 8 bits cho 256 mức giá trị, và ảnh màu yêu cầu 8 bits hoặc hơn tùy thuộc vào chất lượng màu.
Hệ màu RGB sử dụng 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 với các phần tử của ma trận điểm ảnh.
Một bức ảnh số được biểu diễn qua 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 độ điểm ảnh, thay đổi vị trí và hình khối của chúng, được gọi là xử lý hình học Đồng thời, các phép xử lý cũng ảnh hưởng đến giá trị màu I của điểm ảnh, được gọi là xử lý nội dung Thông thường, xử lý hình học không làm thay đổi nội dung ảnh và thường được áp dụng trong hiển thị hình ảnh, trong khi xử lý nội dung thay đổi giá trị màu, mang lại hiệu ứng cảm nhận khác nhau.
Không phải bức ảnh nào cũng rõ nét và đẹp, đặc biệt là khi chụp những vật thể xấu Thực tế, khi ảnh chụp càng rõ nét, cái xấu càng lộ rõ hơn Do đó, trong trường hợp này, chúng ta không muốn tăng độ rõ mà lại muốn làm mờ bức ảnh để giảm thiểu khuyết điểm Để thực hiện điều này, ta sử dụng bộ lọc thông thấp (Lowpass filter) để giữ lại các sóng tần số thấp và loại bỏ các sóng tần số cao, vì các sóng này chỉ tạo ra nhiễu cho bức ảnh.
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 chọn sao cho mắt người cảm nhận được sự liên tục của hình ảnh Lựa chọn khoảng cách phù hợp giúp tạo ra mật độ phân bổ, từ đó xác định độ phân giải, được phân bố theo hai trục x và y trong không gian hai chiều.
Để giảm thiểu không gian lưu trữ, việc nén dữ liệu thường được thực hiện theo hai phương pháp: nén có bảo toàn thông tin và nén không bảo toàn thông tin Nén không bảo toàn thường đạt hiệu suất nén cao hơn, nhưng khả năng phục hồi dữ liệu lạ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 tần suất xuất hiện của các giá trị điểm ảnh để phát triển chiến lược mã hóa hiệu quả Một ví dụ tiêu biểu cho phương pháp này là định dạng tệp *.TIF.
Nén ảnh không gian là 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à một 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à ví dụ điển hình cho cách tiếp cận này trong việc nén hình ảnh.
Nén ảnh Fractal là kỹ thuật 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 Phương pháp 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 theo 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 có thể được nêu ra như màu sắc, hình dạng, kết cấu và kích thước Những yếu tố này đóng vai trò quan trọng trong việc cải thiện độ chính xác của các thuật toán nhận dạ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 phương pháp lọc vùng (zonal filtering) Các bộ vùng, hay còn gọi là “mặt nạ đặc 10 điểm” (feature mask), thường có hình dạng đa dạng như chữ nhật, tam giác, hay cung tròn.
Đặc điểm biên và đường biên là những yếu tố quan trọng trong việc nhận dạng đối tượng, giúp trích xuất các thuộc tính bất biến Những đặc điểm này có thể được khai thác 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 thực tế dưới dạng số Có nhiều không gian màu khác nhau phục vụ cho các mục đích khác nhau 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: hệ màu RGB, HSV và CMYK.
Không gian màu xám là một 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à một 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ố Nó 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), từ đó tạo ra tất cả các màu sắc khác.
Một ảnh số được mã hóa bằng 24bit, trong đó mỗi kênh màu R, G, B sử dụng 8bit, cho phép mỗi kênh nhận giá trị từ 0 đến 255 Sự kết hợp của các giá trị khác nhau từ ba kênh màu này tạo ra nhiều màu sắc khác nhau, dẫn đến tổng cộng khoảng 16.7 triệu màu sắc có thể 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 sắc trong hệ màu RGB được biểu diễn bằng các giá trị như màu trắng (255, 255, 255), màu vàng (255, 255, 0) và màu tím đậm (64, 0, 128) Khi sử dụng 16 bit để mã hóa một kênh màu, tổng dải màu cho cả ba kênh sẽ lên 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 Trong thực tế, ba màu chính được sử dụng là Cyan (lục lam), Magenta (đỏ tươi) và Yellow (vàng), kết hợp với màu Black (đen) để tạo ra đa dạng sắc thái cho sản phẩm in.
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 đỏ, và 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 cho ra màu đen, nhưng màu đen ở đây không phải là đen tuyệt đối và thường có độ tương phản lớn Trong ngành in, để tiết kiệm mực, người ta thêm màu đen vào để in các chi tiết 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ó thể do chữ B đã được dùng để biểu diễn màu xanh (Blue).
Nguyên lý làm việc của hệ màu CMYK dựa trên việc loại bỏ dần màu trắng trên nền giấy trắng khi in các màu C, M, Y với tỉ lệ khác nhau Các màu này kết hợp để tạo ra màu sắc cần in, và khi in màu đen, người ta sử dụng mực đen thay vì in cả ba màu Điều này khác biệt với hệ RGB, nơi màu sắc được tạo ra từ sự kết hợp của các thành phần màu.
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 và phân tích ảnh, cũng như trong lĩnh vực thị giác máy tính Cả hai hệ không gian này dựa trên ba thông số cơ bản để mô tả màu sắc, trong đó H (Hue) đại diện cho 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, với vòng tròn màu sắc trải dài từ 0 đến 360 độ Bắt đầu từ màu đỏ (red primary) ở 0 độ, tiếp theo là màu xanh lục (green primary) ở 120 độ, và màu xanh lam (blue primary) ở 240 độ Khoảng từ 240 đến 360 độ thể hiện sự chuyển tiếp từ màu đen 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 trong hệ màu CMYK là yếu tố quan trọ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 ta 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, bởi 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ở nổi bật trong lĩnh vực 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 tối đa sức mạnh của các chip đa lõi, cho phép thực hiện các phép toán trong thời gian thực, đáp ứng nhanh chóng cho nhiều ứng dụng OpenCV hỗ trợ nhiều nền tảng khác nhau như Windows, Linux, Mac, và iOS, và tuân thủ các quy định của giấy phép mã nguồn mở BSD, cho phép sử dụng miễn phí cho cả mục đích phi thương mại lẫn 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 Tuy nhiên, phiên bản chính thức OpenCV 1.0 chỉ được công bố vào năm 2006, và đến năm 2008, phiên bản 1.1 (pre-release) ra mắt 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, đã chính thức ra đời.
Thư viện OpenCV, ban đầu được Intel hỗ trợ, sau đó nhận sự giúp đỡ từ Willow Garage - một phòng thí nghiệm chuyên nghiên cứu công nghệ robot Đến nay, OpenCV vẫn là một thư viện mã nguồn mở, được phát triển bởi một quỹ phi lợi nhuận.
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, chúng ta 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, hàm cv2.imread() sẽ trả về một mảng NumPy có 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 Mảng NumPy lưu trữ các thông tin này một cách hiệu quả.
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 chạy từ trái sang phải, trong khi chiều Y chạy từ trên xuống dưới Trong NumPy, số pixel theo chiều Y được xác định bằng image.shape[0], và số pixel theo chiều X được xác định bằng image.shape[1].
Mỗi pixel trong ảnh có thể được biểu thị dưới dạng xám (grayscale) hoặc màu (color) Thông số image.shape[2] cho biết số kênh của mỗi pixel; ảnh màu RGB có 3 kênh, trong khi ảnh xám chỉ có 1 kênh duy nhất.
Cú pháp: cv2.imshow("Tên hiển thị", image)
Hàm cv2.imshow() được sử dụng để hiển thị hình ảnh trong một cửa sổ, với tham số đầu vào bao gồm tên cửa sổ được đặt trong dấu " " và tham số image là một mảng Numpy chứa dữ liệu của một file ảnh.
Để hiển thị ảnh, cần có một thời gian chờ để ảnh xuất hiện trên màn hình Lệnh cv2.waitKey(time) được sử dụng để khai báo thời gian chờ, với tham số time 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ể sử dụng lệnh print để hiển thị các thông tin cần thiết về hình ảnh, chẳng hạn như chiều dài, chiều rộng, số pixel và giá trị màu tại một điểm ảnh.
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 Hàm này nhận hai tham số: tên và định dạng mới của hình ảnh được đặt trong dấu " ", cùng với tham số image là một mảng Numpy chứa các thông số của file ả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, chúng ta sử dụng hàm cv2.cvtColor() với cú pháp: gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) Trong đó, tham số image là mảng Numpy chứa thông tin của ảnh gốc, và cv2.COLOR_BGR2GRAY là tham số xác định không gian màu cần chuyển đổi Ví dụ, cú pháp này 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 trữ trong mảng Numpy 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 tham 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, ta sử dụng tham số 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ố sau: 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ụ, với 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 trữ 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 Thêm vào đó, một mảng Numpy có 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):
❖ 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
Một số ý kiến cho rằng đây là một cái bẫy từ Qt, trong khi những người khác lại cho rằng Nokia nên tập trung vào việc phát triển thương hiệu để tạo nền tảng vững chắc cho lĩnh vực di động, thay vì chỉ thu lợi từ phí bản quyền bộ thư viện Qt Nếu bạn muốn an tâm hơn khi phát triển phần mềm thương mại, bạn có thể xem xét sử dụng thêm Widgets Tuy nhiên, do đây là dự án cá nhân của một bác sĩ và cộng đồng không có nhiều lợi nhuận, nên sự phát triển và hỗ trợ không được tốt như của 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 (UI) tiên tiến cho phép phát triển các ứng dụng tương tác với chuyển động và điều khiển bằng tay chạm Bên cạnh đó, phiên bản này cũng sẽ bao gồm 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 lớp lưu trữ quan trọng trong Qt, cho phép lưu trữ các mục trong danh sách và cung cấp quyền truy cập thông qua các chỉ số Người dùng có thể dễ dàng thêm, lưu và xóa các mục dựa trên chỉ số, giúp quản lý dữ liệu hiệu quả.
Ví dụ: Khởi tạo QList dưới dạng danh sách các thứ trong tuần
QList Weekdays = {"Mon", "Tue", "Wed", "Thu"};
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 parameter to access specific elements For example, the loop can be structured as follows: for (int i=0; i < Weekdays.size(); ++i) { out