日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

光流估计方法

發(fā)布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 光流估计方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

光流估計方法

1. 光流計算中的恒定亮度假設(shè)

光流的概念是Gibson在1950年首先提出來的。它是空間運動物體在觀察成像平面上的像素運動的瞬時速度,是利用圖像序列中像素在時間域上的變化以及相鄰幀之間的相關(guān)性來找到上一幀跟當(dāng)前幀之間存在的對應(yīng)關(guān)系,從而計算出相鄰幀之間物體的運動信息的一種方法。一般而言,光流是由于場景中前景目標(biāo)本身的移動、相機(jī)的運動,或者兩者的共同運動所產(chǎn)生的。

2.假設(shè)條件

(1)亮度恒定,就是同一點隨著時間的變化,其亮度不會發(fā)生改變。這是基本光流法的假定(所有光流法變種都必須滿足),用于得到光流法基本方程;

(2)小運動,這個也必須滿足,就是時間的變化不會引起位置的劇烈變化,這樣灰度才能對位置求偏導(dǎo)(換句話說,小運動情況下我們才能用前后幀之間單位位置變化引起的灰度變化去近似灰度對位置的偏導(dǎo)數(shù)),這也是光流法不可或缺的假定;

(3)空間一致,一個場景上鄰近的點投影到圖像上也是鄰近點,且鄰近點速度一致。這是Lucas-Kanade光流法特有的假定,因為光流法基本方程約束只有一個,而要求x,y方向的速度,有兩個未知變量。我們假定特征點鄰域內(nèi)做相似運動,就可以連立n多個方程求取x,y方向的速度(n為特征點鄰域總點數(shù),包括該特征點)。

研究光流場的目的就是為了從圖片序列中近似得到不能直接得到的運動場。運動場,其實就是物體在三維真實世界中的運動在圖像上的二位速度矢量投影;光流場,是三維物體的運動在二維圖像平面上(人的眼睛或者攝像頭)亮度模式的投影。

那通俗的講就是通過一個圖片序列,把每張圖像中每個像素的運動速度和運動方向找出來就是光流場。那怎么找呢?咱們直觀理解肯定是:第t幀的時候A點的位置是(x1, y1),那么我們在第t+1幀的時候再找到A點,假如它的位置是(x2,y2),那么我們就可以確定A點的運動了:(ux, vy) = (x2, y2) - (x1,y1)。

那怎么知道第t+1幀的時候A點的位置呢? 這就存在很多的光流計算方法了。

1981年,Horn和Schunck創(chuàng)造性地將二維速度場與灰度相聯(lián)系,引入光流約束方程,得到光流計算的基本算法。人們基于不同的理論基礎(chǔ)提出各種光流計算方法,算法性能各有不同。Barron等人對多種光流計算技術(shù)進(jìn)行了總結(jié),按照理論基礎(chǔ)與數(shù)學(xué)方法的區(qū)別把它們分成四種:基于梯度的方法、基于匹配的方法、基于能量的方法、基于相位的方法。近年來神經(jīng)動力學(xué)方法也頗受學(xué)者重視。

3. L-K光流估計方法的基本原理:

L-K光流估計方法屬于一種基于匹配的光流計算方法,其包括基于特征和區(qū)域的兩種。基于特征的方法不斷地對目標(biāo)主要特征進(jìn)行定位和跟蹤,對目標(biāo)大的運動和亮度變化具有魯棒性(robustness)。存在的問題是光流通常很稀疏,而且特征提取和精確匹配也十分困難。基于區(qū)域的方法先對類似的區(qū)域進(jìn)行定位,然后通過相似區(qū)域的位移計算光流。這種方法在視頻編碼中得到了廣泛的應(yīng)用。然而,它計算的光流仍不稠密。另外,這兩種方法估計亞像素精度的光流也有困難,計算量很大。在考慮光流精度和稠密性時,基于匹配的方法適用。

根據(jù)上面的光流估計基本模型得出方程IxΔx+IyΔy=?It,任務(wù):求(u,v)=(Δx,Δy)

困難:一個方程包含兩個未知數(shù)。

Lucas-Kanade方法采用基于領(lǐng)域的計算方法,假設(shè)在一個小方格里的所有像素位移相同。則會得到一組光流估計方程。用矩陣表示如下:


類似前述求解,可得

可信度判斷:矩陣求逆是否能實現(xiàn)?

我們在計算光流的時候,我們要求圖像對應(yīng)位置灰度變化充分(具有充分特征),假如位置灰度變化平緩,那么沿x和y方向的偏倒就可能為0,那么上述式子不可求逆,也就無法計算光流。

通過特征值判斷是否計算可信 在數(shù)學(xué)上我們要判斷矩陣是否可逆,我們可以通過計算特征值來判斷。如果兩個特征值遠(yuǎn)大于0,那么矩陣求逆是可靠的。假如有一個特征值接近于0的話,那么矩陣求逆是不可靠的。

4.代碼實現(xiàn)

import numpy as np
import cv2#cap = cv2.VideoCapture(0)#攝像頭
cap = cv2.VideoCapture('D:\jupyter\img/vtest.avi') #視頻# ShiTomasi 角點檢測參數(shù)
feature_params = dict( maxCorners = 100,qualityLevel = 0.3,minDistance = 7,blockSize = 7 )# lucas kanade光流法參數(shù)
lk_params = dict( winSize  = (15,15),maxLevel = 2,criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03))# 創(chuàng)建隨機(jī)顏色
color = np.random.randint(0,255,(100,3))# 獲取第一幀,找到角點
ret, old_frame = cap.read()
#找到原始灰度圖
old_gray = cv2.cvtColor(old_frame, cv2.COLOR_BGR2GRAY)#獲取圖像中的角點,返回到p0中
p0 = cv2.goodFeaturesToTrack(old_gray, mask = None, **feature_params)# 創(chuàng)建一個蒙版用來畫軌跡
mask = np.zeros_like(old_frame)while(1):ret,frame = cap.read()frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 計算光流p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, p0, None, **lk_params)# 選取好的跟蹤點good_new = p1[st==1]good_old = p0[st==1]# 畫出軌跡for i,(new,old) in enumerate(zip(good_new,good_old)):a,b = new.ravel()c,d = old.ravel()mask = cv2.line(mask,(int(a), int(b)), (int(c),int(d)), color[i].tolist(), 2)frame = cv2.circle(frame,(int(a),int(b)),5,color[i].tolist(),-1)img = cv2.add(frame,mask)cv2.imshow('frame',img)k = cv2.waitKey(30) & 0xffif k == 27:break# 更新上一幀的圖像和追蹤點old_gray = frame_gray.copy()p0 = good_new.reshape(-1,1,2)cv2.destroyAllWindows()
cap.release()

5. 實現(xiàn)效果圖

總結(jié)

以上是生活随笔為你收集整理的光流估计方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。