System Status: stereo infrared cameras - 2 OmniVision9281 + 1 OmniVision580(bridge processor)
_________________________________________________________________
OV9281:
Resolution: 1 megapixel(MP)
Frame Rate: 720P(1280*720)@120 fps & VGA@180fps
Pixel Size: 3.0 µm
Output Format: 8-/10-bit RAW
Chroma: Black & White
_________________________________________________________________
Tracking Object: Infrared Led light
一般來說,涉及到相機精度方面的應用,都應進行相機標定(camera calibration),相機標定相當重要。
方法步驟:
1. 基於OpenCV的立體相機標定,需離線標定好。
關於立體相機標定,見之前寫過的兩篇博客內容:
基於OpenCV的立體相機標定StereoCalibration與目標三維座標定位
OpenCV立體相機標定Stereo Calibration與校準檢驗Rectification詳述
2. OV580可時間同步兩路OV9281數據輸出,輸出數據爲raw8格式,數據量大小爲_height*_width,需要對輸入buffer進行預處理,轉換成左、右Mat(_height, _width/2)格式,便於OpenCV處理。
for (int i = 0; i < _height; i ++)
{
memcpy(left_buffer + i*_width/2, (unsigned char *)_buffer + i * _width + _width/2, _width/2);
memcpy(right_buffer + i*_width/2, (unsigned char *)_buffer + i * _width, _width/2);
}
*matL = Mat(_height, _width/2, CV_8U, left_buffer);
*matR = Mat(_height, _width/2, CV_8U, right_buffer);
3. 根據歷史信息預測當前幀Led目標所在圖像位置:kalman預測,運動曲線擬合預測。
4. 幀差法確定前一幀中心,並與存儲的上一幀中心進行比較,若偏差較大,則更新當前預測中心。
問:步驟3已經根據上幀所在位置計算出了當前幀的預測中心。此處爲何還要選取幀差法計算上一幀中心呢?
答:上一幀目標中心確已獲取並存儲,若目標中心準確,則應與幀差法所求的上一幀目標相同,此時預測結果可信;若兩中心座標不同,信任幀差法計算的上一幀中心,將不以步驟3計算的預測中心爲準,更新預測中心。
5. 根據當前預測中心置ROI,步驟7只需在ROI中檢測當前幀Led目標,相比整圖檢測節約時耗。
6. 對當前ROI區域進行校準,相比整圖校準節約時耗。
remap(_imgLeft, img1r, map11(ROIrect), map12(ROIrect), INTER_LINEAR);
remap(_imgRight, img2r, map21(ROIrect), map22(ROIrect), INTER_LINEAR);
7. 檢測當前ROI區域紅外Led目標 -- Blob Detection。
blobParams.thresholdStep = 25;
blobParams.minThreshold = 150;
blobParams.maxThreshold = 250;
blobParams.minRepeatability = 1;
blobParams.minDistBetweenBlobs = 2;
blobParams.filterByColor = true;
blobParams.blobColor = 255;
blobParams.filterByArea = true;
blobParams.minArea = 10;
blobParams.maxArea = 1000;
blobParams.filterByCircularity = false;
blobParams.filterByInertia = false;
blobParams.filterByConvexity = false;
8. 去掉ROI中的僞目標,構造blob(Area, radius, height, width)特徵向量;若目標靜止不動,則與上幀目標最近者爲當前幀真實目標。
由於系統能夠達到實時,即720p@60fps,所以當目標運動時,相鄰兩幀之間的目標運動不會太大,且同一目標形狀、大小等變化也不會太大,構造高維特徵向量,尋找前一幀目標在當前幀中最相似的匹配,則可視其爲當前幀的真實目標;若物體靜止時,則可不用特徵篩選僞目標,可搜索當前幀最近的目標即可視爲真實目標。
9. 對目標點進行勻速kalman濾波,可有效消除目標靜止放置時的抖動。
當前系統檢測精度高,即使目標放置靜止,但實時檢測時,由於Led目標光源的功率不穩定性以及Blob檢測方法的複雜性,會帶來目標在圖像上產生亞像素精度級別的波動,在計算3D座標時帶來mm級別的擾動,故利用防抖算法可以有效降低結果的跳動,帶來視覺上面的改善。
10. 最終,得到水平線對齊的左右圖目標座標,利用三角測距原理可獲得單點目標準確3D座標,精度可以很高 3m/ 2mm-error(與硬件系統指標相關)。