基于python-opencv的Gunnar Farneback稠密光流法学习
参考链接:https://blog.csdn.net/gjy095/article/details/9206621
https://blog.csdn.net/u013010889/article/details/71189271
如有侵权,联系删除。
在做煤矿的项目中,想求传送带的运动信息。尝试过特征点的稀疏光流法,但是由于井下条件差,临近像素点差异小,特征点在运动过程中会发生突变,所以尝试稠密光流,但是由于计算图像上所有像素点的光流,速度略慢,测试时每帧大约0.2S左右。
def calcOpticalFlowFarneback(prev, next, flow, pyr_scale, levels, winsize, iterations, poly_n, poly_sigma, flags)
'''
使用G-F算法计算稠密光流
'''
参数说明: prevImg 输入的8bit单通道前一帧图像;
nextImg 输入的8bit单通道当前帧图像;
flow 计算光流图,和图像有相同size
pyr_scale 金字塔参数:0.5为经典参数,每一层是下一层尺度的一半;
levels 金字塔的层数,1层表示单指计算图像
winsize 窗口大小
iterations 迭代次数
poly_n 像素邻域的大小,大的话表示图像整体比较平滑
poly_sigma 高斯标准差
flags 可以为下列的组合 OPTFLOW_USE_INITIAL_FLOW OPTFLOW_FARNEBACK_GAUSSIAN
返回值为每个像素点的位移,大小和输入帧图像相同的双通道图像,即(w,h,2),一个通道表示在x方向的位移,一个通道表示y方向的位移
测试demo如下:
第一张图是光流场,第二张是对光流场的可视化。其中,不同的颜色代表方向,深浅代表运动速度。将一个像素点上的x,y的变化值和
转化为极坐标,之后用HSV图像表示。
可以看到,右图中的大多像素点是紫色,即向上方运动。
之后会看FlowNet的两篇论文,希望可以一起交流。