摘要:[Visual Basic 6.0] 影像處理探討 - 辨識圖片中的阿拉伯數字
[Visual Basic 6.0] 影像處理探討 - 辨識圖片中的阿拉伯數字
程式在做影像處理時,常常會需要辨識字體。例如驗證碼、校驗碼、問與達、防止機器人工具。
然而辨識圖片中的字母、數字的方法有很多,例如使用"隨機森林(Random forest)演算法"。
但是如果是針對阿拉伯數字,我們可以透過屬性的觀察。但是數字的形狀、字體變化多端。
於是想出一套很消極的作法,那就是統計數字佔的顏色數量。
但這個方法的缺點非常的多,卻很便利。
1.侷限於數字的顏色與背景色不同
(少部分相同可以用誤差值的方法去解決,但辨識的正確性會降低)
2.侷限於數字的大小不能夠隨意改變
(每一個樣子的數字、字母,都有一定的顏色佔有量。)
3.假設數字 1 大小為 10pt、數字 2 大小為 7pt。而他們的顏色佔有量相同,就會導致誤判。
(顏色的佔有量取決於剛開始製造數字圖片的原樣,當發生衝突時。就必須做更改)
演算法與實作方法:
1.先利用影像軟體建立圖庫 (範例皆使用 白底黑字)
2.圖庫中的數字位置可以任意改變 (大小與字體不能改變)
3.將0~9數字個別掃描一次將掃描到的數字顏色佔有量儲存到資料庫中
4.辨識時只要判斷數字顏色佔有量就可以輕易得知影像中的_
Q1 為什麼 數字的顏色必須跟背景不同
A1 當顏色相同的越多,誤判率就會有明顯的提升。因為使用數字顏色佔有量來辨識。顏色佔有量就顯的非常重要。
Q2 為什麼 數字大小與字體不能改變,而位置可以改變
A1 位置的變化不會影響最終的顏色佔有量(除非位置跑出掃描區,這個情況為無法辨識),而改變大小或字體,就可能會影響。
程式碼:
Private Sub 載入圖片_Click()
On Error GoTo Ends
辨識圖.Picture = LoadPicture(App.Path & "\" & 圖檔名稱 & ".bmp")
Ends:
圖檔名稱.Text = ""
End Sub
Private Sub 圖片辨識_Click()
結果.Text = "分析中,,,請稍候,,,,"
DoEvents
辨識過程.BackColor = &H8000000F
Black = 0
For i = 0 To 4000 Step 15
For j = 0 To 4365 Step 15
X = 辨識圖.Point(i, j)
R = X Mod 256
X = X / 256
G = X Mod 256
X = X / 256
B = X Mod 256
If R = 0 And G = 0 And B = 0 Then
Black = Black + 1
End If
辨識過程.ForeColor = &H8000000D
辨識過程.PSet (i, j)
Next j
Next i
Select Case Black
Case "7601"
Ans = 0
Case "5417"
Ans = 1
Case "6061"
Ans = 2
Case "6023"
Ans = 3
Case "6595"
Ans = 4
Case "6247"
Ans = 5
Case "7388"
Ans = 6
Case "4927"
Ans = 7
Case "8138"
Ans = 8
Case "7472"
Ans = 9
Case Else
Ans = "無法辨識"
End Select
結果 = "辨識鑑定結果為: " & Ans
End Sub
#0xDe 從分享中學習
#Facebook:ProgrammerDe (https://www.facebook.com/MicrosoftDes) 有問題歡迎提問