如何進行物體檢測?
掃描二維碼
隨時隨地手機看文章
在智能車比賽中,車模為了完成任務,主要是解決兩個問題。一個是能夠識別賽道,并通過三個福來輪的轉(zhuǎn)動,使得車模能夠始終沿著賽道前行。第二個就是識別到賽道上的顏色圓盤。一個圓盤是障礙,綠色,一個圓盤是賽道終點,紫色。除此之外,有的時候,賽道上還會出現(xiàn)別的顏色的障礙圓盤,或者是白色的圓盤。這種白色圓盤是允許車模直接通過,相當于將連續(xù)的引導線中間出現(xiàn)了斷續(xù)的部分。白色圓盤還有凸起,會使得車模運動出現(xiàn)抖動。考察車模運動的穩(wěn)定性。為了能夠檢測引導線和彩色圓盤,需要我們對于 OpenMV 中的色塊檢測功能進行學習。下面通過 OpenMV 的示例程序,介紹色塊檢測函數(shù)的應用。
二、示例程序
在 連通OpenMV模塊之后,可以打開 示例程序中 圖像處理 顏色跟蹤中的相關示例程序。先打開單個色塊檢測程序??梢詫W習相關函數(shù)功能。在智能視覺模塊前 擺放著幾種不同顏色的物體。檢測和定位這些物體,可以根據(jù)它們 顏色、 大小、形狀來進行區(qū)分。通過設置檢測的不同參數(shù),可以檢測出我們需要的物體。
程序運行之后,可以看到此時,OpenMV 在拍攝到的場景中,找到了紅色色塊。并在串口終端中顯示了處理圖像的速度。下面我們來介紹一下這個簡單的物體檢測的程序結(jié)構(gòu)。在程序開始部分,定義了一個鏈表。其中包含有三個元組,分別表明了三個顏色檢測參加范圍。,前面有一個 索引標號變量,在程序中,通過這個變量標明鏈表中的顏色參數(shù)。下面這些語句我們已經(jīng)熟悉,用于初始化攝像頭的參數(shù),請大家注意,后面對于攝像頭的增益和白平衡的功能都禁止了。這在物體檢測應用中,是為了保證所檢測顏色范圍不隨著環(huán)境光線的影響而發(fā)生變化。
下面是程序的循環(huán)主體。使用 clock 來記錄循環(huán)程序的開始時間,下面,調(diào)用攝像頭拍攝函數(shù),獲得一副圖像。接下來,調(diào)用圖像中 色塊檢測函數(shù),來獲得需要搜索的物體位置、大小和方向。其中第一個參數(shù),給出了檢測色塊的顏色范圍,使用 index 來定義前面列表中的顏色范圍參數(shù)。接下來的參數(shù),定義了色塊像素的最小值,下面的參數(shù)定義了覆蓋色塊矩形的面積最小值。這兩個參數(shù)規(guī)定了需要檢測色塊的大小。后面的 merge 參數(shù),設定為 true。則會將相互重疊的色塊進行合并。
接下來,則是對搜索到的色塊結(jié)果進行繪制。其中所使用到的圖像繪制函數(shù),在這里就不一一介紹了。其中,調(diào)用了色塊的 elongatiuon 函數(shù),來判斷色塊的形狀是接近于圓形,還是窄的線條。
用于區(qū)分物體的參數(shù)中,顏色是顯著的一個特征。對于顏色的描述,這里使用了是描述顏色的 LAB 顏色空間,它的前面兩個參數(shù),定義了L參數(shù),表明顏色的亮度范圍,中間的參數(shù)定義了 A 參數(shù),是紅綠范圍,第三個是 B 參數(shù),是定義了 藍黃范圍。關于 顏色空間的 LAB 的定義和轉(zhuǎn)換方式,這里就不進行介紹了。只剩下一個問題,那就是我們?nèi)绾文軌蚍浅7奖愕拇_定,需要檢測的物體對應的 LAB 參數(shù)范圍呢?
三、參數(shù)修改
可以使用 工具菜單中的 機器視覺 中的 閾值編輯器 慘淡幫助我們確定檢測物體的顏色范圍。將第一對 和第二對參數(shù)的范圍都擴展到最大,修改第三對參數(shù),它對應藍黃顏色,將它的范圍修改到右邊,對應黃色范圍??梢钥吹綀D像中的紅色物體被分割出來,調(diào)整這個參數(shù),是分割出的黃色物體最大,其它雜色最小,這就是最優(yōu)的顏色范圍參數(shù)。這里給出了 LAB 閾值范圍,將它拷貝到剪切板,粘貼到應用程序,便可以看到此時,程序顯示檢測到了黃色的物體。
下面,將第三對參數(shù),修改到左邊,對應藍色區(qū)域,此時,檢測區(qū)域中包括有邊界的藍色背景 以及白紙上的藍色物體。修改參數(shù)之后,可以看到程序檢測到了邊界的背景區(qū)域。在緩沖區(qū)中,將綠色物體選擇,可以看到下面對應 LAB顏色直方圖的范圍。應用這個范圍,設置第二對參數(shù),可以看到綠色物體被分割出來。應用這個參數(shù),程序檢測出綠色物體。
大家可以根據(jù)前面介紹的方法,來檢測圖片中其它的物體,這里,有兩個區(qū)域都是紅色,可以通過修改色塊大小參數(shù),來剔除小的紅色,只留下大的紅色色塊。
四、多種顏色檢測
可以打開示例程序 圖像處理 顏色跟蹤中的 多種顏色檢測程序,在前面閾值參數(shù)中定義了三個顏色檢測閾值范圍。利用前面的方法,分別得到紅色、 黃色、綠色的顏色范圍,將他們替換前面顏色閾值參數(shù)。程序運行之后,會發(fā)現(xiàn)最終只是將紅色 和 黃色檢測出來了。這可能是因為綠色區(qū)域比較小,修改檢測物體像素和區(qū)域像素這兩個參數(shù),將它們降低到 100,運行之后可以看到,較小的綠色區(qū)域也會被檢測出來了。
如果將物體像素參數(shù)進一步減小,比如這里將它們減小到 20,可以看到,圖像中,最右側(cè)的紅色LED 也會被檢測出來了。
※ 總 結(jié) ※
本文介紹了OpenMV中 圖像處理的色塊檢測函數(shù)的應用,可以通過設定檢測顏色、大小、形狀等參數(shù),來分割出圖片中感興趣的區(qū)域??梢垣@得區(qū)域的中心位置,大小以及方向,利用這些參數(shù)可以引導智能車完成運動控制,基于此,大家可以測試對于黑色的引導線的檢測方法。這樣,便可以完成智能車的比賽任務。