文字切割演算法 投影切割優化

2021-08-20 00:25:49 字數 1473 閱讀 7464

前言

在上文(文字切割演算法-基於投影的切割)中發現切割結果並不是很理想,所以在本文提出優化演算法對結果進行進一步處理。本演算法的解決思路很簡單,即針對已暴露出的問題進行解決,對於未暴露的問題就無能為力了。所以演算法的魯棒性並不是很好,但是簡單易實現。

對基於投影的切割結果進行觀察,可以將問題總結為三類。

整體連線

多個文字連線在一起

左右結構分開

左右結構的文字被切割成兩個字

左右結構分開後連線

左右結構的文字分開後,又與前後相鄰文字相連

整體連線

由於漢字是方塊字,可以認為每個字的長寬比例都是差不多的,基本都是1:1(金龍魚調和…呸)。對於整體連線在一起的文字,可以先計算整體的長寬比。如果比例是接近於整數的(±0.2),則認為這是整體連線在一起的多個字。再計算每個字的平均長度進行切割,就可以得到乙個比較不錯的結果。

如上圖,這是四個字連在一起的。長寬比:104/27≈3.85,3.85>4-0.2所以我們認為它是4個字。則平均寬度:104/4=26,按照26*27的寬長進行切割,就可以得出結果。(這裡的長寬比是:寬度/長度)

左右結構分開

由於左右結構分開後,兩張的長寬比與數字符號的長寬比相似。所以我們無法判斷到底是偏旁還是符號,這樣就無法進行連線。這個問題將在以後提出識別演算法對進行識別後解決。

如上圖,由於無法識別內容,所以無法判斷到底是「7」與「阝」連線,還是「阝」與「艮」連線。

左右結構分開後連線

採用整體連線的解決思路,先計算長寬比,如果發現長寬比不是在整數附近的(>±0.2),則認為這是左右結構分開後連線的。因為這種情況都是兩張圖,所以在發現第一張是分開後連線的,則將這張圖先以1:1進行切割,再將剩下的部分記錄。如果這張圖相鄰的下一張也被判斷為是分開後連線的,則將上一張圖剩下的部分與這張圖的開頭相連線,再進行1:1切割。這樣就可以得到乙個不錯的結果。

如上圖,先對第一張進行1:1切割,即按照27*27的大小從開頭逐步向後切割,記錄最後剩下的部分「丬」。再判斷下一張圖,發現也是分開後連線的,則按照27*27的大小從末尾逐步向前切割,得到剩下的部分。最後將這兩個剩下的部分進行連線,得到乙個完整的「北」。

(當然這裡要求在投影切割時記錄兩兩之間的距離,這樣才能還原被切割後的)

切割結果如下:

在採用上述優化演算法後,發現切割結果有了顯著的成效。但是還是會存在一些不足,這些問題會在以後提出識別演算法後進行優化。文字切割出來後,我們可以通過相似度比對演算法對特徵進行提取,以進行識別。

專案原始碼:

我的github

簡訊切割演算法

在乙個專案中,要用到手機傳送簡訊,但是使用的簡訊貓卻無法支援大於70個字元的情況,而且經常收到有朋友的簡訊,比較長的手機都會自動將它切成幾個簡訊傳送。有時候很搞,收到的簡訊有兩條,第二條就只有乙個句號而已。或者幾乎這種手機都不會去理解語義,直接就在70個字元處切割。要做到完全理解語義也不大可能,但是...

簡訊切割演算法

在乙個專案中,要用到手機傳送簡訊,但是使用的簡訊貓卻無法支援大於70個字元的情況,而且經常收到有朋友的簡訊,比較長的手機都會自動將它切成幾個簡訊傳送。有時候很搞,收到的簡訊有兩條,第二條就只有乙個句號而已。或者幾乎這種手機都不會去理解語義,直接就在70個字元處切割。要做到完全理解語義也不大可能,但是...

python 切詞演算法(正向切割 反向切割)

author wanghuafeng coding utf 8 import os import sys import codecs from collections import deque try path os.path.dirname os.path.abspath file except ...