图像缩放算法_技术专栏|基于无人机LK光流算法的适用性及其优化方法探究
點擊上方藍字關注我們
問題描述
◆?◆?◆
一般的LK光流算法存在一個比較明顯的局限性。我們知道,一般的LK光流算法必須包含三個假設:
(1)亮度恒定;
(2)時間連續或者運動是小運動;
(3)空間一致性,也就是該像素點相鄰區域內的其他像素點具有相似的運動狀態。
對于第(2)點假設,因為只有小運動情況下前后幀之間的單位位置變化引起的灰度變化才能近似灰度對位置的偏導數,但是實際飛行中,無人機的運動速度一般是比較快的,基本上不存在這么小的運動情況,那么是否可以找到一種方法,使無人機在正常的速度下也能使用LK光流算法去獲取速度呢?
基本思路
◆?◆?◆
我們知道,如果要通過LK光流算法去獲取速度,就必須滿足以上三個假設:(1)亮度恒定;(2)小運動;(3)空間一致性。
正常飛行情況下無人機是不滿足假設(2)的,那么我們是否能找到一種方法,使無人機在單目相機視野內滿足小運動情況?假設我把單目相機和運動目標的距離拉遠,那么從相機視野內看,運動物體的速度和位移相對于未拉遠情況下是不是變小了。當拉遠到一定程度時,使物體在相機視野內的運動速度足夠小,這不就滿足第2個假設了嗎!
總的來講就是先將不滿足LK光流法第2個條件的情況進行轉換,使其滿足LK光流算法,再進行計算。
理論基礎
◆?◆?◆
(1)二元函數泰勒展開公式:
(2)二元函數求偏導:
形如:
求偏導得:
(3)矩陣的基本運算;
(4)基本求和公式;
(5)同比例縮放中位移和速度的關系:
假設當圖像為400x400時,物體速度為[16,16],當圖像縮小為200x200時,速度變為[8,8],縮小為100x100時,速度為[4,4] ,其[x,y]中得x表示物體沿著x軸方向的速度,y表示物體沿著y軸方向的速度。
具體的實現形式
◆?◆?◆
單目相機所得的圖像按每幀進行多層縮放,形成一個類似金字塔型的圖像縮放層,金字塔的最頂層代表可帶入LK光流法直接計算的圖像層,最底層代表原始圖像,如下圖所示樣例:
從最頂層開始計算最頂層金字塔圖像的光流矢量(速度),再根據金字塔最頂層光流的結果估計次頂層光流的初始值,依次迭代,直到算出最底層原始圖像的光流矢量,即我們要求的量。
因為我們生成的圖像金字塔的最頂層是滿足LK光流算法第2點的基本假設的,所以最頂層中的車子的運動速度很小。假設令其為[0,0],表示x和y方向的速度都為零。
首先我們初始化金字塔頂層圖像的光流矢量,令為[0,0]:
那么我們如何判定前后兩幀之間被拉遠后的相機視野里目標的速度矢量呢?我們記最頂層目標點在位于(x,y),其灰度值為A(x,y);則同一層后一幀的目標點為B(x+Vx,y+Vy),其中Vx和Vy為目標點的位移,由于最頂層滿足LK光流法小運動要求,目標點的位移亦可當作速度,所以目標點在頂層的速度矢量可記為,?= (Vx,Vy)。我們知道,LK光流法還滿足同一點灰度值不變的要求,我們以頂層第一幀視野內目標點的坐標(Px,Py)為同層第二幀視野的中心,向x軸方向和y軸方向分別以幅度Ix,Jy去搜索,計算后一幀該范圍內所有的點與前一幀目標點像素的匹配誤差和,公式如下:
表示該領域內所有像素點的匹配誤差和;
接下來對該二元函數進行求導:
我們想要求的值,我們必須把孤立出來,于是我們單獨對進行泰勒展開:
將(6)式帶入(5)式中,且令
??與?
是兩幀同層圖像灰度之間的差值,和分別表示圖像在該點梯度的X方向分量和Y方向分量。根據和求得空間梯度矩陣G,以此求得頂層圖像的最佳光流。
得下式:
為了簡化運算和便于觀察,我們定義如下關系:
回到我們得主題,我們要求鄰近像素點匹配誤差和最小,相當于求其導數為零的點,即
于是有:
以至于最后我們能求得光流矢量的最優解:
將頂層圖像得到的光流矢量累加值傳遞到下一層作為初始值:
從上式(11)我們可以看出我們最后算出的最底層的光流是所有層光流的疊加。
最后,我們做一個總結,使用金字塔型分層圖像計算光流的優點,可以提高LK光流算法的泛化能力,使算法的適用性更強。它相對于每一次光流都會保持很小,但計算出來的光流可以進行放大然后累計,所以利用小視野就能處理較大的運動像素點。
- End -
技術發展的日新月異,阿木實驗室將緊跟技術的腳步,不斷把無人系統行業最新的技術和硬件推薦給大家。看到經過我們培訓的學員在技術上突飛猛進,是我們培訓最大的價值。如果你在無人機行業就請關注我們呀,我們將持續發布無人系統行業最有價值的信息和技術。
總結
以上是生活随笔為你收集整理的图像缩放算法_技术专栏|基于无人机LK光流算法的适用性及其优化方法探究的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 顺序表中有效元素的长度_408数据结构之
- 下一篇: python3 redis_python