安徽師范大學(xué)皖江學(xué)院 李 穎 晏志維 蔡曉宇
由于多徑式微的影響、其他無線設(shè)備的干擾以及建筑物的阻擋,GPS在室內(nèi)的信號覆蓋度差,可靠性低,定位效果并不理想。為解決室內(nèi)無法使用的GPS衛(wèi)星信號定位這一問題,研究出了許多新技術(shù),之前的算法復(fù)雜,需要重新部署專用的參考節(jié)點,需要精確的時間同步或精確的測量時間差。該裝置室內(nèi)定位時存在角點檢測、光源干擾和圖像傾斜問題,文章列舉了解決方案。
通過脈沖寬度調(diào)制的方法控制白光LED的發(fā)光強度,改變3個LED的發(fā)光強度對應(yīng)編碼數(shù)字信號從而發(fā)送信息,通過圖像傳感器分析每個LED的灰度信息從而解調(diào)并處理信息,使用OpenCV進行圖像識別處理。下面是對問題解決的具體實施。
考慮一個空間內(nèi)有3個LED照明布局的情況,合理的特征點檢測是關(guān)鍵。
在現(xiàn)實世界中,強干擾有對角點檢測時遇到的問題和光源干擾問題。
從圖像分析的角度來定義角點可以有以下兩種:可以是兩個邊緣的角點;是鄰域內(nèi)具有兩個主方向的特征點。前者往往需要對圖像邊緣進行編碼,需要在很大程度上依賴于圖像的分割與邊緣提取,具有相當(dāng)大的難度和計算量,且一旦待檢測目標局部發(fā)生變化,很可能導(dǎo)致操作的失敗。基于圖像灰度的方法通過計算點的曲率及梯度來檢測角點,避免了第一類方法存在的缺陷。
2.1.1 抗干擾方案選擇
本設(shè)計方案的實現(xiàn)采用了Harris算法放棄了FAST算法,而改進了精度和失誤率。
傳統(tǒng)算法是通過圓中心點像素與模板圓內(nèi)其他像素值的比較,統(tǒng)計出與圓中心像素近似的像元數(shù)量,當(dāng)這樣的像元數(shù)量小于某一個閾值時,就被認為是要檢測的角點,該點即為特征點。
針對于上面的定義,我們可以用快速的方法來完成檢測,而不用把圓周上的所有點都比較一遍。首先比較上下左右四個點的像素值關(guān)系,至少要有3個點的像素灰度值大于I(p)+t或小于 I(p)-t,則 p為候選點,然后再進一步進行完整的判斷。為了加快算法的檢測速度,可以使用機器學(xué)習(xí)貪心算法來構(gòu)建決策樹。在考慮程序運行速度時,可以采納。
改進算法后使用Harris角點檢測,它是一種基于圖像灰度的一階導(dǎo)數(shù)矩陣檢測方法。在像素點的鄰域內(nèi),導(dǎo)數(shù)矩陣描述了數(shù)據(jù)信號的變化情況。假設(shè)在像素點鄰域內(nèi)任意方向上移動塊區(qū)域,若強度發(fā)生了劇烈變化,則變化處的像素點為角點。
可以將Harris圖像角點檢測算法分為幾個步驟:
(1)計算圖像I(x,y)在X和Y兩個方向的梯度Ix、Iy。
(2)計算圖像兩個方向梯度的乘積。
(3)使用高斯函數(shù)對兩個方向梯度的乘積進行高斯加權(quán),生成矩陣M的元素。
(4)計算每個像素的Harris響應(yīng)值R,并對小于某一閾值t的R置為零。
(5)在設(shè)定的鄰域內(nèi)進行非最大值抑制,局部最大值即為角點。
原方案可以快速的檢測特征點,在需要考慮運行速度時可以選用,如在高平率的視頻序列中進行視覺跟蹤。改進算法后檢測到的角點可能存在分布不均勻的現(xiàn)象,在紋理豐富的部分會集中大量角點,該方案會增減檢測的復(fù)雜度,具體的選擇應(yīng)該取決于實際應(yīng)用中對速度和質(zhì)量的要求。而此設(shè)計是運用在室內(nèi)環(huán)境下,不需要對速度有過高要求,使用改進后的方案即可。
2.1.2 抗干擾光算法實現(xiàn)
以下為使用改進方案情況下3*3窗口角點檢測的數(shù)學(xué)表示:
I(x.y)表示點(x,y)的強度值。對于偏移向量(u,v),偏移向量可以看成某個方向。它的平均強度變化為:
該式用泰勒級數(shù)展開,用矩陣形式表示:
中間是一個協(xié)方差矩陣,表示所有方向上強度的變化率。這個矩陣的兩個特征值給出了最大平均強度變化和垂直方向上的平均強度變化。如果,兩個特征值都較高,高于給定的閾值,此點即為角點。
為了避免計算特征值過程復(fù)雜耗時,使用以下式子代替:
Det矩陣的行列式,Trace矩陣的跡。經(jīng)證明,兩個特征值都較高時,該式子的值較高。參數(shù)k一般設(shè)置為0.05~0.5。 Harris角點檢測,可以通過極大值抑制改進,即保證角點的強度是局部極大值,移除非局部極大值的角點。本設(shè)計使用LED發(fā)光只需要判斷點光源檢測即可。
函數(shù)檢測部分:
Mat image = imread(“../a.png”);
Mat gray;
cvtColor(image,gray,CV_BGR2GRAY);
Mat cornerStrength;
cornerHarris(gray,cornerStrength,3,3,0.01);
threshold(cornerStrength,cornerStrength,0.001,255,THRESH_BINARY);
從上面檢測結(jié)果我們可以看到,有很多角點模糊粘連在一起的,我們下面在函數(shù)中通過加入非極大值抑制來進一步去除一些粘在一起的角點。
函數(shù)檢測修改后部分:
Mat image = imread(“a.png”);
Mat gray;
cvtColor(image,gray,CV_BGR2GRAY);
Mat cornerStrength;
cornerHarris(gray,cornerStrength,3,3,0.01);
double maxStrength;
double minStrength;
// 找到圖像中的最大、最小值
minMaxLoc(cornerStrength,&minStrength,&maxStrength);
Mat dilated;
Mat locaMax;
dilate(cornerStrength,dilated,Mat());
compare(cornerStrength,dilated,locaMax,CMP_EQ);
Mat cornerMap;
double qualityLevel = 0.01;
double th = qualityLevel*maxStrength;// 閾值計算
threshold(cornerStrength,cornerMap,th,255,THRESH_BINARY);
cornerMap.convertTo(cornerMap,CV_8U);
// 逐點的位運算
bitwise_and(cornerMap,locaMax,cornerMap);
drawCornerOnImage(image,cornerMap);
namedWindow(“result”);
imshow(“result”,image);
waitKey();
本裝置使用白光LED,拍攝圖片時會發(fā)現(xiàn)光發(fā)散并不是均勻的,有強烈干擾光,如圖1所示,為了把問題的研究簡單化,將其理想化為質(zhì)點點光源,點光源特征為中心明度偏大,而后以發(fā)光點為圓心逐漸擴散,其明度是逐級遞減的,此時由上述特征,可以區(qū)分非點光源(干擾光)與點光源,使用點光源判斷:先進行RGB到HSV的色域轉(zhuǎn)換。
在這里為了進一步濾除強烈的自然光干擾,得出圖2所示結(jié)果,我們采用點光源判斷算法。在HSV色域中,V指的是明度,也就是顏色明亮的程度。在實際測試中發(fā)現(xiàn)該套算法具有良好的適應(yīng)能力,在有外界環(huán)境光干擾嚴重,環(huán)境復(fù)雜的場景下,該算法依舊能夠精準判定三個白光LED的位置,同時能夠有效區(qū)分有用及無用信息,對于分析傳感器位置及提高定位精度起到了一定的作用。
圖1 干擾光強烈示意圖
圖2 處理結(jié)果后示意圖
使用攝像頭獲取三個白光LED圖像時,三角形位置可能會傾斜,如圖3,需要進行圖像處理,修正三角形位置。
在轉(zhuǎn)換成灰度圖像后,使用霍夫變換得到三條直線信息,但是三角形的頂點檢測不一,也就是說三個邊長并沒有完全檢測出來,有漏檢測的問題。這個實際上是調(diào)參數(shù)很難彌補的問題,三條邊長檢測總會存在誤差。后來我們發(fā)現(xiàn),雖然頂點沒有檢測得很好,但是直線方向檢測的非常準確,如果我們能作出這三條直線,求出三條直線的交點,我們就可以完美地得到三角形的頂點,由于檢測的這個三角形是等腰三角形,又三點距離,很容易判斷出來,哪個是三角形的腰,哪個是三角形的底邊,由三角形的底邊和成像照片的底邊所形成的角度,可得出圖像需要校正的角度。在這里使用透視變換去處理。通用的變換公式為:
u,v是原始圖片左邊,對應(yīng)得到變換后的圖片坐標x,y,其中:
重寫之前的變換公式可以得到:
所以,已知變換對應(yīng)的幾個點就可以求取變換公式。反之,特定的變換公式也能新的變換后的圖片。簡單的看一個正方形到四邊形的變換:
變換的4組對應(yīng)點可以表示成:
根據(jù)變換公式得到:
定義幾個輔助變量:
求解出的變換矩陣就可以將一個正方形變換到四邊形。反之,四邊形變換到正方形也是一樣的。于是,我們通過兩次變換:四邊形變換到正方形+正方形變換到四邊形就可以將任意一個四邊形變換到另一個四邊形,使得傾斜的圖像可以修正,如圖4所示。
圖3 三角形傾斜示意圖
圖4 傾斜修復(fù)后示意圖
測試數(shù)據(jù)顯示比照測試如表1所示:
表1 測試數(shù)據(jù)顯示比照測試
測試數(shù)據(jù)顯示比照測試如表2所示:
表2 測試數(shù)據(jù)顯示比照測試
現(xiàn)今室內(nèi)定位技術(shù)被人們所需求:在消費時商店希望顧客進店消費時可以主動發(fā)送一些促銷折扣,用戶會希望能夠直接獲取所需要知道的位置,需要導(dǎo)航定位。本次設(shè)計在成本上降低了很多,也免去了復(fù)雜電路布線的麻煩。目前項目依然存在缺點,在某些情況下,識別點位置精度不高,后續(xù)會繼續(xù)努力,提高精度。
[1]丘維聲.線性代數(shù)[M].高等教育出版社,2006.
[2]鄔弘毅,黃建國.高等數(shù)學(xué)(工科類)[M].合肥工業(yè)大學(xué)出版社,2006.
[3]布萊德斯基(Bradski.G.),克勒(Kaehler.A.).學(xué)習(xí)OpenCV(第1版)[M].清華大學(xué)出版社,2009.
[4]塞利斯基(Richard Szeliski).計算機視覺算法與應(yīng)用[M].清華大學(xué)出版社,2012.
[5]Robert Laganiere.OpenCV2計算機視覺編程手冊[M].科學(xué)出版社,2013.