[影像處理] 輕鬆作印鑑自動轉正

參考過掃描文章轉正這方面的論文

當時想作此效果時, 我有參考過掃描文章轉正這方面的論文,

它的理論是, 一列列去算該列黑點的總數, 然後觀察這些總數,

若是紙張是歪斜的, 這些總數可能沒有什麼明顯的變化,

但紙張若是非常的正, 那麼可以明顯看出,

有些列的黑點總數較高, 表示該列為某行文字~

而有些列的黑點總數為0, 表示該列為2行文字的間隔,才會是全白的~

當然~這是論文,所以是以統計的方式來找出最適合的角度轉正~

 

雖然我自己想出來的轉正的方法不太一樣,

但原理是差不多的,

所以我的想法是:

非正圓形的章(以國人習慣, 通常不是正圓章就是方章) 在最斜的時候,

是45度, 此時所佔的列數是最多的, 故反推全白的列數就是最少的

而最正的時候, 是0度, 此時所佔的列數是最少的, 故反推全白的列數就是最多的~

以類似上述論文的方式來處理, 但我不需要計算總數~也不需要統計學~

步驟如下:

1. 先去除多餘的白邊:白邊的判斷方式, 是檢查該行列是全白無黑點

2. 分別從四周往內計算全白的列數,只需要在正負45度內轉正即可~

     a. 以迴圈跑正負45度, 每轉5度, 就計算尋找一次全白的列數, 取得最多全白列數的角度seta~ (為了效能, 理論上只要其中一邊最邊緣非全白, 就表示印鑑轉出畫面範圍外了, 那也不用再計算該角度的空白數了, 可直接忽略該角度)

     b. 再以seta角度的正負5度來跑每一度的迴圈, 取得最多全白列數的角度seta1

     c. 再以seta1角度的正負1度來跑每0.1度的迴圈, 取得最多全白列數的角度seta2

3. 以1~2步驟所取得的角度seta2來將印章轉正

4. 再次去除多餘的白邊

若想知道此章是否是正圓章, 因之前將白邊都去掉了, 考量印泥會暈開, 故再預留少許空白邊, 將圖轉45度即可判斷,

因為正圓章不管360度怎麼轉, 它的範圍都不會跑出圖外, 所以只要判斷45度時的四周最邊緣是仍全白列即可~

 

效果如下:

原圖:台灣是主權獨立的國家

去白邊:

取得轉正角度:-38.9

轉正後:

去白邊後:

測試是否為正圓章:

建議再用原留彩色圖片以Graphics高品質旋轉, 再二值化後, 效果比較好看:

 

Taiwan is a country. 臺灣是我的國家