通过光流法检测运动物体,得到图像运动场

简介: 通过光流法检测运动物体,得到图像运动场

1.算法描述

   1950年,Gibson首先提出了光流的概念,所谓光流就是指图像表现运动的速度。物体在运动的时候之所以能被人眼发现,就是因为当物体运动时,会在人的视网膜上形成一系列的连续变化的图像,这些变化信息在不同时间,不断的流过眼睛视网膜,就好像一种光流过一样,故称之为光流。光流法检测运动物体的原理:首先给图像中每个像素点赋予一个速度矢量(光流),这样就形成了光流场。如果图像中没有运动物体,光流场连续均匀,如果有运动物体,运动物体的光流和图像的光流不同,光流场不再连续均匀。从而可以检测出运动物体及位置。

应用背景:

   根据图像前景和背景的运动,检测视频的变化,空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。可以用来检测运动抖动物体

关键技术:

   当人的眼睛观察运动物体时,物体的景象在人眼的视网膜上形成一系列连续变化的图像,这一系列连续变化的信息不断“流过”视网膜(即图像平面),好像一种光的“流”,故称之为光流(optical flow)。

   光流法(Optical flow or optic flow)是关于视域中的物体运动检测中的概念。用来描述相对于观察者的运动所造成的观测目标、表面或边缘的运动。光流法在样型识别、计算机视觉以及其他影像处理领域中非常有用,可用于运动检测、物件切割、碰撞时间与物体膨胀的计算、运动补偿编码,或者通过物体表面与边缘进行立体的测量等等。

光流场,它是指图像中所有像素点构成的一种二维(2D)瞬时速度场,其中的二维速度矢量是景物中可见点的三维速度矢量在成像表面的投影。

所以光流不仅包含了被观察物体的运动信息,而且还包含有关景物三维结构的丰富信息"

    下面是针孔相机模型,随着3D点在空间中运动,相应的图像点也在移动.运动场由图像中所有图像点的运动矢量组成

7ffe54e09fbdf0afd778e249ad5fe2ed_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

这样,我们回想SLAM14讲的内容:Puv=KPc

814dc85604b1281566526a13509cb661_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

假设相机描绘的是动态场景,现在将上式对时间求导,可以得到:

7a89a9b7e3576545c443965f0a51c8ba_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

这里

712352c45b9eb342e27d640ad11d21c0_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

就是我们说的运动场,向量u取决于图像上的2d坐标和时间t.

这里

9328db58b963ccb8f7b70b283b18b3d6_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

是相应的3D运动,其与运动场的关系是: 其中,M是一个2*3的矩阵.
bdfa552c18cadc32ea47bd9ae0b1288d_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

这就代表着,对于一个特定的图像点上, 运动场 相对于 位于M的零空间中的3D运动 是不变的.

运动场是理想的构造,描述了2D-3D之间的运动关系.

但实际上,只能基于对图像数据的测量来近似真实的运动场.

问题在于,在大多数情况下,每个图像点都有一个单独的运动,因此必须通过对图像数据的邻域操作来局部测量。结果,无法为某些类型的邻域确定正确的运动场,而是通常被称为光流的近似值

总之,不能正确测量所有像点的运动场,故光流是运动场的近似值。

有几种不同的方法可以根据应如何进行光学估算的不同标准来计算光流。

2.仿真效果预览
matlab2022a仿真结果如下:

808fcdf6f95c12463a242114836cc121_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
6ec1acd462bc2ff7f5fe02ba8dc08bec_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
798ed467474cf71ff7889c6d180c9a6d_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

3.MATLAB核心程序

fr_f40=rgb2gray(f40);     
Xn=double(fr_f1);
Xnp1=double(fr_f40);
 
%get image size and adjust for border  获取图像对边界进行调整
[h,w]=size(fr_f1);  
hm5=h-5; wm5=w-5;
z=zeros(h,w); v1=z; v2=z;
 
%initialize        初始化
dsx2=v1; dsx1=v1; dst=v1;
alpha2=625;
imax=20;
 
%Calculate gradients  计算梯度
dst(5:hm5,5:wm5) = ( Xnp1(6:hm5+1,6:wm5+1)-Xn(6:hm5+1,6:wm5+1) + Xnp1(6:hm5+1,5:wm5)-Xn(6:hm5+1,5:wm5)+ Xnp1(5:hm5,6:wm5+1)-Xn(5:hm5,6:wm5+1) +Xnp1(5:hm5,5:wm5)-Xn(5:hm5,5:wm5))/4;
dsx2(5:hm5,5:wm5) = ( Xnp1(6:hm5+1,6:wm5+1)-Xnp1(5:hm5,6:wm5+1) + Xnp1(6:hm5+1,5:wm5)-Xnp1(5:hm5,5:wm5)+ Xn(6:hm5+1,6:wm5+1)-Xn(5:hm5,6:wm5+1) +Xn(6:hm5+1,5:wm5)-Xn(5:hm5,5:wm5))/4;
dsx1(5:hm5,5:wm5) = ( Xnp1(6:hm5+1,6:wm5+1)-Xnp1(6:hm5+1,5:wm5) + Xnp1(5:hm5,6:wm5+1)-Xnp1(5:hm5,5:wm5)+ Xn(6:hm5+1,6:wm5+1)-Xn(6:hm5+1,5:wm5) +Xn(5:hm5,6:wm5+1)-Xn(5:hm5,5:wm5))/4;
 
 
for i=1:imax
   delta=(dsx1.*v1+dsx2.*v2+dst)./(alpha2+dsx1.^2+dsx2.^2);
   v1=v1-dsx1.*delta;
   v2=v2-dsx2.*delta;
end;
相关文章
|
机器学习/深度学习 编解码 数据可视化
【即插即用】涨点神器AFF:注意力特征融合(已经开源,附论文和源码链接)
【即插即用】涨点神器AFF:注意力特征融合(已经开源,附论文和源码链接)
6143 1
|
机器学习/深度学习 人工智能 算法
基于Python的图像预处理完整指南
基于Python的图像预处理完整指南
|
计算机视觉
OpenCV(二十五):边缘检测(一)
OpenCV(二十五):边缘检测(一)
510 0
|
4月前
|
Linux iOS开发 Python
解决安装flash-attn时的错误报告
记住,程序包安装问题就像个顽皮的谜题,得一步步解开,耐心是解决问题的钥匙,没有什么问题是一顿猛敲键盘解决不了的,如果有,那就两顿。
557 8
|
数据采集 存储 JavaScript
自动化数据处理:使用Selenium与Excel打造的数据爬取管道
本文介绍了一种使用Selenium和Excel结合代理IP技术从WIPO品牌数据库(branddb.wipo.int)自动化爬取专利信息的方法。通过Selenium模拟用户操作,处理JavaScript动态加载页面,利用代理IP避免IP封禁,确保数据爬取稳定性和隐私性。爬取的数据将存储在Excel中,便于后续分析。此外,文章还详细介绍了Selenium的基本设置、代理IP配置及使用技巧,并探讨了未来可能采用的更多防反爬策略,以提升爬虫效率和稳定性。
651 4
|
编解码 算法 自动驾驶
【计算机视觉】基于光流特征的目标跟踪算法LK光流法的讲解(图文解释 超详细)
【计算机视觉】基于光流特征的目标跟踪算法LK光流法的讲解(图文解释 超详细)
968 0
|
机器学习/深度学习 供应链 监控
ERP系统中的供应链可视化与智能预测解析
【7月更文挑战第25天】 ERP系统中的供应链可视化与智能预测解析
515 5
|
存储 机器人 测试技术
AprilTags二维码的检测与应用
AprilTags二维码的检测与应用
1542 0
|
人工智能 机器人 测试技术
论文介绍:零样本6D物体姿态估计框架SAM-6D,向具身智能更进一步
【5月更文挑战第4天】SAM-6D框架是零样本6D物体姿态估计的突破,能检测并准确估计新物体姿态,推动具身智能发展。该框架结合实例分割和姿态估计模型,实现RGB-D图像中的物体分割与姿态估计。在BOP基准测试中,SAM-6D超越现有方法,展示出色泛化能力,但还需应对光照变化、遮挡等问题,以提升现实环境中的性能。[论文链接](https://arxiv.org/pdf/2311.15707.pdf)
423 13
|
机器学习/深度学习
从RNN、LSTM到GRU的介绍
从RNN、LSTM到GRU的介绍