本發(fā)明屬于圖像處理與模式識別技術(shù)領(lǐng)域,尤其涉及一種基于手機攝像頭拍攝多幅照片自動拼接的文檔掃描方法。
背景技術(shù):
隨著數(shù)字化辦公技術(shù)在人們工作和日常生活中的普及,如何將紙質(zhì)文檔迅速且高質(zhì)量的轉(zhuǎn)換成數(shù)字文檔就變量日益重要起來?,F(xiàn)有方法主要是依賴電子掃描設(shè)備,例如將一份A4大小的文件放在掃描儀中,掃描得到的輸出為一張jpg格式的圖片或者為一份PDF格式的文檔。雖然這一主流的方法得到了廣泛的使用,但仍然面臨幾個問題:
1)專業(yè)的掃描設(shè)備價格不菲,對于家庭日常使用來講,增加了家庭生活開支的成本,且由于日常使用的頻率較低,導致購買專業(yè)掃描設(shè)備的性價比不高,另外,專業(yè)設(shè)備體積較大,需要占據(jù)一定的空間,影響家庭生活的品質(zhì)。
2)專業(yè)的掃描設(shè)備只能掃描大小一定的文檔。例如,現(xiàn)有的辦公掃描設(shè)備大多只適合掃描A4大小的文檔,當需要掃描更大的文檔時,普通的辦公設(shè)備無能力為。
3)專業(yè)的掃描設(shè)備在掃描文檔時,文字的清晰度不夠。例如,將一份信用卡的申請表格掃描成電子版,表格中密集的小字體文字很難被掃描的十分清晰。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是提供一種基于手機攝像頭拍攝多幅照片自動拼接的文檔掃描方法,通過使用手機攝像頭從不同角度拍攝一份文檔的多幅照片,將有重疊部分的照片拼接到一起,生成一張完整、清晰的圖片輸出,減少硬件和環(huán)境對圖片的不利影響。
一種基于手機攝像頭拍攝多幅照片自動拼接的文檔掃描方法,包括以 下步驟:
1)、使用手機攝像頭按照水平方向從左到右、垂直方向從上到下的順序依此拍攝需要掃描的文檔的若干幅照片,所拍攝的照片在水平方向和垂直方向上均要求相鄰的兩張照片之間有重疊,所拍攝照片根據(jù)拍攝時間編號存儲;
2)、對所拍攝照片進行預(yù)處理,預(yù)處理主要分為兩個方面,一個是照片方向矯正,一個是照片格式轉(zhuǎn)換:如果照片方向為左/右/下,則旋轉(zhuǎn)90度,將iOS手機拍攝的照片格式由UIImage格式轉(zhuǎn)換為JPEG格式;
3)、對所拍攝照片利用SIFT算法找到關(guān)鍵點及其對應(yīng)的描述子;
4)、對相鄰兩張照片中的關(guān)鍵點進行特征匹配;
5)、對相鄰兩張照片進行拼接,查詢按照一定方向性是否完成全部拍攝照片的拼接,是,將拼接照片作為最終生成的整個文檔的電子版掃描件輸出,否,跳轉(zhuǎn)到步驟4)。
進一步地,所述步驟3)中,對所拍攝照片利用SIFT算法找到關(guān)鍵點及其對應(yīng)的描述子包括以下步驟:
1)、對于每一張照片,使用高斯差分算子對圖像的每一個像素點進行變換,看其是否比圖像域和尺度域的相鄰點大/小來尋找它的極值點,通過比較該像素點和其周圍所有的相鄰像素點,如果該像素點是一個極值點,則將該像素作為一個關(guān)鍵點;
2)、以作為關(guān)鍵點的該像素點為中心,采樣16x16大小的圖像塊,計算該圖像塊內(nèi)256個像素點在水平方向和垂直方向的梯度,將16x16大小的圖像塊分為無重疊的16個4x4的子塊,使用每一個子塊中所有像素的梯度計算一個8維的直方圖,將所有16個子塊的直方圖拼接成一個128維的特征向量,作為該像素點的特征描述子。
進一步地,所述步驟4)中,對相鄰兩張照片中的關(guān)鍵點進行特征匹配具體步驟如下:在拼接相鄰兩幅照片A和照片B時,計算照片A中的任一 關(guān)鍵點的特征描述子與照片B中所有的關(guān)鍵點的特征描述子的歐式距離,將距離最小的兩個關(guān)鍵點作為成功匹配。
進一步地,所述步驟5)中,對相鄰兩張照片進行拼接具體步驟如下:
1)、以照片A為基準,每次從中隨機選擇8個關(guān)鍵點,在照片B中找出與照片A隨機選擇的8個關(guān)鍵點配對的8個關(guān)鍵點;
2)、用8對關(guān)鍵點的坐標計算得到一個對應(yīng)矩陣,將照片A中剩余的關(guān)鍵點按照對應(yīng)矩陣變換投影到照片B中,統(tǒng)計照片A與照片B配對點的個數(shù);
3)、重復上述步驟1000次,得到準確配對最多的一個對應(yīng)矩陣作為相鄰兩張照片的對應(yīng)矩陣,并利用該對應(yīng)矩陣將兩張照片的相鄰邊界的所有像素點進行對應(yīng),從而得到拼接完成后的照片;
4)、重復上述操作直至完成全部照片的拼接工作。
進一步地,在進行拼接時,對于欲拼接的若干幅與文檔位置相對應(yīng)照片,按照從左到右、從上往下順序依次進行拼接,開始拼接時,位于拍攝文檔位置左上方的兩幅照片之間進行拼接,將位于左方的照片作為拼接照片A,位于右方的作為拼接照片B,照片A與照片B拼接完成之后作為照片A繼續(xù)與位于右方的照片B進行拼接,直至一行照片拼接完畢,將該行拼接完成照片作為照片A與位于下一行的左方位置照片繼續(xù)拼接,循環(huán)直到完成全部照片拼接。
本發(fā)明的有益效果是,
本發(fā)明提供一種基于手機攝像頭拍攝多幅照片自動拼接的文檔掃描方法,使用手機攝像頭從不同角度拍攝一份文檔,將有重疊部分的照片拼接到一起,生成一張完整、清晰的圖片輸出,對于不經(jīng)常掃描文件的家庭用戶而言,此種方法利用常見的手機攝像頭完成拍攝,拼接得到高品質(zhì)的文檔掃描,減少了不必要的掃描儀支出。對于特殊需求的掃描,例如需要將較小文件進行掃描,但是存在直接掃描后文件字體過小無法直接利用時, 可以很方便的利用高像素手機進行拍攝,調(diào)整到合適尺寸大小進行拼接;在欲掃描文件尺寸過大,無法直接有效利用現(xiàn)成的辦公用掃描儀時,可以方便的利用手機分別對文件不同部分進行拍攝,保證各部分照片之間有重疊部分,再利用本發(fā)明的多幅拼接處理方法進行拼接,快速有效的得到數(shù)字文檔,減小硬件和環(huán)境對文檔掃描的不利影響。
具體實施方式
一種基于手機攝像頭拍攝多幅照片自動拼接的文檔掃描方法,包括以下步驟:
1)、使用手機攝像頭按照水平方向從左到右、垂直方向從上到下的順序依此拍攝需要掃描的文檔的若干幅照片,所拍攝的照片在水平方向和垂直方向上均要求相鄰的兩張照片之間有重疊,所拍攝照片根據(jù)拍攝時間編號存儲。
2)、對所拍攝照片進行預(yù)處理,預(yù)處理主要分為兩個方面,一個是照片方向矯正,一個是照片格式轉(zhuǎn)換:如果照片方向為左/右/下,則旋轉(zhuǎn)90度,將iOS手機拍攝的照片格式由UIImage格式轉(zhuǎn)換為JPEG格式。
3)、對于每一張照片,使用高斯差分算子對圖像的每一個像素點進行變換,看其是否比圖像域和尺度域的相鄰點大/小來尋找它的極值點,通過比較該像素點和其周圍所有的相鄰像素點,如果該像素點是一個極值點,則將該像素作為一個關(guān)鍵點;以作為關(guān)鍵點的該像素點為中心,采樣16x16大小的圖像塊,計算該圖像塊內(nèi)256個像素點在水平方向和垂直方向的梯度,將16x16大小的圖像塊分為無重疊的16個4x4的子塊,使用每一個子塊中所有像素的梯度計算一個8維的直方圖,將所有16個子塊的直方圖拼接成一個128維的特征向量,作為該像素點的特征描述子。
4)、在拼接相鄰兩幅照片A和照片B時,計算照片A中的任一關(guān)鍵點的特征描述子與照片B中所有的關(guān)鍵點的特征描述子的歐式距離,將距離最小的兩個關(guān)鍵點作為成功匹配。
5)、以照片A為基準,每次從中隨機選擇8個關(guān)鍵點,在照片B中找出與照片A隨機選擇的8個關(guān)鍵點配對的8個關(guān)鍵點;用8對關(guān)鍵點計算得到一個對應(yīng)矩陣,將照片A中剩余的關(guān)鍵點按照對應(yīng)矩陣變換投影到照片B中,統(tǒng)計照片A與照片B配對點的個數(shù);重復上述步驟1000次,得到準確配對最多的一個對應(yīng)矩陣作為相鄰兩張照片的對應(yīng)矩陣,并利用該對應(yīng)矩陣將兩張照片的相鄰邊界的所有像素點進行對應(yīng),從而得到拼接完成后的照片;在進行拼接時,對于欲拼接的若干幅與文檔位置相對應(yīng)照片,按照從左到右、從上往下順序依次進行拼接,開始拼接時,位于拍攝文檔位置左上方的兩幅照片之間進行拼接,將位于左方的照片作為拼接照片A,位于右方的作為拼接照片B,照片A與照片B拼接完成之后作為照片A繼續(xù)與位于右方的照片B進行拼接,直至一行照片拼接完畢,將該行拼接完成照片作為照片A與位于下一行的左方位置照片繼續(xù)拼接,循環(huán)直到完成全部照片拼接。
上述雖然對本發(fā)明的具體實施方式進行了描述,但并非對本發(fā)明保護范圍的限制,所屬領(lǐng)域技術(shù)人員應(yīng)該明白,在本發(fā)明的技術(shù)方案的基礎(chǔ)上,本領(lǐng)域技術(shù)人員不需要付出創(chuàng)造性勞動即可做出的各種修改或變形仍在本發(fā)明的保護范圍以內(nèi)。