光流(optical flow)
1950年,Gibson首先提出了光流的概念,所谓光流就是指图像表现运动的速度。物体在运动的时候之所以能被人眼发现,就是因为当物体运动时,会在人的视网膜上形成一系列的连续变化的图像,这些变化信息在不同时间,不断的流过眼睛视网膜,就好像一种光流过一样,故称之为光流。
光流法检测运动物体的原理:首先给图像中每个像素点赋予一个速度矢量(光流),这样就形成了光流场。如果图像中没有运动物体,光流场连续均匀,如果有运动物体,运动物体的光流和图像的光流不同,光流场不再连续均匀。从而可以检测出运动物体及位置。
应用背景:
根据图像前景和背景的运动,检测视频的变化,空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。可以用来检测运动抖动物体
关键技术:
当人的眼睛观察运动物体时,物体的景象在人眼的视网膜上形成一系列连续变化的图像,这一系列连续变化的信息不断“流过”视网膜(即图像平面),好像一种光的“流”,故称之为光流(optical flow)。
编程处理中:
matlab中有现成的!!函数
function [fx, fy, ft] = computeDerivatives(im1, im2) if size(im2,1)==0 im2=zeros(size(im1)); end % Horn-Schunck original method fx = conv2(im1,0.25* [-1 1; -1 1],'same') + conv2(im2, 0.25*[-1 1; -1 1],'same'); fy = conv2(im1, 0.25*[-1 -1; 1 1], 'same') + conv2(im2, 0.25*[-1 -1; 1 1], 'same'); ft = conv2(im1, 0.25*ones(2),'same') + conv2(im2, -0.25*ones(2),'same'); % derivatives as in Barron % fx= conv2(im1,(1/12)*[-1 8 0 -8 1],'same'); % fy= conv2(im1,(1/12)*[-1 8 0 -8 1]','same'); % ft = conv2(im1, 0.25*ones(2),'same') + conv2(im2, -0.25*ones(2),'same'); % fx=-fx;fy=-fy; % An alternative way to compute the spatiotemporal derivatives is to use simple finite difference masks. % fx = conv2(im1,[1 -1]); % fy = conv2(im1,[1; -1]); % ft= im2-im1;
也有现成的实例:
Affine optic flow - File Exchange - MATLAB Central https://www.mathworks.com/matlabcentral/fileexchange/27093-affine-optic-flow
Estimate optical flow using Horn-Schunck method - MATLAB http://www.mathworks.com/help/vision/ref/opticalflowhs-class.html
调用系统对象vision.OpticalFlow后产生的混合矩阵数据如何处理 – MATLAB中文论坛