Removing Camera Lens Distortion: Chessboard -- Removing Camera Lens Distortion: Chessboard --
§ 目的
做影像校正,解決影像變形的問題
§ 過程
一組校正前的影像
§ 結果
顯示校正後影像的應用程序
§ 提示
相機校正是根據包含一個校正棋盤圖像。 "DetectChessboardGrid" filter 當發現棋盤點的相機可以進行校正時,檢測校正板
利用 "CalibrateCamera" filter 建立所述校正映射使用
輸入影像名稱可以儲存在一個單一全域參數在 FileArray type
從輸入影像中選擇其中的一部份,並對其進行校正。 選擇這樣的影像,棋盤上網格將覆蓋大部份的可見區域
在 avdata file 中使用它進行影像重映射,儲存在 SpatialMap
§ 解決方案
1. 應該建立兩個 macrofilters
一個準備必須的影像校正 SpatialMap
一個實際的處理 (重映射)
2. 每個步驟,應該嘗試執行程式,檢查結果
3. 建立新的 "PrepareSpatialMap" macrofilter 並打開它進行編輯
4. 選擇幾張影像做校正,它們要可以代表整個視線範圍。太少張影像會降低校正精準度,太多張影像會拖慢校正過程,因為沒有可衡量的收益。 棋盤上應該會出現在影像場景的各個方面上。例如對於選擇圖片包含名稱:00, 04, 10, 20, 23, 25, 29, 這些影像包含大面積的影像,它被允許建立標定。
5. 建立一個 FileArray 和選擇影像的儲存路徑
6. 利用 "LoadImage" filter 呼叫校正樣品影像的數組,或可以直接將影像拖拉至程式編輯面版中,並結合影像到 "CreateShortArray" 中
7. "DetectChessboardGrid" filter 檢測所選擇影像的 "world points" or "object points",觀察影像和其它影像的點
8. 利用 "CalibrateCamera" filter 需要連結 "inObjectPoints" 做Array的輸出,和 "DetectChessboardGrid" filter 的outWorldGridPoints 做Array的輸入. 設定 inImageWidth and inImageHeight 的參數,影像尺寸,(讀出影像的預覽)。在本練習中,影像的尺寸是640×480
9. 產生 SpatialMap 使用 "RemapImage" filter. 影像進一步的失真,使用 "CreateUndistortionMap" filter 計算變形和相機矩陣校正過程,另外 "inSourceExample" 做正確的大小和深度的影像範例
10. 隨著運行開啟,查看 "diagRemappedImage" 影像校正的結果,使循環訪問選項開啟程序,使重新執行
11. 指定 inMapWidth 和 inMapHeight 不同的值,並檢查結果
12. 當發現映射的最佳尺寸(以及產生的影像),加入文件管理程序 SaveObject" filter SpatialMap type, 取一個文件名稱,例如 "distortion.SpatialMap.avdata".
13. 在 Main macrofilter中,加入EnumerateFiles (將其配置為重複處理所有影像),"LoadImage" 呼叫影像,然後 "RemapImage" filter. 將該 inSpatialMap 鏈接到先前保存的文件或文件可以被加載,(如圖示,滑鼠右鍵,彈出選單,選擇選項)
文件被連接,檔案路徑需指向驅動檔案,否則將使其它用戶無效,為了能夠運行其它用,請輸入相對路徑
14. 運行產生的程序,顯示彼此相鄰的原件和重新映射的影像
§ Main macrofilter remaps input images
§ PrepareSpatialMap Macrofilter creates spatial map from selected images