單目定位和雙目定位的選擇,我覺得主要還是成本和時間的考慮。之前也嘗試過雙目定位,感覺要更精準些,但雙目測距需要對兩幅影象進行影象變換和極線匹配,稍微耗時了一些。這幾天嘗試了一下單攝像頭進行測距定位,主要有兩個思路:
1.定位測量插值得到每個畫素的實際座標
該方法總覺得有很大的問題:乙個是攝像頭安裝後就必須固定不動,稍微的旋轉都會導致之間測量的畫素點對應的座標偏移。另乙個是人工測量的工程量之大,對於1024*1280畫素的攝像頭,準確的測量就應該是130萬個點,而就算我們按公尺來分割地面,10*20m2的地面也要測量200個點,就算可以通過演算法自動識別,做200個標誌就算測量畫線也是令人頭疼的。考慮到針孔成像模型的等比例放大,我們通過直接列印布滿等距陣列圓點的紙來進行測量。
其原理如下:
根據相似三角形的等比例關係,有:
eg
bd=a
gad
gf
dc=a
gad
同時又有:
eg
eb=a
eab
通過等式傳遞有:
eg
bd=g
fdc=
aeab
如此一來,可以在較高距離測量等距陣列點(如標定板),經過插值,再進行等比例放大即可得到每個畫素點對應的實際地面的座標。
處理的示意圖如下:
這樣操作可以省去人工在地面測量繪畫標誌。測量好紙上的點距後再進行h/h的放大就可以得到畫素對應實際地面的座標。但實際操作過程中遇到的問題是影象上邊緣的梯形失真過於嚴重,導致列印紙上的標誌點不容易識別,因此還需要準備不同距離的等距陣列圓點圖。
2.根據相似三角比例計算出對應畫素點的實際座標
這個方法對攝像機標定的要求比較高,同時要求鏡頭本身造成的畸變就比較小,但總體來說這種方法的可移植性和實用性都較強。其主要的思路還是小孔成像的模型。
模型一:假設測量的點都在y軸上,此時無x軸分量
該圖主要有三個座標系,分別是影象座標系uo
1v,以o2
為原點的攝像機座標系,世界座標系xo
3y o
3p的長度。(注意,由於相機安裝一般都有誤差,所以鏡頭中心點不一定是影象的中點,所以ucenter,vcenter不一定為0)
一步步推導如下:
已知量:攝像機高度h
影象座標中心對應的世界座標點與攝像頭在y軸上的距離o3
m
鏡頭中心點的影象座標(u
cent
er,v
cent
er)
測量畫素點的影象座標p1
(u,0
)
實際畫素的長度xpix
實際畫素的寬度ypix。
攝像頭焦距f
(鏡頭中心點影象座標,焦距,畫素長寬都可以由標定直接求解出來,通過halcon的標定助手可以很容易的得到,opencv也有相應的程式) α=
arct
an(h
o3m)
γ=arct
an(o
1p1×
ypix
f)=(
v−vc
ente
r)∗y
pixf
β=α−γ
o3p=hta
n(β)
這樣就可以得到垂直方向的座標 y=
o3p
模型二:假設測量的點有x軸、y軸分量
針對以下模型圖我們將進行說明:
一步步推導如下:
已知量:攝像機高度h
影象座標中心對應的世界座標點與攝像頭在y軸上的距離o3
m
鏡頭中心點的影象座標o1
(uce
nter
,vce
nter
)
測量畫素點的影象座標p1
(u,0
)、q1
(u,v
)
實際畫素的長度xpix
實際畫素的寬度ypix
攝像頭焦距f
(y軸方向計算和上乙個模型相同,x軸計算是y軸座標通過比例計算得到) α=
arct
an(h
o3m)
γ=arct
an(o
1p1×
ypix
f)=(
v−vc
ente
r)∗y
pixf
β=α−γ
o3p=hta
n(β)
這樣就可以得到垂直方向的座標 y=
o3p
o2p1=(v
−vce
nter
)∗xp
ix)2
+f2−
−−−−
−−−−
−−−−
−−−−
−−−−
−√
o2p=
hsin
(β)
由pqp1q1
=o2p
o2p1
得到 pq
=o2p
×p1q
1o2p
1 這樣就可以得到垂直方向的座標 x=
pq模型三:假設測量的點有x軸、y軸分量,且物體有高度h
針對以下模型圖我們將進行說明:
由於物體有高度,因此還需要進行乙個投影變換,其實也還是相似變換
設真實的座標(x
′,y′
) ,模型二求出的座標(x
,y)
則(x′
,y′)
=(x,
y)×(
1−hh
)模型評價
單例模式的兩種方式
首先,單例模式是指在程式執行的過程中,保證該類的例項只有乙個可以被外界訪問 可用於讀取配置檔案,以保證沒有對外部資源的併發操作 單例模式分為飽漢模式和飢漢模式。飽漢模式,也是我們說熟知的單例模式,為類在初始化的時候就進行了類的例項化,getinstance方法只需要自動獲取就可以了 飢漢模式為類在初...
單鏈表建立的兩種方式
建立單鏈表 單鏈表就是一種特殊的結構體組合而成的資料結構,關於單鏈表的建立方式有很多種,大同小異。在這裡我們將詳細的介紹一下頭插法建立鍊錶和尾插法建立鍊錶。如上所示單鏈表就是由可能不連續的資料所組合而成的資料結構。其中每個資料分為兩部分,一部分是資料儲存的位置,稱為資料域 data 另外指標所儲存的...
實現 iOS 後台定位的兩種方式
1 實現後台定位有2種方式 2 兩者區別 前者 startupdatinglocation 在後台執行時可能會因為資源問題被系統掛起 suspend 或終止 terminate 但一旦有更新會被喚起,但是當更新時系統任然資源緊張,則會被延遲呼叫委託。如果對於實時性要求高的可能不適合這個,很難控制使用...