2014-04-01 81 views
3

我目前的工作在某種OCR(光學字符識別)系統。我已經寫了一個腳本來從文本中提取每個字符,並清除(大部分)違規行爲。我也知道字體。我現在有例如圖像是:OCR和性格相似

M(http://i.imgur.com/oRfSOsJ.png(字體)和http://i.imgur.com/UDEJZyV.png(掃描))

K(http://i.imgur.com/PluXtDz.png(字體)和http://i.imgur.com/TRuDXSx.png(掃描))

C(http://i.imgur.com/wggsX6M.png(字體)和http://i.imgur.com/GF9vClh.png(掃描))

對於所有這些圖像,我已經有一種二進制矩陣(1爲黑色,0爲白色)。我現在想知道是否有某種類似數學投影的公式來查看這些矩陣之間的相似性。我不想依賴圖書館,因爲這不是我給的任務。

我知道這個問題似乎有點模糊,也有類似的問題,但我正在尋找的方法,而不是一個包,到目前爲止,我無法找到有關該方法的任何意見。這個問題含糊不清的原因是我真的沒有必要開始。我想要做的事實際上是在維基百科上描述的:

矩陣匹配涉及將圖像與存儲的字形逐像素地進行比較;它也被稱爲「模式匹配」或「模式識別」。[9]這依賴於輸入字形與圖像的其餘部分正確隔離,並且存儲的字形具有相同的字體和相同的比例。這種技術最適合打字文本,遇到新字體時效果不佳。這是早期的基於光電池的OCR實現的技術,相當直接。http://en.wikipedia.org/wiki/Optical_character_recognition#Character_recognition

如果有人能夠幫助我解決這個問題,我將非常感激。

回答

8

用於識別或分類大多數OCR的使用神經網絡

這些必須正確地配置,以類似的內部互連體系結構層的數目期望的任務,等等。神經網絡的問題在於它們必須經過適當的訓練,這很難做到正確,因爲您需要知道適當的訓練數據集大小(因此它包含足夠的信息並且不會過度訓練)。如果你沒有神經網絡的經驗,如果你需要自己實現,不要這樣做!

也有其他的方法來比較圖案

  1. 向量方法

    • 多邊形化圖像(邊緣或邊界)
    • 比較多邊形的相似性(表面面積,周長,形狀....)
  2. 像素辦法

    您可以比較圖像基於:

    • 直方圖
    • DFT/DCT頻譜分析
    • 大小
    • 數量佔據每個像素在每一行佔用的像素的線
    • 開始位置(左起)佔領的像素的每一行中
    • 端位置(從右擊)
    • 這些3個參數也可以進行對行的興趣列表
    • 點(點是某些變化像強度凹凸,邊緣,...)

    您爲每個測試字符創建功能列表並將其與您的字體進行比較,然後最接近的匹配就是您的字符。此外,這些功能列表可以縮放到某些固定大小(如64x64),因此識別在縮放時變得不變。

    下面是我使用特徵樣品OCR

    OCR character features

    在這種情況下(特徵尺寸縮放以適合在NxN),所以每一個字符具有6陣列由N號碼,如:

    int row_pixels[N]; // 1nd image 
    int lin_pixels[N]; // 2st image 
    int row_y0[N];  // 3th image green 
    int row_y1[N];  // 3th image red 
    int lin_x0[N];  // 4th image green 
    int lin_x1[N];  // 4th image red 
    

    現在:預先計算字體中每個字符以及每個字符的所有特徵。從字體找到最緊密匹配的所有特徵向量之間

    • 分鐘距離/陣列
    • 不超過一些treshold差

    這是關於旋轉partialy不變和傾斜到一個點。我做OCR用於填充字符,以便爲輪廓字體它可能使用的一些調整

[注意事項]

爲了便於比較,你可以使用距離或correlation coefficient