第三章 研究設備與方法
3.1 硬體設備與軟體
3.1.7 系統外觀
如圖3-9 (a) 所示,蜜蜂通道位在系統外殼的內部,並置於底層最中央的地方;
攝影機使用螺絲固定在在系統外殼的中央,並調整高度使得蜜蜂通道在拍攝範圍 內;紅外線投光器則使用螺絲固定在系統外殼的兩邊,其高度約為80 mm。另外系 統組裝於蜂箱之情形如 (b) 所示。
圖 3-9 系統外觀,(a) 系統內部,(b) 與蜂箱組裝完成圖 3.1.8 蜜蜂標籤製作與黏貼
為達到追蹤個別蜜蜂覓食行為之目的,必須在蜜蜂的背部黏貼一標籤貼紙作為 個別蜜蜂辨識之用。實驗中共採用兩種圓型標籤貼紙,在標籤上設計了一個定位 用的黑點,如圖 3-10 所示,其中 (a) 為原始印有兩位數阿拉伯數字的標籤貼紙,
其標號從 0 到 99,共可記錄 100 隻蜜蜂,為了突破此限制,本研究又設計了另一 種印有兩個英文字母的標籤貼紙,如 (b) 所示。
另外,標籤的直徑約為 3 mm,在阿拉伯數字字體方面,其大小為 5 號粗體,
其中數字 0 的字體為 Calibri,數字 5 的字體為 Consolas,其餘數字的字體為 Times New Roman,另外,在兩個數字之間有一個空白 2 號字體作為間隔之用。之所以 更改數字 0 與 5 的字體,是因為 Times New Roman 字體的 0 與 5 在影像處理時,
不透明上蓋 透明上蓋
CCD 攝影機 蜜蜂通道 投光器
(a) (b)
容易將其誤認為是兩個不連續的部份。在英文字母之字體方面,其大小亦為 5 號 粗體,並全部選用 Consolas 字體,兩個字母之間亦有一個空白 2 號字體做為區隔。
另外,比較特別的是,在英文字母標籤上,我們不採用字母 Q,原因是 Q 跟 O 的 形狀太過相似,容易造成辨識錯誤。
圖 3-10 蜜蜂標籤貼紙,(a) 阿拉伯數字標籤,(b) 英文字母標籤
最後,在將標籤貼紙黏著於蜜蜂背部時,需將蜜蜂置入冰箱的冷凍庫中,冰 凍約 3 到 4 分鐘,這時的蜜蜂時去了活動能力,因此正是黏貼標籤貼紙的最佳時 機,如圖 3-11 (a)。而在黏貼標籤前,必須先將蜜蜂背部的絨毛刮除乾淨,如圖 3-11 (b)。最後使用瞬間膠將標籤黏貼於蜜蜂背部,如圖 3-11 (c)。大約在解凍後 2 到 3 分鐘,蜜蜂又開始回復活動能力。本研究使用任我貼高黏度瞬間膠,其具有無溶 劑、無毒、低味以及高黏度等優點。
(a) (b)
(a) (b) (c) 絨毛刮除
3.1.9 溫溼度計
本研究之目的在於記錄與分析蜜蜂外出覓食之行為,因此需要隨時記錄環境 中溫溼度的變化,進而分析其對蜜蜂覓食行為的影響。本研究使用 LASCAR 公司 (Lascar Electronics Ltd., United Kingdom) 所 出 產 的 溫 溼 度 計 , 其 型 號 為 EL-USB-2,量測溫度範圍約-35到80°C,精準度為±0.5°C,量測相對濕度範圍約0 到100% RH,濕度範圍在20到80%RH 時精準度為±3%。
圖3-12 EL-USB-2溫溼度計
3.2 蜜蜂偵測與辨識之影像處理演算法
3.2.1 蜜蜂偵測與辨識之流程
在蜜蜂偵測與辨識上,其整體辨識流程如圖3-13所示。攝影機首先將拍攝到的 影像以30fps 之頻率即時傳送到電腦,接著系統程式以霍爾圓轉換演算法偵測此影 像中的標籤位置 (蜜蜂位置),如果影像中沒有偵測到標籤則接著處理下一張影 像。而如果偵測到標籤的位置,則接著判斷標籤上是否具有數字或字母,如果有 便能將之從標籤中分離出來,接著再對分離出來的字元影像進行標準化,最後透 過以 SVM 為基礎的 OCR 技術對個別字元進行數字辨識。而如果標籤上沒有數字,
則接著判斷下一個標籤,一直到所有偵測到的標籤都處理完再繼續下一張影像。
圖 3-13 蜜蜂辨識流程圖
開始
攝影機是否正 結束 在拍攝
是
否
輸入拍攝影像
字元擷取
字元影像標準化
字元影像辨識 是否偵測到蜜
蜂標籤 否
是
是否還有標籤 未辨識 是
否
3.2.3 輸入拍攝畫面
在攝影機運作之時,必須先對其作設定,其中較關鍵的一步為設定攝影機的 快門時間,在初步實驗中發現,縮短攝影機的快門時間能夠拍攝到較為動態的影 像,但此同時也會減少進光量,使得拍攝的畫面較暗。所以快門時間設定需取得 一個平衡點,使得拍攝畫面與進光量達到最佳的效果,本系統中,攝影機的快門 時間為4 ms (使用 DMK31AU03攝影機所附光碟中的程式 IC Capture2.1做為設定)。
在畫面擷取上,本影像系統使用 Borland C++ Builder 6.0作為系統程式之開發 環境,並且使用開源碼 OpenCV 1.0 (參考網站http://opencv.willowgarage.com/wiki/) 中 的 cvcam 來達到此目的。圖3-14為 cvcam 在開啟攝影機時部份重要的程式碼,在 使用攝影機時,必須先執行 cvcamGetCamerasCount,功能為偵測攝影機數量,接 著使用 cvcamSetProperty 設定所選擇的攝影機 (參數 select_camera) 之各項參數,
包含:攝影機致能 (enable)、渲染 (render)、顯示視窗以及指定畫面處理函式。設 定完參數後需要再透過 cvcamInit 來完成所有設定,最後使用 cvcamStart 來開啟攝 影機,接著所有的影像處理都會在其中的 callback 函式進行。
圖 3-14 開啟攝影機程式碼
cvcamGetCamerasCount(); //偵測攝影機數量
cvcamSetProperty(select_camera, CVCAM_PROP_ENABLE, &cvcamone); //攝影機致能
cvcamSetProperty(select_camera, CVCAM_PROP_RENDER, &cvcamone); //攝影機渲染
cvcamSetProperty(select_camera, CVCAM_PROP_WINDOW, &MyWin); //設定顯示視窗
cvcamSetProperty(select_camera, CVCAM_PROP_CALLBACK, callback); //設定影像處理函式
cvcamInit(); //初始化攝影機參數
cvcamStart(); //開啟所有已致能攝影機
3.2.4 蜜蜂標籤偵測
在標籤偵測上,由於本研究使用的標籤貼紙為圓形,因此可以使用霍爾圓轉 換技術,將原始影像轉換至圓參數空間,進而找到影像中的圓形標籤。如圖3-15 所示。此部份利用 OpenCV 1.0中的函式 cvHoughCircles 來偵測圓形標籤,其中各 項參數之意義如下:
method:選用霍爾圓轉換之方法,OpenCV 中只有 CV_HOUGH_GRADIENT 此選項,其演算法為 Kimme 等人 (1975) 提出的 Hough gradient method。
dp:累加器之解析度,例如 dp=1表示其解析度與原始影像一樣,而 dp=2表示 解析度為原始影像的1/2 (比原始影像低),另外 dp 值不能低於1。
min_dist:允許兩個圓的最小距離,當此距離內出現兩個以上的圓,則只會輸 出其中一個最好的結果。
param1:在 Hough gradient method 中,需對原始影像進行邊緣偵測,其演算 法為 Canny 邊緣偵測,而 param1便是 Canny 邊緣偵測的參數。
param2:為累加器的設定閾值。
min_radius:偵測圓的最小半徑。
max_radius:偵測圓的最大半徑。
經過初步實驗的測試結果,顯示當參數 dp 設定為4, min_dist 設定為50 pixels,
param1設定為80,param2設定為100,min_radius 設定為2,max_radius 設定為25的 時候,其偵測效果非常穩定,故本系統採用上述之參數設定。
由於 cvHoughCircles 中有一個重要的步驟為邊緣偵測,為了使邊緣偵測結果 不被雜訊影響,需先對原始影像做模糊化處理。最簡單的模糊化處理為3 3× 高斯
CV_GAUSSIAN,sigma1 = 3,sigma2 = 3,sigma1與 sigma2分別為高斯濾波中遮罩 的高與寬。然而使用霍爾圓轉換技術偵測圓形標籤需要花費較高的運算量,為了 達到加速的效果,需先對原始影像進行裁切,將整張影像中不必要的範圍去除,
所使用的函式為 cvSetImageROI,其中參數 rect 為欲保留的部分,而裁切的範圍則 依照蜜蜂通道中感興趣的位置來決定。整體步驟如圖3-15所示,(a) 為原始影像,
上下兩條線之間為感興趣範圍,(b) 為裁切後並經過模糊化處理的影像,(c) 為局 部放大圖,(d) 則為偵測結果。
圖 3-15 標籤貼紙擷取,(a) 原始影像,(b) 裁切影像,(c) 局部放大圖,(d) 偵測 結果
偵測到標籤 (a)
(c) (d) (b)
3.2.5 字元擷取
接著則是從找到的圓形標籤中,將阿拉伯數字分離出來變成一個單一字元影 像,整體流程如圖3-16所示。
圖 3-16 字元擷取流程
標籤擷取:由於攝影機的架設高度固定,故偵測的標籤大小相差不多,因此 在經過霍爾圓轉換後,只取其中心點,並搭配上固定的圓形半徑 r (r = 16 pixels),將標籤外的影像去除,如圖3-17 (a) 所示。
二值化以及影像反白處理:本研究中的標籤設計了一個定位黑點,在經過二 值化運算 (閾值為50) 以及影像反白後可得圖3-17 (b) 之結果。
計算定位點與字元之面積跟中心:接著我們利用圖3-18之流程找到標籤中三個 白色區塊,並計算其重心位置與面積。其細節如下:我們對標籤影像做逐點
開始
結束 計算定位點與字
元之面積跟中心 標籤擷取
二值化以及影像 反白處理
傾斜角度計算
標籤轉正
字元擷取
起始點,將附近所有相鄰的點連結在一起,並標示這些點已被掃描,同時將 結果推到 (push) 堆疊。接著掃描下一個點,如果再次遇到未掃描的白點,則 進行同樣的動作,一直到整張影像完成掃描。當完成掃描後只要檢查堆疊中 的資料,便能知道標籤中三個白色區塊之面積跟中心。
圖 3-17 將標籤貼紙轉正,(a) 標籤切割,(b) 二值化以及影像反白,(c) 標籤轉正
圖 3-18 白色區塊偵測流程
傾斜角度計算:藉由三個白色區塊之面積大小 (定位黑點的面積最小) 能夠得 開始
是否為白點
是否掃描過 掃描是否結束
以此點為起點將鄰 結束 近所有白點連結
掃描影像點
計算面積以及中心 點座標並輸出結果
是
否
是
否 是
否 (c)
(b) (a)
知那一個是定位黑點,哪兩個是字元。再來依照兩個字元與小黑點之間的相 使用的函式為 cvGetQuadrangleSubPix,參數 m 為旋轉矩陣,並設定如下:
cos( ) sin( ) 0.5 [2][3]
sin( ) cos( ) 0.5 angle angle width m angle angle height
− − ×
⎡ ⎤
= ⎢⎣− − − × ⎥⎦ (3.3)
其中 height 與width則分別為字元影像的高度與寬度。
字元擷取:最後經由三個白色區塊旋轉過後的的重心位置,便能輕易地將兩 個字元影像從標籤中分離出來,這邊使用的函式一樣是 cvSetImageROI。
3.2.6 字元影像標準化
圖 3-19 字元影像標準化,(a) 代測字元,(b) 直方圖等化,(c) 轉換成正方形形式,
(d) 調整大小 3.2.7 字元影像辨識
一般的光學字元辨識其辨識率的高低常取決於特徵擷取的優劣,然而隨著機 器學習演算法的成熟發展,越來越多的研究開始使用這些新方法來進行字元辨 識,而且其辨識率大多都超過80% (Avi-Itzhak et al., 1995; Ashwin and Sastry, 2002;
Shanthi and Duraiswamy, 2009) , 如 類 神 經 網 路 系 統 應 用 在 光 學 字 元 辨 識 等 (Avi-Itzhak et al., 1995)。而本研究選用 SVM 的原因如下,首先,其他機器學習的 方法存在一些缺點,例如類神經網路需要非常大量的訓練資料來建立其辨識模 型,並且找到的最佳解有可能是區域性的最佳,而非全域性最佳,並且受參數影 響非常大;再來,SVM 有很多優點,相較於類神經網路,它所需要的訓練資料量 較少,並且沒有區域性最佳解問題,同時還有多種核函數可以使用 (包含 linear、
ploy 以及 RBF 等),最重要的是,它的辨識率非常高。本研究使用的 SVM 技術為 台大資訊工程學系林智仁老師所開發的 libsvm v2.89所提供 (Chang and Lin, 2001)。
(一) 模型訓練
本研究先使用攝影機捕捉大量的標籤影像,並且經過上述影像前置處理後,
本研究先使用攝影機捕捉大量的標籤影像,並且經過上述影像前置處理後,