:從視差公式到果蔬采摘機(jī)器人實(shí)戰(zhàn)解析)
簡(jiǎn)介《計(jì)算機(jī)視覺在果蔬機(jī)械采摘中的應(yīng)用研究》是一篇面向農(nóng)業(yè)自動(dòng)化與機(jī)器視覺方向的技術(shù)文獻(xiàn)可為果蔬采摘機(jī)器人、自動(dòng)化采摘系統(tǒng)研究人員和相關(guān)專業(yè)學(xué)習(xí)者提供參考。資源共1個(gè)PDF文件壓縮包約1.35MB內(nèi)容為完整期刊論文涵蓋摘要、關(guān)鍵詞、正文及圖表。目前已有91人在本站學(xué)習(xí)/下載。論文針對(duì)傳統(tǒng)人工采摘?jiǎng)趧?dòng)強(qiáng)度大、目標(biāo)識(shí)別困難等問題系統(tǒng)闡述了計(jì)算機(jī)視覺系統(tǒng)的工作原理與部件構(gòu)成涵蓋照明裝置選配、單色/彩色攝像機(jī)比較、圖像低層處理、特征提取和模式識(shí)別等流程重點(diǎn)分析了雙目立體視覺的數(shù)學(xué)建模推導(dǎo)了目標(biāo)點(diǎn)深度與三維坐標(biāo)的關(guān)鍵公式并完成機(jī)械采摘系統(tǒng)的硬件平臺(tái)與軟件流程設(shè)計(jì)還通過仿真實(shí)驗(yàn)驗(yàn)證了目標(biāo)識(shí)別與定位的精度及系統(tǒng)穩(wěn)定性。對(duì)于相關(guān)課題研究、課程設(shè)計(jì)或?qū)W術(shù)論文寫作其中的理論推導(dǎo)、系統(tǒng)架構(gòu)和工程實(shí)現(xiàn)思路都可直接借鑒。1. 識(shí)別率 98.6% 的果蔬采摘系統(tǒng)這份資料拆開看是什么做農(nóng)業(yè)視覺的人第一次翻開這篇論文時(shí)多半會(huì)被兩個(gè)數(shù)字抓住正常個(gè)體識(shí)別率 98.6%被遮擋個(gè)體識(shí)別率 93.2%單果采摘速度 25 秒。這兩個(gè)數(shù)字背后是一套完整的雙目視覺果蔬采摘系統(tǒng)從相機(jī)標(biāo)定、圖像分割、立體匹配到機(jī)械臂抓取全部串成了一條鏈。論文出自保定職業(yè)技術(shù)學(xué)院團(tuán)隊(duì)發(fā)表在《農(nóng)機(jī)化研究》2021 年第 6 期用橙子作為試驗(yàn)對(duì)象做了仿真驗(yàn)證。對(duì)正在做計(jì)算機(jī)視覺大作業(yè)、農(nóng)業(yè)機(jī)器人課程設(shè)計(jì)或者想入坑“視覺機(jī)械臂”這條線的從業(yè)者來說這篇論文的價(jià)值在于它把原理、建模、硬件選型、軟件流程寫得非常規(guī)整幾乎可以直接當(dāng)作一個(gè)小型采摘項(xiàng)目的需求文檔和技術(shù)路線圖來用。更難得的是它把雙目測(cè)距的數(shù)學(xué)推導(dǎo)完整給了出來而不是像很多資料那樣只貼一句“用深度學(xué)習(xí)識(shí)別”這對(duì)理解系統(tǒng)邊界、復(fù)現(xiàn)實(shí)驗(yàn)、回答答辯問題都很有幫助。2. 雙目視覺建模為什么兩臺(tái)相機(jī)就能算出果實(shí)的深度2.1 從單目到雙目像素坐標(biāo)與空間坐標(biāo)的對(duì)應(yīng)關(guān)系計(jì)算機(jī)視覺系統(tǒng)模擬人的行為成像裝置相當(dāng)于眼睛計(jì)算機(jī)相當(dāng)于大腦執(zhí)行機(jī)構(gòu)相當(dāng)于四肢。單目相機(jī)的問題在于一張二維圖像里的一個(gè)像素坐標(biāo) (x, y)可以對(duì)應(yīng)真實(shí)空間里無數(shù)個(gè)三維點(diǎn)深度信息丟失了。論文的做法是直接用兩臺(tái)參數(shù)完全相同的攝像機(jī)同步拍攝利用視差恢復(fù)深度這是經(jīng)典的雙目立體視覺路線。這里有個(gè)容易理解偏差的點(diǎn)雙目測(cè)距不是“兩臺(tái)相機(jī)拍兩張圖做匹配”這么簡(jiǎn)單而是從成像原理出發(fā)建立幾何關(guān)系。論文借鑒小孔成像模型認(rèn)為任意像素點(diǎn)坐標(biāo) (x, y) 與真實(shí)空間坐標(biāo) (x, y, z) 一一對(duì)應(yīng)。兩個(gè)攝像機(jī)位置相互平行且成像平面重合焦距 f 和中心距 b 已知目標(biāo)點(diǎn) P 在左右成像面上分別落在像素坐標(biāo) P1(x1, y1) 和 P2(x2, y2)x1 與 x2 的差值就是視差。用三角相似原理就能推出目標(biāo)點(diǎn)深度這是整套系統(tǒng)的數(shù)學(xué)地基。2.2 視差公式推導(dǎo)Z bf/(x1 - x2) 到底在算什么論文第 2 節(jié)給出了完整推導(dǎo)過程。取兩攝像機(jī)中心連線 O1O2 的中點(diǎn)為世界坐標(biāo)系原點(diǎn)目標(biāo)點(diǎn) P 在 XOY 平面的投影如圖 3 所示。由三角相似關(guān)系P 到 O1O2 連線的距離 d 等于 bf/(x1 - x2)。注意這個(gè) d 就是目標(biāo)點(diǎn)到 Z 軸的距離也就是深度 Z。同理可以推出 X 和 Y 坐標(biāo)X b(x1 x2) / [2(x1 - x2)] Y b(y1 y2) / [2(y1 - y2)] Z bf / (x1 - x2)三個(gè)公式放在一起看規(guī)律很清晰視差 x1 - x2 出現(xiàn)在所有分母里。視差越大深度越小目標(biāo)越近視差為零目標(biāo)在無窮遠(yuǎn)。X 和 Y 的分子是左右像素坐標(biāo)的均值相當(dāng)于用兩個(gè)視角的中間值去抵消相機(jī)視角造成的偏差。這說明雙目系統(tǒng)在理論上對(duì)目標(biāo)點(diǎn)的三維重建是完備的只要視差算得準(zhǔn)坐標(biāo)就能算得準(zhǔn)。實(shí)際落地時(shí)f 和 b 是兩個(gè)關(guān)鍵標(biāo)定量。f 是焦距單位要和像素統(tǒng)一b 是兩臺(tái)相機(jī)的中心距基線。論文沒有給出實(shí)驗(yàn)用的具體數(shù)值但常見做法是室外果園場(chǎng)景基線取 10 到 20 厘米焦距用標(biāo)定板算出來的像素焦距。基線拉長(zhǎng)能提高近距離測(cè)距精度但會(huì)縮小共同視野遮擋也會(huì)更嚴(yán)重這是一個(gè)需要根據(jù)工作距離折中的參數(shù)。2.3 三點(diǎn)前提條件與設(shè)備選型參數(shù)這套數(shù)學(xué)模型能成立前提條件有三個(gè)缺一個(gè)精度就崩。第一兩個(gè)攝像機(jī)型號(hào)和參數(shù)必須完全相同論文明確寫了“兩個(gè)攝像機(jī)的焦距和內(nèi)參數(shù)完全相同”。第二兩個(gè)攝像機(jī)的位置必須相互平行且成像平面重合實(shí)際安裝時(shí)很難做到絕對(duì)平行所以要先做極線校正。第三左右圖像中對(duì)應(yīng)的目標(biāo)點(diǎn)必須正確匹配這一步依賴特征提取的質(zhì)量和匹配算法的魯棒性。選型參數(shù)可以參考下表參數(shù)建議范圍說明焦距 f6mm 或 8mm 定焦定焦鏡頭畸變小標(biāo)定參數(shù)穩(wěn)定不要用自動(dòng)變焦基線 b100mm - 200mm工作距離 0.5m - 2m 時(shí)常用基線太長(zhǎng)視野重疊小分辨率1920×1080 及以上分辨率影響 x1、x2 的像素精度間接決定視差精度相機(jī)類型彩色相機(jī)果蔬顏色特征是分割的重要依據(jù)單色相機(jī)丟掉了顏色信息同步方式硬件觸發(fā)同步軟觸發(fā)存在時(shí)間差運(yùn)動(dòng)中的果實(shí)會(huì)引入匹配偏差提示論文在引言部分提到單色攝像機(jī)與彩色攝像機(jī)對(duì)光照感應(yīng)范圍不同需根據(jù)采摘需求選配。做果蔬識(shí)別時(shí)優(yōu)先選彩色相機(jī)因?yàn)槌墒旃叩念伾柡投韧欠指铍A段最能直接利用的特征。3. 系統(tǒng)硬件架構(gòu)視覺、控制、機(jī)械臂三塊怎么耦合3.1 系統(tǒng)總體結(jié)構(gòu)與分工論文第 3 節(jié)把采摘系統(tǒng)分成三大塊控制系統(tǒng)、機(jī)械臂系統(tǒng)和計(jì)算機(jī)視覺系統(tǒng)。控制系統(tǒng)的角色是“底盤大腦”完成地面運(yùn)動(dòng)控制、接收視覺系統(tǒng)傳遞的目標(biāo)信號(hào)、驅(qū)動(dòng)采摘平臺(tái)移動(dòng)并向機(jī)械臂輸出抓取指令。機(jī)械臂系統(tǒng)是執(zhí)行終端負(fù)責(zé)大臂、關(guān)節(jié)、夾持機(jī)構(gòu)的動(dòng)作。計(jì)算機(jī)視覺系統(tǒng)是“眼睛”負(fù)責(zé)環(huán)境獲取、目標(biāo)識(shí)別與定位并把圖像數(shù)據(jù)交給控制系統(tǒng)。這套架構(gòu)里最容易被新手忽略的是目標(biāo)存放籃論文總體設(shè)計(jì)圖里編號(hào) 4 就是它。視覺系統(tǒng)不僅要識(shí)別果實(shí)還要判斷果實(shí)在空間中的位置機(jī)械臂摘下來之后要放到存放籃里如果籃子的坐標(biāo)沒有參與系統(tǒng)建模機(jī)械臂就只能“摘”不能“放”。雖然論文沒有展開存放籃的定位細(xì)節(jié)但做真機(jī)實(shí)驗(yàn)時(shí)這一步繞不開。3.2 視覺系統(tǒng)硬件組成與選型要點(diǎn)視覺系統(tǒng)主要由攝像機(jī)、視頻采集卡、視頻線纜及計(jì)算機(jī)組成。攝像機(jī)負(fù)責(zé)圖像獲取視頻采集卡把模擬或數(shù)字視頻信號(hào)轉(zhuǎn)成計(jì)算機(jī)能處理的格式計(jì)算機(jī)運(yùn)行圖像預(yù)處理、分割、特征提取、立體匹配和模型計(jì)算。這套配置在論文發(fā)表年份是主流方案今天做新項(xiàng)目一般會(huì)直接用 USB3.0 或 GigE 接口的工業(yè)相機(jī)省掉采集卡但系統(tǒng)組成邏輯不變。安裝時(shí)要特別注意兩臺(tái)相機(jī)的相對(duì)姿態(tài)。論文模型假設(shè)兩個(gè)攝像機(jī)平行共面物理安裝很難做到絕對(duì)理想因此軟件流程里必須有“極線校正”這一步。校正之后左右圖像中同一目標(biāo)點(diǎn)只在水平方向有偏移垂直差接近零這時(shí) x1 - x2 才是真正的視差。如果相機(jī)裝歪了又不校正視差里會(huì)混入垂直分量測(cè)距結(jié)果直接失真。3.3 控制鏈路視覺數(shù)據(jù)到 PLC 指令的完整通路控制鏈路是很多學(xué)習(xí)者讀完論文仍然覺得玄學(xué)的地方其實(shí)把數(shù)據(jù)流拆開就清楚了。視覺系統(tǒng)的計(jì)算機(jī)完成目標(biāo)識(shí)別和定位后輸出的是一組三維坐標(biāo)和圖像信息。這些數(shù)據(jù)傳到工控機(jī)經(jīng)數(shù)據(jù)轉(zhuǎn)換接口轉(zhuǎn)發(fā)給 PLC 控制器。PLC 根據(jù)預(yù)設(shè)的采摘邏輯計(jì)算控制參數(shù)輸出到機(jī)械臂系統(tǒng)的驅(qū)動(dòng)模塊再由驅(qū)動(dòng)單元控制大臂、關(guān)節(jié)機(jī)構(gòu)、夾持機(jī)構(gòu)的動(dòng)作。鏈路節(jié)點(diǎn)職責(zé)與視覺系統(tǒng)的接口視覺計(jì)算機(jī)圖像采集、目標(biāo)識(shí)別、三維定位輸出目標(biāo)坐標(biāo) (X, Y, Z) 與圖像數(shù)據(jù)工控機(jī)接收視覺數(shù)據(jù)轉(zhuǎn)發(fā)控制指令通過數(shù)據(jù)轉(zhuǎn)換模塊與 PLC 通信PLC 控制器輸出控制參數(shù)驅(qū)動(dòng)執(zhí)行機(jī)構(gòu)接收目標(biāo)坐標(biāo)根據(jù)行程范圍做運(yùn)動(dòng)規(guī)劃?rùn)C(jī)械臂驅(qū)動(dòng)模塊控制大臂、關(guān)節(jié)、夾持機(jī)構(gòu)接收 PLC 控制信號(hào)驅(qū)動(dòng)步進(jìn)/伺服電機(jī)這條鏈路中最容易出問題的環(huán)節(jié)是坐標(biāo)系的統(tǒng)一。視覺系統(tǒng)計(jì)算出的目標(biāo)坐標(biāo)是世界坐標(biāo)系下的值原點(diǎn)在兩攝像機(jī)中心連線的中點(diǎn)。機(jī)械臂的抓取動(dòng)作是在機(jī)械臂基座坐標(biāo)系下規(guī)劃的。兩個(gè)坐標(biāo)系之間有平移和旋轉(zhuǎn)關(guān)系論文沒有給出標(biāo)定方法但實(shí)際項(xiàng)目中必須做手眼標(biāo)定否則視覺給出的坐標(biāo)再準(zhǔn)機(jī)械臂也會(huì)抓空。4. 軟件流程與目標(biāo)識(shí)別從攝像機(jī)標(biāo)定到坐標(biāo)輸出4.1 軟件主流程初始化、標(biāo)定、采集、匹配、定位論文第 4 節(jié)的軟件流程圖給出了完整工作順序系統(tǒng)啟動(dòng)后先做軟硬件初始化然后開始攝像機(jī)標(biāo)定接下來啟動(dòng)圖像采集程序兩臺(tái)攝像機(jī)同步取圖。采集到的圖像依次經(jīng)過預(yù)處理、分割、目標(biāo)識(shí)別送入計(jì)算機(jī)判斷。如果兩個(gè)攝像機(jī)同時(shí)發(fā)現(xiàn)目標(biāo)就進(jìn)入立體匹配階段結(jié)合標(biāo)定參數(shù)計(jì)算目標(biāo)的三維坐標(biāo)輸出坐標(biāo)與圖像信息給控制系統(tǒng)??刂葡到y(tǒng)計(jì)算結(jié)果后驅(qū)動(dòng)平臺(tái)移動(dòng)到達(dá)目標(biāo)附近后啟動(dòng)機(jī)械臂程序完成抓取。這套流程有一個(gè)值得注意的設(shè)計(jì)先判斷“兩個(gè)攝像機(jī)是否同時(shí)發(fā)現(xiàn)目標(biāo)”再?zèng)Q定是否做立體匹配。這意味著系統(tǒng)在單目模式下也能工作當(dāng)一個(gè)相機(jī)的視野被遮擋時(shí)系統(tǒng)可以降級(jí)為單目識(shí)別只是深度信息缺失。這個(gè)容錯(cuò)設(shè)計(jì)在實(shí)際果園環(huán)境中很實(shí)用因?yàn)闃淙~遮擋是常態(tài)如果強(qiáng)制要求兩路相機(jī)都看到目標(biāo)才動(dòng)手采摘成功率會(huì)很低。4.2 圖像預(yù)處理與二值化復(fù)現(xiàn)論文識(shí)別流程的 OpenCV 代碼論文實(shí)驗(yàn)部分的圖像處理路徑是采集原圖像 → 二值化處理 → 確定采摘目標(biāo)輪廓 → 完成定位。仿真實(shí)驗(yàn)用橙子做對(duì)象成熟橙子的顏色與樹葉、枝干差異明顯二值化分割是可行方案。下面用 OpenCV 復(fù)現(xiàn)這條路徑邏輯與論文一致只是把論文沒有展開的實(shí)現(xiàn)細(xì)節(jié)補(bǔ)齊。import cv2 import numpy as np # 讀取采摘目標(biāo)原始圖像 img cv2.imread(orange.jpg) rgb cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 灰度化 高斯濾波抑制樹葉紋理噪聲 gray cv2.cvtColor(rgb, cv2.COLOR_RGB2GRAY) blur cv2.GaussianBlur(gray, (5, 5), 0) # 大津閾值二值化自動(dòng)確定分割閾值 _, binary cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY cv2.THRESH_OTSU) # 提取外部輪廓過濾掉面積過小的噪聲區(qū)域 contours, _ cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) centers [] for cnt in contours: area cv2.contourArea(cnt) if area 50: continue x, y, w, h cv2.boundingRect(cnt) cx, cy x w // 2, y h // 2 centers.append((cx, cy, area)) cv2.circle(rgb, (cx, cy), 4, (255, 0, 0), -1) print(檢測(cè)到目標(biāo)中心點(diǎn):, centers)這段代碼里高斯濾波核大小取 5×5在去除噪聲和保留果實(shí)邊緣之間比較均衡大津閾值不需要人工指定閾值對(duì)光照變化有一定適應(yīng)能力面積閾值 50 像素用來濾掉小噪點(diǎn)。輪廓中心點(diǎn)cx, cy就是左右圖像中的目標(biāo)像素坐標(biāo)后續(xù)代入雙目模型計(jì)算三維位置。注意這只是一個(gè)識(shí)別分割示例實(shí)際果園場(chǎng)景光照復(fù)雜論文的仿真實(shí)驗(yàn)也提到“分析攝像機(jī)采集的圖像信息”說明環(huán)境是相對(duì)可控的。4.3 立體匹配與目標(biāo)定位怎么從視差得到采摘點(diǎn)立體匹配的關(guān)鍵是找到左右圖像中同一個(gè)目標(biāo)的對(duì)應(yīng)關(guān)系。論文流程中匹配發(fā)生在分割和識(shí)別之后而非直接在原始圖像上做密集匹配。這是一個(gè)工程上很合理的取舍全圖密集匹配計(jì)算量大農(nóng)業(yè)采摘系統(tǒng)對(duì)實(shí)時(shí)性有要求先用顏色特征把果實(shí)區(qū)域找出來再做稀疏匹配只需要對(duì)少數(shù)幾個(gè)候選目標(biāo)計(jì)算視差即可。匹配完成后每個(gè)目標(biāo)都有左右兩條檢測(cè)結(jié)果 (x1, y1) 和 (x2, y2)。用 2.2 節(jié)的三組公式計(jì)算 (X, Y, Z)得到的是目標(biāo)表面的三維坐標(biāo)。實(shí)際控制機(jī)械臂抓取時(shí)這個(gè)點(diǎn)并不一定是抓手的最佳接觸點(diǎn)因?yàn)楣麑?shí)有體積抓取點(diǎn)應(yīng)該在質(zhì)心附近而不是表面最近點(diǎn)。論文實(shí)驗(yàn)的目標(biāo)是“完成采摘目標(biāo)的定位”沒有細(xì)化抓取姿態(tài)做真機(jī)時(shí)一般會(huì)在果實(shí)表面坐標(biāo)基礎(chǔ)上沿深度方向增加一個(gè)果實(shí)半徑的偏移量。5. 避坑指南雙目采摘系統(tǒng)最常見的五個(gè)翻車點(diǎn)5.1 標(biāo)定參數(shù)用了出廠值測(cè)距誤差大得離譜現(xiàn)象按 2.2 節(jié)公式算出的深度值與實(shí)測(cè)值差了幾十厘米而且距離越遠(yuǎn)偏差越大。原因相機(jī)出廠標(biāo)注的焦距是光學(xué)焦距單位是毫米而公式里的 x1 - x2 是像素差像素單位和毫米單位混在一起算結(jié)果必然錯(cuò)誤。解決先用標(biāo)定板做一次完整標(biāo)定得到像素單位的焦距 fx、fy以及主點(diǎn) cx、cy。之后再代入公式時(shí)統(tǒng)一用像素單位。我一般會(huì)寫一個(gè)標(biāo)定腳本把棋盤格圖片跑一遍保存相機(jī)參數(shù)到 JSON 文件每次啟動(dòng)時(shí)加載不重復(fù)標(biāo)定。5.2 兩臺(tái)相機(jī)沒有做極線校正視差里混入了垂直分量現(xiàn)象分割結(jié)果正確但同一目標(biāo)在左右圖像中的 y 坐標(biāo)明顯不同代入公式后深度波動(dòng)很大。原因物理安裝不可能做到絕對(duì)平行兩臺(tái)相機(jī)之間存在微小旋轉(zhuǎn)角導(dǎo)致同一目標(biāo)在左右圖像中除了水平差異外還有垂直差異。解決軟件流程里增加極線校正步驟用相機(jī)標(biāo)定得到的畸變系數(shù)和旋轉(zhuǎn)矩陣做立體校正。校正后檢查左右圖像中目標(biāo)點(diǎn)的 y 坐標(biāo)差控制在 1 到 2 個(gè)像素以內(nèi)再算視差。5.3 光照變化導(dǎo)致二值化閾值失效現(xiàn)象上午能正常識(shí)別的分割參數(shù)到了下午陰影環(huán)境果實(shí)區(qū)域被切成碎片或者整片漏檢。原因固定閾值二值化對(duì)光照敏感論文仿真環(huán)境的光照是可控的真實(shí)果園里樹葉遮擋會(huì)造成局部陰影果實(shí)顏色特征發(fā)生變化。解決用大津閾值代替固定閾值加上顏色空間的限定。論文提到“利用照明裝置排除外界光照環(huán)境因素的干擾”實(shí)際項(xiàng)目中還需要考慮補(bǔ)光燈的安裝位置避免強(qiáng)光直射造成果實(shí)表面高光反射。5.4 遮擋目標(biāo)被漏檢識(shí)別率直接從 98% 掉到 90%現(xiàn)象果樹內(nèi)部的果實(shí)被枝葉遮擋二值化后目標(biāo)不完整輪廓面積小于面積閾值被當(dāng)成噪聲過濾掉。原因論文實(shí)驗(yàn)中“被遮擋個(gè)體”識(shí)別率 93.2%低于“正常識(shí)別個(gè)體”的 98.6%說明遮擋是識(shí)別率損失的主要來源。面積閾值過濾噪聲時(shí)也把不完整的目標(biāo)輪廓過濾掉了。解決把面積閾值降低對(duì)輪廓做凸包補(bǔ)全或者用顏色分割先提取候選區(qū)域再做形狀判斷。需要注意的是遮擋目標(biāo)即使能被識(shí)別雙目匹配也可能因?yàn)閮蓚€(gè)相機(jī)視角不同而出現(xiàn)“左眼看到、右眼被擋”的情況所以對(duì)遮擋目標(biāo)要設(shè)置獨(dú)立的置信度閾值。5.5 視覺坐標(biāo)算得準(zhǔn)機(jī)械臂還是抓空現(xiàn)象視覺定位結(jié)果在電腦上顯示與目標(biāo)吻合機(jī)械臂執(zhí)行后抓手卻落在果實(shí)旁邊。原因視覺坐標(biāo)系與機(jī)械臂坐標(biāo)系沒有統(tǒng)一。視覺系統(tǒng)以兩相機(jī)中心連線中點(diǎn)為原點(diǎn)機(jī)械臂以基座為原點(diǎn)兩套坐標(biāo)系之間存在平移和旋轉(zhuǎn)偏移。解決做手眼標(biāo)定算出視覺坐標(biāo)系到機(jī)械臂坐標(biāo)系的變換矩陣。論文的數(shù)學(xué)模型求解的是目標(biāo)在世界坐標(biāo)系中的位置論文沒有提這個(gè)坐標(biāo)系變換步驟但這是從仿真走向真機(jī)必須補(bǔ)上的一環(huán)。我見過太多項(xiàng)目栽在這上面視覺和機(jī)械臂各做各的聯(lián)調(diào)時(shí)完全對(duì)不上。6. 從論文到可運(yùn)行原型最小驗(yàn)證腳本與驗(yàn)收順序6.1 用論文公式做深度驗(yàn)證拿到論文后第一件事不是去復(fù)現(xiàn)整個(gè)系統(tǒng)而是把 2.2 節(jié)的核心公式單獨(dú)跑一遍驗(yàn)證自己對(duì)模型的理解是否正確。下面這個(gè)腳本可以幫你直觀感受視差與深度的關(guān)系。# 雙目深度驗(yàn)證腳本輸入?yún)?shù)與視差輸出深度 b 0.12 # 基線單位米 f_mm 6.0 # 焦距單位毫米 sensor_width 6.4 # 傳感器寬度單位毫米 pixel_width 1920 # 圖像水平分辨率 # 將毫米焦距轉(zhuǎn)換為像素焦距 f_pixel f_mm * pixel_width / sensor_width # 左右圖像目標(biāo)列坐標(biāo)模擬值 x1, x2 1000, 920 disparity x1 - x2 Z b * f_pixel / disparity print(f像素焦距: {f_pixel:.2f} px) print(f視差: {disparity} px) print(f目標(biāo)深度: {Z:.3f} m)這個(gè)腳本里有兩個(gè)關(guān)鍵點(diǎn)。第一f 必須從毫米換算成像素否則算出的深度單位是混亂的。換算公式是 f_pixel f_mm × 像素寬度 / 傳感器寬度1920 像素對(duì)應(yīng) 6.4mm 寬的傳感器時(shí)6mm 焦距等于 1800 像素。第二視差每變化 1 個(gè)像素深度變化量不是均勻的近距離的深度分辨率高遠(yuǎn)距離的深度分辨率急劇下降。把 x1 - x2 從 80 改成 70深度會(huì)從 0.27m 跳變到 0.31m距離越遠(yuǎn)這種跳變?cè)矫黠@。6.2 從二值化到輪廓中心提取在第 4 章代碼基礎(chǔ)上做個(gè)擴(kuò)展把識(shí)別結(jié)果與雙目標(biāo)定結(jié)合起來。左右相機(jī)各自跑一遍分割和輪廓提取得到同一目標(biāo)的像素坐標(biāo)然后代入雙目公式算三維位置。這段邏輯用一個(gè)函數(shù)就能串起來def calc_3d(px_l, px_r, f_pixel, b): 根據(jù)左右圖像目標(biāo)像素坐標(biāo)計(jì)算三維位置 disparity px_l - px_r if disparity 0: return None Z b * f_pixel / disparity X b * (px_l px_r) / (2 * disparity) return X, Z實(shí)際使用時(shí)左右相機(jī)的目標(biāo)匹配需要靠面積、顏色直方圖或者極線約束來確定。第 4 章代碼里 centers 列表存儲(chǔ)了檢測(cè)到的目標(biāo)中心左右兩路結(jié)果按面積接近程度匹配差異在 20% 以內(nèi)的視為同一目標(biāo)。兜底策略是如果一個(gè)目標(biāo)只在單目中被檢測(cè)到系統(tǒng)進(jìn)入降級(jí)模式只給出方向信息不嘗試計(jì)算深度避免錯(cuò)誤數(shù)據(jù)驅(qū)動(dòng)機(jī)械臂動(dòng)作。6.3 驗(yàn)收順序與核對(duì)指標(biāo)復(fù)現(xiàn)系統(tǒng)時(shí)按這個(gè)順序走每一步都有明確的通過標(biāo)準(zhǔn)。第一步單獨(dú)驗(yàn)證圖像分割目標(biāo)是正常個(gè)體的二值化識(shí)別率達(dá)到 95% 以上用論文的 98.6% 作為參考線。第二步驗(yàn)證雙目測(cè)距在 0.5m 到 1.5m 范圍內(nèi)擺放目標(biāo)物實(shí)測(cè)距離與計(jì)算距離誤差控制在 3% 以內(nèi)。第三步驗(yàn)證動(dòng)態(tài)采摘流程目標(biāo)識(shí)別、坐標(biāo)計(jì)算、機(jī)械臂聯(lián)動(dòng)全程耗時(shí)控制在 25 秒以內(nèi)對(duì)標(biāo)論文的采摘速度。第四步測(cè)試遮擋場(chǎng)景目標(biāo)被枝條遮擋面積不超過 50% 時(shí)識(shí)別率保持在 90% 以上。這套驗(yàn)收順序的好處是把一個(gè)大系統(tǒng)拆成四個(gè)可獨(dú)立檢查的環(huán)節(jié)。我在復(fù)現(xiàn)這類農(nóng)業(yè)視覺項(xiàng)目時(shí)最深刻的教訓(xùn)就是不要一上來就聯(lián)調(diào)整套系統(tǒng)先把二值化這一步跑通再用標(biāo)定板把焦距和基線標(biāo)準(zhǔn)最后才讓機(jī)械臂動(dòng)起來。從那以后我每次拿到這類視覺論文都強(qiáng)制自己先寫一個(gè)最小驗(yàn)證腳本把核心公式變成代碼跑出數(shù)值再去做系統(tǒng)集成省下的聯(lián)調(diào)時(shí)間遠(yuǎn)比寫腳本花的多。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取