2017-07-28 76 views
1

我正在嘗試自動讀取車牌。 我已經培訓了一個OpenCV哈爾級聯分類器,以隔離源圖像中的牌照以合理成功。這裏是一個例子(注意黑色邊界矩形)。 Haar cascade classifier 在此之後,我試圖清理車牌爲兩種:OpenCV:爲OCR分離車牌字符

  • 通過SVM隔離分類單個字符。
  • 將清潔後的車牌提供給Tesseract OCR並提供有效字符的白名單。

要清理的板塊,我執行以下變換:

# Assuming 'plate' is a sub-image featuring the isolated license plate 
height, width = plate.shape 
# Enlarge the license plate 
cleaned = cv2.resize(plate, (width*3,height*3)) 
# Perform an adaptive threshold 
cleaned = cv2.adaptiveThreshold(cleaned ,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,7) 
# Remove any residual noise with an elliptical transform 
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3)) 
cleaned = cv2.morphologyEx(cleaned, cv2.MORPH_CLOSE, kernel) 

我在這裏的目標是同時去除任何噪音的字符黑色,背景分離爲白色。

使用這種方法,我發現我一般得到的三種結果之一:

圖片太吵了。

Noisy

過多去除(字符脫節)。

Blotchy

合理(所有字符分離並一致)。

Okay

I've included the original images and cropped plates in this album.

我認識到,由於車牌的性質不一致,我可能會需要一個更加動態的清理方法,但我不知道從何處着手。我試過玩閾值和形態函數的參數,但這通常只會導致對一幅圖像過度調整。

如何提高清理功能?

+1

你稱之爲「太吵」實際上也是「太許多額外的字符或圖形「,這是美國盤子上的一個共同特徵。 –

回答

1

你想要做的事情非常具有挑戰性,你展示的樣品仍然很容易。

首先,重要的是要獲得主要角色區域的良好定界。

對於垂直定界,請嘗試查找充當分隔符的水平白線。對於「太嘈雜」等較難處理的情況,您可以計算水平線上的統計數據,例如白色和黑色運行的分佈 - 計數,平均長度,長度偏差 - 以及查找真正字符與行之間的區分參數額外的功能(順便說一下,這將隱式檢測白線)。

這樣做,您將獲得由相同類型的行形成的矩形,可能會意外地將其分割。嘗試合併似乎屬於真字符的矩形。下一步的處理將被限制在這個矩形中。

對於垂直劃界來說,事情並不是那麼容易,因爲你會看到字符被分割以便垂直線可以遍歷它們的情況,以及不同字符被灰塵或其他混亂物體連接的情況。 (在一些可怕的情況下,字符可以在擴展區域上觸摸)。

通過類似於上述的技術,找到候選垂直線。現在除了形成幾個假設之外別無其他選擇,並列舉了這些分隔符的可能組合,受限於字符在它們的軸之間具有最小間距的事實。

形成這些假設後,您可以通過執行字符識別和計算總分來決定最佳組合。 (在這個階段,我不認爲有可能在不知道字符可能的形狀的情況下進行分割,這就是爲什麼識別能夠發揮作用。)