【視覺辨識】計算種子發芽數目

Description

Description
作者:chtseng

發想動機

最近,環境感測網路LASS的發起人哈爸又有了新動作,他發起一個稱為農業自動化的Farmbot專案,從farmbot.io訂購了一套農業自動化機具,於今年三月組裝完成,預定改良為台版的Frambot!

其中被視為Farmbot的靈魂,負責電腦視覺的相機已安裝調整完畢,於是哈爸又丟來一個問題:想要偵測種子發芽狀態,例如下方的相片。因此我就進行了一連串的測試,希望能找到方法來解決此問題。

執行步驟

  • 問題一:相片並非單純的泥土與種子,種植區周圍有其它雜物。

由於相機是固定於上方拍攝,在種子發芽期間並不會移動,因此,我們可以使用第一張尚未發芽的相片作為base,之後所拍攝的相片除了光影之外,就是種子發芽生長的變化,將每一張相片扣除base便可過濾掉非種植區的其它雜物,其餘可視為發芽的情況。

  • 問題二:發芽種子開始為白色再轉為綠色,因此須能同時偵測白色與綠色。

隨著種子發芽時間長短不同,會有白色與綠色的嫩芽與新葉,因此這兩種顏色都要能偵測到。若使用LAB color space可抓出帶有綠意的發芽種子,但無法抓到白色的發芽部份,看來B channe對綠色很敏感但對白色沒轍。

我的解決方式是:除了使用LAB色彩取得綠色區域之外,另外再將相片轉為灰階取得白色嫩芽的部份,因為淺色在黑白相片中顯得相當清楚。

  • 問題三:要怎麼取得需要的發芽種子部份?

使用openCV提供的抓取contour輪廓功能。由於發芽種子在土壤中可形成明顯的block區塊,因此理論上能夠抓到它們。要使用contour需要先將相片作邊緣處理,或者轉為binary二值化(即純黑白的相片,每一像素點不是0就是255)。在這裡我選擇將相片轉為binary。

 

LAB channel B – 抓發芽綠色部份

Gray channel – 抓發芽白色部份

另外,還記得我們要需要分為綠色與白色兩部份來抓取嗎?因此我們須在轉為binary後,將這兩張相片疊起來,這張相片即包含全部的發芽種子,如下圖。

  • 問題四:上面的種子發芽圖中,有很多其它不需要的白點?

由於土壤有其它白色淺色或發亮的物質,例如肥料顆粒或淺綠的苔蘚植物也會一併被抓取進來,因此需要過先濾掉它們。方法是合併使用openCV提供的Erode(侵蝕)及Dilate(擴張)指令。

  • 問題五:確定這些留下的白點都是發芽的種子嗎?

這是目前最困擾也最難解決的問題,當每張相片之間的光線沒有保持一致,有的亮有的暗,最怕的是參數都調整好之後,當一束光線斜射進來落在土壤上,此時該較亮的區域就被辨識為發芽種子,或者一些較亮雜物形成的白點沒有被消除,還留在相片上。

此時就要針對這些contours進行形狀分析,以排除不需要的白點。我們可以使用OpenCV提供取得Contour特徵的指令如下,以排除大面積、過小或比例形狀不同的區域:

  •         cv2.contourArea → 取得contour的面積
  •         cv2.boundingRect → 得到該contour的x, y位置及長寬等資訊
  •         cv2.arcLength → 取得周長(弧長)
  •         cv2.convexHull → 取得突邊的數目
  •         cv2.moments() → 計算該contour的矩

成果展示

由Farmbot所提供的一系列種子發芽相片約15張,並以第一張未發芽相片作為base。相關程式碼放置於https://github.com/ch-tseng/farmbot,可自行下載參考。

Resource

利用電腦視覺計算種子發芽數目

Latest posts by Cheng Hsun Tseng (see all)

    Contact

    Contact
    • Category
      Computing and Storage
    • Tags
      Machine Vision

    Project簡述

    Project簡述
    • 簡述
      「智慧農業」創新解決方法,運用電腦視覺計算種子的發芽數量,即刻監控農地的生長情況,結合自動化機構,有效率的完成農作物的栽種!
    • 作者
      chtseng
    • FB Comments
      239030163245817

    您的姓名 〈需填寫〉

    您的電子郵件信箱 〈需填寫〉

    主旨

    您的信件內容