BTL nhận dạng chữ viết tay
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
======***======
Báo cáo bài tập lớn
Nhập môn lý thuyết nhận dạng
Đề tài: Nhận dạng chữ viết tay
Giáo viên:
Nhóm – Lớp : Thành viên:
Hà nội, Năm 2018
Trang 2LỜI MỞ ĐẦU
Nhận dạng là bài toán xuất hiện cách đây khá lâu và vẫn luôn thu hút được nhiều sự quan tâm, nghiên cứu Đặc biệt là trong vài thập niên gần đây, do
sự thúc đẩy của quá trình tin học hoá trong mọi lĩnh vực, bài toán nhận dạng không còn dừng lại ở mức độ nghiên cứu nữa mà nó trở thành một lĩnh vực để
áp dụng vào thực tế Các bài toán nhận dạng đang được ứng dụng trong thực tế hiện nay tập trung vào nhận dạng mẫu, nhận dạng tiếng nói và nhận dạng chữ Trong số này, nhận dạng chữ là bài toán được quan tâm rất nhiều và cũng đã đạt được nhiều thành tựu rực rỡ Các ứng dụng có ý nghĩa thực tế lớn có thể kể đến như: nhận dạng chữ in dùng trong quá trình sao lưu sách báo trong thư viện, nhận dạng chữ viết tay dùng trong việc phân loại thư ở bưu điện, thanh toán tiền trong nhà băng và lập thư viện sách cho người mù (ứng dụng này có nghĩa: scan sách bình thường, sau đó cho máy tính nhận dạng và trả về dạng tài liệu mà người mù có thể đọc được) Xuất phát từ yêu cầu thực tế, đang rất cần có nhưng nghiên cứu về vấn đề này Chính vì vậy chúng em đã chọn đề tài nhận dạng ký
tự viết tay làm đề tài trong bài tập lớn với mong muốn phần nào áp dụng vào bài toán thực tế
Trang 3Mục lục
Chương 1 TỔNG QUAN VỀ CHỮ VIẾT VÀ LÝ THUYẾT NHẬN DẠNG 4
1.1 Giới thiệu 4
1.2 Bài toán nhận dạng 4
Chương 2 NHẬN DẠNG CHỮ VIẾT TAY 5
1.1 Tiền xử lý 5
1.1.1 Lọc nhiễu 5
1.1.2 Nhị phân hóa ảnh 6
1.1.3 Xác định đường viền của chữ 7
1.1.4 Tăng kích thước đường viền 8
1.1.5 Làm đầy chữ 9
1.1.6 Chuẩn hóa kích thước của chữ 10
1.2 Trích chọn đặc trưng 11
1.3 Huấn luyện và nhận dạng 11
Đối sánh mẫu 12
Một số thuật toán đối sánh mẫu cơ bản 13
1.4 Hậu xử lý 18
1.5 Chữ viết sau nhận dạng 18
Chương 3 TỔNG KẾT 18
Trang 4Chương 1 TỔNG QUAN VỀ CHỮ VIẾT VÀ LÝ THUYẾT
NHẬN DẠNG
1.1 Giới thiệu
Những năm gần đây, cùng với sự phát triển của lý thuyết nhận dạng, công nghệ xử lý ảnh, đã có nhiều nghiên cứu mang lại một số kết quả cho bài toán nhận dạng chữ viết tay, từ đó mở ra hàng loạt ứng dụng thực tế đạt được nhiều thành tựu lớn lao
Đến thời điểm này, nhận dạng chữ in đã được giải quyết, tuy nhiên nhân dạng chữ viết tay vẫn còn nhiều khó khăn Khó khăn lớn nhất khi nghiên cứu bài toán nhận dạng chữ viết tay là sự biến thiên quá đa dạng trong cách viết của từng người Cùng một người viết nhưng đôi khi cũng có nhiều sự khác biệt trong cách viết tùy thuộc vào ngữ cảnh, kiểu viết của từng người cũng thay đổi theo thói quen và thời gian… Điều này gây ra nhiều trở ngại trong việc trích chọn đặc trưng cũng như lựa chọn mô hình nhận dạng
1.2 Bài toán nhận dạng
Hình 1.1 Sơ đồ tổng quát của hệ thống nhận dạng chữ viết tay.
Trang 5Chương 2 NHẬN DẠNG CHỮ VIẾT TAY
1.1 Tiền xử lý
Giai đoạn này góp phần làm tăng độ chính xác phân lớp của hệ thống nhận dạng, tuy nhiên nó cũng làm cho tốc độ của hệ thống nhận dạng chậm lại Vì vậy, tùy thuộc vào chất lượng ảnh quét của từng văn bản cụ thể để chọn một hoặc một vài chức năng trong khối này Khối tiền xử lý này gồm 1 số chức năng: Lọc nhiễu, nhị phân hóa ảnh, xác định đường viền của chữ, tăng kích thước đường viền, làm đầy chữ, chuẩn hóa kích thước chữ
1.1.1 Lọc nhiễu
Nhiễu là một tập các điểm sáng thừa trên ảnh Có 2 loại nhiễu cơ bản:
Nhiễu hệ thống:là nhiễu có quy luật có thể khử bằng có thể khử bằng các phép biến đổi trên miền tần số
Nhiễu ngẫu nhiên là dạng nhiễu xuất hiện ngẫu nhiên và có thể theo một phân bố nào đó
Khử nhiễu là một vấn đề cần được xử lý trong nhận dạng.Lọc nhiễu để khử các nhiễu đốm (các nhiễu với kích thước nhỏ), có thể sử dụng các phương pháp lọc (Lọc trung bình, Lọc trung vị)
Lọc trung bình là san bằng ảnh, làm mịn ảnh, loại bỏ các thành phần nhiễu cộng theo nguyên lý sau:mỗi điểm ảnh sẽ được thay thế bằng trọng số hay trung bình trọng số của các điểm lân cận với mặt nạ
Lọc trung vị được sử dụng chủ yếu cho nhiễu xung,nguyên lý của lọc trung
vị là điểm ảnh đầu vào sẽ được thay thế bởi trung vị của nó nếu điểm ảnh đó
có sự chênh lệch lớn hơn so với phần tử trung vị
Trang 6Hình 1.2 Kết quả của ảnh sau khi lọc nhiễu
1.1.2 Nhị phân hóa ảnh
Nhị phân hóa ảnh là một kỹ thuật chuyển ảnh đa cấp xám sang ảnh nhị
phân Trong bất kỳ bài toán phân tích hoặc nâng cao chất lượng ảnh nào, nó cũng cần thiết để xác định các đối tượng quan trọng Nhị phân hóa ảnh chia thành 2 phần: phần nền và phần chữ Hầu hết các phương pháp nhị phân hóa ảnh hiện nay đều lựa chọn một ngưỡng thích hợp theo cường độ sang của ảnh và sau đó tất cả các giá trị độ sang lớn hơn ngưỡng đó thành một giá trị
độ sang và tất cả giá trị bé hơn ngưỡng đó thành một giá trị độ sáng khác
Trang 7Hình 1.3 Nhị phân hóa ảnh
1.1.3 Xác định đường viền của chữ
Phát hiện biên của ảnh là một trong những nhiệm vụ quan trọng trong xử
lý ảnh Nhận dạng ảnh dùng máy tính liên quan tới việc nhận dạng và phân loại các đối tượng trong bức ảnh do đó phát hiện biên là một công cụ quan trọng Phát hiện biên sẽ làm giảm một cách đáng kể khối lượng dữ liệu cần xử lý và loại bỏ các thông tin không cần thiết trong khi vẫn đảm bảo các thuộc tính quan trọng về cấu trúc của ảnh Có rất nhiều kỹ thuật phát hiện biên hiện đang được sử dụng, mỗi kỹ thuật này thường làm việc một cách có hiệu quả cao đối với một loại đường biên cụ thể
Trong matlab đã hộ trợ cho ta một hàm rất hữu ích giúp ta tìm được biên của ảnh một cách nhanh chóng
Hàm I3=edge(uint8(I2));
Trang 8
Hình 1.4 Tìm đường viền của chữ
1.1.4 Tăng kích thước đường viền
Trong thưc tế khi tìm được biên của ảnh thì nhiều ảnh có biên rất mờ rất nhỏ rất khó để cũng ta có thể nhận dạng được đúng chữ cái vì vậy một giải pháp được đưa ra là làm tăng đường viền của chữ
Trong matlab cũng hỗ trợ cho hàm tăng đường viên:
a=strel('square',2);
I4=imdilate(I3,a);
Hình 1.5 Tăng kích thước đường viền
Trang 91.1.5 Làm đầy chữ
Chức năng này được áp dụng với các ký tự bị đứt nét một cách ngẫu
nhiên Ảnh đứt nét sẽ gây rất nhiều khó khăn cho việc tách chữ , dễ nhầm lẫn phần liên thông của ký tự thành 2 ký tư riêng biệt, tạo ra sai lầm trong quá trình nhận dạng
Ta dùng hàm imfill(I4,'holes'); trong matlab để làm đầy chữ , làm đầy các nét đứt để nhận dạng chữ một cách chính xác
Hình 1.6 Làm đầy chữ
1.1.6 Chuẩn hóa kích thước của chữ
Việc chuẩn hóa kích thước ảnh dựa trên việc xác định trọng tâm ảnh, sau đó xác định khoảng cách lớn nhất từ tâm ảnh đến các cạnh, trên, dưới, trái, phải của hình chữ nhật bao quanh ảnh Thông qua khoảng cách lớn nhất đó, có thể xác định một tỉ lệ co, dãn của ảnh gốc so với kích thước đã xác định, từ
đó hiệu chỉnh kích thước ảnh theo tỉ lệ co, dãn này Như vậy, thuật toán chuẩn hóa kích thước ảnh luôn luôn đảm bảo được tính cân bằng khi co, dãn ảnh sẽ không bị biến dạng hoặc bị lệch
Trang 10Ta dùng một vòng for duyện theo số chữ đếm được và dung hàm rectangle trong Matlap để tạo viền bao quanh
for i=1:num
rectangle('position',I7(:,i),'edgecolor','r');
end
Hình 1.7 Chuẩn hóa kích thước ảnh các chữ
1.2 Trích chọn đặc trưng
Trích chọn đặc trưng đóng vai trò cực kỳ quan trọng trong 1 hệ thống nhận dạng Trong trường hợp đơn giản nhất, ảnh đa cấp xám hoặc ảnh nhị phân được sử dụng cho việc nhận dạng Tuy nhiên, trong hầu hết các hệ nhận
dạng để giảm độ phức tạp và tăng độ chính xác của các thuật toán phân lớp thì đòi hỏi các đặc trưng được trích chọn phải rút gọn lại càng nhỏ càng tốt nhưng vẫn phải đảm bảo được thông tin của ký tự
Chữ viết là một mẫu đăc trưng , mỗi chữ thì sẽ có chiều cao và chiều rộng khác nhau,gồm các đường nét khác nhau
Trích chọn đặc trưng là quá trình rút trích các đặc trưng đại diện cho chữ viêt tay
Các đặc trưng đại diện phải có yêu cầu thuộc tính là khả năng bảo toàn tính đặc thù để phân biệt các chữ khác nhau trong ảnh đồng thời phải có tính cô đọng hỗ trợ chặc chẽ trong quá trình đối sánh, ít bị tác động bởi nhiễu và dễ tính toán
1.3 Huấn luyện và nhận dạng
Có rất nhiều phương pháp khác nhau được áp dụng rộng rãi trên hệ thống nhận dạng chữ viết tay Các phương pháp này có thể là được tích hợp theo
Trang 11hình SVM.
Đây là giai đoạn quan trọng nhất, giai đoạn này quyết định độ chính xác của hệ thống nhận dạng
Đối sánh mẫu
Kỹ thuật nhận dạng chữ đơn giản nhất dựa trên cơ sở đối sánh các
nguyên mẫu với nhau để nhận dạng ký tự hoặc từ Nói chung toán tử đối sánh xác định mức độ giống nhau giữa hai vecto trong một không gian đặc trưng Các kỹ thuật đối sánh có thể nghiên cứu theo 3 hướng sau:
• Đối sánh trực tiếp: Một ký tự đầu vào là ảnh đa cấp xám hoặc ảnh nhị
phân được so sánh trực tiếp với một tập mẫu chuẩn đã được lưu trữ Việc
so sánh dựa theo một độ đo về sự tương đồng nào đó để nhận dạng.Các kỹ thuật đối sánh này có thể đơn giản như việc so sánh một – một hay là
phức tạp hơn là phân tích cây quyết định, mặc dù phương pháp đối sánh trực tiếp đơn giản và có cơ sở toán học vững chắc nhưng kết quả nhận dạng của nó cũng rất nhạy cảm với nhiễu
• Các mẫu biến dạng và đối sánh mềm: Một phương pháp đối sánh khác
là sử dụng các mẫu biến dạng, trong đó một phép biến dạng ảnh được
dung để đối sánh một ảnh chưa biết với một cơ sở dữ liệu ảnh đã biết Ý tưởng cơ bản của đối sánh một cách tối ưu mẫu chưa biết với tất cả các mẫu có thể mà các mẫu này có thể co hoặc dãn lại chỉ một không gian đặc trưng được thành lập, các vecto chưa được đối sánh bằng các sử dụng quy hoạch động và một hàm biến dạng
• Đối sánh giảm nhẹ: đây là một kỹ thuật đối sánh ảnh ở mức độ tượng
trưng Kỹ thuật này sử dụng hình dáng đặc trưng cơ bản của ảnh ký tự thứ nhất, các vùng đối sánh đã được nhận biết sau đó trên cơ sở một số vùng đối sánh được đánh giá tốt, các phần tử của ảnh được so sánh với các vùng đối sánh này.Công việc này đòi hỏi một kỹ thuật tìm kiếm trong một không gian đã chiều để tìm cực đại toàn cục của một số hàm
Một số thuật toán đối sánh mẫu cơ bản
Thuật toán Brute Force
Thuật toán Brute Force là dạng thuật toán tìm kiếm tuần tự, nó thử kiểm tra tất cả các vị trí trên văn bản từ 1 cho đến n – m + 1 Sau
Trang 12mỗi lần thử, thuật toán Brute Force dịch mẫu sang phải một ký tự cho đến khi kiểm tra hết văn bản Thuật toán Brute Force không cần công việc chuẩn bị cũng như các mảng phụ cho quá trình tìm kiếm
Độ phức tạp tính toán của thuật toán này là O(n*m) Thuật toán
được xây dựng đơn giản, nhưng với văn bản lớn thì thuật toán này
tỏ ra không hiệu quả
Thuật toán Knuth-Morris-Pratt
Thuật toán được phát minh năm 1977 bởi hai giáo sư của ĐH
Stanford, Hoa Kỳ (một trong số ít các trường đại học xếp hàng số một về khoa học máy tính trên thế giới, cùng với trường MIT, CMU cũng của Hoa Kỳ và Cambrige của Anh) là Donal Knuth và
Vaughan Ronald Pratt Giáo sư Knuth (giải Turing năm 1971) còn rất nổi tiếng với cuốn sách “Nghệ thuật lập trình” (The Art of
Computer Programming), hiện nay đã có đến tập 6 Ba tập đầu tiên
đã xuất bản ở Việt Nam, là một trong những cuốn sách gối đầu
giường cho bất kì lập trình viên nói riêng và những ai yêu thích lập trình máy tính nói chung trên toàn thế giới Thuật toán này còn có tên là KMP, tức là lấy tên viết của ba người đồng phát minh ra nó, chữ “M” là chỉ giáo sư J.H.Morris, cũng là một giáo sư rất nổi tiếng trong ngành khoa học máy tính Ý tưởng chính của phương pháp này như sau: Trong quá trình tìm kiếm vị trí của mẫu P trong xâu gốc T, nếu tìm thấy một vị trí sai, ta chuyển sang vị trí tìm 5 kiếm tiếp theo và quá trình tìm kiếm này sẽ được tận dụng thông tin từ quá trình tìm kiếm trước để tránh việc phải xét lại các trường hợp không cần thiết Thuật toán Knuth-Morris-Pratt là thuật toán có độ phức tạp tuyến tính đầu tiên được phát hiện ra, nó dựa trên thuật toán Brute force với ý tưởng lợi dụng lại những thông tin của lần thử trước cho lần sau Trong thuật toán Brute force vì chỉ dịch cửa
sổ đi một ký tự nên có đến m-1 ký tự của cửa sổ mới là những ký tự của cửa sổ vừa xét Trong đó có thể có rất nhiều ký tự đã được so sánh giống với mẫu và bây giờ lại nằm trên cửa sổ mới nhưng được
Trang 13được tính toán trước rồi lưu lại kết quả Nhờ đó lần thử sau có thể dịch đi được nhiều hơn một ký tự, và giảm số ký tự phải so sánh lại Xét lần thử tại vị trí j, khi đó cửa sổ đang xét bao gồm các ký tự y[j…j+m-1], giả sử sự khác biệt đầu tiên xảy ra giữa hai ký tự x[i]
và y[j+i-1] Khi đó x[1…i] = y[j…i+j-1] = u và a = x[i] y[i+j] =
b Với trường hợp này, dịch cửa sổ phải thỏa mãn v là phần đầu của xâu x khớp với phần đuôi của xâu u trên văn bản Hơn nữa ký tự c
ở ngay sau v trên mẫu phải khác với ký tự a Trong những đoạn như
v thoả mãn các tính chất trên ta chỉ quan tâm đến đoạn có độ dài lớn nhất Thuật toán Knuth-Morris-Prath sử dụng mảng Next để lưu trữ độ dài lớn nhất của xâu v trong trường hợp xâu u=x[1…i-1] Mảng này có thể tính trước với chi phí về thời gian là O(m) Thuật toán này có chi phí về thời gian là O(m+n) với nhiều nhất là 2n-1 lần số lần so sánh kí tự trong quá trình tìm kiếm
Thuật toán Automat hữu hạn
Trong thuật toán này, quá trình tìm kiếm được đưa về một quá trình biến đổi trạng thái automat Hệ thống automat trong thuật toán DFA
sẽ được xây dựng dựa trên xâu mẫu Mỗi trạng thái (nút) của
automat lúc sẽ đại diện cho số ký tự đang khớp của mẫu với văn bản Các ký tự của văn bản sẽ làm thay đổi các trạng thái Và khi đạt được trạng cuối cùng có nghĩa là đã tìm được một vị trí xuất hiện ở mẫu 6 Thuật toán này có phần giống thuật toán
Knuth-Morris-Pratt trong việc nhảy về trạng thái trước khi gặp một ký tự không khớp, nhưng thuật toán DFA có sự đánh giá chính xác hơn vì việc xác định vị trí nhảy về dựa trên ký tự không khớp của văn bản (trong khi thuật toán KMP lùi về chỉ dựa trên vị trí không khớp) Ví dụ: Ta có xâu mẫu là GCAGAGAG với hệ automat sau : Hình 1.1 :
Sơ đồ automat Với ví dụ ở trên ta có: Nếu đang ở trạng thái 2 gặp
ký tự A trên văn bản sẽ chuyển sang trạng thái 3 Nếu đang ở trạng
Trang 14thái 6 gặp ký tự C trên văn bản sẽ chuyển sang trạng thái 2 Trạng thái 8 là trạng thái cuối cùng, nếu đạt được trạng thái này có nghĩa
là đã tìm thấy một xuất hiện của mẫu trên văn bản Trạng thái 0 là trạng thái mặc định (các liên kết không được biểu thị đều chỉ về trạng thái này), ví dụ ở nút 5 nếu gặp bất kỳ ký tự nào khác G thì đều chuyển về trạng thái 0 Việc xây dựng hệ automat khá đơn giản khi được cài đặt trên ma trận kề Khi đó thuật toán có thời gian xử
lý là O(n); thời gian và bộ nhớ để tạo ra hệ automat là O(m*) (tùy cách cài đặt)
Thuật toán Boyer-Moore
Thuật toán Boyer Moore là thuật toán tìm kiếm chuỗi rất có hiệu quả trong thực tiễn, các dạng khác nhau của thuật toán này thường được cài đặt trong các chương trình soạn thảo văn bản Các đặc
điểm chính của nó: - Thực hiện việc so sánh từ phải sang trái - Giai đoạn tiền xử lý (preprocessing) có độ phức tạp thời gian và không gian là O(m + ) - Giai đoạn tìm kiếm có độ phức tạp O(m*n) - So sánh tối đa 3n kí tự trong trường hợp xấu nhất đối với mẫu không
có chu kỳ (non periodic pattern) - Độ phức tạp O(m/n) trong
trường hợp tốt nhất Trong cài đặt ta dùng mảng bmGs để lưu cách dịch 1, mảng bmBc để lưu phép dịch thứ 2 (ký tự không khớp)
Thuật toán sẽ quét các kí tự của mẫu (pattern) từ phải sang trái, bắt đầu từ phần tử cuối cùng Trong trường hợp mis-match (hoặc là
trường hợp đã tìm được 01 đoạn khớp với mẫu), nó sẽ dùng 2 hàm được tính toán trước để dịch cửa sổ sang bên phải Hai hàm dịch chuyển này được gọi là good-suffix shift ( còn được biết với cái tên phép dịch chuyển khớp) và bad-character shift (hay phép dịch
chuyển xuất hiện) Đối với mẫu x[0…m-1], ta dùng 01 biến số chỉ
số i chạy từ cuối về đầu, đối với chuỗi y[0…n-1], ta dùng 01 biến j
để chốt ở phía đầu Giả sử trong quá trình so sánh, ta gặp 1
mis-match tại vị trí x[i] = a của mẫu và y[i+j] = b trong khi đang thử