跳轉到內容

SwisTrack/示例/校準/半自動

來自華夏公益教科書

本示例展示瞭如何透過拍攝已知真實世界位置的標記照片,以半自動方式校準您的設定。如果無法透過自動校準可靠地檢測到斑點,則建議使用此方法。

在此過程中,您將確定一組點,您知道它們的真實世界位置及其在相機拍攝的影像上的位置。SwisTrack 中使用的校準元件將擬合一個函式,該函式最能描述真實世界座標和影像座標之間的對映。

設定和標記放置

[編輯 | 編輯原始碼]

像執行實驗一樣設定您的實驗區域。確保相機正確安裝在其最終位置。此外,建議在與最終實驗相同的照明條件下進行校準。

在您的區域中放置 6 到 50 個標記。更多標記通常會在嚴重失真影像上產生更好的校準結果,但放置時間更長。如果您的工作是低失真,4x4 模式(16 個標記)可能足以產生良好的結果。

如果您稍後在實驗中使用簡單的標記,請重新使用相同的標記來進行校準。否則,只需使用列印在紙上的圓圈。確保標記可以從背景中很好地區分出來(至少在區域性),例如白色紙上的黑色實心圓圈。標記在影像上至少應有 5x5 畫素的大小。雖然首選大約 10x10 畫素的大小。

將這些標記放置在您的區域中,並仔細測量每個標記的中心位置(x,y)。您可以使用其中一個標記或區域邊界作為參考點。請注意,您可以將標記放置在您選擇的任何位置。無需將它們放置在特定模式中,儘管以系統的方式放置它們通常使確定其真實世界位置更容易。

請注意,校準標記應放置在與最終標記(或物體)相同的高度,以便在您的實驗期間跟蹤。將它們放在地面上會導致影像邊框處出現明顯的偏移。

開啟相機並啟動 SwisTrack。如果您已經為您的實驗建立了 SwisTrack 配置,請使用該配置拍照。否則,從新的(空的)配置開始,新增與您的相機相對應的元件,以及一個轉換為灰度(或轉換為彩色)元件。

單擊轉換為灰度(或轉換為彩色)元件,然後按工具欄中的步驟按鈕。SwisTrack 將獲取影像並將其顯示在螢幕上。確保您的斑點在影像上清晰可見,並在必要時調整相機採集引數。這也是最後一次您可以移動相機或調整對焦(如果需要)。

如果您對影像感到滿意,請右鍵單擊顯示的影像並選擇將原始影像另存為...。將影像儲存為calibration.bmp

提取標記

[編輯 | 編輯原始碼]

啟動 Matlab 並使用以下命令載入儲存的影像

image = imread('calibration.bmp');

要在螢幕上顯示影像(用於驗證目的),請鍵入

imagesc(image)
axis equal

切換到 SwisTrack 的calibrationFileTools 資料夾,然後鍵入

image_positions = FindBlobs(image, N, THRESHOLD_LEVEL);

其中 N 代表您的圖片上可見的標記數量,THRESHOLD_LEVEL 代表應對影像進行閾值處理的值 (0..1)。您必須透過修改此值找到適合您影像的閾值,直到標記(至少在區域性)與周圍環境區分開來。一個好的起始值是 0.5。

找到合適的閾值後,單擊每個標記。指令碼將透過考慮相同顏色的附近畫素自動計算標記的中心。完成操作後,指令碼將返回一個 N 行 2 列的矩陣,其中包含標記的影像位置。

建立 XML 校準檔案

[編輯 | 編輯原始碼]

除了影像位置外,您還需要這些標記的世界位置。建立一個 N 行 2 列的矩陣,其中包含標記的世界位置,順序與它們在image_positions矩陣中出現的順序相同(即您單擊它們的順序)。

world_positions = [2.0, 1.0
                   2.0, 1.5
                   ...
                   ];

然後,透過呼叫以下命令編寫 XML 檔案

writeSwisTrackCalibXMLFile(worldPoints,imagePoints,'calibration_points.xml')

calibration_points.xml 檔案隨後可以與 SwisTrack 中提供的校準元件一起使用。

華夏公益教科書