視頻防抖有很多種技術,各有優劣,主流的目前分為三種:
EIS電子防抖
EIS電子防抖是通過軟體演算法實作防抖的,其技術運作原理是通過加速度傳感器和陀螺儀模塊偵測手機抖動的幅度,從而來動態調節整ISO、快門以及成像演算法來做模糊修正,
優點:成本低
缺點:畫面會被裁切,犧牲影像解析度
OIS光學防抖
OIS光學防抖是通過處理器、陀螺儀和相機防抖模組之間的配合,在拍照抖動時用以驅動防抖組件快速向抖動的相反方向移動鏡頭模組,由此來抵消發生的抖動,進而實作最終的穩定成像,
優點:畫面不會被裁切,原生畫質影像效果最好
缺點:成本較高、鏡頭非常容易損壞、鏡頭無法做小
AIS智能防抖
AIS防抖是一種基于人工智能的影像防抖技術,可以在相機拍攝程序中,減少因為手抖動造成的畫面模糊,獲得更加穩定,清晰的畫面,即使在拍攝視頻或者拍攝夜景時,也可取得良好的防抖效果,
優點:健壯性可以做到很強
缺點:性能低、尚未普及
本文主要討論的是最AIS智能防抖的基礎部分,不涉及到AI的部分,而只是最原始的基于影像特征點抖動檢測加以糾偏的防抖技術,
第一步:對每一幀(逐幀)影像做角點檢測,又稱為關鍵點檢測,也就是將影像上所有的關鍵點角點識別出來,
如下圖所示,藍色圈出來的部分,就是影像上的關鍵點,

關鍵點檢測有很多種演算法:
1. FAST
2. Agast
3. GFTT
4. SimpleBlob
5. Affine
6. SIFT
7. BRISK
8. ORB
9. MSER
第二步:逐一將前后兩幀的角點(關鍵點)做比對,計算出兩兩之間的向量差(仿射變換),
如下圖紅色箭頭所示方向,既是兩幀相比對得到的向量方向,
先使用OpenCV里的光流法函式 calcOpticalFlowPyrLK() 函式得到前后得到當前幀相對上一幀的所有關鍵點變化資訊,
再使用OpenCV里的 estimateRigidTransform() 函式傳入上一個函式的兩幀的結果,可以挑選出前后兩幀兩個2D點集矩陣之間的最佳仿射變換,

第三步,將第二步算出的最佳仿射變換矩陣資料的整體平均方向,套用低通濾波或者高斯濾波,抹平突變的波峰波谷,
在OpenCV里面還分成 單程穩定器(OnePassStabilizer)和雙程穩定器(TwoPassStabilizer),
且支持設定兩種濾波方式:低通濾波(LpMotionStabilizer)和高斯濾波(GaussianMotionFilter),
第四步,使用均值濾波抹平之后的仿射變換矩陣資料對視頻幀進行影像變換(縮放、旋轉、平移等全放射變換)和裁切,
在OpenCV里面使用invertAffineTransform() 和 warpAffine()直接對影像進行仿射變換,得到變換后的影像結果,
第五步,將裁切后的視頻resize回原視頻的大小,
此步驟涉及到多種BorderMode(邊界模式):
1. CONSTANT
2. REPLICATE
3. REFLECT
4. WRAP
5. REFLECT_101
6. TRANSPARENT
至于各自有什么差異無非就是各種填充方式有差異,有些是鏡面反射,有些是透明,有些是純黑色,自行去看OpenCV的檔案,一般最常見的是REPLICATE Mode,

Before After
中間處理程序演示完整視頻:https://live.csdn.net/v/226519
以上就是一個視頻軟體防抖的全部步驟,希望能對你有幫助?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/500087.html
標籤:其他
