您的位置:首页 > 其它

摄像机成像、畸变模型(二)

2014-01-27 10:51 274 查看
一般的針孔相機模型如下:

三維坐標點經過透視投影變換,轉換到一個圖像平面坐標點。



而相機透鏡還存在一定的畸變,包括橫向畸變和切向畸變。

 

因此,針孔相機模型又被擴展为以下模型:



首先,世界坐標被轉換为相機坐標,由X,Y,Z到x,y,z;

然後,歸一化,z=1處,x,y的投影坐標x`,y`;

接下來,對投影坐標,進行畸變處理;

最後,由相機坐標轉換到圖像坐標。

 

在使用廣角鏡頭或魚眼相機時,原始圖像存在畸變比較嚴重。

在圖像識別的很多應用場景中,消除圖像的畸變是圖像預處理的首要問題。

通過相機標定,很容易拿到相機的內部参數,包括焦距、光心和畸變系數。



以上過程,就是透鏡畸變前後圖像坐標變換的公式。具體步驟如下:

1. 由圖像坐標系反變換到相機坐標系中

2.  然後,校正反變換R-1,一般無校正變換的相機,默認为單位矩陣

3. 歸一化,並進行相機透鏡畸變處理

4. 由相機坐標轉換到圖像坐標。

由此,得到由針孔模型到透鏡畸變畸變模型相互變換的對應關系u <--> mapx, v <--> mapy

initUndistortRectifyMap函數就是完成了以上工作。

 opencv中,remap與undistortion都是消除畸變的函數,undistortion在設置了一些参數後調用了remap函數,二者的算法實質是一样的。由目標圖像的坐標,找到對應的原始圖像坐標,然後將其值复制到目標圖像。大致思路是如此,由於圖像大小和變換,需要插值或近似的方法,如最鄰近法、線性插值等

圖像視角變換

如圖像由前向視角frontview轉換为俯視角birdview。

一般來講,相機向下傾斜時,相機前向視角frontview的視角範圍比較大,而俯視birdview需要的視角比較小(涉及地面的視角部分)。



針孔模型下,在前向視角圖像中,截取涉及地面的部分,並通過透視變換,轉換为俯視視角。地面的一個矩形區域,在前向視圖中會大致是一個三角形或梯形的形狀,而在俯視圖中,仍是一個矩形圖像,且能保留線性、平行性特征。

 

如下,一個前向廣角視圖,轉換为俯視圖。

前向視圖:



俯視圖:



轉換方法:

首先,通過標定獲取相機的外部参數,世界坐標系中相機的位置Position和傾角(相對於x,y,z坐標軸的角度),即M=R|t。並假定地面的z坐標为z=0.

然後,獲取俯視圖內的三維地面坐標。z=0,地面區域的實際大小與俯視圖的大小成一定比例,即俯視圖中一個像素的位置(u`,v`),在地面坐標上,也有對應的位置(x`, y`, 0)。

然後,通過相機模型,將每個地面位置坐標(x`,y`, 0)轉換为前向視圖中的坐標(u, v)。

此時,前向視圖像與俯視圖像有一個對應關系(u,v) <--> (u`,v`)。

 

通過對應關系,每個俯視圖的像素都在前向視圖像中有對應的位置,兩者的像素值相等(使用最鄰近法或線性插值等)。俯視圖前方的部分邊緣模糊比較嚴重,這是在原圖中采样範圍小的原因。
转自:http://blog.csdn.net/viewcode/article/details/7967253
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: