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