應用筆畫寬度變換(SWT)來檢測自然場景中的文字

2021-09-30 11:41:26 字數 2058 閱讀 7184

應用背景:是盲人輔助系統,城市環境中的機器導航等計算機視覺系統應用的重要一步。獲取文字能夠為許多視覺任務提供上下文的線索,並且,影象檢索演算法的效能很大部分都依賴於對應的文字檢測模組。

意義:傳統的ocr應用於掃瞄文字,所以其依賴於把文字從背景畫素中正確分離。這對於掃瞄文字來說是很簡單的,但是自然影象由於存在色彩雜訊,模糊,遮擋,很難將文字從背景中分離。

文章提出的方法:文字有著固定的筆畫寬度,利用這一特性就夠從背景中將其恢復。首先求影象的筆畫寬度變換即每個畫素都分配了乙個筆畫寬度,然後利用靈活的幾何推理,把有著相似比劃寬度的位置都被聚合成詞。這相似並不是很嚴格,在一定範圍內變化都是可以的。

優點:1.沒有提取分離每個畫素特徵如:顏色,梯度等,而是提出畫素組的特徵。2.沒有使用在多尺度金字塔上滑動的視窗,而是基於自底向上的方式,把有著相似筆畫寬度的畫素歸併成連通域。3.沒有利用特定的語言資訊濾除機制,所有能夠用於多語言的文字檢測。

在多個尺度上掃瞄影象,然後利用一些文字的特性如:高密度的邊緣,文字上下的低梯度,灰度變化明顯,波形的分布,離散余弦變換係數等來分類畫素。其缺點是大計算量,缺乏精度。

利用畫素存在著相似的特性如一樣的顏色來組織畫素成連通域。然後利用幾何或者紋理資訊來排除那些不可能是文字的連通域。優點是:同時在各個尺度檢測文字,並且不限制於水平方向的文字。

流程首先計算影象的canny 邊緣,然後根據邊緣的方向資訊計算影象的swt ,根據筆畫寬度資訊將畫素聚集成連通域,利用幾何推理如連通域的高寬比,連通域筆畫的方差,均值,中值等來過濾連通域,將連通域聚集成文本行,最後將文字行分割成乙個個詞。流程的核心為swt和濾除連通域。下面給出這些步驟的詳細闡述,並給出matlab和c++**。

輸入的是原始彩色影象,輸出的是對每個畫素都分配了筆畫寬度的影象。

這個流程圖有兩個問題1.如果乙個點被多個路徑掃瞄到,那麼就賦值為最小路徑距離即筆畫寬度。2.在筆畫的轉彎處會出現問題,如上圖右邊,從上到下和從左到右的兩條路徑經過這點,假設從上到下的筆畫寬度為50,從左到右為40,那麼這點的筆畫寬度為40.這顯然不符合實際情況。這就需要第二次掃瞄。

第二次掃瞄流程是,對於所有第一次掃瞄到的路徑,求出路徑上的中值,將所有這條路徑上大於中值的點全部賦值為中值。

從第一步我們得到的是筆畫寬度影象,這時也還是乙個個畫素,所以我們要根據一些規則把畫素合併成區域(即自底向上的乙個過程)這個主要通過改變傳統連通域分析的連線條件得到,傳統連通是畫素周圍4連線或者8連線的畫素都是同一值則是同一連通域,而這裡增加了乙個條件,中心畫素和周圍畫素sw(筆畫寬度)比不能超過3.0.

第二步得到的連通域中存在著許多明顯不是字元的區域,我們需要根據一些先驗的知識濾除這些區域。主要是根據以上幾個規則

variancesw:連通域筆畫的方差。meansw:連通域筆畫的均值。aspectratio:連通域高寬比。diameter:連通域直徑。width:連通域寬。height:連通域高

1). 102).variancesw/meansw > .5

3).diameter/mediansw >= 10

4).aspectratio < 0.1 && aspectratio > 10

5).連通域的boudingbox不能包含超過兩個的連通部件

同第三步一樣,從上面得到的是乙個個候選的字元(連通域),我們需要把字元合併成文本行。依據以下的規則

1).兩個候選字元的中值筆畫寬度比不超過2.0.

2).字元的寬度不超過3倍於最寬的字元寬度。

3).字元的顏色一致

通過文字行的水平距離直方圖來分割(??)

核心部分的c++和matlab見下篇。

應用筆畫寬度變換(SWT)來檢測自然場景中的文字

應用背景 是盲人輔助系統,城市環境中的機器導航等計算機視覺系統應用的重要一步。獲取文字能夠為許多視覺任務提供上下文的線索,並且,影象檢索演算法的效能很大部分都依賴於對應的文字檢測模組。意義 傳統的ocr應用於掃瞄文字,所以其依賴於把文字從背景畫素中正確分離。這對於掃瞄文字來說是很簡單的,但是自然影象...

OpenCV應用筆記

1 使用cvsmooth函式,src與dst的depth要一致,否則會出現raiseexception錯誤。src和dst的位深不能為64位浮點。簡單模糊和高斯模糊支援 1 或 3 通道,8 位元 和 32 位元 浮點影象。這兩種方法可以 in place 方式處理影象。2 關於直接讀取iplima...

session應用筆記

session start 開始session會話處理 session只要用到這個,就必須開啟session start 放在檔案開頭 建立session,直接採用超級全域性變數賦值即可 session是存在伺服器端,一般存放1440秒,如果網頁沒有任何操作,會自動銷毀,當然,可以通過php.ini...