姓名:李增輝
學(xué)號:19021210862
轉(zhuǎn)載自:https://m.sohu.com/a/274686553_100007727
【嵌牛導(dǎo)讀】本文旨在向大家介紹一個有趣的映射關(guān)系,即同一平面在不同圖像間的變換關(guān)系簸呈,這有很多特殊的運用,比如SLAM圖像校正等。。。
【嵌牛鼻子】SLAM 單應(yīng)矩陣
【嵌牛提問】圖像校正如何用opencv實現(xiàn)等舔?
【嵌牛正文】
小白最近在看文獻時總是碰到一個奇怪的詞叫“homography matrix”牺荠,查看了翻譯翁巍,一般都稱作“單應(yīng)矩陣”,更迷糊了休雌。正所謂:“每個字都認識灶壶,連在一塊卻不認識”就是小白的內(nèi)心獨白。查了一下書上的推導(dǎo)杈曲,總感覺有種“硬湊”的意味驰凛,于是又找到了師兄。担扑。恰响。
神奇的單應(yīng)矩陣
小白:師兄~單應(yīng)矩陣是什么鬼啊涌献?我看書上的推導(dǎo)胚宦,每一步勉強能看懂,但還是不太理解其背后的物理意義洁奈,感覺不能轉(zhuǎn)化為自己理解的方式啊
師兄:哦间唉,我第一次看的時候也是這種感覺
小白:而且這個名字好繞口啊,我完全沒法和它的物理意義聯(lián)系起來
師兄:這個名字是直接翻譯的利术,是有點拗口呈野,不過熟悉了也就還好。這個單應(yīng)矩陣還是挺重要的
小白:師兄印叁,能不能一句話告訴我單應(yīng)矩陣是干嘛的啊
師兄:嗯被冒,我的理解是:單應(yīng)矩陣描述的就是同一個平面的點在不同圖像之間的映射關(guān)系军掂,這里前提是同一個平面,這個前提很重要
小白:還是不太懂啊昨悼,為什么要在不同圖像之間進行映射呢蝗锥?這樣映射有什么用呢?為什么強調(diào)是同一個平面率触?
師兄:先別急终议,我一個個來說。我們先來看單應(yīng)矩陣應(yīng)用的一個例子葱蝗。比如現(xiàn)在支付寶穴张,微信都能通過對銀行卡拍照自動識別銀行卡號碼,但是一般我們拍照時銀行卡都不一定是正對著相機两曼,可能會比較偏皂甘,比如像這樣
但是你對著銀行卡拍完照之后,你會發(fā)現(xiàn)這些軟件會自動把銀行卡摳出來悼凑,并且校正成非常規(guī)則的矩形偿枕,像下面這樣
這樣,識別銀行卡數(shù)字的時候也方便多啦户辫!
小白:我用過這個功能哎渐夸,這里面哪一步用到單應(yīng)矩陣?yán)玻?/p>
師兄:單應(yīng)矩陣能夠?qū)崿F(xiàn)自動把銀行卡從背景里“提取”出來,并且變成非常規(guī)整的矩形寸莫。你想想我前面說的單應(yīng)矩陣描述的是同一個平面的點在不同圖像之間的映射關(guān)系
小白:這個銀行卡是一個平面捺萌,所以滿足“同一個平面的點”的要求,那不同圖像就是指拍攝的原始圖像和校正過的圖像咯膘茎?
師兄:正解!通過單應(yīng)矩陣就能完成上述功能酷誓,還有其他類似的例子披坏,比如有些手機里的小軟件實現(xiàn)拍攝紙質(zhì)的名片、投影的PPT等自動校正為矩形的功能盐数,完全一樣的道理棒拂。
小白:原來如此,單應(yīng)矩陣這么厲害呢玫氢!
師兄:這個只是最基礎(chǔ)的功能帚屉,實際上,單應(yīng)矩陣還有非常多的應(yīng)用漾峡。比如用于虛擬廣告牌攻旦,這是很多重大賽事中很常見。比如下面是一個原始的圖片生逸。
我們想要把那個屏幕替換為“計算機視覺life”公眾號的logo牢屋,用單應(yīng)矩陣很輕松就能實現(xiàn)且预,你看下面是我們替換的結(jié)果,是不是很有趣烙无?
小白:好好玩胺嫘场!突然開始喜歡單應(yīng)矩陣?yán)玻?/p>
師兄:除了這些截酷,單應(yīng)矩陣還有幾個很重要的應(yīng)用涮拗,一個是相機標(biāo)定,比如張正友相機標(biāo)定法迂苛,那個標(biāo)定板不就是一個平面圖案嘛三热!如下圖所示
另外一個是單應(yīng)矩陣還可以用于圖像拼接,如下圖所示灾部。
還有現(xiàn)在很火的增強現(xiàn)實(AR)康铭,我們用平面二維標(biāo)記圖案(marker)來做AR展示的觸發(fā)。我們根據(jù)單應(yīng)矩陣就可以知道m(xù)arker不同視角下的圖像赌髓,這樣可以方便的得到虛擬物體的位置姿態(tài)并進行顯示从藤,如下圖所示。
小白:真是開了眼界了锁蠕!師兄夷野,我已經(jīng)迫不及待的要學(xué)習(xí)單應(yīng)矩陣了!
快速理解單應(yīng)矩陣
師兄:哈哈荣倾,單應(yīng)矩陣的計算一般都會提供函數(shù)調(diào)用悯搔,我就簡單說說單應(yīng)矩陣是怎么來的,有哪些需要注意的地方
小白:好舌仍,師兄盡量通俗一點啊
師兄:嗯妒貌,你看下面這個圖,兩個不同的相機拍攝同一個平面
你還記得相機成像模型《從零開始一起學(xué)習(xí)SLAM | 相機成像模型》那一節(jié)中我們最后給的公式嗎铸豁?
小白:記得灌曙,就是下面這個式子,其中节芥,Puv(u, v,1)是圖像中的像素坐標(biāo)在刺, Pw(xw, yw, zw,1) 是世界坐標(biāo)系中的一個點头镊,K是內(nèi)參矩陣蚣驼,R是旋轉(zhuǎn)矩陣,t是平移向量相艇,它們一起寫成矩陣形式是 T颖杏,稱為外參矩陣,表示從世界坐標(biāo)系到相機坐標(biāo)系的變換厂捞。
師兄:很好输玷!現(xiàn)在我們簡化一下表達形式队丝,把中間部分記做M矩陣,如下
M矩陣是一個4 x 4 的矩陣欲鹏,如果空間點在同一個平面上的話机久,我們可以看做 zw = 0,這樣M矩陣就變成了一個 3 x 3的矩陣赔嚎,對于兩個不同的相機膘盖,像素坐標(biāo)和空間點坐標(biāo)可以寫成如下的表示,其中M是3 x 3的矩陣
我們把上面兩個式子合并一下就得到了下面這個式子尤误,其中的H就是單應(yīng)矩陣?yán)蚕琅希矩陣的兩邊是兩張圖像對應(yīng)的匹配點對。也就是說單應(yīng)矩陣H把三維空間中同一平面的點在兩個相機的成像圖片坐標(biāo)進行了映射损晤。
小白:原來如此~書上的推導(dǎo)為什么非要把1用平面方程來代替呢软棺?
師兄:是為了增加空間點都是在平面的約束,本質(zhì)上也是為了降維尤勋,把秩為4的矩陣降維成秩為3
小白:嗯嗯喘落,上面的式子就是兩個圖像上的匹配的點對的映射吧
師兄:對的,如果展開最冰,你會發(fā)現(xiàn)一個式子對應(yīng)2個方程瘦棋。也就是兩個約束項。而單應(yīng)矩陣本身自由度為8暖哨,所以只需要4個匹配點對就行啦
小白:等等赌朋,師兄,為啥單應(yīng)矩陣H自由度為8篇裁?
師兄:這是因為等式兩邊都是齊次坐標(biāo)沛慢,所以可以進行任意尺度的縮放。因此一般都會對H進行歸一化达布,比如把最后一個元素設(shè)置為1颠焦,或者使得H矩陣所有元素的二范數(shù)為1
小白:明白啦,這樣理解容易多了往枣。