主题:[请教]求人指点OpenCV中光流计算函数的用法
望高手指点下,OpenCV中的光流计算函数CalcOpticalFlowHS是怎么用的,能找到的资料太少了,文档里只简单地说了一下各个参数,可还是不明白。光流计算
在下初入行,期待达人指点,该函数计算光流的各个参数应该怎么设,计算结果怎样表示?
不胜感激!
--
FROM 61.129.39.*好评(0)
OpenCV得光流函数实现了Lucas-Kanade,Horn-?,和hierarchical的方法(可能是三种吧,记不清了)。光流计算光流方法最基本的就是LK(lucas-kanade)方法了,lk模型将设物体得特征具有不变性I(x,t)=I(x+vdt,t+dt),泰勒展开I(x,t)=I(x,t)+I_x'vdt+I_tdt,进而I_x'v=-I_t(现行系统),最小二乘法。(类比线性系统Ax=y,最优解的几何意义是寻找y在A的列空间中的垂直投影向量,I_x‘与A相似,因此I_x‘的列空间应该能够张成平面,意思是局部区域的梯度不一致lk才有解),lk是local的方法,horn引入了regularize term,hierarchical好像是基于频率域的贝叶斯分析,bebekifis对这个在行
--
修改:cryppie FROM 59.64.200.*
FROM 59.64.200.*赞(0)
若单是两幅图像的话建议使用CalcOpticalFlowLK
你用的那个函数是针对视频设计的
CalcOpticalFlowLK
计算两幅图像的光流
void cvCalcOpticalFlowLK( const CvArr* prev, const CvArr* curr, CvSize win_size,
CvArr* velx, CvArr* vely );
prev
第一幅图像, 8-比特, 单通道.
curr
第二幅图像, 8-比特, 单通道.
win_size
用来归类象素的平均窗口尺寸 (Size of the averaging window used for grouping pixels)
velx
光流的水平部分,与输入图像大小一样, 32-比特, 浮点数, 单通道.
vely
光流的垂直部分,与 输入图像大小一样, 32-比特, 浮点数, 单通道.
8位和32位指的是在建立图像的时候参数CV_8U和CV_32FC,单通道就是单通道了。
例如32位单通道就是
IplImage * pImage = cvCreateImage(cvSize(width, Height), CV_32FC, 1)
--
FROM 159.226.21.*赞(0)
没注意到你问的是horn的,不好意思
horn的准则函数
f(V)=integral {([Ix Iy][Vx Vy]'+It)^2+alpha(norm(gradient(V)))}
函数是对x-y积分。函数的第一项与LK的意思是一样的,第二项是l梯度算子的2范,大概就是一个平滑因子,要求求解的速度场变化平滑。
对函数的求解,采用4邻接域结构,因此Vx(x,y)=Vx(x+1,y)-Vx(x,y)或者Vx(x,y)=Vx(x,y)-Vx(x-1,y),这里符号有点乱了,等式左边应该是导数,sorry,同样定义Vy,对积分函数离散化
F(V)=Sigma {[Ix Iy][Vx Vy]'+It}^2+alpha{0.5(Vx(x+1,y)-Vx(x,y))^2+0.5(Vx(x,y)-Vx(x-1,y))^2+0.5(Vy(x,y+1)-Vy(x,y))^2+0.5(Vy(x,y)-Vy(x,y-1))^2}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-35479-1.html
个人认为国家发展