逆透视变换详解 及 代码实现(一)
逆透視變換詳解 及 代碼實現(一) 中主要是原理的說明:
一、世界坐標軸和攝像機坐標軸
從下圖中可以看到,世界坐標為(X,Y,Z) ?相機坐標為(Xc,Yc,Zc)
而世界坐標變換到相機坐標存在一個旋轉矩陣變換R以及一個位移變換T。
根據上圖可以得到世界坐標到相機坐標的公式變換!!
? ? ? ? ? ? ??? ? ??? ?世界坐標到相機坐標的公式
如果假設沒有坐標的平移存在即t在這里不起作用,可以簡化公式為:
接下來我們來說下不同坐標軸變換的旋轉矩陣
從二維圖像入手,坐標變換如下圖所示
如果假設不存在位移變換,那么x0 和y0 將變為0。
現在從二維圖像變到三維圖像上的變換,假設固定一個(X,Y,Z)軸 旋轉其他兩個軸組成的平面。
1、繞X軸旋轉 theta?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
2、繞Y軸旋轉
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
3、繞Z軸旋轉
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
下面為相機坐標和平面坐標系(成像投影關系)
根據上述的關系我們可以推得:
? ? ??
? ? 矩陣形式為: ?
??
---------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------
3、從平面坐標得到的我們看到的(照片)圖像坐標系
數字圖像在計算機內為MXN數組,M行N列的圖像中每一個元素(pixel)數值就是圖像點的亮度(灰度)。
如圖,在圖像上定義直角坐標系U,V,每一個像素為單位的圖像坐標系坐標,
由于(u,v)只能表示像素位于數組中的列數與行數,并沒有使用物理單位表示該像素在圖像中位置,
所以需要再建立以物理單位(mm)表示的圖像坐標系,該圖像坐標系以圖像內某一點uv(0,0)為原點,x軸和y軸分別平行于u、v。
如圖中,(u、v)表示以像素為單位的圖像坐標系的坐標,(X、Y)表示以mm為單位的圖像坐標系的坐標。
假設每一個像素在X軸與Y軸方向上的物理尺寸為dx、dy,則圖像任意一個像素在兩個坐標系下的坐標有如下關系,
?其中(u0 ,v0) = xy(0,0)
進而得到如下的矩陣表達:
---------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------
到此 逆透視變換就全部完成了!!!!
下面要說下 逆透視變換需要注意的問題, ? 因為有消失點的存在,也就是說當我們看火車軌道的時候總在某個距離上看到兩條軌道重合到一起后消失。
對于空間中任一點(XW,YW,ZW)T,投影之后的對應像點為(u,v,1)T,寫成矩陣形式:
其中AR為變換矩陣,假設M = AR
將矩陣展開,這里去Zc = 1 可以得到如下關系式。
消失點可以認為是空間直線上無窮遠處的點投影在圖像上所成的像點。對于空間中某一直線L,方向為(dx,dy,dz),給定直線上坐標(ax,ay,az),所以直線上任一點A可以表示為:
?
當趨于無窮時可以得到
從而得到消失點的坐標。
注:逆透視變換的范圍不能到達消失點,否則不能還原。
整體變換的示意圖:
逆透視變換詳解 及 代碼實現(二)
根據上述原理,結合應用場景,列出代碼的實現!!
總結
以上是生活随笔為你收集整理的逆透视变换详解 及 代码实现(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简单描述char(n)、varchar(
- 下一篇: C++函数的用法:erase函数