Sigma是对x-y求和
离散方程两边对Vx(x,y),Vy(x,y)求导
2([Ix Iy][Vx Vy]'+It)Ix-alpha(Vx(x+1,y)-2Vx(x,y)+Vx(x-1,y))=0
2([Ix Iy][Vx Vy]'+It)Iy-alpha(Vy(x,y+1)-2Vy(x,y)+Vy(x,y-1))=0
Vx,Vy的二阶导离散形式定义为
Vxx=0.5(Vx(x+1,y)-2Vx(x,y)+Vx(x-1,y)),Vyy=0.5(Vy(x,y+1)-2Vy(x,y)+Vy(x,y-1))
带入后,上面两个等式为
2([Ix Iy][Vx Vy]'+It)Ix-2alpha*Vxx=0
2([Ix Iy][Vx Vy]'+It)Iy-2alpha*Vyy=0
这个系统用Gauss-Seidel迭代求解(GS是求解微分方程较常用的数值方法)
Vx(x,y,k+1)=((alpha*Vxx(x,y,k))-Ix(Iy*Vy(x,y,k)+It))/Ix
Vx(x,y,k+1)=((alpha*Vyy(x,y,k))-Iy(Ix*Vx(x,y,k)+It))/Iy
注此处计算Vxx和Vyy用到Vx(x+1,y,k),Vx(x,y,k),Vx(x-1,y,k+1)和Vy(x,y+1,k),Vy(x,y,k),Vy(x,y-1,k+1)
k为迭代过程
------------------------------------------------------------------------------------------
OpenCV的函数注释
CalcOpticalFlowHS
计算两幅图像的光流
void cvCalcOpticalFlowHS( const CvArr* prev, const CvArr* curr, int use_previous,
CvArr* velx, CvArr* vely, double lambda,
CvTermCriteria criteria );
prev
第一幅图像, 8-比特, 单通道.
curr
第二幅图像, 8-比特, 单通道.
use_previous
使用以前的 (输入) 速度域
velx
光流的水平部分,与输入图像大小一样, 32-比特,浮点数, 单通道.
vely
光流的垂直部分,与输入图像大小一样, 32-比特, 浮点数, 单通道.
lambda
Lagrangian 乘子
criteria
速度计算的终止条件
函数 cvCalcOpticalFlowHS 为输入图像的每一个象素计算光流,使用 Horn & Schunck 算法
lambda,就是上面推导中的alpha
criteria,因为求解是迭代的,criteria就是自己设定的终止条件
use_previous,上面的方法要用到以前的速度,可能opencv还用了另外的解法吧
其余参数和bebekifis解释的一样
【 在 FlyinWind 的大作中提到: 】
: 望高手指点下,OpenCV中的光流计算函数CalcOpticalFlowHS是怎么用的,能找到的资料太少了,文档里只简单地说了一下各个参数,可还是不明白。
: 在下初入行,期待达人指点,该函数计算光流的各个参数应该怎么设,计算结果怎样表示?
: 不胜感激!
--
修改:cryppie FROM 59.64.200.*
FROM 59.64.200.*赞(0)
顶一个,技术贴,虽然搞检索的看不懂。。。。
【 在 cryppie 的大作中提到: 】
: 没注意到你问的是horn的,不好意思
: horn的准则函数
: f(V)=integral {([Ix Iy][Vx Vy]'+It)^2+alpha(norm(gradient(V)))}
: ...................
--
FROM 59.64.200.*赞(0)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-35479-2.html
第三次世界大战不是梦啊
#杨洋icon##杨洋2015金投赏##索尼h