女人夜夜春高潮爽A∨片传媒_国产精品VIDEOS麻豆_在线精品亚洲一区二区三区_亚洲熟妇无码av

圖像處理
新聞詳情

仿射變換和透視變換

發布時間:2022-07-22 16:02:53 最后更新:2022-07-25 10:12:35 瀏覽次數:3961



上(shang)面(mian)這副圖就是(shi)我們今天要處理的(de)了(le),我們想(xiang)把它(ta)從拍(pai)照(zhao)視角變成鳥瞰(kan)圖,這是(shi)機器人導航(hang)中的(de)常(chang)用手段(duan),以便(bian)在(zai)該平面(mian)上(shang)進行規劃(hua)和導航(hang)。

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

綜述

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


平移

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

對每一個像素點(dian)坐標(biao)平移。可以讓每一個像素點(dian)的x,y坐標(biao)都(dou)加一個變(bian)量。

矩陣形式表示:


等式(shi)左邊(bian)[X,Y,1]是像(xiang)素(su)坐標(biao)的齊(qi)次(ci)形式(shi)。等式(shi)右邊(bian)是平移之后的坐標(biao)。

放縮

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


旋轉

對矩(ju)形(圖片)進行旋(xuan)轉,關于旋(xuan)轉的數學推導在后面仿射會介紹:


錯切

前面的都(dou)比(bi)較(jiao)直觀,那錯切是什么呢?

我(wo)們(men)可以看(kan)下矩形關于y方向的(de)錯切:


看圖就很直觀了,那(nei)數學表達(da)呢?


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


然后兩者和(he)起來,就如下(xia)了:


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


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

在書上(shang)往往將仿射變(bian)換和(he)透視變(bian)換放(fang)一起(qi)講,這兩者各是(shi)什么呢(ni)?

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


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

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

那到(dao)底是(shi)不(bu)是(shi)呢?其(qi)實是(shi)的。仿射變(bian)換(huan)屬于線性變(bian)換(huan),而透(tou)視變(bian)換(huan)則不(bu)僅(jin)僅(jin)是(shi)線性變(bian)換(huan)。仿射變(bian)換(huan)可以看做是(shi)透(tou)視變(bian)換(huan)的一種(zhong)特例。

直觀上(shang)感受,我們可以認(ren)為(wei):

仿(fang)射(she)變(bian)換是單純對(dui)圖片(pian)進行(xing)縮放(fang),傾斜和旋(xuan)轉,因此圖片(pian)不(bu)論(lun)如何變(bian)化,線之間的平行(xing)性是不(bu)變(bian)的。如下圖。


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

而透視(shi)變換(huan),則是當(dang)觀察(cha)者的視(shi)角(jiao)發生變化時物體發生的透視(shi)變換(huan),此(ci)轉換(huan)允許造成(cheng)透視(shi)形(xing)變。

我們看(kan)下圖的公路,近處寬遠處窄(zhai),就(jiu)是因為視(shi)角的原因,


而我們(men)本文(wen)要(yao)做的,就是將視角(jiao)改為鳥(niao)瞰,從而得到(dao)類(lei)似(si)下(xia)圖的鳥(niao)瞰圖:


仿射變換原理

前文已經說了(le),仿(fang)射(she)變換是單純對圖片進行(xing)平移(yi),縮放,傾斜和旋轉,而這幾個操(cao)作都不會改變圖片線之間的平行(xing)關(guan)系。

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


這個(ge)(ge)函數很好理(li)解(jie),輸入一個(ge)(ge)圖像,輸出這個(ge)(ge)圖像的仿(fang)射(she)變(bian)換。

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

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


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

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


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

坐標系中某個點的旋轉可以等價地去旋轉坐標軸。

所以有了上圖中以(Xs0,Ys0)為中心的(de)虛線與屏幕水平垂(chui)直的(de)坐標(biao)(biao)(biao)系(xi)(xi)。在(zai)這個坐標(biao)(biao)(biao)系(xi)(xi)中確定(ding)P的(de)坐標(biao)(biao)(biao),和在(zai)藍色坐標(biao)(biao)(biao)系(xi)(xi)中確定(ding)旋轉之后P的(de)坐標(biao)(biao)(biao)是等價(jia)的(de)。

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


進而我們可以得到:


到此,我們完成了旋(xuan)轉操(cao)作,如(ru)何平移(yi)呢?僅(jin)是加(jia)一個平移(yi)常(chang)數的事:


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

推導知道了(le),但(dan)如何(he)實(shi)現呢?

opencv同樣(yang)給(gei)我們提供了(le)計(ji)算(suan)仿射矩陣的函數接口:


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

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

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

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

透視變換原理

我們(men)說仿射(she)變(bian)換是在二維空(kong)間中的(de)旋轉,平移和(he)縮放。而透(tou)視(shi)變(bian)換則是在三維空(kong)間中視(shi)角(jiao)的(de)變(bian)化。

opencv中同樣給(gei)出(chu)了透視變換的函(han)數接口:


和(he)仿射(she)變(bian)換基本相同,不同的是輸入(ru)透視(shi)變(bian)換矩(ju)陣M大小為(wei)3*3:


上(shang)面矩陣(zhen)的(de)未(wei)知量比仿射變(bian)(bian)換的(de)矩陣(zhen)多了一個透(tou)視變(bian)(bian)換矩陣(zhen)T3(兩個未(wei)知量),因此我們(men)需要給下面計(ji)算透(tou)視變(bian)(bian)換矩陣(zhen)的(de)函數(shu)提供(gong)四(si)對以上(shang)的(de)點來求(qiu)解


T1為(wei)線(xian)性變換完(wan)成旋(xuan)轉,錯切(qie)和放縮(suo),T2完(wan)成平移操作。T3就是(shi)設了(le)兩個變量來表示(shi)映射(she)關系。

編程實現

理解了(le)(le)透(tou)視(shi)變換的原理后,我(wo)們就著手來實現了(le)(le)(代碼可以順次復(fu)制(zhi)即(ji)可運行):

首先(xian)是讀取原圖片并(bing)顯示啦(la):




然(ran)后(hou)我(wo)們需要選取原圖上的四個(ge)點(dian),并計算出該四對點(dian)變換(huan)后(hou)的位置。

如(ru)何(he)選點(dian)?我(wo)們可以選兩邊白條的(de)四(si)個定點(dian)。那變換后的(de)位(wei)置就(jiu)需要我(wo)們自(zi)己估算了,如(ru)下(xia)圖:


我們希望將(jiang)藍(lan)色的透視變(bian)換(huan)為黃色的。


 

 

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


 

然后進行透視變換:



這(zhe)樣,我(wo)們就得到鳥瞰圖啦(la)。

 


在線客服(fu)
客(ke)服電(dian)話
  • 0755-23712116
  • 13310869691