欧美日韩在线第一页-欧美日韩在线观看精品-欧美日韩在线观看一区二区-欧美日韩在线免费看-欧美日韩在线视频不卡一区二区三区

圖像處理
新聞詳情

仿射變換和透視變換

發(fā)布時間:2022-07-22 16:02:53 最后更新:2022-07-25 10:12:35 瀏覽次數(shù):3862



上面這副圖就是我們今天要處理的了,我們想把它從拍照視角變成鳥瞰圖,這是機(jī)器人導(dǎo)航中的常用手段,以便在該平面上進(jìn)行規(guī)劃和導(dǎo)航。

這種變換常常用到透視變換,但我們今天在講解透視變換時,需要普及一下其他的變換,包括平移旋轉(zhuǎn)錯切放縮,以及仿射變換

綜述

所有復(fù)雜的東西,都是由基本的組成的。所以我們需要先了解一下基礎(chǔ)的變換有哪些:


平移

我們對矩形(圖像)平移,需要怎么做?

對每一個像素點坐標(biāo)平移。可以讓每一個像素點的x,y坐標(biāo)都加一個變量。

矩陣形式表示:


等式左邊[X,Y,1]是像素坐標(biāo)的齊次形式。等式右邊是平移之后的坐標(biāo)。

放縮

進(jìn)行放縮,就是將矩形(圖像)放縮n倍,也就是長寬各乘一個變量。


旋轉(zhuǎn)

對矩形(圖片)進(jìn)行旋轉(zhuǎn),關(guān)于旋轉(zhuǎn)的數(shù)學(xué)推導(dǎo)在后面仿射會介紹:


錯切

前面的都比較直觀,那錯切是什么呢?

我們可以看下矩形關(guān)于y方向的錯切:


看圖就很直觀了,那數(shù)學(xué)表達(dá)呢?


x軸上的錯切就是同理了,公式如下:


然后兩者和起來,就如下了:


好了,到此我們就了解了這四種變換了,那仿射變換是什么呢?可以看下圖公式:


等式右邊就是仿射變換矩陣,是由原圖像平移,旋轉(zhuǎn),放縮,錯切之后得來的。

在書上往往將仿射變換和透視變換放一起講,這兩者各是什么呢?

在剛學(xué)仿射變換和透視變換時,我是有些分不清的。印象最深刻的就是下圖:


可以看到,仿射變換(下)是將矩形變換成平行四邊形(即變換后各邊依舊平行),而透視變換(上)可以變換成任意不規(guī)則四邊形

這樣看來,好像仿射變換是透視變換的子集。

那到底是不是呢?其實是的。仿射變換屬于線性變換,而透視變換則不僅僅是線性變換。仿射變換可以看做是透視變換的一種特例。

直觀上感受,我們可以認(rèn)為:

仿射變換是單純對圖片進(jìn)行縮放,傾斜和旋轉(zhuǎn),因此圖片不論如何變化,線之間的平行性是不變的。如下圖。


可以感受到,右圖是可以通過左圖平移,旋轉(zhuǎn),錯切,縮放之后得來。

而透視變換,則是當(dāng)觀察者的視角發(fā)生變化時物體發(fā)生的透視變換,此轉(zhuǎn)換允許造成透視形變。

我們看下圖的公路,近處寬遠(yuǎn)處窄,就是因為視角的原因,


而我們本文要做的,就是將視角改為鳥瞰,從而得到類似下圖的鳥瞰圖:


仿射變換原理

前文已經(jīng)說了,仿射變換是單純對圖片進(jìn)行平移,縮放,傾斜和旋轉(zhuǎn),而這幾個操作都不會改變圖片線之間的平行關(guān)系。

opencv中給出了仿射變換的函數(shù)接口:


這個函數(shù)很好理解,輸入一個圖像,輸出這個圖像的仿射變換。

但第三個參數(shù)需要我們輸入2*3的仿射計算矩陣,這是什么鬼?

我們先看一下仿射計算矩陣長什么樣子(可以去掉最后一行):


我們的輸出圖像G(x,y) = F(x,y)乘仿射矩陣。

我們可以看下圖推導(dǎo)出仿射計算矩陣。


一個點P在原始坐標(biāo)系下的坐標(biāo)是(Xsp,Ysp)。然后要完成旋轉(zhuǎn)操作,旋轉(zhuǎn)操作是基于原點的。如何得到旋轉(zhuǎn)之后的點的坐標(biāo),這里用到一個技巧:

坐標(biāo)系中某個點的旋轉(zhuǎn)可以等價地去旋轉(zhuǎn)坐標(biāo)軸。

所以有了上圖中以(Xs0,Ys0)為中心的虛線與屏幕水平垂直的坐標(biāo)系。在這個坐標(biāo)系中確定P的坐標(biāo),和在藍(lán)色坐標(biāo)系中確定旋轉(zhuǎn)之后P的坐標(biāo)是等價的。

基于這個結(jié)論,我們可以通過簡單的立體幾何知識確定P在新坐標(biāo)系中的坐標(biāo)。P在新坐標(biāo)系中的X坐標(biāo)和Y坐標(biāo)分別是


進(jìn)而我們可以得到:


到此,我們完成了旋轉(zhuǎn)操作,如何平移呢?僅是加一個平移常數(shù)的事:


到此,我們的2*3大小的仿射變換便推導(dǎo)出來了。

推導(dǎo)知道了,但如何實現(xiàn)呢?

opencv同樣給我們提供了計算仿射矩陣的函數(shù)接口:


這個函數(shù)可以計算出我們想要圖像變換的矩陣,但需要我們輸入至少三對點集,點集是什么鬼?為什么是至少三對?

我們可以看到上面公式里有六個變量,因此自然需要至少列六個等式才可計算出該矩陣。

因此我們需要找輸入圖像和輸出圖像上一一對應(yīng)的三對點(3個x,y對應(yīng)計算式)來作為輸入。

這樣,我們就可以進(jìn)行仿射變換啦。

透視變換原理

我們說仿射變換是在二維空間中的旋轉(zhuǎn),平移和縮放。而透視變換則是在三維空間中視角的變化。

opencv中同樣給出了透視變換的函數(shù)接口:


和仿射變換基本相同,不同的是輸入透視變換矩陣M大小為3*3:


上面矩陣的未知量比仿射變換的矩陣多了一個透視變換矩陣T3(兩個未知量),因此我們需要給下面計算透視變換矩陣的函數(shù)提供四對以上的點來求解


T1為線性變換完成旋轉(zhuǎn),錯切和放縮,T2完成平移操作。T3就是設(shè)了兩個變量來表示映射關(guān)系。

編程實現(xiàn)

理解了透視變換的原理后,我們就著手來實現(xiàn)了(代碼可以順次復(fù)制即可運行):

首先是讀取原圖片并顯示啦:




然后我們需要選取原圖上的四個點,并計算出該四對點變換后的位置。

如何選點?我們可以選兩邊白條的四個定點。那變換后的位置就需要我們自己估算了,如下圖:


我們希望將藍(lán)色的透視變換為黃色的。


 

 

我們選取了如圖四個點,首先計算透視變換矩陣:


 

然后進(jìn)行透視變換:



這樣,我們就得到鳥瞰圖啦。

 


在線客服 雙翌客服
客服電話
  • 0755-23712116
  • 13310869691
主站蜘蛛池模板: 98国内自拍在线视频| a级毛片毛片免费很很综合| 成人第一页| 国产欧美激情一区二区三区| 99re热久久精品这里都是精品 | 免费看av的网址| 国产精品久久久久毛片真精品| 99热国产这里只有精品99| 久久国产精品只做精品| 日韩美女一级毛片| 色免费观看| 欧美洲精品亚洲精品中文字幕| 国产精品你懂的在线播放调教| 久草在线视频精品| 手机看片国产高清| 亚洲综合一| jizz国产在线观看| 久久成人免费大片| 日韩在线视频网| 毛片免费看| 在线观看精品国产| 免费黄色片在线| 欧美成人性毛片免费版| 国产成人精品免费影视大全| 香港黄色毛片| 理论亚洲区美一区二区三区| 91精品国产91久久久久久 | 国产精品嫩草影院99av视频| 精品一区二区日本高清| 成人999| 国产精品爱久久电影| 久久机热综合久久国产| 麻豆入口视频在线观看| 欧美性色xo影院在线观看| 日韩视频欧美视频| 99视频精品全部国产盗摄视频| 久久久久国产精品美女毛片| 日本一级爽快片淫片高清| 日本黄色性生活片| 日韩在线免费视频| 日本黄大片视频在线播放|