Tỏch mẫu và chuẩn hoỏ

Một phần của tài liệu Logic mờ ứng dụng trong bài toán nhận dạng chư viết tay (Trang 52 - 82)

Sau khi tiến hành nhị phõn hoỏ ảnh mẫu, ta lưu ảnh lại và sau đú tiến hành tỏch cỏc ký tự đặc biệt ra khỏi văn bản và thực hiện chuẩn hoỏ chỳng. Kớch thước cỏc mẫu được chuẩn hoỏ theo kớch thước 32x16 pixels. Việc chuẩn hoỏ kớch thước mẫu được thực hiện theo kỹ thuật sau:

Giả sử sau khi tỏch mẫu cỏc ký tự cú kớch thước WxH, ta tớnh tỉ lệ phúng ảnh là : S= min(32/W , 16/H).

Tất cả cỏc cụng việc từ khõu thu nhận ảnh đến khõu chuẩn hoỏ mẫu cú thể thực hiện bằng cỏch xõy dựng một chương trỡnh phần mềm tự động thực hiện kết hợp giữa cơ khớ và điện tử. Tuy nhiờn, cụng việc này tương đối phức tạp hơn nữa nhiệm vụ chớnh của đồ ỏn này là nghiờn cứu về logic mờ cho nờn trong phạm vi của đồ ỏn này ta khụng tiến hành xõy dựng một phần mềm riờng mà sử dụng cỏc phần mềm xử lý ảnh cú sẵn kết hợp với cỏc yếu tố thủ cụng để thực hiện cỏc nhiệm vụ này. Ta chỉ tập chung vào nhiệm vụ chớnh là xõy dựng một hệ suy luận mờ nhận dạng, phõn biệt chữ viết tay mà thụi.

3.2.3 Xõy dựng thƣ viện mẫu cho cỏc ký tự

Sau khi thu được cỏc mẫu chuẩn 32x16 ta tiến hành xõy dựng một thư viện mẫu chuẩn. Thư viện mẫu này sẽ được dựng cho cụng tỏc luyện mạng và kiểm tra mạng sau này. Cụng việc xõy dựng thư viện mẫu chuẩn được xõy dựng bằng một phần mềm nhỏ. Phần mềm này làm nhiệm vụ đọc thụng tin của cỏc mẫu và ghi vào một file nào đú. File này sẽ được đọc ra khi ta dựng thư viện mẫu trong cụng tỏc huấn luyện mạng sau này.

3.2.4 Hệ suy luận học cho bài toỏn nhận dạng chữ viết tay

Để nhận dạng cỏc chữ viết, ta tiến hành xõy dựng cỏc luật mờ cho cỏc mẫu, quy tắc xỏc định luật mờ à cho mỗi ký tự:

Giả sử ta cú 3 mẫu ký tự A là cỏc mẫu ký tự cần học cỏch xõy dựng hàm à như sau: Chia ảnh ký tự thành cỏc ụ (vớ dụ 36 ụ) hàm à tại mỗi ụ sẽ được xõy dựng bằng số lần xuất hiện trờn tổng số mẫu:

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 47

Hỡnh 3.2 : Ba mẫu chữ cần đọc

Bƣớc 1: tớnh(A,à)= (a1,0), (a2,0), (a3,1), (a4,1), (a5,0), (a6,0), (a7,0), (a8,1/3), (a9,1/3) .… (a36,1/3)}

Bƣớc 2: Làm rừ theo cụng thức sau:

Ta cú thể làm rừ nhiều lần để đạt được kết quả như mong muốn.

Bƣớc 3: Căn cứ vào ký tự so sỏnh B (ký tự cần nhận dạng) ta xỏc định (B,à) giả sử ký tự so sỏnh cú hỡnh như dưới đõy:

Hỡnh 3.3 : Ký tự cần nhận dạng (B,à)={(b1,0), (b2,0), (b3,1), (b4,0), (b5,0), (b6,0), (b7,0), (b8,0), (b9,1)…(b36,1)} Bƣớc 4: Tớnh Bƣớc 5: Tớnh hệ số K B A 1 2 1 2 ' 0 0.5 1 5 . 0 B A B A B A .

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 48

Bước 6: Kết luận nếu δ < φ thỡ kết luận là đỳng và ngược lại. Thụng thường φ chọn là 0.5

Trờn đõy là cỏc bước tiến hành nhận dạng cho một đối tượng, với trường hợp nhiều đối tượng ta làm tương tự cho từng đối tượng sau đú thờm một bước là chọn ra đối tượng cú φ nhỏ nhất hay núi cỏch khỏc là thay bước 6 ở trờn bằng bước tỡm min (φ(Dti)). Đối tượng cú φ nhỏ nhấy là đối tượng giống nhất.

3.3. Xõy dựng phần mềm

Dựa vào cỏc bước tiến hành trờn, ta xõy dựng một phần mềm đơn giản bằng VisualBasic với giao diện như sau:

Hỡnh 3.4: Giao diện chƣơng trỡnh nhận dạng

Để kiểm tra hoạt động của chương trỡnh ta vẽ chữ vào khung với nột vẽ tuỳ chọn, ảnh phúng sẽ hiện ở bờn cạnh như hỡnh 4.5:

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 49

Hỡnh 3.5: Vẽ chữ cần nhận dạng.

Nếu chữ này là mẫu dữ liệu cần học thỡ ta click vào nỳt học nhận dạng (Ctrl + H), dữ liệu sẽ được lưu vào file data.txt. Cũn nếu là dữ liệu kiểm tra thỡ ta click vào nỳt nhận dạng (Crtl + R). Chương trỡnh sẽ cho ra kết quả nhận dạng như hỡnh 4.6 dưới đõy:

Hỡnh 3.6: Kết quả nhận dạng sau khi vẽ chữ.

Ta cú thể xem trong dữ liệu cỏc mẫu đó học (hoặc xoỏ cỏc mẫu đó học) bằng cỏch chọn mẫu chữ rồi bấm vào xem mẫu trong dữ liệu (hoặc xoỏ mẫu). Chương

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 50

trỡnh cũng cho phộp nạp dữ liệu từ file ảnh ngoài bằng cỏch bấm vào Open (hoặc Ctrl + O):

Rồi chọn file ảnh như hỡnh 3.7:

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 51

`

Hỡnh 3.8: Giao diện sau khi mở file ảnh ký tự.

Ta tiến hành nhận dạng, chương trỡnh cho ra kết quả như hỡnh 4.9:

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 52

Chương trỡnh cũng cho phộp ghi dữ liệu ra file ảnh:

Hỡnh 3.10: Ghi ký tự ra file ảnh

Trong chương trỡnh trờn đó dựng một số thủ tục: Thủ tục để hiện cỏc điểm ảnh của ký tự:

-Private Function celldrawed(ByVal p As PictureBox, ByVal i As Long, ByVal j As Long) As Boolean

-Sub DrawGrid(ByVal p As PictureBox)

-Sub trimPic(ByVal p As PictureBox, ByVal Border As Byte) Thủ tục vẽ cỏc ký tự:

-Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Thủ tục để lưu trữ dữ liệu: -Private Sub CmdHoc_Click()

File lưu trữ dữ liệu ở dạng File cú cấu trỳc như sau : Type Record = Kytuas string *1

TanSuat (0 To R_grid - 1, 0 To H_grid - 1) As Long Tong as long

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 53

KẾT LUẬN

Nội dung chớnh của luận văn là đề cập đến lý thuyết về logic mờ, lý thuyết nhận dạng và đặc biệt là nghiờn cứu mụ hỡnh của bài toỏn nhận dạnh chữ viết tay, một bài toỏn đang được cỏc nhà nghiờn cứu quan tõm. Cỏc kết quả chớnh của luận văn gồm cú:

1. Nghiờn cứu cỏc kiến thức cơ bản về logic mờ và nhận dạng mờ. Đõy là kiến thức quan trọng để nghiờn cứu về bài toỏn nhận dạng chữ viết tay.

2. Tỡm hiểu một số kỹ thuật quan trọng trong lý thuyết nhận dạng ảnh, đõy là những kỹ thuật cần thiết cho quỏ trỡnh nhận dạng núi chung và nhận dạng chữ viết tay núi riờng.

3. Tỡm hiểu, phõn tớch bài toỏn nhận dạng chữ viết tay, một bài toỏn quan trọng trong lý thuyết nhận dạng.

4. Xõy dựng quy trỡnh chi tiết trong quỏ trỡnh giải quyết bài toỏn nhận dạng chữ viết tay.

5. Xõy dựng phần mềm nhận dạng chữ viết tay trờn nền Visual Basic cho phộp nhận dạng với độ chớnh xỏc cao, thuận tiện cho người dựng.

Hướng phỏt triển tiếp theo của luận văn là tiếp tục bổ sung thư viện chương trỡnh mẫu, nõng cao độ chớnh xỏc trong kết quả nhận dạng và thay đổi giao diện của phần mềm tiện lợi cho người dựng hơn. Phỏt triển kết quả nghiờn cứu để xõy dựng cỏc phần mềm chữ viết cho cỏc ngụn ngữ của cỏc dõn tộc Việt Nam.

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 54

TÀI LIỆU THAM KHẢO

1. TIẾNG VIỆT

[1] Lương Manh Bỏ, Nguyễn Thanh Thuỷ , 1999, Nhập mụn xử lý ảnh số - NXB Khoa học và Kỹ thuật

[2] Bựi Cụng Cường, Nguyễn Doón Phước, 2001, Hệ mờ mạng nơron & ứng dụng - NXB Khoa học và Kỹ thuật.

[3] Phạn Xuõn Minh, Nguyễn Doón Phước, 1997, Lý thuyết điều khiển mờ - NXB Khoa học và Kỹ thuật.

[4] Nguyễn Hoàng Phương, Bựi Cụng Cường, Phạn Xuõn Minh, Nguyễn Doón Phước, Chu Văn Hỷ, 1998, Hệ mờ và ứng dụng - NXB Khoa học và Kỹ thuật. 2. TIẾNG ANH

[5] Christopher Edwards and Sarah K. Spurgeon, Taylor and Fransis, Sliding Moded Control Theory and App;ication, 1998.

[6] Hung T. Nguyen, Michio Sugano, Fuzzy Systens, modeling and Control, Kluwer academic publishers, 1998.

[7] L.X. Wang, A Couse in Fuzzy Sytem and Control, Prentice –Hall International, 1997. [8] Tom M. mitchell, Machine liarning, 1997.

[9] Tinku Acharya, Ajoy K.Ray, Image Processing Principles and App;ication, Jonh Wiley & Son, Honoken, 2005.

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 55

(Mó chương trỡnh “Nhận dạng ký tự”) Module1(code):

Option Explicit

Public Const COLORBGR = vbWhite Public Const R_grid = 16

Public Const H_grid = 32

Public Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long

Public Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long

Public Type Record Kytu As String * 1

Tansuat(0 To R_grid - 1, 0 To H_grid - 1) As Long Tong As Long

End Type

ublic Type ToaDo X As Integer Y As Integer End Type

Public FnameData As String Public fmain As FrmMain

Sub main()

Set fmain = New FrmMain If Right(App.Path, 1) = "\" Then

FnameData = App.Path & "Data.txt"

App.HelpFile = App.Path & "NhanDangKyTu.chm" Else

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 56

App.HelpFile = App.Path & "\NhanDangKyTu.chm" End If fmain.Show End Sub --- FrmMain(code): Option Explicit

Dim Drawing As Boolean Dim ColorDraw As Long

Dim MyRecord As Record, RecordNumber Dim NewKT As Record

Dim oKytu As String

Sub DrawGrid(ByVal p As PictureBox) On Error GoTo err_

Dim i As Integer

Dim Cao, Rong As Integer

Dim BuocDoc, BuocNgang As Single BuocDoc = p.Width / R_grid BuocNgang = p.Height / H_grid Cao = p.Height

Rong = p.Width p.DrawWidth = 1 For i = 0 To H_grid

p.Line (0, CInt(i * BuocNgang))-(Rong, CInt(i * BuocNgang)), vb3DFace Next

For i = 1 To R_grid

p.Line (CInt(i * BuocDoc), 0)-(CInt(i * BuocDoc), Cao), vb3DFace Next

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 57 Exit Sub err_: MsgBox Err.Description, 0 End Sub

Private Sub CmdExit_Click() Unload Me

End End Sub

Private Sub CmdHoc_Click() ' hoc nhan dang Dim i, j As Integer

Dim KtuInFile As Boolean Dim s As String

Dim maxsize

On Error GoTo err_

If Len(Text1.Text) <= 0 Then

MsgBox "chua nhap ky tu can hoc la gi ?", 0, "Thong bao" Exit Sub

End If

If Len(Text1.Text) > 1 Then

MsgBox "chi duoc phep nhap 1 ky tu can hoc", 0, "Thong bao" Exit Sub

End If

KtuInFile = False trimPic Picture1, 1

Open FnameData For Random As #1 Len = Len(MyRecord) maxsize = LOF(1) \ Len(MyRecord)

For RecordNumber = maxsize To 1 Step -1 Seek #1, RecordNumber

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 58

Get #1, , MyRecord s = MyRecord.Kytu

If s = Text1.Text Then 'Neu Ky tu da co trong file thi cap nhat KtuInFile = True

For i = 0 To R_grid - 1 For j = 0 To H_grid - 1

MyRecord.Tansuat(i, j) = MyRecord.Tansuat(i, j) + NewKT.Tansuat(i, j)

Next Next

MyRecord.Tong = MyRecord.Tong + 1 Put #1, RecordNumber, MyRecord End If

Unlock #1, RecordNumber If KtuInFile Then Exit For Next RecordNumber

If Not KtuInFile Then 'Neu Ktu chua co trong file thi Append vao File Seek #1, maxsize + 1 s = Text1.Text MyRecord.Kytu = s For i = 0 To R_grid - 1 For j = 0 To H_grid - 1 MyRecord.Tansuat(i, j) = NewKT.Tansuat(i, j) Next Next MyRecord.Tong = 1

Put #1, maxsize + 1, MyRecord List1.AddItem Space(5) & s

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 59 End If Close #1 Exit Sub err_: MsgBox Err.Description, 0 End Sub

Private Function celldrawed(ByVal p As PictureBox, ByVal i As Long, ByVal j As Long) As Boolean

Dim X, Y, X1, Y1, X2, Y2, DrawPixel As Integer Dim BuocDoc, BuocNgang As Single

On Error Resume Next

BuocDoc = p.Width / R_grid BuocNgang = p.Height / H_grid DrawPixel = 0 X1 = CInt(i * BuocDoc) X2 = CInt((i + 1) * BuocDoc) Y1 = CInt(j * BuocNgang) Y2 = CInt((j + 1) * BuocNgang) For X = X1 To X2 For Y = Y1 To Y2

If GetPixel(p.hdc, X, Y) = ColorDraw Then DrawPixel = DrawPixel + 1 End If Next Next If DrawPixel > 1 Then celldrawed = True Else celldrawed = False

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 60

End If End Function

Private Sub CmdNhanDang_Click() Dim i As Integer

Dim s As String

Dim maxsize As Integer On Error GoTo err_

Check1.Tag = Check1.Value Check1.Value = 0

trimPic Picture1, 1

Check1.Value = Check1.Tag Me.Text1.Text = ""

Open FnameData For Random As #1 Len = Len(MyRecord) maxsize = LOF(1) \ Len(MyRecord)

Dim min As Single min = 100

s = ""

For RecordNumber = maxsize To 1 Step -1 Seek #1, RecordNumber

Get #1, , MyRecord If Beta < min Then min = Beta s = MyRecord.Kytu End If Next RecordNmber Close #1 If Len(s) > 0 Then Me.Label10.Caption = s

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 61

Else

MsgBox "khong tim duoc ky tu nao trong file du lieu, hay dinh nghia tu nay", vbCritical, "Thong bao"

Exit Sub ' End If Set_status 4 Exit Sub err_: MsgBox Err.Description, 0 End Sub

Private Sub CmdRemoveData_Click() ' xoa mau du lieu Dim i, t, maxsize As Integer

Dim Ftmp As String Dim dem As Long dem = 0

If MsgBox("Ban muon xoa cac ky tu duoc danh dau ? ", vbYesNo, "Xac nhan") = vbYes Then

If Right(App.Path, 1) = "\" Then Ftmp = App.Path & "data.tmp" Else

Ftmp = App.Path & "\data.tmp" End If

i = List1.ListCount - 1

Open FnameData For Random As #1 Len = Len(MyRecord) Do While (i >= 0)

If List1.Selected(i) = True Then RecordNumber = List1.ItemData(i) Seek #1, RecordNumber

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 62

Get #1, , MyRecord MyRecord.Kytu = ""

Put #1, RecordNumber, MyRecord Unlock #1, RecordNumber dem = dem + 1 End If i = i - 1 Loop Close #1 Me.List1.Clear

Open Ftmp For Random As #1 Len = Len(MyRecord) Open FnameData For Random As #2 Len = Len(MyRecord) i = 1

maxsize = LOF(2) \ Len(MyRecord) For RecordNumber = 1 To maxsize Step 1 Seek #2, RecordNumber Get #2, , MyRecord If Len(Trim(MyRecord.Kytu)) > 0 Then Put #1, i, MyRecord i = i + 1 End If Next RecordNumber Close #2 Close #1 Kill FnameData FileCopy Ftmp, FnameData Kill Ftmp LoadKThoc End If

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 63

End Sub

Private Sub ve(ByVal p As PictureBox, ByVal i As Integer, ByVal j As Integer) Dim X, Y As Long

Dim Le As Integer

Dim BuocDoc, BuocNgang As Single On Error GoTo err1

Le = 2

BuocDoc = (p.Width - Le) / R_grid BuocNgang = (p.Height - Le) / H_grid

p.Line (CInt(i * BuocDoc), CInt(j * BuocNgang))-(CInt((i + 1) * BuocDoc), CInt((j + 1) * BuocNgang)), vbRed, B

p.Refresh Exit Sub err1:

MsgBox Err.Description, 0 End Sub

Function Beta() As Single Dim i, j As Integer

Dim tam As Single

Dim tmp, Tong, M_a As Single Dim Totalcell As Long

On Error GoTo err_

Totalcell = (R_grid) * (H_grid) Tong = 0

For i = 0 To R_grid - 1 For j = 0 To H_grid - 1

tam = MyRecord.Tansuat(i, j) / MyRecord.Tong If tam >= 0 And tam <= 0.5 Then

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 64 Else tam = 1 - 2 * (1 - tam) ^ 2 End If M_a = tam tmp = M_aDeltab(M_a, NewKT.Tansuat(i, j)) Tong = Tong + tmp Next Next

Beta = Tong / Totalcell Exit Function

err_:

MsgBox Err.Description, 0 End Function

Function M_ahopb(ByVal A As Single, ByVal B As Single) As Single If A > B Then M_ahopb = A Else M_ahopb = B End If End Function

Function M_aGiaob(ByVal A As Single, ByVal B As Single) As Single If A > B Then M_aGiaob = B Else M_aGiaob = A End If End Function

Function M_aDeltab(ByVal Ma As Single, ByVal Mb As Single) As Single M_aDeltab = M_ahopb(M_aGiaob((1 - Ma), Mb), M_aGiaob((1 - Mb), Ma))

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 65

End Function

Private Sub CmdViewMau_Click() Dim i, j As Integer

Dim s, Kytu As String Dim maxsize

On Error GoTo err_

Kytu = Trim(List1.List(List1.ListIndex)) If Len(Ktu) <= 0 Then

MsgBox "Chua chon ky tu, can xem danh muc cac ky tu da hoc", 0 Exit Sub End If Me.Picture2.Cls DrawGrid Picture2 Set_status 2 For i = 0 To R_grid - 1 For j = 0 To H_grid - 1 NewKT.Tansuat(i, j) = 0 Next Next

Open FnameData For Random As #1 Len = Len(MyRecord) maxsize = LOF(1) \ Len(MyRecord)

For RecordNumber = maxsize To 1 Step -1 Seek #1, RecordNumber

Get #1, , MyRecord s = MyRecord.Kytu If s = Kytu Then

LblTong.BackStyle = 0

LblTong.Caption = MyRecord.Tong & " Mẫu" LblTong.Visible = True

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 66

LblTong.Refresh

For i = 0 To R_grid - 1 For j = 0 To H_grid - 1

If (MyRecord.Tansuat(i, j) / MyRecord.Tong) >= 0.4 Then ve Picture2, i, j End If Next Next Exit For End If Next RecordNumber Close #1 Exit Sub err_: MsgBox Err.Description, 0 End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode

Case vbKeyF12 MsgBox oKytu End Select

End Sub

Private Sub Form_Load() Dim Buoc, i As Integer On Error Resume Next ColorDraw = vbBlack

Buoc = Me.Picture1.Width \ R_grid Me.Picture1.Width = Buoc * R_grid Me.Picture1.Height = Buoc * H_grid

Soỏ hoựa bụỷi Trung taõm Hoùc lieọu http://lrc.tnu.edu.vn/ 67 Me.Picture2.Width = Me.Picture1.Width Me.Picture2.Height = Me.Picture1.Height Me.Picture2.Top = Me.Picture1.Top DrawGrid Picture2 Me.Label10.Caption = "" Set_status 1 If Len(Dir(FnameData)) <= 0 Then

If MsgBox("Khong tim thay File du lieu, Bam Yes chon File du lieu can lam viec. Bam No tao file du lieu moi?", vbYesNo, "Thong bao") = vbYes Then Me.CommonDialog1.Filter = "*.dat|*.dat|*.*|*.*"

Me.CommonDialog1.FilterIndex = 0 i = 1

FnameData = ""

Do While (i <= 3) And Len(FnameData) <= 0 Me.CommonDialog1.ShowOpen If Len(Me.CommonDialog1.FileName) > 0 Then

Một phần của tài liệu Logic mờ ứng dụng trong bài toán nhận dạng chư viết tay (Trang 52 - 82)