1. 視覺測量整體方案
本視覺測量系統采用單目視覺技術實現目標物距離和幾何尺寸的雙重測量。系統首先通過深度學習模型(PaddleDetection)快速定位目標物(帶黑框的A4紙),利用目標物在圖像中的像素高度與物理距離的二次函數關系,解算目標到基準線的距離D。該函數模型通過實驗標定獲得,測量范圍100-200cm,精度達±2cm。
對于內部幾何尺寸測量,系統創新性地采用中心區域聚焦策略:在檢測到的目標區域內,自動裁剪中心80%區域排除邊框干擾,通過自適應閾值處理和形態學濾波增強幾何特征。隨后提取四邊形輪廓,基于圖像中心優選算法鎖定目標幾何圖形,最后利用A4紙標準尺寸(210×297mm)與像素尺寸的比例關系,精確換算內部幾何圖形的實際邊長x,測量誤差≤0.6cm。
系統嚴格滿足競賽實時性要求,從圖像采集到結果顯示完整流程耗時<1s。關鍵創新點包括:1)動態閾值窗口技術,根據目標尺寸自動調整處理參數;2)幾何特征三級過濾機制(頂點數/寬高比/中心距離);3)松耦合模塊化設計,為后續擴展三角形/圓形測量預留接口。整套方案在200-1000lux照度下穩定工作,已通過基本要求三項測試驗證。
2. 核心算法實現
2.1 目標檢測模塊
模型選擇:采用PaddleDetection深度學習框架。
檢測對象:A4紙目標物(帶2cm黑色邊框)。
關鍵參數:model.SetThreshold(0.7, 0.3);
輸出:檢測到的A4紙位置。
2.2 距離測量算法
距離測量基于目標物高度像素值與實際距離的二次函數關系,具體的實現代碼如下:
doublereverseToDistance(doubley){ // 構造方程:a*x^2 + b*x + (c - y) = 0 doubleA=a; doubleB=b; doubleC=c - y; doublediscriminant=B * B -4* A * C; // 判別式小于0,無實數解 if(discriminant 0) {? ? ? ? return?-1.0;?// 表示無效解? ? }? ? double?sqrt_d?=?std::sqrt(discriminant);? ? double?x1?=?(-B + sqrt_d) / (2?* A);? ? double?x2?=?(-B - sqrt_d) / (2?* A);? ? // 選擇在合理范圍 [1.0, 2.0] 內的解? ? bool?x1_valid?=?(x1 >=1.0&& x1 <=?2.0);? ? bool?x2_valid?=?(x2 >=1.0&& x2 <=?2.0);? ? if?(x1_valid && x2_valid) {? ? ? ? // 如果兩個解都有效,選擇更接近趨勢的(通常 x2 更小,x1 更大,看哪個更合理)? ? ? ? // 實際上由于 a > 0, b < 0,通常 x2 是更合理的(較小的根)? ? ? ? // 但根據拋物線形狀,我們取更靠近數據趨勢的? ? ? ? // 可以打印調試,但通常取接近 1.0~2.0 之間的? ? ? ? return?x2;?// 通常 x2 是物理意義正確的(遞減趨勢)? ? }?else?if?(x1_valid) {? ? ? ? return?x1;? ? }?else?if?(x2_valid) {? ? ? ? return?x2;? ? }?else?{? ? ? ? return?-1.0;?// 無有效解? ? }}
物理原理:目標物表觀尺寸與距離成反比。
標定方式:通過實驗數據擬合參數
3. 幾何特征提取流程
幾何特征提取是視覺測量系統的核心環節,采用多級處理流程確保測量精度。系統首先在目標檢測獲取的A4紙區域內,動態裁剪中心80%區域以排除2cm黑色邊框干擾,隨后進行自適應二值化處理:基于目標尺寸自動計算閾值窗口(取目標短邊的1/4且保證為奇數),采用高斯加權模式增強內部幾何圖形與背景的對比度。該自適應策略能有效應對100-200cm距離范圍內目標表觀尺寸的變化。
輪廓處理階段采用三級過濾機制:先通過形態學閉運算消除噪點,再提取所有潛在輪廓;然后執行嚴格幾何驗證:1) 多邊形逼近頂點數必須為4(四邊形) 2) 寬高比限制在0.5-2.0范圍 3) 輪廓面積大于40像素。最終通過中心優選算法:計算各輪廓點到圖像中心的歐氏距離,選取距離平方和最小的輪廓作為目標幾何圖形,該策略可有效減少透視畸變影響,確保在物面平行于成像平面時獲得最優測量結果。
部分核心代碼如下:
// 提取 ROIcv::Matroi_frame =input_mat(safe_box);if(roi_frame.empty())continue;// 轉灰度并二值化提取黑色區域cv::Matroi_gray, roi_binary;cv::cvtColor(roi_frame, roi_gray, cv::COLOR_BGR2GRAY);// 關鍵修改1:使用自適應閾值處理中心區域intblock_size = std::min(safe_box.width, safe_box.height) /4;if(block_size %2==0) block_size++; // 確保為奇數cv::adaptiveThreshold(roi_gray, roi_binary,255, cv::ADAPTIVE_THRESH_GAUSSIAN_C, cv::THRESH_BINARY_INV, block_size,5);// 關鍵修改2:創建中心區域ROI(忽略邊緣黑邊)intmargin = std::min(safe_box.width, safe_box.height) /5; // 忽略20%的邊緣區域cv::Rectcenter_roi(margin, margin, roi_binary.cols -2* margin, roi_binary.rows -2* margin);if(center_roi.width <=?0?|| center_roi.height <=?0)?continue;cv::Mat?roi_center =?roi_binary(center_roi);// 形態學操作去噪cv::Mat?kernel =? ? cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5,?5));cv::morphologyEx(roi_center, roi_center, cv::MORPH_CLOSE, kernel);// 查找輪廓(僅在中心區域)std::vectorvectorPoint>> contours;cv::findContours(roi_center, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
4. 尺寸計算原理
目標物的尺寸計算原理是基于相似理論的比例來進行換算的,核心代碼如下:
// A4紙實際尺寸(毫米)constdoubleA4_WIDTH_MM =210.0;constdoubleA4_HEIGHT_MM =297.0;cv::Rect a4_rect = results[0].box;doublea4_width_px = a4_rect.width;doublea4_height_px = a4_rect.height;// 計算實際尺寸比例doublescale_x = A4_WIDTH_MM / a4_width_px;doublescale_y = A4_HEIGHT_MM / a4_height_px;// 計算內部矩形的實際尺寸(單位:毫米)doubleinner_width_mm = inner_width_px * scale_x;doubleinner_height_mm = inner_height_px * scale_x;doubleinner_length_mm = ((inner_width_mm + inner_height_mm) /2) +5;inner_length_cm = inner_length_mm /10.0;// 轉換為厘米
5. 性能評估
處理速度:平均推理時間:<100ms,端到端延遲:<1s
測量精度:
參數 | 要求精度 | 實測精度 |
---|---|---|
距離D | <= 5cm | <= 2cm |
邊長x | <= 1cm | <= 0.6cm |
-
測量
+關注
關注
10文章
5286瀏覽量
113770 -
視覺識別
+關注
關注
3文章
109瀏覽量
17097
發布評論請先 登錄
基于SoC的雙目視覺ADAS解決方案
基于SoC的雙目視覺ADAS解決方案
單目視覺SLAM仿真系統的設計與實現
基于單目視覺的智能車輛視覺導航系統設計

一種基于圖像處理的雙目視覺校準方法
基于SIFT視覺詞匯的目標識別算法

單目視覺識別的無限市場潛力
基于激光雷達信息與單目視覺信息的車輛識別方法
雙目立體視覺是什么?單目視覺與雙目立體視覺的區別?

評論