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