交通標誌牌的檢測與識別
Driver Assistance System已經成為學術研究的一大領域,作為智慧交通的一部分,有大量研究人員投身其中,每年都會有大量的成果發表在IEEE trans on intelligent transportation system等頂級期刊,會議上。有些成熟技術甚至已走出學術界,應用於工業界,如福特公司的自動剎車系統,Google 的無人駕駛汽車,而 Mobileye 甚至已將其固化為車載晶片,並佔有大部分的高檔車市場份額。
近來跟隨師兄也在探究此方面的發展,並努力實現自己的系統。
這裡首先是對於交通路牌的識別:大部分交通路牌可以分為兩部分:
red circular sign blue rectangular sign
由於其外形規則,圖案單一,因此在這裡我主要採用rule-based method,而非機器學習(當然,也是因為機器學習實驗失敗了)。由於要檢測的物體侷限於紅色和藍色,因此在這裡我們利用其顏色資訊,於Jack Greenhalgh and
在這之後,我利用hough circle transformation 以及 contour contourpolygonization,成功分割出相應區域,效果較好,但逐畫素計算效率低下,對一張圖的檢測時間的70%都花在了畫素處理上,所以準備最近看一看opencv的灰度轉換原始碼,提升效率,爭取達到實時性。
在這之後,好學的博主怎會就此終止,於是有了下面的識別部分,這也是博主第一次接觸pattern recognition,雖然內容很簡單……
首先將識別物件侷限於紅色圓形的限速標誌,(指路牌的識別,博主是不敢想的,中文字元,分佈不對則,想想就頭痛)。於是博主開始了艱辛的旅程:首先想到的是最簡單的模板匹配,但模板匹配要求template與target大小一致,思索良久,受當初看haar檢測目標的原始碼啟示,我將待檢測影象以一定比例不斷縮放,然後用template作為搜尋框在待檢測影象範圍內進行移動匹配,根據歸一化平方差公式計算得到最小的值即為匹配。
模板: (尺寸統一,這裡採用雙數,而非單個數字是因為單個數字雖然檢測更準,但結果只能得到一個數字,暫時還未想到如何找到裡面的兩個數字);
下表左側為測試圖片,右側為6個模板與影象的最小平方差:
(1)待測影象經過壓縮後長寬比失調,其標誌牌高度大於寬度,因此檢測出現錯誤,這並非方法的問題;
(2)“15”是一個奇特的標誌,兩數字之間的空白區域大小不一,如圖:
因此,檢測15的時候常有偏差,還真是不太清楚如何解決這個問題呀,也許只能把兩種15都放入模板庫中。
在成功識別出這些標示牌之後,一個新的問題出現了,就是紅色圓形標誌不僅包括限速標誌,還有一些其他的諸如禁止通行,禁止鳴笛等標誌,那麼這些標誌的出現超出了我們預期的簡單環境,在此介紹一種博主自己想出來的方法:
1.我們觀察上面表格裡的實驗資料,將每一組資料的方差值取均值得到六組均值分別為(10^6):
1.31 | 1.20 | 1.28 | 1.08 | 1.07 | 1.23 |
2.當將測試圖片替換為非限速標誌,其得到的資料如下:
3.如上表所示:三組的平方差均值分別為(10^6):
1.71 | 1.64 | 1.82 |
4.因此可見:限速標誌牌與非限速標誌牌的平方差均值在不同的兩個結果集裡,前者<1.4,後者>1.6,由此我們可以得到區分二者的閾值,i.e, 1.4<threshold<1.6。
到此我們對於交通標誌牌的檢測以及簡單識別就告一段落了,在現有的少量待測資料面前,其結果不錯,至於魯棒性受角度及光照的影響還需要大量資料進行檢測及改進。
PS:在此之前,我曾試著用sift以及surf進行識別,但大概是因為圖案過於簡單,導致極值點很少,而match的特徵點更少,因而放棄。