sift算法_单应性Homograph估计:从传统算法到深度学习
點(diǎn)擊上方“CVer”,選擇加"星標(biāo)"置頂
重磅干貨,第一時(shí)間送達(dá)
本文作者:白裳
https://zhuanlan.zhihu.com/p/74597564
本文已由原作者授權(quán),不得擅自二次轉(zhuǎn)載
單應(yīng)性原理被廣泛應(yīng)用于圖像配準(zhǔn),全景拼接,機(jī)器人定位SLAM,AR增強(qiáng)現(xiàn)實(shí)等領(lǐng)域。這篇文章從基礎(chǔ)圖像坐標(biāo)知識(shí)系為起點(diǎn),講解圖像變換與坐標(biāo)系的關(guān)系,介紹單應(yīng)性矩陣計(jì)算方法,并分析深度學(xué)習(xí)在單應(yīng)性方向的進(jìn)展。
本文為入門級(jí)文章,希望能夠幫助讀者快速了解相關(guān)內(nèi)容。
目錄一 圖像變換與平面坐標(biāo)系的關(guān)系
二 平面坐標(biāo)系與齊次坐標(biāo)系
三 單應(yīng)性變換
四 深度學(xué)習(xí)在單應(yīng)性方向的進(jìn)展單應(yīng)性估計(jì)在圖像拼接中的應(yīng)用
一 圖像變換與平面坐標(biāo)系的關(guān)系
旋轉(zhuǎn):
將圖形圍繞原點(diǎn)??逆時(shí)針方向旋轉(zhuǎn)??角,用解析式表示為:
旋轉(zhuǎn)寫成矩陣乘法形式:
平移:
但是現(xiàn)在遇到困難了,平移無法寫成和上面旋轉(zhuǎn)一樣的矩陣乘法形式。所以引入齊次坐標(biāo)??,再寫成矩陣形式:
其中??表示單位矩陣,而??表示平移向量。
那么就可以把把旋轉(zhuǎn)和平移統(tǒng)一寫在一個(gè)矩陣乘法公式中,即剛體變換:
而旋轉(zhuǎn)矩陣??是正交矩陣(??)。
剛體變換:旋轉(zhuǎn)+平移(正方形-正方形)仿射變換
其中??可以是任意2x2矩陣(與??一定是正交矩陣不同)。
仿射變換(正方形-平行四邊形)可以看到,相比剛體變換(旋轉(zhuǎn)和平移),仿射變換除了改變目標(biāo)位置,還改變目標(biāo)的形狀,但是會(huì)保持物體的“平直性”。
不同??和??矩陣對(duì)應(yīng)的各種基本仿射變換:
投影變換(單應(yīng)性變換)
簡(jiǎn)單說,投影變換徹底改變目標(biāo)的形狀。
總結(jié)一下:
剛體變換:平移+旋轉(zhuǎn),只改變物體位置,不改變物體形狀
仿射變換:改變物體位置和形狀,但是保持“平直性”
投影變換:徹底改變物體位置和形狀
我們來看看完整投影變換矩陣各個(gè)參數(shù)的物理含義:
其中??代表仿射變換參數(shù),??代表平移變換參數(shù)。
而??表示一種“變換后邊緣交點(diǎn)“關(guān)系,如:
至于??則是一個(gè)與??相關(guān)的縮放因子。
一般情況下都會(huì)通過歸一化使得??(原因見下文)。
二 平面坐標(biāo)系與齊次坐標(biāo)系
問題來了,齊次坐標(biāo)到底是什么?
齊次坐標(biāo)系??與常見的三維空間坐標(biāo)系??不同,只有兩個(gè)自由度:
而??(其中??)對(duì)應(yīng)坐標(biāo)??和??的縮放尺度。當(dāng)??時(shí):
特別的當(dāng)??時(shí),對(duì)應(yīng)無窮遠(yuǎn):
三 單應(yīng)性變換
單應(yīng)性是什么?
此處不經(jīng)證明的給出:同一個(gè)?[無鏡頭畸變]?的相機(jī)從不同位置拍攝?[同一平面物體]?的圖像之間存在單應(yīng)性,可以用?[投影變換]?表示 。
注意:單應(yīng)性成立是有條件的!簡(jiǎn)單說就是:
其中??是Left view圖片上的點(diǎn),??是Right view圖片上對(duì)應(yīng)的點(diǎn)。
那么這個(gè)??單應(yīng)性矩陣如何求解呢?
更一般的,每一組匹配點(diǎn)??有
由平面坐標(biāo)與齊次坐標(biāo)對(duì)應(yīng)關(guān)系??,上式可以表示為:
進(jìn)一步變換為:
寫成矩陣??形式:
也就是說一組匹配點(diǎn)??可以獲得2組方程。
單應(yīng)性矩陣8自由度
注意觀察:單應(yīng)性矩陣??與??其實(shí)完全一樣(其中?),例如:
即點(diǎn)??無論經(jīng)過??還是??映射,變化后都是??。
如果使??,那么有:
所以單應(yīng)性矩陣??雖然有9個(gè)未知數(shù),但只有8個(gè)自由度。
在求??時(shí)一般添加約束??(也有用??約束),所以還有??共8個(gè)未知數(shù)。由于一組匹配點(diǎn)??對(duì)應(yīng)2組方程,那么只需要??組不共線的匹配點(diǎn)即可求解??的唯一解。
XIAOMI9拍攝,有鏡頭畸變OpenCV已經(jīng)提供了相關(guān)API,代碼和變換結(jié)果如下。
import im2_warp = cv2.warpPerspective(im2, H, (w, h))可以看到:
紅框所在平面上內(nèi)容基本對(duì)齊,但受到鏡頭畸變影響無法完全對(duì)齊;
平面外背景物體不符合單應(yīng)性原理,偏離很大,完全無法對(duì)齊。
傳統(tǒng)方法估計(jì)單應(yīng)性矩陣
一般傳統(tǒng)方法估計(jì)單應(yīng)性變換矩陣,需要經(jīng)過以下4個(gè)步驟:
提取每張圖SIFT/SURF/FAST/ORB等特征點(diǎn)
提取每個(gè)特征點(diǎn)對(duì)應(yīng)的描述子
通過匹配特征點(diǎn)描述子,找到兩張圖中匹配的特征點(diǎn)對(duì)(這里可能存在錯(cuò)誤匹配)
使用RANSAC算法剔除錯(cuò)誤匹配
求解方程組,計(jì)算Homograph單應(yīng)性變換矩陣
示例代碼如下:
#coding:utf-8相關(guān)內(nèi)容網(wǎng)上資料較多,這里不再重復(fù)造輪子。需要說明,一般情況計(jì)算出的匹配的特征點(diǎn)對(duì)??數(shù)量都有??,此時(shí)需要解超定方程組(類似于求解線性回歸)。
四 深度學(xué)習(xí)在單應(yīng)性方向的進(jìn)展
HomographyNet(深度學(xué)習(xí)end2end估計(jì)單應(yīng)性變換矩陣)
HomographyNet是發(fā)表在CVPR 2016的一種用深度學(xué)習(xí)計(jì)算單應(yīng)性變換的網(wǎng)絡(luò),即輸入兩張圖,直接輸出單應(yīng)性矩陣??。
在之前的分析中提到,只要有4組??匹配點(diǎn)即可計(jì)算??的唯一解。
相似的,只要有4組??也可以計(jì)算出??的唯一解:
其中??且??。
分析到這里,如果要計(jì)算??,網(wǎng)絡(luò)輸出可以有以下2種情況:
Regression:網(wǎng)絡(luò)直接輸出??共8個(gè)數(shù)值
這樣設(shè)置網(wǎng)絡(luò)非常直觀,使用L2損失訓(xùn)練,測(cè)試時(shí)直接輸出8個(gè)float values,但是沒有置信度confidence。即在使用網(wǎng)絡(luò)時(shí),無法知道當(dāng)前輸出單應(yīng)性可靠程度。
2. Classification:網(wǎng)絡(luò)輸出??共8個(gè)值的量化值+confidence
這時(shí)將網(wǎng)絡(luò)輸出每個(gè)??和??量化成21個(gè)區(qū)間,用分類的方法判斷落在哪一個(gè)區(qū)間。訓(xùn)練時(shí)使用Softmax損失。相比回歸直接輸出數(shù)值,量化必然會(huì)產(chǎn)生誤差,但是能夠輸出分類置信度評(píng)判當(dāng)前效果好壞,更便于實(shí)際應(yīng)用。
另外HomographyNet訓(xùn)練時(shí)數(shù)據(jù)生成方式也非常有特色。
首先在隨機(jī)??位置獲取正方形圖像塊Patch A
然后對(duì)正方形4個(gè)點(diǎn)進(jìn)行隨機(jī)擾動(dòng),同時(shí)獲得4組?
再通過4組??計(jì)算?
最后將圖像通過??變換,在變換后圖像??位置獲取正方形圖像塊Patch B
那么圖像塊A和圖像塊B作為輸入,4組??作為監(jiān)督Label,進(jìn)行訓(xùn)練
可以看到,在無法提取足夠特征點(diǎn)的弱紋理區(qū)域,HomographyNet相比傳統(tǒng)方法確實(shí)有一定的優(yōu)勢(shì):
Spatial Transformer Networks(直接對(duì)CNN中的卷積特征進(jìn)行變換)
其實(shí)早在2015年,就已經(jīng)有對(duì)CNN中的特征進(jìn)行變換的STN結(jié)構(gòu)。
假設(shè)有特征層??,經(jīng)過卷積變?yōu)??,可以在他們之間插入STN結(jié)構(gòu)。這樣就可以直接學(xué)習(xí)到從特征??上的點(diǎn)??映射到特征??對(duì)應(yīng)點(diǎn)??的仿射變換。
其中??對(duì)應(yīng)STN中的仿射變換參數(shù)。STN直接在特征維度進(jìn)行變換,且可以插入輕松任意兩層卷積中。
DELF: DEep Local Features(深度學(xué)習(xí)提取特征點(diǎn)與描述子)
之前提到傳統(tǒng)方法使用SIFT和Surf等特征點(diǎn)估計(jì)單應(yīng)性。顯然單應(yīng)性最終估計(jì)準(zhǔn)確度嚴(yán)重依賴于特征點(diǎn)和描述子性能。Google在ICCV 2017提出使用使用深度學(xué)習(xí)提取特征點(diǎn)。
tensorflow/models/delfgithub.com
考慮到篇幅,這里不再展開DELF,請(qǐng)有興趣的讀者自行了解相關(guān)內(nèi)容。
下載1:動(dòng)手學(xué)深度學(xué)習(xí)
在CVer公眾號(hào)后臺(tái)回復(fù):動(dòng)手學(xué)深度學(xué)習(xí),即可下載547頁《動(dòng)手學(xué)深度學(xué)習(xí)》電子書和源碼。該書是面向中文讀者的能運(yùn)行、可討論的深度學(xué)習(xí)教科書,它將文字、公式、圖像、代碼和運(yùn)行結(jié)果結(jié)合在一起。本書將全面介紹深度學(xué)習(xí)從模型構(gòu)造到模型訓(xùn)練,以及它們?cè)谟?jì)算機(jī)視覺和自然語言處理中的應(yīng)用。
下載2:CVPR /? ECCV 2020開源代碼
在CVer公眾號(hào)后臺(tái)回復(fù):CVPR2020,即可下載CVPR 2020代碼開源的論文合集
在CVer公眾號(hào)后臺(tái)回復(fù):ECCV2020,即可下載ECCV 2020代碼開源的論文合集
重磅!CVer-論文寫作與投稿交流群成立
掃碼添加CVer助手,可申請(qǐng)加入CVer-論文寫作與投稿?微信交流群,目前已滿2400+人,旨在交流頂會(huì)(CVPR/ICCV/ECCV/NIPS/ICML/ICLR/AAAI等)、頂刊(IJCV/TPAMI/TIP等)、SCI、EI、中文核心等寫作與投稿事宜。
同時(shí)也可申請(qǐng)加入CVer大群和細(xì)分方向技術(shù)群,細(xì)分方向已涵蓋:目標(biāo)檢測(cè)、圖像分割、目標(biāo)跟蹤、人臉檢測(cè)&識(shí)別、OCR、姿態(tài)估計(jì)、超分辨率、SLAM、醫(yī)療影像、Re-ID、GAN、NAS、深度估計(jì)、自動(dòng)駕駛、強(qiáng)化學(xué)習(xí)、車道線檢測(cè)、模型剪枝&壓縮、去噪、去霧、去雨、風(fēng)格遷移、遙感圖像、行為識(shí)別、視頻理解、圖像融合、圖像檢索、論文投稿&交流、PyTorch和TensorFlow等群。
一定要備注:研究方向+地點(diǎn)+學(xué)校/公司+昵稱(如論文寫作+上海+上交+卡卡),根據(jù)格式備注,可更快被通過且邀請(qǐng)進(jìn)群
▲長(zhǎng)按加微信群
▲長(zhǎng)按關(guān)注CVer公眾號(hào)
整理不易,請(qǐng)給CVer點(diǎn)贊和在看!
總結(jié)
以上是生活随笔為你收集整理的sift算法_单应性Homograph估计:从传统算法到深度学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP5.4.3,有些插件不是你想用就能
- 下一篇: MySql数据库操作遇到的蛋疼二三事