Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 74 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
74
Dung lượng
1,48 MB
Nội dung
MỤC LỤC LỜI CẢM ƠN Error! Bookmark not defined LỜI CAM ĐOAN Error! Bookmark not defined MỤC LỤC LỜI NÓI ĐẦU CHƯƠNG TỔNG QUAN VỀ XỬ LÝ ẢNH 1.1 MỘT SỐ ĐỊNH NGHĨA CƠ BẢN 1.1.1 Xử lý ảnh 1.1.2 Ảnh số 1.1.3 Điểm ảnh 1.1.4 Mức xám 1.1.5 Kỹ thuật xử lý ảnh 1.1.6 Hệ thống xử lý ảnh máy tính 1.1.7 Thị giác máy 1.2 THU NHẬN ẢNH VÀ THÔNG TIN VỀ ẢNH 1.2.1 Thu nhận ảnh 1.2.2 Thông tin ảnh 10 1.3 CẤU TRÚC TẬP TIN ẢNH BITMAP 11 1.4 MÔ HÌNH MÀU 13 1.4.1 Các mô hình màu 13 1.4.2 Chuyển đổi mô hình màu 19 1.5 CÁC GIAI ĐOẠN TRONG XỬ LÝ ẢNH 19 1.5.1 Thu nhận ảnh 20 1.5.2 Tiền xử lý 20 1.5.3 Trích chọn dấu hiệu 20 1.5.4 Nhận dạng 20 1.6 CÁC MỨC ĐỘ CỦA HỆ THỐNG XỬ LÝ ẢNH 21 1.7 ỨNG DỤNG CỦA XỬ LÝ ẢNH 21 CHƯƠNG NHẬN DẠNG ẢNH 23 2.1 TỔNG QUAN VỀ NHẬN DẠNG ẢNH 23 2.1.1 Mô hình nhận dạng ảnh 23 2.1.2 Bản chất nhận dạng ảnh 25 2.2 MỘT SỐ CÁCH TIẾP CẬN TRONG NHẬN DẠNG ẢNH 26 2.2.1 Nhận dạng dựa vào phân hoạch không gian 27 2.2.2 Nhận dạng dựa vào cấu trúc 29 2.2.3 Nhận dạng dựa vào kỹ thuật mạng nơ ron 31 CHƯƠNG NHẬN DẠNG KÍ TỰ VÀ BÀI TOÁN CHẤM ĐIỂM THI TRẮC NGHIỆM 37 3.1 LÝ THUYẾT CHUNG VỀ NHẬN DẠNG KÍ TỰ 37 3.1.1 Sơ đồ tổng quát hệ nhận dạng chữ 37 3.1.2 Giai đoạn xử lý sơ 38 3.1.3 Giai đoạn tách chữ 42 3.1.4 Một số thuật toán nhận dạng chữ 42 3.1.5 Phục hồi văn 49 3.2 MỘT SỐ KĨ THUẬT CỤ THỂ TRONG NHẬN DẠNG KÍ TỰ 49 3.2.1 Kỹ thuật nhận dạng dòng văn 49 3.2.2 Kỹ thuật xác định kí tự dòng 50 3.2.3 Nhận dạng 53 3.2.4 Học 54 3.2.5 Phục hồi văn 54 3.3 NHẬN DẠNG CHỮ VIẾT TAY 55 3.3.1 Đặt vấn đề 55 3.3.2 Phân tích toán 55 3.3.3 Một ý tưởng đơn giản cho toán nhận dạng chữ viết tay 56 3.4 ỨNG DỤNG TRONG CÔNG TÁC CHẤM ĐIỂM THI TRẮC NGHIỆM 56 3.4.1 Đặt vấn đề 56 3.4.2 Phân tích toán 57 3.4.3 Cách giải toán 57 3.5 GIỚI THIỆU CHƯƠNG TRÌNH NHẬN DẠNG KÍ TỰ VÀ ỨNG DỤNG TRONG CÔNG TÁC CHẤM ĐIỂM THI TRẮC NGHIỆM 58 3.5.1 Chương trình nhận dạng kí tự 59 3.5.2 Chương trình chấm điểm thi trắc nghiệm 61 3.5.3 Chương trình nhận dạng chữ viết tay 62 3.5.4 Chương trình soạn thảo văn 62 TÀI LIỆU THAM KHẢO 63 PHỤ LỤC 64 Mã nguồn số module 64 Chuẩn hóa trang giấy 64 Xác định dòng 65 Xác định biên kí tự 66 Nhận dạng 67 Học 68 Một số hàm nhận dạng chữ viết tay 69 Một số hàm phuc vụ hàm nhận dạng chữ viết tay 70 Nội dung đĩa CD kèm 73 Tài liệu báo cáo đề tài 73 Chương trình cài đặt 73 Hướng dẫn sử dụng 73 NHẬN XÉT 74 LỜI NÓI ĐẦU Hiện nay, giới nhu cầu chuyển đổi qua lại loại liệu lớn Để đáp ứng nhu cầu có nhiều phần mềm tạo phần giải nhu cầu Tuy nhiên phần mềm chuyển đổi kí tự có tập tin ảnh sang tập tin văn chưa nhiều số lượng hạn chế chất lượng giá Không nằm ngoại lệ, Việt Nam nay, phần mềm nhận dạng kí tự không nhiều khó khăn công tác nhận dạng xử lý nhiễu Việc nhận dạng kí tự tiếng Việt lại phức tạp số lượng kí tự nhiều, tỷ lệ nhiễu cao Không giá thành chưa thực phù hợp với phần đông người dùng Đề tài “Nhận dạng ký tự ứng dụng chấm điểm thi trắc nghiệm” đề tài có ý nghĩa xã hội cao cung cấp cho người ứng dụng miễn phí để giải vấn đề nhận dạng kí tự tiếng Việt Viêc áp dụng thuật toán nhận dạng ứng dụng việc chấm điểm thi trắc nghiệm tự động, với tốc độ cao, độ xác đảm bảo, đặc biệt tạo tính nghiêm minh khách quan CHƯƠNG TỔNG QUAN VỀ XỬ LÝ ẢNH 1.1 MỘT SỐ ĐỊNH NGHĨA CƠ BẢN 1.1.1 Xử lý ảnh Kỹ thuật xử lý ảnh: trình biến đổi hình ảnh thành hình ảnh khác máy tính điện tử cách tự động phụ thuộc vào mục đích người sử dụng Hệ thống xử lý ảnh máy tính: tập hợp kỹ thuật xử lý ảnh phục vụ cho mục đích ứng dụng 1.1.2 Ảnh số Ảnh tạo điểm ảnh, điểm ảnh có thứ, ví dụ như: ảnh chân dung, ảnh X- quang, ảnh thân nhiệt Điểm ảnh đặc trưng cho giá trị hàm n biến Ảnh xem tập hợp điểm ảnh Khi số hoá thường biểu diễn ma trận hai chiều a[i][j] mà phần tử có giá trị nguyên véc tơ cấu trúc màu Ảnh thực tế ảnh liên tục không gian giá trị độ sáng Để xử lý ảnh máy tính cần thiết phải tiến hành số hoá ảnh Trong trình số hoá, người ta biến đổi tín hiệu liên tục sang tín hiệu rời rạc thông qua trình lấy mẫu (rời rạc hoá không gian) lượng tử hoá thành phần giá trị mà nguyên tắc mắt thường không phân biệt hai điểm kề Trong trình người ta sử dụng khái niệm điểm ảnh gọi từ picture element 1.1.3 Điểm ảnh Điểm ảnh hay gọi pixel (picture element, pels, image elements) xem dấu hiệu hay cường độ sáng toạ độ không gian đối tượng 1.1.4 Mức xám Mức xám kết mã hoá tương ứng cường độ sáng điểm ảnh với giá trị số - kết trình lượng hoá Ví dụ: xem lớp ảnh, người điểm ảnh người có đặc trưng Nếu xem đặc trưng giới tính ảnh có mức xám là: nam nữ Nếu xem năm cuối năm sinh ảnh có nhiều 10 mức xám Khái niệm điểm kích thước Ảnh Số bit/pixel Số màu Ảnh đen trắng Ảnh đa cấp xám 256 Ảnh RGB 24 256 Ảnh 32 bit (true color + 32 256 độ sâu) 1.1.5 Kỹ thuật xử lý ảnh Kỹ thuật xử lý ảnh trình biến đổi hình ảnh thành hình ảnh khác máy tính điện tử cách tự động phụ thuộc vào mục đích người sử dụng 1.1.6 Hệ thống xử lý ảnh máy tính Hệ thống xử lý ảnh máy tính tập hợp kỹ thuật xử lý ảnh phục vụ cho mục đích ứng dụng Phân biệt đồ họa máy tính xử lý ảnh: đồ hoạ máy tính thiên tổng hợp hình ảnh, xử lý ảnh thiên phân tích hình ảnh Đồ hoạ máy tính: Đầu vào: ảnh không ảnh Đầu ra: ảnh máy tính Xử lý ảnh: Đầu vào: ảnh Đầu ra: ảnh “tốt hơn” (theo nghĩa người sử dụng) đặc điểm dãy đặc điểm Trong đồ hoạ máy tính, đối tượng xử lý chiều Còn xử lý ảnh không làm việc với liệu chiều hay chiều có nhiều 1.1.7 Thị giác máy Thị giác máy hệ xử lý ảnh hoàn chỉnh bao gồm thu nhận ảnh, tăng cường chất lượng ảnh, nhận dạng 1.2 THU NHẬN ẢNH VÀ THÔNG TIN VỀ ẢNH 1.2.1 Thu nhận ảnh Các thiết bị thu ảnh thông thường gồm Camera cộng với chuyển đổi tương tự số AD (Analog to Digital), scanner, sensor Scanner A4: ADF (Automatic Document Feeder), Duplex A3: Fujitshu, Vííonhape cầm tay A0: Intergraph 250 µp Các thiết bị thu nhận ảnh cho ảnh đen trắng, đa cấp xám, ảnh màu, có độ phân giải từ 100 đến 1600 DPI (dot per inch) Các thiết bị thu nhận ảnh có loại ứng với loại ảnh thông dụng Raster (Scaner, camera) vector (sensor, bàn số hoá, chuyển từ ảnh Raster) Nhìn chung hệ thống thu nhận ảnh thực hai trình: + Cảm biến: biến đổi lượng quang học thành lượng điện + Tổng hợp lượng điện thành lượng ảnh Trong trình số hoá, người ta biến đổi tín hiệu liên tục sang tín hiệu rời rạc thông qua trình lấy mẫu lượng tử hoá thành phần giá trị Cảm nhận màu Phần nhạy cảm với ảnh: võng mạc Retina bao gồm hai loại tế bào: rods (dạng hình que) cones (dạng hình nón) Cone nhạy với màu sắc Các tế bào que cho hình ảnh chung trường chiếu sáng, không nhạy với màu sắc mà nhạy với ánh sáng có mức thấp Biểu diễn màu Ánh sáng màu tổ hợp ánh sáng đơn sắc Mắt người cảm nhận vài chục màu Song lại phân biệt tới hàng ngàn màu: Brightness: sắc màu, gọi độ chói Hue: sắc lượng sắc thái màu Saturation: độ bão hoà Với nguồn sáng đơn sắc, độ hue tương ứng với bước sóng [380nm, 780 nm] Hình 1.1 Mắt người 1.2.2 Thông tin ảnh Chiều rộng: số pixel/ dòng ( số byte/dòng) Chiều cao: số dòng độ phân giải: số pixel/inch thường 300dpi (dots per inch) số bit/ pixel bit↔ đen, trắng (2 màu) bit↔16 màu bit↔256 màu n bít ↔ 2n màu số bit/ pixel ≤ phải có pallete màu > dùng màu trực tiếp header palette infor R G B R G B palette i data Pal: palette Pal[index].R, Pal[index].G, Pal[index].B, 16 bit/pixel 10 Hình 3.5.3 Giao diện chức tạo liệu Nếu người dùng có sẵn mẫu liệu người dùng nạp lại phần liệu thông qua menu nạp liệu Kết Sau trình thử nghiệm với mẫu chữ arial cỡ chữ 12 Kết thu khả quan, hầu hết kí tự nhận dạng xác chữ hoa lẫn chữ thường, chữ số dấu câu Việc quét dòng kí tự thực Tồn Chương trình chưa xử lý với nhiều loại kí tự khác tập tin văn Ứng với loại văn phải đòi hỏi có riêng liệu kèm Vấn đề xử lý nhiễu chưa làm triệt để Hướng phát triển tương lai Phát triển khả nhận dạng nhiều loại kí tự tệp văn Xử lí nhiễu cho văn Giảm thiểu khâu tạo liệu chương trình, thay vào chương trình có chế tự cập nhật sở dự liệu gặp luồng liệu 60 3.5.2 Chương trình chấm điểm thi trắc nghiệm Hình 3.5.4 Chương trình chấm điểm thi trắc nghiệm Giới thiệu Được xây dựng chương trình nhận dạng kí chương trình chấm điểm thi trắc nghiệm mang tính chất trội hạn chế chương trình trước Hướng phát triển tương lai Về mặt kĩ thuật chương trình cần tích hợp thêm khả nhận dạng nhiều loại ô chọn khác Bên cạnh việc xây dựng phần sở liệu đáp án để có chương trình chấm điểm thi thực 61 3.5.3 Chương trình nhận dạng chữ viết tay Hình 3.5.5 Chương nhận dạng chữ viết tay 3.5.4 Chương trình soạn thảo văn Hình 3.5.6 Chương trình soạn thảo văn 62 TÀI LIỆU THAM KHẢO Cximage ADAPTIVE IMAGE PROCESSING A Computational Intelligence Perspective Bayesian Approach to Image Interpretation Fundamentals of image processing Intelligent image processing – Wiley Pattern Recognition and Image Preprocessing (2ed, 2002) 63 PHỤ LỤC Mã nguồn số module Chuẩn hóa trang giấy Friend Function CorrectBound(ByVal BaseImage As Bitmap, ByVal R As Rectangle) R = CorrectLeftBound(BaseImage, R) R = CorrectRightBound(BaseImage, R) R = CorrectTopBound(BaseImage, R) R = CorrectBottomBound(BaseImage, R) Return R End Function ‘ -Friend Function CorrectLeftBound(ByVal BaseImage As Bitmap, ByVal R As Rectangle) As Rectangle For x As Int32 = R.X To R.Right Dim ok As Boolean = False For y As Int32 = R.Y To R.Bottom If ImageTools.IsBlackDot(BaseImage, x, y) Then R.Width = R.Right - x '+ R.X = x ok = True Exit For End If Next If ok Then Exit For Next Return R End Function ‘ -Friend Function CorrectRightBound(ByVal BaseImage As Bitmap, ByVal R As Rectangle) As Rectangle For x As Int32 = R.Right To R.Left Step -1 Dim ok As Boolean = False For y As Int32 = R.Top To R.Bottom If IsBlackDot(BaseImage, x, y) Then R.Width = x - R.X '+ ok = True Exit For End If Next If ok Then Exit For Next Return R End Function ‘ -Friend Function CorrectTopBound(ByVal BaseImage As Bitmap, ByVal R As Rectangle) As Rectangle For y As Int32 = R.Y To R.Bottom For x As Int32 = R.X To R.Right If ImageTools.IsBlackDot(BaseImage, x, y) Then R.Height = R.Bottom - y '+ R.Y = y 64 Return R End If Next Next Return R End Function ‘ -Friend Function CorrectBottomBound(ByVal BaseImage As Bitmap, ByVal R As Rectangle) As Rectangle For y As Int32 = R.Bottom To R.Y Step -1 Dim ok As Boolean = False For x As Int32 = R.Right To R.X Step -1 If IsBlackDot(BaseImage, x, y) Then R.Height = y - R.Y '+ ok = True Exit For End If Next If ok Then Exit For Next Return R End Function ‘ Xác định dòng Friend Function IdentifyLines(ByVal Image As Bitmap) As Rectangle() Dim ImageRectangle As Rectangle ImageRectangle.Size = Image.Size ImageRectangle = CorrectBound(Image, ImageRectangle) Dim Line() As Rectangle Dim intLineNumber As Int16 = Dim bolInLine As Boolean = False 'Xác định phần dòng ' MessageBox.Show(Image.Size.ToString) For y As Int32 = ImageRectangle.Y To ImageRectangle.Bottom For x As Int32 = ImageRectangle.X To ImageRectangle.Right If ImageTools.IsBlackDot(Image, x, y) Then If bolInLine = False Then bolInLine = True ReDim Preserve Line(intLineNumber) Line(intLineNumber) = New Rectangle Line(intLineNumber).Y = y Line(intLineNumber).X = ImageRectangle.X Line(intLineNumber).Width = ImageRectangle.Width intLineNumber += End If Exit For End If 'Quét hết dòng mà không gặp điểm đen If x = ImageRectangle.Right And bolInLine Then Line(intLineNumber - 1).Height = y – Line(intLineNumber - 1).Y '- bolInLine = False If Line(intLineNumber - 1).Height < Then If Line(intLineNumber - 1).Height = Then 65 'dấu chấm-> lấy vào dòng Try Line(intLineNumber - 2).Height = y – Line(intLineNumber - 2).Y '- Catch ex As Exception 'Dim t As New test(Image, Line) 't.ShowDialog() End Try 'Không tăng thêm số dòng 'Mà sử dụng lại phần tử mảng chứa dấu ' chấm(.) để lưu 'dòng intLineNumber -= Else ' dấu mũ-> lấy vào dòng dưới(không sinh ' dòng mới) 'là dấu sắc(') hỏi v.v 'thì đánh dấu lại dòng 'tại '(Chứ kết thúc hết dòng) bolInLine = True End If End If End If Next Next 'last line Line(Line.Length - 1).Height = ImageRectangle.Bottom – Line(Line.Length - 1).Top 'Xác định phần trái phải dòng For i As Int16 = To Line.Length - Line(i) = CorrectLeftBound(Image, Line(i)) Line(i) = CorrectRightBound(Image, Line(i)) 'MessageBox.Show(Line(i).ToString) Next Return Line End Function ‘ Xác định biên kí tự Friend Function IdentifyCharacterBound(ByVal BaseImage As Bitmap, ByVal Line As Rectangle) As Rectangle() Dim intChNumber As Int32 = Dim ch() As Rectangle Dim bolInChar As Boolean = False For x As Int32 = Line.Left To Line.Right For y As Int32 = Line.Top To Line.Bottom If bolInChar = False And IsBlackDot(BaseImage, x, y) Then ReDim Preserve ch(intChNumber) ch(intChNumber) = New Rectangle With ch(intChNumber) X = x '- Y = Line.Top Height = Line.Height '.Width = Line.Width End With 66 bolInChar = True intChNumber += Exit For ElseIf bolInChar And ImageTools.IsBlackDot(BaseImage, x, y) And x Line.Right Then Exit For ElseIf bolInChar And y = Line.Bottom Then ch(intChNumber - 1).Width = x - ch(intChNumber – 1).X ch(intChNumber - 1) = CorrectBottomBound(BaseImage, ch(intChNumber - 1), 9) ch(intChNumber - 1) = CorrectTopBound(BaseImage, ch(intChNumber - 1), 8) bolInChar = False End If Next y Next x 'Chu cai cuoi cung Try Dim intIndexOfLastChar As Int16 = ch.Length - ch(intIndexOfLastChar).Width = Line.Right – ch(intIndexOfLastChar).Left + ' ch(intIndexOfLastChar) = CorrectBottomBound(BaseImage, ch(intIndexOfLastChar), 9) ch(intIndexOfLastChar) = CorrectTopBound(BaseImage, ch(intIndexOfLastChar), 8) ' Catch ex As Exception 'Dim t As New test(BaseImage, ch) 't.ShowDialog() End Try Return ch End Function ‘ Nhận dạng Public Sub NhanDangKiTu() Dim stResult As String = String.Empty Dim line() As Rectangle = ImageTools.IdentifyLines(pb.Image) Dim data() As String = ReadData(stCharacterDataBaseName) Dim kt As String = "" Dim width As Int16 = Integer.Parse(data(intOffsetData - 2)) Dim height As Int16 = Integer.Parse(data(intOffsetData - 1)) For j As Int16 = To line.Length - Dim c() As Rectangle = ImageTools.IdentifyCharacterBound(pb.Image, line(j)) For i As Int32 = To c.Length - Dim s As String = String.Empty Dim st As String = RectangleToBinaryString(pb.Image, c(i), width, height) Dim max As Int32 = For n As Int32 = intOffsetData + To data.Length – Step Dim d As Int32 = For k As Int32 = To data(n).Length - If data(n)(k) = st(k) Then d += 67 End If Next If d > max Then max = d s = data(n - 1) If max = width * height Then Exit For End If End If Next If i > Then If c(i).X - c(i - 1).X - c(i - 1).Width > Then stResult &= " " & s Else : stResult &= s End If Else : stResult &= s End If Next stResult &= Chr(10) Next Me.txtKetQua.Text = stResult End Sub ‘ Học Private Sub CreateCharacterDataBase() Dim st As String = String.Empty Dim line() As Rectangle = ImageTools.IdentifyLines(pb.Image) Dim Ch()() As Rectangle For i As Int16 = To line.Length - ReDim Preserve Ch(i) Ch(i) = IdentifyCharacterBound(pb.Image, line(i)) Next Dim dodai As Int32 = For i As Int32 = To Ch.Length - dodai += Ch(i).Length Next 'Correct Input String txtInputText.Text = txtInputText.Text.Replace(" ", " ") If txtInputText.Text(txtInputText.Text.Length - 1) " " Then txtInputText.Text &= " " End If If txtInputText.Text(0) = " " Then txtInputText.Text = txtInputText.Text.Remove(0, 1) End If For i As Int32 = To txtInputText.Text.Length - If txtInputText.Text(i) = " " Then dodai -= End If Next If dodai Then MessageBox.Show(dodai.ToString & " Nhập lại xâu vào " & txtInputText.Text.Length.ToString & Chr(10) & "Xâu vào thiếu : " & dodai.ToString, "Có lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error) 68 Else Dim s As IO.StreamWriter = New IO.StreamWriter(dlgSave.FileName) s.WriteLine("Created by: Nguyễn Hồng Giang") s.WriteLine(cbbWidth.Value.ToString) s.WriteLine(cbbHeight.Value.ToString) Dim stInput As String = txtInputText.Text Dim dem As Int32 = For j As Int32 = To Ch.Length - For k As Int32 = To Ch(j).Length - Dim temp As String = stInput.Substring(0, stInput.IndexOf(" ")) stInput=stInput.Substring(stInput.IndexOf(" ")+ 1) s.WriteLine(temp) s.WriteLine(RectangleToBinaryString(pb.Image, Ch(j)(k), cbbWidth.Value, cbbHeight.Value)) dem += Next Next s.Close() MessageBox.Show("Create Characters DataBase Succeefull") OCR.stCharacterDataBaseName = dlgSave.FileName End If End Sub ‘ Một số hàm nhận dạng chữ viết tay Public Function OutPutString() As String Try 'Load database Dim FileHolder As FileInfo = New FileInfo(Me.stDataBaseName) Dim ReadFile As StreamReader = FileHolder.OpenText() Dim stResult, stNumberAsciiCode, stBitmapMap As String Dim stCharacter As String Dim i, intGiongNhau As Integer Dim DoChinhXac As New DoChinhXacKiTu DoChinhXac.CharacterValue = intCharacterWidthValue '=7 If Len(stInPut) > Then stCharacter = stInPut Else stCharacter = ImageToBinaryString() End If While = stNumberAsciiCode = ReadFile.ReadLine stBitmapMap = ReadFile.ReadLine If Len(stNumberAsciiCode) < Then Exit While intGiongNhau = For i = To intChracterWidth * intCharacterHeight If Mid(stCharacter, i, 1) = Mid(stBitmapMap, i, 1) Then intGiongNhau = intGiongNhau + End If Next i DoChinhXac.XetKiTuDung(stNumberAsciiCode, intGiongNhau) End While 69 arrDaySoChinhXac = DoChinhXac.DaySoChinhXac stResult = DoChinhXac.KiTuDungNhat ReadFile.Close() Dim gectangle As Rectangle gectangle = CorrectImageBound(Image) If stResult = "ư" And gectangle.Height > 55 Then stResult = "l" If stResult = "l" And gectangle.Height < 40 Then stResult = "ư" If Me.bolTestModul = True Then Return stResult Exit Function End If 'Nếu không tồn chấm điểm -> trả kí tự "-" If gectangle.Height * gectangle.Width < 60 Then stResult = "-" If gectangle.Width < Then stResult = "-" Dim iBlackDot As Integer = For i = To Len(stCharacter) If Mid(stCharacter, i, 1) = "0" Then iBlackDot += Next i If iBlackDot = (intChracterWidth * Me.intCharacterHeight) Then stResult = "-" If ((Me.intChracterWidth * Me.intCharacterHeight) – iBlackDot) < Me.intChracterWidth * Me.intCharacterHeight / Then stResult = "-" If iBlackDot > (Me.intChracterWidth * Me.intCharacterHeight * / 8) Then stResult = "-" '/Nếu không tồn chấm điểm Return stResult Catch ex As Exception MsgBox("classRecognition OutPutString()", ex.Message) Return String.Empty End Try End Function Một số hàm phuc vụ hàm nhận dạng chữ viết tay Module HWRTools Function PaintImage(ByVal Image As Bitmap, ByVal color As Color) As Bitmap Try Dim rectangle As New Rectangle rectangle.X = rectangle.Y = rectangle.Width = Image.Width rectangle.Height = Image.Height Dim graphic As Graphics = Graphics.FromImage(Image) Dim pen As New System.Drawing.SolidBrush(color) 70 graphic.FillRectangle(pen, rectangle) Return Image Catch ex As Exception Return Image End Try End Function Function ChangeImageSize(ByVal ImageSource As Bitmap, ByVal rectangle As Rectangle) As Bitmap Try If rectangle.Width < Then Dim bitmap As New Bitmap(20, 20) bitmap = HWRTools.PaintImage(bitmap, Drawing.Color.White) Return bitmap End If Dim Image As New Bitmap(rectangle.Width + 4, rectangle.Height + 4) Image = HWRTools.PaintImage(Image, Drawing.Color.White) For x As Int32 = To rectangle.Width + For y As Int32 = To rectangle.Height + If IsBlackDot(ImageSource, x + rectangle.X - 2, y + rectangle.Y - 2) Then Image.SetPixel(x, y, Color.Black) End If Next y Next x Return Image Catch ex As Exception MsgBox(ex.Message) Return ImageSource End Try End Function Function CorrectImageBound(ByVal Image As Bitmap) As Rectangle Try Dim x, y As Integer Dim x_min, x_max, y_min, y_max, intWidth, intHeight As Integer Dim RectangleResult As Rectangle x_min = 19000 y_min = 19000 x_max = y_max = For x = To Image.Width - For y = To Image.Height - If IsBlackDot(Image, x, y) = True Then If x < x_min Then x_min = x If y < y_min Then y_min = y If x > x_max Then x_max = x If y > y_max Then y_max = y 71 End If Next y Next x intWidth = x_max - x_min + intHeight = y_max - y_min + If intWidth = -18999 Then intWidth = Image.Width If intHeight = -18999 Then intHeight = Image.Height If x_min = 19000 Then x_min = If y_min = 19000 Then y_min = RectangleResult.X = x_min RectangleResult.Y = y_min RectangleResult.Width = intWidth RectangleResult.Height = intHeight Return RectangleResult Catch ex As Exception MsgBox(ex.Message) End Try End Function 'Độ Chính xác kí tự Public Class DoChinhXacKiTu Dim Dim Dim Dim Dim intDoChinhXacToiThieu As Integer = intViTriThoaMan As Integer i As Integer intChinhXac(20, 1) As Integer intCharacterValue As Integer '=7 Số mẫu so sánh Public WriteOnly Property CharacterValue() As Integer Set(ByVal Value As Integer) intCharacterValue = Value End Set End Property 'Xét kí tự Public Sub XetKiTuDung(ByVal stAsciiCode As String, ByVal intSimilarity As Integer) Try If intSimilarity > intDoChinhXacToiThieu Then KiTuDung(stAsciiCode, intSimilarity) Catch ex As Exception MsgBox("XetKiTuDung", ex.Message) End Try End Sub Private Sub KiTuDung(ByVal stAsciiCode As String, ByVal intSimilarity As Integer) Try intViTriThoaMan = For i = To intCharacterValue - If intSimilarity < intChinhXac(i, 1) Then intViTriThoaMan = i + Next i If intViTriThoaMan intCharacterValue - Then For i = intCharacterValue- To intViTriThoaMan + Step -1 intChinhXac(i, 0) = intChinhXac(i - 1, 0) intChinhXac(i, 1) = intChinhXac(i - 1, 1) 72 Next i End If intChinhXac(intViTriThoaMan, 0) = CInt(stAsciiCode) intChinhXac(intViTriThoaMan, 1) = intSimilarity intDoChinhXacToiThieu = intChinhXac(intCharacterValue - 1, 1) Catch ex As Exception MsgBox("KiTuDung ", ex.Message) End Try End Sub Public Function DaySoChinhXac() As Array Try Return intChinhXac Catch ex As Exception Return Nothing MsgBox("DaySoChinhXac() ", ex.Message) End Try End Function Public Function KiTuDungNhat() As String Dim intValue(255) As Integer Dim intClass, intVictor, intVictorValue As Integer For i = To intCharacterValue - intClass = intChinhXac(i, 0) intValue(intClass) += CInt(intChinhXac(i, 1)) '1 If intValue(intClass) > intVictorValue Then intVictorValue = intValue(intClass) intVictor = intClass End If Next i Return Chr(intVictor) End Function End Class End Module Nội dung đĩa CD kèm Tài liệu báo cáo đề tài Chương trình cài đặt Hướng dẫn sử dụng 73 NHẬN XÉT 74