朋友邀我協作一個免費簡易掃描APP,於是這幾天把頁面矯正提上來思考。整理一些心得,以此錄之,填充下這塊被我冷落到凋零的園區(希望后面能勤快點)。
不少blog給出邊緣+hough,可以解決部分情況。就通用性而言,有很多細節需要考慮:
- 比如頁面里本身就自帶很多線,或者背景本身有線干擾
- 比如頁面本身不完整,不完全存在4邊
-比如頁面有弧度,hough下直線響應不明顯
我的思路(有借鑒,基本原創,如雷同了,真不是抄的):
- 輸入圖像(來自網上,如有不妥請留言,我盡快更換掉;選這個,主要想看線條復雜,邊界不是很明晰的測試,前處理灰度化了)

- 邊緣與線段分割:我選用 Edge Drawing / Edge Line (也可以利用canny + hough給出)
亮綠為邊緣,暗綠+紅色端點為線段,我控制線段比較嚴格,線段比較碎,所以我加了后面的合並步驟

- 把夾角小於設定值且端點距離相近的線合並 (同時給出每條線的響應值:梯度值越高得分也高,線越長也有相應加成)
把長度很短的去掉

- 通過提取的線,由響應值排序,獲取前面N條線(我自己 N = 16,也就是最多保留N條),為了通用性,把輸入圖像的4個邊,分配一個小的響應值,也加入到候選線集(N = 20 最多情況)

- 設計候選矩形框評估函數准則 (給定任意4個直線方程):
*通過相鄰直線夾角最大為原則,進行排列(預處理)
*組合四邊形4個角越接近90度,得分越高
*把非凸的四邊形去掉
*把面積小於頁面某個設定值的去掉(我設了 0.2 * W * H)
*線段(前面提取的線段)對應計算邊(2直線計算所得)重疊率越高,得分有加成
*寬高比越接近0.707,得分有輕微加成
*越滿足平行四邊形,得分有輕微加成
*4個線段響應值越高,得分越高
- 通過上述准則,暴力【(N-4)*(N-5)*(N-6)*(N-7) 最多這么多個矩形組合】檢索,獲得最佳的4條線,輸出角點,並對角點按形變最小原則進行順時針排序, 主要是些幾何運算,其實速度很快
中間一些組合框示意

最高得分

- 幾何校正與增強

剛編了.so。等我不懶的時候,弄個win版的給大家試試。
如果路過的你有更好的思路,歡迎留言!
鏈接:https://pan.baidu.com/s/1BLkiOA4dUG9ErkEVhmgjtA
提取碼:vcsm
