




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、問題如下:也就是在一張照片里,已知有個長方形的物體,但是經(jīng)過了透視投影,已經(jīng)不再是規(guī)則的長方形,那么如何提取這個圖形里的內(nèi)容呢?這是個很常見的場景,比如在博物館里看到一幅很喜歡的畫,用手機找了下來,可是回家一看歪歪斜斜,腦補原畫內(nèi)容又覺得不對,那么就需要算法輔助來從原圖里提取原來的內(nèi)容了。不妨把應用的場景分為以下:紙張四角的坐標(圖中紅點)已知的情況也就是上面的左圖中4個紅點是可以準確獲取,比如手動標注,那么就簡單了:用OpenCV的Perspective Transform就可以。具體步驟如下:1) 將標注好的四個點坐標存入一個叫corner的變量里,比如上面的例子中,原圖的分辨率是300x
2、400,定義x和y的方向如下:那么紙張的四角對應的坐標分別是:左上:157.6, 71.5右上:295.6, 118.4 右下:172.4, 311.3 左下:2.4, 202.4 把這四個坐標按如上順序放到一個叫corner的變量里。如果我們打算把這幅圖案恢復到一個300x400的圖像里,那么按照對應的順序把下面四個坐標放到一個叫canvas的變量里:左上:0, 0右上:300, 0右下:300, 400 左下:0, 400 假設原圖已經(jīng)用OpenCV讀取到一個叫imag
3、e的變量里,那么提取紙張圖案的代碼如下:1 M = cv2.getPerspectiveTransform(corners, canvas)2 result = cv2.warpPerspective(image, M, (0, 0)把左圖剪裁出來,去掉紅點后試了試,結果如下:當然,其實這一步用Photoshop就可以了。紙張四角的坐標未知或難以準確標注的情況這種場景可能是小屏幕應用,或是原始圖像就很小,比如我這里用的這個300x400例子,點坐標很難精確標注。這種情況下一個思路是,用邊緣檢測提取紙張四邊,然后求出四角坐標,再做Perspective Transform。 1) 圖像
4、預處理一般而言即使做普通的邊緣檢測也需要提前對圖像進行降噪避免誤測,比如最常見的辦法是先對圖像進行高斯濾波,然而這樣也會導致圖像變得模糊,當待檢測圖形邊緣不明顯,或是圖像本身分辨率不高的情況下(比如本文用的例子),會在降噪的同時把待檢測的邊緣強度也給犧牲了。具體到本文的例子,紙張是白色,背景是淺黃帶紋路,如果進行高斯濾波是顯然不行的,這時候一個替代方案是可以考慮使用Mean Shift,Mean Shift的優(yōu)點就在于如果是像背景桌面的淺色紋理,圖像分割的過程中相當于將這些小的浮動過濾掉,并且保留相對明顯的紙張邊緣,結果如下:原圖處理后Meanshift的代碼:1 image = cv2.py
5、rMeanShiftFiltering(image, 25, 10)因為主要目的是預處理降噪,windows size和color distance都不用太大,避免浪費計算時間還有過度降噪。降噪后可以看到桌面上的紋理都被抹去了,紙張邊緣附近干凈了很多。然而這還遠遠不夠,圖案本身,和圖像里的其他物體都有很多明顯的邊緣,而且都是直線邊緣。2) 紙張邊緣檢測雖然降噪了,可是圖像里還是有很多邊緣明顯的元素。怎么盡量只保留紙張的邊緣呢,這時候可以考慮用分割算法,把圖像分為紙張部分和其他部分,這樣分割的mask邊緣就和紙張邊緣應該是差不多重合的。在這里可以考慮用GrabCut,這樣對于簡單的情況,比如紙張
6、或畫布和背景對比強烈的,直接把圖像邊緣的像素作為bounding box就可以實現(xiàn)自動分割。當自動分割不精確的情況下再引入手動輔助分割,具體到我這里用的例子,背景和畫面接近,所以需要手動輔助:結果如下:可以看到,分割后的結果雖然能基本區(qū)分紙張形狀了,可是邊緣并不準確,另外鍵盤和部分桌面沒能區(qū)分開來。這時可以繼續(xù)用GrabCut+手動標注得到只有紙張的分割?;蛘邽榱擞脩粲押玫脑挘M量少引入手動輔助,那么可以考慮先繼續(xù)到下一步檢測邊緣,再做后期處理。假設我們考慮后者,那么我們得到的是如下的mask:這個mask并不精確,所以不能直接用于邊緣檢測,但是它大致標出了圖片里最明顯的邊緣位置所在,所以可以
7、考慮下面的思路:保留降噪后位于mask邊緣附近的信息用于真正的邊緣檢測,而把其他部分都模糊處理,也就是說基于上面得到的mask做出下面的mask用于模糊處理:基于這個mask得到的用于邊緣檢測的圖像如下:用canny算子檢測出邊緣如下:3) 直線檢測對檢測到的邊緣使用Hough變換檢測直線,我例子里用的是cv2.HoughLinesP,分辨率1像素和1°,可以根據(jù)圖像大小設置檢測的閾值和minLineLength去除大部分誤檢測。特別提一下的是如果使用OpenCV的Python binding,OpenCV 2和OpenCV 3的結果結構是不一樣的,如果進行代碼移植需要相應的修改。檢
8、測到的結果如下:可以看到,有些線幾乎重合在一起了,這是難以避免的,上圖中一共檢測到9條線,其中兩對(下、右邊緣)重合。可以通過距離判斷和直線相對角度來判斷并把重合線段合為一條:剩下的都是沒有重合的線了。4) 判斷紙張邊緣那么如何選取紙張邊緣的四條線呢(即使圖像分割步驟非常好得分開了紙張和其他部分,這在有些情況下還是難以避免的,比如圖案里有和邊緣平行的線條),可以沿著提取線段的兩邊采樣像素的灰度:在線段的兩個端點之間平均采樣左右兩邊像素的值,因為一般來說如果是紙張或者畫布,邊緣和背景的顏色在四邊上應該都是類似的。然而這樣做的話引入另外一個問題是需要區(qū)分線段的“左”和“右”,對于線段本身而言就是要
9、區(qū)分前后。所以需要對畫面里所有的線段端點進行排序,而這個排序的基準就是相對畫布。具體到本文的例子就是把圖像中心定義為所有線段的“左”邊,如上圖。而決定線段端點“前”和“后”可以用如下辦法:先假設線段的前后端點,將兩個端點坐標分別減去中心點(紅點)的坐標,然后將得到的兩個向量a和b求叉積,如果叉積大于0則說明假設正確,如果<0則交換假設的前后端點。線段端點的順序確定后就可以進行采樣了,簡單起見可以分別采樣左右兩側的像素灰度值,如果希望更準確可以采樣RGB通道的值進行綜合比較,下面是7條線段對應的兩側像素灰度的中值分布:可以看到其中有4個點距離非常近(紅色),說明他們的像素灰度分布也很接近,把這4條選出來,結果如下:正是要的結果。5) 計算四角的坐標接下來計算四條線的交點,方法點這里。因為有4條線,會得到6個結果,因為在這種應用場景中,方形的物體在透視變換下不會出現(xiàn)凹角,所以直接舍棄離紙張中心最遠的兩個交點就得到了四個角的坐標,結果如下:這樣就回到了一開始四角坐標已經(jīng)得到的情況,直接進行透視變換就行了。Camera Calibration?寫了這么多,其實有一條至關重要的假設,甚至可以說是最關鍵的步驟之一我一直沒提,那就是Camera Calibration,如果有相機的情況下,meta data都知道,那么需要先坐Came
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年湖南食品藥品職業(yè)學院單招職業(yè)技能測試題庫匯編
- 社交網(wǎng)絡中虛假信息的識別與防范策略
- 科技產(chǎn)品與電力安全的結合與創(chuàng)新
- 2025年湖南省常德市單招職業(yè)傾向性測試題庫完整版
- 2025年貴州機電職業(yè)技術學院單招職業(yè)技能測試題庫附答案
- 2025年河北省承德市單招職業(yè)適應性測試題庫及參考答案
- 2025年湖南電子科技職業(yè)學院單招職業(yè)適應性測試題庫完整
- 蒙自租房合同范本
- 科技引領下的生態(tài)循環(huán)農(nóng)業(yè)創(chuàng)新實踐
- 2025年桂林山水職業(yè)學院單招職業(yè)傾向性測試題庫完美版
- 部編人教版四年級下冊語文 5琥珀 教案(教學設計)
- 元宵節(jié)英文介紹ppt
- GB/T 7631.4-1989潤滑劑和有關產(chǎn)品(L類)的分類第4部分:F組(主軸、軸承和有關離合器)
- GB/T 40092-2021生態(tài)設計產(chǎn)品評價技術規(guī)范變壓器
- 湘科版科學(2017)五年級下冊全冊教案
- GB/T 10781.2-2006清香型白酒
- 中醫(yī)醫(yī)院第一類醫(yī)療技術目錄
- 學校食堂監(jiān)管
- 12網(wǎng)絡與新媒體概論(第二版)-第十二章互聯(lián)網(wǎng)與社會思潮.電子教案教學課件
- 9-馬工程《藝術學概論》課件-第九章(20190403)【已改格式】.課件電子教案
- 常見老年綜合征醫(yī)院護理-認知障礙(2020年版)
評論
0/150
提交評論