單目視覺定位測距的兩種方式

2021-07-31 15:33:18 字數 3351 閱讀 3532

單目定位和雙目定位的選擇,我覺得主要還是成本和時間的考慮。之前也嘗試過雙目定位,感覺要更精準些,但雙目測距需要對兩幅影象進行影象變換和極線匹配,稍微耗時了一些。這幾天嘗試了一下單攝像頭進行測距定位,主要有兩個思路:

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 但一旦有更新會被喚起,但是當更新時系統任然資源緊張,則會被延遲呼叫委託。如果對於實時性要求高的可能不適合這個,很難控制使用...