手寫數字識別(二)

2021-08-21 13:18:41 字數 870 閱讀 6814

1. 確定角點順序

我採用的方法是直接上了乙個凸包演算法:通過極角排序然後做凸包把四個角點按照順序壓如棧中,確保了幾個角點按照順時針的方向排列,並且確定最接近 [0,0] 點的為紙張左上角的頂點。由於紙張為四邊形,確保是乙個凸包。

2. 實現a4紙矯正

首先定義對於影象的區域劃分

其中 0~3 的區域為需要的a4紙邊緣,尺度為影象中盡量大地放下的a4紙尺寸,其他為影象的紙外的背景。採用 morphe 變換對影象進行對映,簡單來說就是遍歷影象每乙個畫素,確定畫素對應的區域,然後通過計算找出對應原影象中對應區域三角形中的對應點的位置,實現變換。還有一種方法是通過透視變換實現a4紙的矯正。

矯正結果:

3. 影象內容分離

最簡單的就是通過閾值進行二值分類,設定乙個閾值,小的劃分為黑色,大的劃分為白色。

但是顯然這種方法魯棒性很差,因為不同影象對應的閾值不同,也不能每一張影象都進行調參。

我採用的是通過 canny 進行劃分,由於預先封裝好函式,直接呼叫也很簡單。canny 對於手寫能夠很好地劃分,而且由於大多數陰影是漸變的,可以很好地排除。通過 canny 的邊緣進行膨脹,再利用前面紙張去除噪音的方法,通過bfs把邊緣外的地方變成白色。對於邊緣內部的地方,再通過閾值進行劃分,使得影象內容能夠很好地分離,不容易被陰影所影響。

效果:

手寫數字識別

這幾天在想這做字元識別方面的程式,看了很多 但是發現 上的幾乎用處都不是特別的大,理論一大堆,但是用在程式裡面則很難實現,看到有些 上說用連碼法,但是連碼法對結構的變化太敏感了,但是也從一些 裡獲得了一些靈感,我採用的是網格匹配法,準備工作採集樣本,得到了樣本的網格資訊用於接下來的識別,當然也可 一...

手寫數字識別

import os os.environ tf cpp min log level 2 不想讓警告的資訊輸出可以新增 from tensorflow.examples.tutorials.mnist import input data import tensorflow as tf def mnis...

手寫數字識別 實戰 KNN演算法識別手寫數字

鄰近演算法,或者說k最近鄰 knn,k nearestneighbor 分類演算法是資料探勘分類技術中最簡單的方法之一。所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。下面是我學習knn演算法的思維導圖 其中距離的定義,各個距離的公式為 歐氏距離 n維空間的距...