LK光流算法总结
基于LK光流的模板匹配算法的研究与改进
-
电 子 工 业 善 用 i 殳吝
半导 体 制造
工 艺 与 设 备
1 传 统 的基 于 L K 光 流 的 模 板 匹 配 算 法
1 . 1 光 流 法
式 只有 一 个 方程 , 因此 它 的解 是 非 唯 一 的 , 即只 能
确 定一 条 约束 线 , 而不 能 同 时求 出 光 流 的 两 个 速
中 图分 类号 : T P 3 9 1 . 4 1
文 献 标识 码 : A
文 章 编号 : 1 0 0 4 . 4 5 0 7 ( 2 0 1 3 ) 1 0 — 0 0 1 8 0 5
An a l y s i s o f Mo t i o n Pl a n ni ng o n Bo nd Ar m
e f f e c t i v e l y, Me a n wh i l e c a n r e d uc e t h e t i me of ma t c hi ng. Ke ywo r ds :M a c hi ne Vi s i o n; I ns pe c t i o n a n d po s i t i o ni ng ;Opt i c a l lo f w ;Te m pl a t e ma t c h i ng
半导 体 制造 工 艺 与设 备
电 字 工 业 毫 用 殳备
Hale Waihona Puke - 基于 L K光流 的模 板 匹配 算法 的 研 究 与 改 进
王小捷 , 李向 东
( 北 京 中 电 科 电子 装 备 有 限公 司 , 北京 1 0 1 6 0 1 )
摘 要 : 针 对半 导 体设 备 中机 器视 觉 的识 别 定位 问题 ,介 绍 了传 统 的 L K 光流 的 模 板 匹配算 法 , 在 此 基 础 上提 出了 附加 运 动 方 向 光 滑约 束 条件 的 L K 光流 的模板 匹配算 法 该 算 法采 用运 动 方 向光 滑 约 束 条件 作 为正 则化 项 , 较好 的保 持 了运 动 的 边界 . 通过 实验 分 析 . 采 用该 算 法对 芯 片 进 行识 别 定位 , 具 有精 度 高 , 计算 速度 快 的 特 点 , 关键 词 : 机器视觉: 检 测 定位 : 光流 法 ; 模板 匹 配
LK光流算法
已被广泛的应用于运动车辆跟踪和人脸特征点跟踪[47,48];下面介绍文献[27],并对其
进行相关实验。
§4.3.1问题提出
提下,推导出灰度图像光流场计算的基本等式,这是经典光流方法[18,24]。
光流的算法多种多样,其用于目标跟踪常用的算法有:检测和跟踪特征点[25]、跟
好的特征点[26]、金字塔图像的Lucas Kanade特征点跟踪算法(因为其跟踪过程是迭
的光流法计算过程,因此,为了更好的体现光流的作用,本文将其简称为:Lucas
(4-3-13)
B(x,y)~=JL(x+gL
x
,y+gL
y
)
?(x,y)∈[px?ωx,px+ωx]×[py?ωy,py+ωy]
(4-3-14)
注意到A(x,y)和B(x,y)的定义域稍微有些差异。实际上,A(x,y)是在窗口大小为
(2ωx+3)×(2ωy+3)的范围内定义,而不是(2ωx+1)×(2ωy+1)。在后面运用中心差分算子
px+ωx
x=px?ωx
py+ωy
y=py?ωy
(A(x,y)?B(x,y)?[?
B
?x
?B
?y
]υ)?[
?B
?x
?B
?y]
(4-3-18)
注意到A(x,y)?B(x,y)可以看作是在点[x,y]T的一个导数,所以:
δI(x,y)~=A(x,y)?B(x,y)
?(x,y)∈[px?ωx,px+ωx]×[py?ωy,py+ωy]
lk光流估计方法的三大假设
lk光流估计方法的三大假设Lucas-Kanade(LK)光流法是一种基于局部区域的光流估计方法,其基本思想是在图像的每个像素附近构造一个小的局部区域,并假设在这个小区域内,像素的运动是近似恒定的。
LK 光流法基于以下三个主要假设:
1. 空间一致性假设(Spatial Coherence Assumption): LK 方法假设图像上相邻像素点的运动是相似的。
在实际场景中,通常认为一个局部区域内的像素在图像上的运动是比较一致的,即图像上相邻的像素点有相似的运动向量。
2. 灰度不变性假设(Brightness Constancy Assumption):LK 方法假设同一点在不同帧的图像上的灰度值在时间上是不变的,即对于一个小区域内的像素,其灰度值在不同帧上是恒定的。
这个假设是LK 方法求解光流的基础,通过对图像灰度变化进行局部的近似,可以得到运动场的估计。
3. 小运动假设(Small Motion Assumption): LK 方法假设在一个小的时间间隔内,像素的运动是线性的。
这意味着在光流的估计中,我们只考虑相邻帧之间的微小运动。
这个假设使得问题变得更为简单,因为可以使用一阶泰勒展开来近似运动场。
基于这些假设,LK 光流法通过在局部区域内构造一个对灰度变化的空间梯度矩阵,利用灰度不变性和小运动假设,通过最小二乘法求解一个线性方程组,得到该区域内的光流场。
然后,通过在图像的不同位置重复这个过程,就可以得到整个图像上的光流场。
需要注意的是,虽然 LK 光流法在某些场景下效果良好,但在存在大的运动或者场景变化的情况下,其假设可能不再成立,因此在实际应用中,需要根据场景的特点选择合适的光流估计方法。
lk光流法代码
光流法(Lucas-Kanade method)是一种用于估计图像序列中像素点运动的方法。
下面是一个简单的Python代码示例,使用OpenCV库实现LK光流法:```pythonimport numpy as npimport cv2# 读取前后两帧图像cap = cv2.VideoCapture('vtest.avi')ret, old_frame = cap.read()ret, new_frame = cap.read()# 转换为灰度图像old_gray = cv2.cvtColor(old_frame, cv2.COLOR_BGR2GRAY) new_gray = cv2.cvtColor(new_frame, cv2.COLOR_BGR2GRAY) # 初始化特征点及对应坐标points = np.float32([[50,50],[100,50],[50,100],[100,100],[50,150],[1 00,150]])# 计算光流场lk_params = dict(winSize = (15,15),maxLevel = 2,criteria = (cv2.TERM_CRITERIA_EPS |cv2.TERM_CRITERIA_COUNT, 10, 0.03))# 使用Lucas-Kanade方法计算光流场flow = cv2.calcOpticalFlowPyrLK(old_gray, new_gray, points, None, lk_params)# 绘制运动轨迹for i,(new,old) in enumerate(zip(flow[1], points)):a,b = new.ravel()c,d = old.ravel()img2.line(a:b[0],c:d[0],color=(0,255,0),thickness=3) img2.circle(a:b[0],c:d[0],5,(0,0,255),-1)img2.circle(c:d[0],a:b[0],5,(0,255,0),-1)cv2.imshow('frame',img2)cv2.waitKey(30)cap.release()cv2.destroyAllWindows()```这个代码首先读取视频文件中的两帧图像,并将它们转换为灰度图像。
LK光流法和三帧差分法的运动目标检测算法
LK光流法和三帧差分法的运动目标检测算法谢红;原博;解武【摘要】The three?frame difference method is one of the most common moving target detection algorithms at pres?ent. Its execution is quite fast, and there inevitable exists various disturbances, and it is susceptible to the environ?mental noise. This method is also likly to form large cavities inside the detected moving targets, which affects the fi?nal result of the detection. To solve these problems, this article combines the three?frame difference method with the Lucas?Kanade optical flow method. The Lucas?Kanade optical flow method is used to calculate and get the general rectangular areas containing the moving targets. Different thresholds are selected inside and outside the determined regions to extract the moving targets by the three?frame difference method, and then to constitute a kind of three?frame difference method that has rated thresholds. The corners calculated by the optical flow method are used to im?prove the contours of the targets. In this way, the threshold segmentation of the traditional three?frame difference method is converted into another mode, which combines the threshold segmentation with the region segmentation. The experimental results show that, the improved algorithm has good noise immunity and can get better detection re?sults than the three?frame difference method.%三帧差分法是目前较为常见的运动目标检测算法之一.它的执行速度较快,但是它会存在各种干扰以及易受到环境噪声的影响,而且容易在检测到的运动目标内部产生较大的空洞,以致影响到最后的检测效果.针对这些问题,将Lucas?Kanade光流法与三帧差分法进行结合.利用Lucas?Kanade光流法计算得到运动目标的大致矩形区域.在确定的区域内外通过选取不同的阈值利用三帧差分算法提取运动目标,构成一种分级阈值的三帧差分法.并且利用前面光流法计算得到的角点来完善目标轮廓.这样将传统三帧差分算法的阈值分割转换成阈值分割与区域分割相结合的模式.试验结果表明,该改进算法具有良好的抗噪性,能够得到比原算法更好的检测效果.【期刊名称】《应用科技》【年(卷),期】2016(043)003【总页数】6页(P23-27,33)【关键词】目标检测;检测算法;三帧差分法;LK光流法;抗噪性;阈值分割;区域分割【作者】谢红;原博;解武【作者单位】哈尔滨工程大学信息与通信工程学院,黑龙江哈尔滨150001;哈尔滨工程大学信息与通信工程学院,黑龙江哈尔滨150001;哈尔滨工程大学信息与通信工程学院,黑龙江哈尔滨150001【正文语种】中文【中图分类】TP911.73运动目标检测就是将视频序列中的运动目标与所在的背景图像相分离,从而可以获得目标的前景,也就是确切的运动目标。
LK光流算法总结
运动目标检测之Lucas-Kanade光流算法读书笔记视觉是人类感知自身周围复杂环境最直接有效的手段之一,而在现实生活中大量有意义的视觉信息都包含在运动中,人眼对运动的物体和目标也更敏感,能够快速的发现运动目标。
随着计算机技术、通信技术、图像处理技术的不断发展,计算机视觉己成为目前的热点研究问题之一。
而运动目标检测是计算机视觉研究的核心课题之一,融合了图像处理、模式识别、人工智能、自动控制、计算机等众多领域的先进技术,在军事制导、视觉导航、视频监控、智能交通、医疗诊断、工业产品检测等方面有着重要的实用价值和广阔的发展前景。
一目标检测运动目标检测运动目标检测是指从序列图像中将运动的前景目标从背景图像中提取出来。
目前,已有的运动目标检测方法按照算法的基本原理可以分为三类:背景差分法,帧间差分法和光流法。
1背景差分法背景差分法又称背景减除法,背景差分法的原理是将当前帧与背景图像进行差分来得到运动目标区域,但是需要构建一幅背景图像,这幅背景图像必须不含运动目标,并且应该能不断的更新来适应当前背景的变化,构建背景图像的方法有很多,比较常用的有基于单个高斯模型的背景构建,基于混合高斯模型的背景构建,基于中值滤波器的背景构造,基于卡尔曼滤波器的背景构造,基于核函数密度估计的背景模型构造。
缺点:因为要求背景是静止的,所以背景的变化,场景中有很多干扰,比如场景中有树枝和叶子在风中晃动、水面的波动等等,还有照明的变化和天气的变化等都可能影响检测的结果2帧间差分法帧间差分法是一种通过对视频图像序列中相邻两帧作差分运算来获得运动目标轮廓的方法,它可以很好地适用于存在多个运动目标和摄像机移动的情况。
当监控场景中出现异常物体运动时,帧与帧之间会出现较为明显的差别,两帧相减,得到两帧图像亮度差的绝对值,判断它是否大于阈值来分析视频或图像序列的运动特性,确定图像序列中有无物体运动。
图像序列逐帧的差分,相当于对图像序列进行了时域下的高通滤波。
calcopticalflowpyrlk 用法
Calcopticalflowpyrlk是OpenCV中的一个函数,用于计算稀疏特征光流。
在计算机视觉中,光流是指图像中的像素随着时间的变化而产生的位移。
光流可以用来估计目标的运动轨迹,对于运动跟踪、目标检测等任务具有重要意义。
1. 算法原理calcopticalflowpyrlk算法是基于图像金字塔的Lucas-Kanade算法的改进版本。
它通过构建图像金字塔来实现多尺度处理,从而提高光流的稳定性和精度。
该算法首先对输入的两幅图像进行金字塔分解,然后从粗到细依次计算光流,最终得到目标的像素位移。
2. 输入参数calcopticalflowpyrlk函数的输入参数包括当前帧图像、前一帧图像、前一帧的特征点、输出的特征点位置、特征点的状态等。
其中,前一帧的特征点可以通过GoodFeaturesToTrack函数或其他方式获得。
3. 输出结果calcopticalflowpyrlk函数的输出结果包括当前帧的特征点位置、特征点的运动状态等。
这些结果可以用来进行目标跟踪、运动分析等应用。
4. 使用步骤使用calcopticalflowpyrlk函数进行光流计算的步骤如下:(1)导入OpenCV库import cv2(2)读取输入的两幅图像prev_img = cv2.imread('prev.jpg')curr_img = cv2.imread('curr.jpg')(3)获取前一帧的特征点prev_pts = cv2.goodFeaturesToTrack(prev_img, maxCorners=100, qualityLevel=0.01, minDistance=10)(4)调用calcopticalflowpyrlk函数计算光流curr_pts, status, err = cv2.calcOpticalFlowPyrLK(prev_img, curr_img, prev_pts, None)(5)根据光流结果进行目标跟踪等应用...5. 注意事项在使用calcopticalflowpyrlk函数时,需要注意以下几点:(1)输入的两幅图像应该是连续的帧,且图像尺寸应该相同。
光流计算及其原理分析
光流计算及其原理分析光流是图像亮度的运动信息描述。
光流法计算最初是由Horn和Schunck于1981年提出的,创造性地将⼆维速度场与灰度相联系,引⼊光流约束⽅程,得到光流计算的基本算法.光流计算基于物体移动的光学特性提出了2个假设:①运动物体的灰度在很短的间隔时间内保持不变;②给定邻域内的速度向量场变化是缓慢的。
算法原理假设图像上⼀个像素点(x,y),在t时刻的亮度为E(x+Δx,y+Δy,t+Δt),同时⽤u(x,y0和v(x,y)来表⽰该点光流在⽔平和垂直⽅向上的移动分量:u=dx/dtv=dy/dt在经过⼀段时间间隔Δt后该点对应点亮度为E(x+Δx,y+Δy,t+Δt),当Δt很⼩趋近于0时,我们可以认为该点亮度不变,所以可以有:E(x,y,t)=E(x+Δx,y+Δy,t+Δt)当该点的亮度有变化时,将移动后点的亮度由Taylor公式展幵,可得:忽略其⼆阶⽆穷⼩,由于Δt趋近于0时,有:式中w=(u,v),所以上式就是基本的光流约束⽅程。
其中令表⽰图像中像素点灰度沿x,y,t⽅向的梯度,可将上式改写成:Lucas-Kanade是⼀种⼴泛使⽤的光流估计的差分⽅法,这个⽅法是由Bruce D. Lucas和Takeo Kanade发明的。
它假设光流在像素点的邻域是⼀个常数,然后使⽤最⼩⼆乘法对邻域中的所有像素点求解基本的光流⽅程。
通过结合⼏个邻近像素点的信息,卢卡斯-⾦出⽅法(简称为L-K⽅法)通常能够消除光流⽅程⾥的多义性。
⽽且,与逐点计算的⽅法相⽐,L-K ⽅法对图像噪声不敏感。
不过,由于这是⼀种局部⽅法,所以在图像的均匀区域内部,L-K⽅法⽆法提供光流信息。
Lucas-Kanade改进算法Jean-Yves Bouguet提出⼀种基于⾦字塔分层,针对仿射变换的改进Lucas-Kanade算法。
为什么要⽤⾦字塔?因为lk算法的约束条件即:⼩速度,亮度不变以及区域⼀致性都是较强的假设,并不很容易得到满⾜。
用金字塔lk光流算法
用金字塔lk光流算法
金字塔LK光流算法是计算机视觉领域中常用的一种光流估计方法。
它利用图像金字塔的多尺度结构提高了光流估计的准确性和鲁棒性。
该算法首先对输入图像进行高斯金字塔分解,然后在每个尺度上计算局部区域的光流向量。
接着,将上一尺度计算的光流向量作为当前尺度的初始值,继续计算对应的光流向量,直到达到最低尺度。
最终,将所有尺度计算的光流向量进行插值和平滑后,得到最终的光流场。
金字塔LK光流算法的优点在于它可以处理不同尺度的运动物体,并且可以减少噪声的干扰。
但是,该算法需要计算多个尺度的金字塔图像,计算复杂度较高。
此外,在图像中存在大的物体运动或者背景复杂时,该算法的准确性会受到影响。
总之,金字塔LK光流算法是一种经典的光流估计方法,可以在
某些场景下取得良好的效果。
但是,需要根据实际情况选择适合的光流算法。
- 1 -。
改进的lk光流法在slam中的应用
第29卷㊀第6期2019年11月㊀㊀㊀黑㊀龙㊀江㊀科㊀技㊀大㊀学㊀学㊀报JournalofHeilongjiangUniversityofScience&Technology㊀㊀Vol.29No.6㊀㊀Nov.2019㊀㊀㊀㊀㊀㊀改进的LK光流法在SLAM中的应用程俊廷1ꎬ㊀郭博洋1ꎬ㊀田㊀宽2(1.黑龙江科技大学机械工程学院ꎬ哈尔滨150022ꎻ2.辽宁工程技术大学机械工程学院ꎬ辽宁阜新123000)摘㊀要:传统LK光流法在SLAM中基于光流场的空间一致性假设ꎬ在图像阴影㊁边界及遮挡等处追踪特征点容易失败ꎮ假设在微小位移下某窗口内所有像素运动距离一致ꎬ在此微小位移下该窗口内所有像素灰度不变ꎬ将此作为新的约束与像素运动方程联立ꎬ通过拉格朗日乘数法进行求解计算ꎬ引入Hessian矩阵判断窗口内各像素点对约束方程的良态性ꎬ得到像素准确的运动ꎮ结果表明ꎬ改进的LK光流法可以使特征点追踪精度提高20.95%ꎬ同时耗费时间降低20.30%ꎬ有效提升了SLAM前端处理速度ꎮ关键词:即时定位与地图构建ꎻ光流ꎻ像素ꎻ特征追踪doi:10.3969/j.issn.2095-7262.2019.06.018㊀㊀中图分类号:TP391文章编号:2095-7262(2019)06-0736-05文献标志码:AApplicationofimprovedLKopticalflowmethodinSLAMChengJunting1ꎬ㊀GuoBoyang1ꎬ㊀TianKuan2(1.SchoolofMechanicalEngineeringꎬHeilongjiangUniversityofScience&TechnologyꎬHarbin150022ꎬChinaꎻ2.CollegeofMechanicalEngineeringꎬLiaoningTechnicalUniversityꎬFuxin123000ꎬChina)Abstract:ThispaperproposesanimprovedLKopticalflowmethodasanalternativetotheexistingLKopticalflowmethodinSLAMbasedontheassumptionofspatialconsistencyofopticalflowfieldandinherentlyvulnerabletofailuresintrackingfeaturepointsinimageshadowꎬboundaryꎬandocclusion.Thisstudyassumesthatꎬunderthesmalldisplacementꎬthemotiondistanceissameforallpixelsinawindowandnochangesoccurinthegrayscaleofallpixelsinthewindowꎬandcombinesthenewlyas ̄sumedconstraintwiththepixelmotionequationꎬwhichiscalculatedbyLagrangemultipliermethod.TheimprovementinthestabilityofthesolutionofthebasicconstraintequationisachievedbydeterminingthegoodstateofeachpixelinthewindowtotheconstraintequationbyintroducingHessianmatrixtorealizetheaccuratemotionofthepixels.Theexperimentsshowthatthemethodcouldenablea20.95%im ̄provementinthetrackingaccuracyanda20.30%reductioninthetimeconsumptionꎬthuscontributingtoaneffectiveimprovementintheprocessingspeedofSLAM.Keywords:SLAMꎻopticalflowꎻpixelꎻfeaturetracking㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀收稿日期:2019-10-05㊀㊀基金项目:黑龙江省省属高等学校基本科研业务费科研项目(Hkdpt201802)㊀㊀第一作者简介:程俊廷(1973-)ꎬ男ꎬ内蒙古自治区凉城人ꎬ教授ꎬ博士ꎬ研究方向:计算机视觉㊁图像处理ꎬEmail:chengjunting@163.comꎮ0㊀引㊀言即时定位与地图构建(SimultaneouslocalizationandmappingꎬSLAM)ꎬ是指移动机器人携带特定传感器ꎬ能够在未知环境中估计自己的运动ꎬ并且可以得到环境的地图模型[1]ꎮ近年来ꎬ已经广泛应用于自动驾驶㊁无人机导航避障等领域ꎮ实际使用中SLAM强调实时性ꎬ其整体系统消耗时间主要存在于视觉前端的特征追踪部分ꎮ现有的SLAM系统在特征追踪部分主要采取特征点法与光流法ꎬ其中特征点法耗时长ꎬ在使用时需额外采取GPU等措施进行加速计算ꎬ从而导致系统成本上升ꎮ与特征点法相比ꎬ光流法可以省去特征点的计算步骤ꎬ直接描述像素的运动ꎮ使用光流法的SLAM系统以(Lucas-kanadeꎬLK)光流[2]为主ꎬ通过假设图像某窗口内的像素具有空间一致性ꎬ利用最小二乘法对窗口内所有像素进行求解得到像素运动ꎮBouguet等[3]改进了LK光流法ꎬ采用金字塔光流形式对物体进行追踪ꎬ可以提升追踪特征点的准确性ꎮ郭瑞峰等[4]使用LK光流法进行多信息融合目标跟踪算法改善了动态目标物体的特征提取与检测ꎬ具有较高实时性ꎮ王泽民等[5]提出了一种基于LK光流的动态场景SLAM新方法ꎬ这种方法在室内场景下可以有效提高定位精度ꎬ能够满足系统需求ꎮLK光流基于灰度不变㊁连续运动和空间一致性三个假设ꎮ由于空间一致假设性太强ꎬ在图像遮挡㊁阴影㊁边界等地方容易失效ꎬ故笔者提出一种新的LK光流方法ꎬ保留传统LK光流前两个假设ꎬ使用像素运动距离一致性代替空间一致性假设ꎬ引入Hessian矩阵对像素点良态性进行评价ꎬ改进LK光流算法ꎮ1㊀LK光流法及其改进1.1㊀LK光流法在SLAM中ꎬ输入的往往是视频信息ꎬ每秒的视频流约30~60帧图像ꎬ可以认为这些图像是随时间连续变化的ꎮ将连续序列图像看作时间的函数I(t)ꎬ则在任意t时刻ꎬ对位于图像(xꎬy)处的像素ꎬ其灰度可以表示为I(xꎬyꎬt)ꎮ在t1时刻ꎬ记第1帧图像(x1ꎬy1)处的像素灰度为I1(x1ꎬy1ꎬt1)ꎮ在t2时刻ꎬ该像素点运动到(x2ꎬy2)处ꎬ记其灰度为I2(x2ꎬy2ꎬt2)ꎮ根据灰度不变假设ꎬ则有:I2(x2ꎬy2ꎬt2)=I1(x1ꎬy1ꎬt1)ꎮ(1)式(1)给出了相邻时刻间两张图像上像素的对应关系ꎮ设像素在x方向上的运动距离为dxꎬ在y方向上的运动距离为dyꎬ两图像的时间差为dtꎬ则可得x2=x1+dxꎬy2=y1+dyꎬt2=t1+dtꎮ将其代入式(1)有:I2(x2ꎬy2ꎬt2)=I2(x1+dxꎬy1+dyꎬt1+dt)ꎮ(2)对(2)式进行泰勒展开并保留一阶项ꎬ有:㊀㊀I2(x1+dxꎬy1+dyꎬt1+dt)ʈI2x1ꎬy1ꎬt1()+㊀㊀㊀㊀㊀∂I∂x1dx+∂I∂y1dy+∂I∂t1dtꎮ(3)联立式(1)与式(3)ꎬ整理可得:∂I∂xdx+∂I∂ydy+∂I∂tdt=0ꎮ(4)式(4)两边同除dtꎬ有∂I∂xdxdt+∂I∂ydydt=-∂I∂tꎬ(5)式中:∂I/∂x 图像在该像素处x方向上的梯度ꎬ记为Ixꎻ∂I/∂y 图像在该像素处y方向上的梯度ꎬ记为Iyꎻdx/dt 图像在该像素处x轴上的运动速度ꎬ记为vxꎻdy/dt 图像在该像素处y轴上的运动速度ꎬ记为vyꎻ∂I/∂t 图像对时间的变化量ꎬ记为Itꎮ整理式(5)有:Ixvx+Iyvy=-Itꎮ(6)式(6)中Ix㊁Iy㊁It均为已知量ꎬ可以从图像中获取ꎮvx㊁vy未知ꎬ为待求量ꎮSLAM中应用传统LK光流法求解vx与vy需要假设空间一致性ꎬ即认为图像某窗口内所有像素都具有相同运动ꎬ此时对窗口内每一个像素都可以获取一个关于vx㊁vy的方程ꎬ联立所有方程ꎬ再通过最小二乘法求解ꎬ这样就可以得到像素点在图像间的具体运动ꎮ但是由于空间一致性假设对图像梯度变化具有强烈敏感性ꎬ而图像在阴影㊁遮挡等地方图像梯度变化非常大ꎬ此时空间一致性假设往往失效ꎬ则直接会导致LK光流追踪特征失败ꎮ1.2㊀运动距离一致性假设为了降低图像梯度对光流法假设的影响ꎬ文中提出运动距离一致性假设ꎮ运动距离一致性假设认为图像某窗口所有像素在微小位移下所移动的距离相同ꎬ此时将此约束与式(6)联立ꎬ可求得窗口内像737第6期程俊廷ꎬ等:改进的LK光流法在SLAM中的应用素得具体运动ꎮ如图1所示ꎮ图1㊀连续帧间像素运动距离相同Fig.1㊀Pixelsmovesamedistancebetweensuccessiveframes由图1可见ꎬ取第1帧图像在t1时刻某窗口内三个像素点为O1㊁P1㊁N1ꎬ在t2时刻该三点像素分别运动至O2㊁P2㊁N2位置ꎬ根据运动距离一致性假设ꎬ则有Pix(O1O2)=Pix(P1P2)=Pix(N1N2)ꎬ(7)式中ꎬPix( ) 像素运动距离ꎮ事实上ꎬ在SLAM中对于输入的连续帧而言ꎬ由微小平移或者旋转所导致的像素移动ꎬ都可以认为图像窗口内所有像素的运动均符合式(7)ꎬ故图像窗口内任意像素的运动距离均可表示为:d(xꎬy)=Pix( )ꎬ(8)式中ꎬd(xꎬy) (xꎬy)处的像素运动距离ꎮ联立式(6)与式(8)ꎬ可以看成在满足式(8)约束下求式(6)的问题ꎬ使用拉格朗日乘数法进行求解ꎬ设拉格朗日乘子为λꎬ有F(vxꎬvyꎬλ)=Ixvx+Iyvy+It+λ Pix( )ꎮ(9)F(vxꎬvyꎬλ)分别对vx㊁vy㊁λ求偏导ꎬ并令其为0ꎬ便可求得vx与vyꎮ1.3㊀Hessian矩阵即使使用运动距离一致性假设代替空间一致性假设ꎬ但是在光流估计过程中仍不能保证图像窗口内所有像素运动连续ꎮ如果此时图像窗口内存在不符合式(9)的像素点ꎬ则光流对物体特征的追踪可靠性会降低[6]ꎮ为此ꎬ在假设窗口内像素运动距离一致性的基础上引入Hessian矩阵ꎬ通过判断Hes ̄sian矩阵条件数的大小来去除运动不稳定的特征点ꎮ令式(9)为0ꎬ此时分别对x和y求偏导ꎬ有:Ixxvx+Iyxvy=-λ∂Pix( )∂x-ItxꎬIxyvx+Iyyvy=-λ ∂Pix( )∂y-Ityꎮüþýïïïï(10)将式(10)写为矩阵形式ꎬ即有:IxxIyxIxyIyyéëêêùûúúvxvyéëêêùûúú=-λ ∂Pix( )∂x+Itxλ ∂Pix( )∂y+Ityéëêêêêùûúúúúꎮ(11)记Hessian矩阵为:T=IxxIyxIxyIyyéëêêùûúúꎮ(12)通过式(2)可求得T的条件数为:Cond(T)=μmaxμminꎬ式中:μmax T矩阵较大的特征值ꎻμmin T矩阵较小的特征值ꎮ对于式(11)的解而言ꎬ其具有不稳定性ꎮ具体可以通过Cond(T)的值来判断ꎮ当Cond(T)的值很大或很小ꎬ则说明Hessian矩阵特征值差异较大ꎬ这意味着式(11)的解就不稳定ꎬ光流追踪的可靠性就比较低ꎬ需要舍弃此像素点ꎬ认为其追踪失败ꎻ如果Cond(T)的值接近1ꎬ则说明Hessian矩阵的特征值接近ꎬ即式(11)具有稳定解ꎬ此时光流追踪的特征点就比较可靠ꎬ可以作为物体运动的判断依据ꎬ提高SLAM精度ꎮ事实上ꎬ在工程或项目中引入Hessian矩阵对像素点良态性进行评价并无具体标准ꎬ在实际操作中往往使用经验公式ꎮ首先利用Hessian矩阵剔除窗口内不可靠点ꎬ再将各点对应条件数的倒数作为该点的权重W(Pix)ꎬ并将每点权重进行归一化处理ꎮ其具体评价步骤如下:(1)计算图像窗口中每一像素点的一阶梯度和二阶梯度ꎻ(2)计算每个像素点对应Hessian矩阵的秩det(T)ꎬ计算每个像素点的条件数Cond(T)ꎬ设定某一阈值Qꎬ则有:W(Pix)=0ꎬifdetT()<Qꎬ1Cond(T)ꎬifdet(T)ȡQꎬìîíïïïï(13)(3)对权重W(Pix)进行归一化ꎻ(4)求解窗口内各像素点的运动ꎮ综上ꎬ引入Hessian矩阵后ꎬ可以通过计算Cond(T)的值来判断像素邻域内的不可靠点ꎮ837黑㊀龙㊀江㊀科㊀技㊀大㊀学㊀学㊀报㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀第29卷㊀2㊀实验结果与分析实验平台采用个人PCꎬPC安装ubuntu16.04双系统ꎬ实验数据采用慕尼黑工业大学提供的公开RGB-D数据集(TUM数据集)ꎬ该数据集中包含了独立采集的各类型图像ꎮ文中使用了TUM数据集中 freiburg1_desk 模块所包含的99帧图像ꎮ在使用该模块数据之前首先需要使用TUM提供的时间戳对齐脚本将彩色图与深度图的采样时间对齐ꎬ然后将对齐之后的图像信息作为实验原始数据来源ꎮ表1给出了改进后的LK光流法与传统的LK光流法在20帧内追踪特征点的数量n与消耗时间t上的对比数据ꎮ由表1可知ꎬ随着帧数的增加ꎬ改进后的LK光流法能够在更短的时间内更加准确的追踪特征点ꎮ与传统LK光流法比较ꎬ改进后的LK光流法能够将追踪特征点的精度提高20.95%ꎬ且追踪速度提高20.30%ꎮ表1㊀改进后的LK光流与传统LK光流对比Table1㊀ComparisonbetweenimprovedLKopticalflowandtraditionalLKopticalflow图像/帧n/个t/s传统改进后传统改进后2174217420.02865310.02060475161216640.02295470.014578610156616340.02094130.013850015148016220.01877560.016114220127513780.01752940.0146231利用传统LK光流法与改进后的LK光流法去追踪完整的99帧图像时ꎬ追踪的特征点数量与耗时的对比关系如图2所示ꎮ光流追踪中的若干帧情况如图3所示ꎮ从图2a可以看出ꎬ前40帧内传统LK光流法丢失特征点较多ꎬ而改进后的LK光流法曲线位于传统LK光流法上方ꎬ意味着改进后的LK光流法在特征点追踪方面更准确ꎬ可以比传统光流法够追踪更多的特征点ꎮ图2b给出了两种方法在耗费时间方面的关系ꎮ与传统LK光流法相比ꎬ改进后的LK光流法在追踪相同帧上的特征点时具有更快的追踪速度ꎬ这在SLAM中这意味着使用改进后的LK光流法可以节省大量前端数据采集和处理时间ꎮ图2㊀特征点数量和耗时对比Fig.2㊀Numberoffeaturepointsandtimecomparison改进后的光流法追踪结果如图3所示ꎮ图3㊀改进后的光流法追踪结果Fig.3㊀TrackingresultsofimprovedopticalflowmethodSLAM通常对初始帧采取Fast或ORB特征点937第6期程俊廷ꎬ等:改进的LK光流法在SLAM中的应用检测方法提取角点ꎬ接着使用对极几何㊁PnP或者ICP等方法计算相机位姿ꎬ再对之后视频帧使用光流追踪ꎬ提取出特征点ꎮ由于篇幅原因ꎬ文中只列出了99帧实验图像中的6帧图像ꎮ其中图3a是第1帧图像ꎬ在第1帧图像中采用Fast角点检测方法提取角点ꎬ之后使用改进后的LK光流法去追踪第1帧提取的角点ꎮ图3b~f分别是第2帧㊁第5帧㊁第10帧㊁第15帧和第20帧的角点追踪图像ꎮ所追踪的角点都是由第1帧的角点而来ꎮ通过图像可以明显看出相机的拍摄视角不同ꎬ在图像中物体边界㊁阴影等地方的特征点仍然会被顺利追踪到ꎬ这证明了在相机位姿改变过程中使用改进后的LK光流法可以准确追踪前面提取出的角点ꎬ解决了传统LK光流法在这些地方追踪特征失败的问题ꎮ与第1帧相比ꎬ可以看出当相机视角内有旧的视角移除时ꎬ这部分的特征点就会被丢掉ꎬ但其它部分已被检测或追踪的角点仍可以正确且稳定的被追踪ꎻ当相机视角内有新的视角进入时ꎬ算法并没有检测新的特征点ꎬ这是因为实验只是为了证实角点追踪的可靠性ꎬ而不是为了进行实时的角点检测ꎮ3㊀结束语针对使用传统LK光流法追踪图像特征时ꎬ空间一致性假设容易导致特征点追踪失败的问题ꎬ采用像素运动距离一致性假设替代空间一致性假设ꎬ引入Hessian矩阵判断像素邻域内的不可靠点ꎮ通过使用TUM公开数据集进行测试ꎬ与传统LK光流法相比ꎬ改进后的LK光流法可以使特征点追踪精度提高20.95%ꎬ同时耗费时间降低20.30%ꎬ可以极大提高SLAM前端数据处理效率ꎮ但本模型仍存在进一步改进的地方ꎬ即由于光流法是建立在灰度不变假设的基础之上ꎬ而像素灰度值不变也是很强的假设ꎮ当调整相机曝光参数ꎬ或者相机拍摄环境发生光照变化时ꎬ图像整体会变亮或变暗ꎬ此时图像整体灰度值的变化会使灰度不变假设失效ꎬ可能导致算法失败ꎬ如何减小算法对灰度不变假设的依赖这一工作还有待进一步研究ꎮ参考文献:[1]㊀高㊀翔ꎬ张㊀涛.视觉SLAM14讲:从理论到实践[M].北京:电子工业出版社ꎬ2017.[2]㊀LucasBꎬKanadeT.Aniterativeimageregistrationtechniquewithanapplicationtostereovision[C]//ProceedingsOfDARPAIUWorkshop.Vancouver:IJCAIꎬ1981:121-130. [3]㊀BouguetJY.Pyramidalimplementationoftheaffinelucaskanadefeaturetrackerdescriptionofthealgorithm[J].IntelCorporationꎬ2001ꎬ5(10):4-15.[4]㊀郭瑞峰ꎬ贾㊀榕.LK光流法的多信息融合目标跟踪算法研究[J].现代电子技术ꎬ2019ꎬ42(18):55-59. [5]㊀王泽民ꎬ李建胜ꎬ王安成ꎬ等.一种基于LK光流的动态场景SLAM新方法[J].测绘科学技术学报ꎬ2018ꎬ35(2):187-190. [6]㊀杨国亮ꎬ王志良ꎬ牟世堂ꎬ等.一种改进的光流算法[J].计算机工程ꎬ2006ꎬ32(15):187-188.(编辑㊀李德根)047黑㊀龙㊀江㊀科㊀技㊀大㊀学㊀学㊀报㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀第29卷㊀。
光流计算方法(一)
光流计算方法(一)光流计算方法总览什么是光流计算光流计算是计算机视觉领域的一个重要问题,目的是根据连续帧图像中的像素点的移动情况,预测出物体在像素坐标系上的运动。
光流计算在诸多领域中有着广泛的应用,如目标跟踪、运动估计和自动驾驶等。
传统光流计算方法传统的光流计算方法主要基于亮度恒定和空间一致性假设,以下是常用的传统光流计算方法:1.Lucas-Kanade(LK)光流法:该方法使用了一个局部区域内的亮度一致性约束,并用一个线性模型来估计光流。
LK算法在计算速度上较快,但对于大位移和纹理较弱的区域容易产生误差。
2.Horn-Schunck(HS)光流法:HS算法使用了整个图像的亮度一致性约束,并假设光流平滑。
该算法对于光照变化较小的场景效果较好,但对于纹理较弱的区域容易受到噪声的干扰。
3.Belief Propagation(BP)光流法:BP算法通过将光流估计问题转化为图像分割的问题,并使用信念传播算法求解。
该方法在处理纹理较强和大位移的情况下表现较好,但计算复杂度较高。
基于深度学习的光流计算方法近年来,基于深度学习的光流计算方法取得了显著的进展,以下是一些常用的方法:1.FlowNet系列:FlowNet是一种基于卷积神经网络(CNN)的光流估计框架,包括FlowNetS、FlowNetC、FlowNet2等。
该系列方法通过从图像对中学习光流的表示,能够捕捉到更复杂和准确的光流信息。
2.PWC-Net:PWC-Net是一种金字塔卷积网络,用于稠密光流估计。
它通过使用金字塔结构和多尺度特征来实现精确且鲁棒的光流估计。
3.LiteFlowNet:LiteFlowNet是一种轻量级的光流计算网络,能够实现实时的光流估计。
它通过优化模型架构和参数化策略来减少计算量,同时保持较高的光流精度。
总结光流计算是计算机视觉中一项重要且具有挑战性的任务。
传统的光流计算方法在某些场景下表现较好,但在大位移和纹理较弱的情况下容易出现误差。
视觉里程计原理(二)特征匹配与追踪(LK光流法)
TermCriteria termcrit=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01);//指定光 流法搜索算法收敛迭代的类型 calcOpticalFlowPyrLK(img1, img2, points1, points2, status, err, winSize, 3, termcrit, 0, 0.001);
Machine Perception and Interaction Group (MPIG)
Pyramid Implementation
Initial guess
Machine Perception and Interaction Group (MPIG)
Eliminate errors
example
Machine Perception and Interaction Group (MPIG)
optical flow
What’s optical flow?
Machine Perception and Interaction Group (MPIG)
Machine Perception and Interaction Group (MPIG)
rich feature descriptors
example
code FlannBasedMatcher matcher; std::vector< DMatch > matches; matcher.match(descriptors1,descriptors2,matches); Mat img_matches; drawMatches( img1, keypoints1, img2, keypoints2, matches, img_matches ); //-- Draw matches imshow("Matches", img_matches ); //-- Show detected matches
视觉SLAM十四讲——LK光流
视觉SLAM⼗四讲——LK光流主要内容 直接法是从光流演变⽽来的。
光流(Optical Flow)描述了像素在图像中的运动,⽽直接法则附带着⼀个相机的运动模型。
1. 定义 描述像素随时间在像素中运动的⽅法,追踪像素在图像中运动。
追踪部分像素或全部像素分为稀疏光流和稠密光流,稀疏光流以Lucas-Kanade光流为代表,可以在SLAM中跟踪特征点的位置。
(避免随时间在两两图像之间进⾏特征点提取匹配,减少计算量,光流本省匹配需要⼀定的时间,跟踪以后可以直接⽤像素坐标信息,使⽤对极⼏何、PnP和ICP算法估计相机运动)2. LK光流 [P186-187] 1)灰度不变假设:同⼀空间点的像素灰度值,在各个图像中是固定不变的。
2) 理论公式:(两个变量的⼀次⽅程) 分别表⽰:在像素点x⽅向的梯度,像素点在x⽅向的运动速度,在像素点y⽅向的梯度,像素点在y⽅向上的梯度,像素点灰度随时间的变化量。
3)在LK光流中,我们假设某⼀个窗⼝内的像素具有相同的运动。
窗⼝⼤⼩w*w,则共有w2个⽅程。
最⼩⼆乘求解(由于像素梯度仅在局部有效,所以如果⼀次迭代不够好,可以多迭代⼏次这个⽅程)3. 光流特点 1)⾓点具有更好的辨识度,边缘次之,区块最少 2)光流法本⾝计算需要⼀定的时间,在具体SLAM系统的应⽤,根据测试进⾏选择 3)LK光流跟踪能够直接得到特征点的对应关系,实际应⽤会出现特征点跟丢的情况,不太会遇到误匹配(相对于描述⼦的⼀点优势) 4)描述⼦匹配在相机运动较⼤时仍能成功,光流必须要求相机运动是微⼩的(采集频率较⾼)。
光流的健壮性相⽐描述⼦差。
4. 代码关键点 1)根据associate.txt匹配时间点的信息,读取图像及深度信息, 2)遍历图像,第⼀幅图像提取FAST的特征点,后继续的图像利⽤光流跟踪这些特征点,删除跟踪失败的特征点 3)光流法函数调⽤: cv::calcOpticalFlowPyrLK (包括参数的调⽤,返回的结果信息等) 4)每⼀帧图像跟踪出来的特征点进⾏显⽰ 5)注意光流跟踪的点数以及光流计算耗费的时间信息参考链接代码#include <iostream>#include <fstream>#include <list>#include <vector>#include <chrono>using namespace std;#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/features2d/features2d.hpp>#include <opencv2/video/tracking.hpp>int main( int argc, char** argv ){if ( argc != 2 ){cout<<"usage: useLK path_to_dataset"<<endl;return1;}string path_to_dataset = argv[1];string associate_file = path_to_dataset + "/associate.txt";ifstream fin( associate_file );if ( !fin ){cerr<<"I cann't find associate.txt!"<<endl;return1;}string rgb_file, depth_file, time_rgb, time_depth;list< cv::Point2f > keypoints; // 因为要删除跟踪失败的点,使⽤listcv::Mat color, depth, last_color;for ( int index=0; index<100; index++ ){fin>>time_rgb>>rgb_file>>time_depth>>depth_file;color = cv::imread( path_to_dataset+"/"+rgb_file );depth = cv::imread( path_to_dataset+"/"+depth_file, -1 );if (index ==0 ){// 对第⼀帧提取FAST特征点vector<cv::KeyPoint> kps;cv::Ptr<cv::FastFeatureDetector> detector = cv::FastFeatureDetector::create();detector->detect( color, kps );for ( auto kp:kps )keypoints.push_back( kp.pt );last_color = color;continue;}if ( color.data==nullptr || depth.data==nullptr )continue;// 对其他帧⽤LK跟踪特征点vector<cv::Point2f> next_keypoints;vector<cv::Point2f> prev_keypoints;for ( auto kp:keypoints )prev_keypoints.push_back(kp);vector<unsigned char> status;vector<float> error;chrono::steady_clock::time_point t1 = chrono::steady_clock::now();cv::calcOpticalFlowPyrLK( last_color, color, prev_keypoints, next_keypoints, status, error );chrono::steady_clock::time_point t2 = chrono::steady_clock::now();chrono::duration<double> time_used = chrono::duration_cast<chrono::duration<double>>( t2-t1 ); cout<<"LK Flow use time:"<<time_used.count()<<" seconds."<<endl;// 把跟丢的点删掉int i=0;for ( auto iter=keypoints.begin(); iter!=keypoints.end(); i++){if ( status[i] == 0 ){iter = keypoints.erase(iter);continue;}*iter = next_keypoints[i];iter++;}cout<<"tracked keypoints: "<<keypoints.size()<<endl;if (keypoints.size() == 0){cout<<"all keypoints are lost."<<endl;break;}// 画出 keypointscv::Mat img_show = color.clone();for ( auto kp:keypoints )cv::circle(img_show, kp, 10, cv::Scalar(0, 240, 0), 1);cv::imshow("corners", img_show);cv::waitKey(0);last_color = color;}return0;}结果及分析LK Flow use time:0.186846 seconds. //t1 ,对应下⾯的第⼀幅图tracked keypoints: 1749LK Flow use time:0.189048 seconds.tracked keypoints: 1742LK Flow use time:0.232017 seconds.tracked keypoints: 1703LK Flow use time:0.17844 seconds.tracked keypoints: 1676LK Flow use time:0.234777 seconds.tracked keypoints: 1664LK Flow use time:0.185145 seconds.tracked keypoints: 1656LK Flow use time:0.186722 seconds.tracked keypoints: 1641LK Flow use time:0.177791 seconds. // t2,对应下⾯的第⼆幅图tracked keypoints: 1634 结果分析: 1)根据输出结果,随着时间,相机姿态发⽣了⽐较⼤的旋转变化,跟踪的特征点数也从1749点下降到1634点; 2)从图中可以看出,随着图像视⾓的旋转,有些特征消失,新进来的特征点⽆法跟踪(可能需要对新进来的该部分特征重新进⾏提取,不然随着⾓度更⼤的时候,特征点可能完全丢失,⽆法进⾏位姿的解算)。
用金字塔lk光流算法
任务名称:用金字塔LK光流算法介绍金字塔LK光流算法是一种经典的计算机视觉算法,它用于估计图像序列中的运动信息。
该算法基于LK光流算法的改进版本,通过建立图像金字塔来提高算法的性能和稳定性。
本文将对金字塔LK光流算法进行全面、详细、完整的探讨,从算法原理到应用案例,帮助读者深入理解和应用该算法。
一、LK光流算法简介1.1 光流光流是指图像中物体表面上的一点在连续帧之间的运动模式。
计算光流能够帮助我们了解图像序列中物体的运动轨迹和速度信息。
1.2 LK光流算法原理LK光流算法通过在图像中选择一些特征点,并跟踪这些特征点在连续帧之间的运动,来计算光流。
算法基于以下假设: - 图像亮度在局部区域内是恒定的; - 特征点的像素位置在连续帧之间变化很小。
算法包括以下步骤: 1. 选取特征点:在第一帧图像中,选择一些特征点作为跟踪目标。
2. 计算图像亮度梯度:对第一帧图像进行梯度计算,得到每个像素点的梯度信息。
3. 迭代计算:对于每个特征点,使用迭代的方式估计该点在下一帧图像中的位置。
4. 光流计算:通过迭代计算得到的像素点位移,计算出每个特征点的光流向量。
1.3 LK光流算法存在的问题传统的LK光流算法对于大位移和纹理模糊的情况下效果不佳。
为了解决这个问题,我们可以引入金字塔LK光流算法。
二、金字塔LK光流算法2.1 金字塔金字塔是一种图像尺度空间的表示方法。
通过金字塔,可以在不同尺度上分析图像的特征。
金字塔可以分为高斯金字塔和拉普拉斯金字塔两种。
2.2 金字塔LK光流算法原理金字塔LK光流算法在传统的LK光流算法基础上引入金字塔,旨在解决位移较大的情况。
算法主要有以下步骤: 1. 构建金字塔:对图像序列构建高斯金字塔,得到不同尺度的图像。
2. 从金字塔顶层开始,将每一层的光流向下传递到更低的尺度上。
3. 在每一层上计算新的光流,在下一层细化计算结果。
4. 最后通过插值法得到所有层的光流。
2.3 金字塔LK光流算法的优势•对位移较大的情况鲁棒性较强。
tum数据集lk光流法
tum数据集lk光流法TUM数据集LK光流法——从光流法的基础到TUM数据集LK光流法的应用光流法是一种计算机视觉中常用的技术,它可以用来描述图像间的运动信息。
在众多的光流法方法中,LK光流法是一种经典的算法。
TUM数据集LK光流法就是利用LK光流法对TUM数据集进行光流估计。
本文将会从光流法基础的介绍、LK光流法的原理、TUM数据集的介绍以及TUM数据集LK光流法的应用等方面,阐述光流法和LK光流法并重视之后的TUM数据集LK光流法的实现和应用。
一、光流法基础光流法是通过在某个点处求导来描述这个点的运动。
具体来说,是通过在两个连续帧中同一点处的像素值来计算出这个点的运动。
这个运动矢量就是光流。
光流法的使用需要做出两个假设:运动是连续的;亮度不变。
这两个假设虽然在计算中不一定一定成立,但是它们是常用的假设。
光流法的数学模型可以表示为:I(x+u, y+v, t+1) - I(x, y, t) = 0其中I(x+u, y+v, t+1)表示下一帧图像中坐标为(x+u, y+v)处的像素值,I(x, y, t)表示当前帧图像中坐标为(x, y)处的像素值,(u,v)表示这个点的运动矢量。
二、LK光流法LK光流法的原理是要求解上述方程在u,v两个方向上的导数。
LK 光流法的优点是计算量小,速度快,而且可以同时考虑多个点的运动。
LK光流法的基本操作是对模板进行块状分割进行求解,并对小区域内像素值进行相减,根据一定的公式求得光流u,v。
LK光流法的数学模型可以表示为:[∑IxIx, ∑IxIy] [u] = [- ∑IxIt][∑IxIy, ∑IyIy] [v] [- ∑IyIt]其中Ix和Iy是当前点(x,y)灰度图像在x和y方向上的梯度,It为两个连续帧(x,y)处图像的时间差。
三、TUM数据集TUM(Technische Universität München)数据集是目前使用最为广泛的数据集之一。
LK光流算法总结
LK光流算法总结1.时序连续性假设:相邻图像之间的运动是连续的,即相邻帧像素之间的灰度值变化不大。
2.灰度恒定假设:在图像的小区域内,灰度值保持不变,即光流约束方程成立。
3.亮度差异小假设:两帧图像之间的光照变化较小,使得标准LK法的约束条件成立。
1.特征点选择:选择图像中的一组稀疏特征点,通常选择具有较强纹理信息或边缘明显的像素点,以便在两帧图像之间进行匹配。
2.特征匹配:通过在第一帧图像中的特征点附近,在第二帧图像中找到与之对应的点,建立点对的对应关系。
3.构造光流约束方程:利用灰度恒定假设,将特征匹配得到的点对所在的小区域内的像素灰度值进行相等约束。
4.最小二乘法求解:将光流约束方程转化为一个最小二乘问题,通过最小化目标函数来求解运动向量。
5.求解结果:得到每个特征点的运动向量,即图像中每个像素的运动速度。
1.算法简单:LK光流算法只需要基于灰度恒定假设建立光流约束方程并应用最小二乘法求解,计算量较小,易于实现。
2.对小运动和小区域适应性好:由于采用局部约束条件,LK光流算法在小运动和小区域的运动估计中表现良好。
3.特征点稀疏性:LK光流算法通过特征点的选取,使得运动向量的估计更集中在感兴趣的区域,而不是整个图像。
然而,LK光流算法也存在一些缺点:1.对大运动和非纹理区域的适应性较差:LK光流算法在大运动和非纹理区域的运动估计中容易失效,因为违反亮度恒定和小运动假设。
2.特征点选取的影响:LK光流算法的性能受到特征点选择的影响较大,如果选择的特征点不合适,可能会导致运动向量的估计精度下降。
总结而言,LK光流算法是一种简单且有效的光流估计算法,广泛应用于计算机视觉和图像处理领域。
尽管存在一些缺点,但在特定的场景下,LK光流算法仍然具有较好的性能和应用前景。
未来可以通过与其他算法的结合或改进来进一步提升其运动估计的准确性和鲁棒性。
经典光流综述
2.1 Lucas-Kanade(LK)算法
前面我们提到过算法是基于h很小的假设,所以当h很大的时候计算 出来的 结果误差很大甚至是错误的,文中在一维的情况下对正弦曲线的 匹配进行了上述算法的计算实验,设:
F ( x) sin x, G ( x) F ( x h) sin( x h).
2.1 Lucas-Kanade(LK)算法
根据我们的线性假设,曲线 线性较好的地方求出的h必然更 为准确,而线性性能的度量可以 用曲线的二阶导来表示,二阶导 较小的地方如拐点,即二阶导为 零处则线性最好,所以我们给每 个x处得出的h一个权值:
w( x) 1 . G ` ( x) F ` ( x)
2.经典光流法
Lucas-Kanade(LK) pyramidal LK(PRLK)
2.1 Lucas-Kanade(LK)算法
LK算法的原型最初是一篇讲述配准问题的论文,该文主要论述了 如何对两幅图像中的感兴趣区域进行配准,这实际也是一种求光 流的方法,但这里配准过程中使用的是牛顿迭代的方法,而经典 LK光流法中使用的是解线性方程组的方法。 《An Iterative Image Registration Technique with an Application to Stereo Vision》发表在1981年的 《Proceedings of Imaging Understanding Workshop》上。该 文通过空间的灰度梯度信息,求解两幅图像之间相应区域的匹配 问题,它可以用在各种线性变换下,甚至是旋转变换。它被引用 的次数达到了2330多次。
光流法详解之一(LK光流)
光流法详解之⼀(LK光流)Lucas–Kanade光流算法是⼀种两帧差分的光流估计算法。
它由Bruce D. Lucas 和 Takeo Kanade提出 [1]。
LK光流法有三个假设条件:1. 亮度恒定:⼀个像素点随着时间的变化,其亮度值(像素灰度值)是恒定不变的。
这是光流法的基本设定。
所有光流法都必须满⾜。
2. ⼩运动:时间的变化不会引起位置的剧烈变化。
这样才能利⽤相邻帧之间的位置变化引起的灰度值变化,去求取灰度对位置的偏导数。
所有光流法必须满⾜。
3. 空间⼀致:即前⼀帧中相邻像素点在后⼀帧中也是相邻的。
这是LK光流法独有的假定。
因为为了求取x,y⽅向的速度,需要建⽴多个⽅程联⽴求解。
⽽空间⼀致假设就可以利⽤邻域n个像素点来建⽴n个⽅程。
LK光流算法原理的数学推导:假设前⼀帧时间为t,后⼀帧时间为t+δt。
则前⼀帧I的像素点I(x, y, z, t)在后⼀帧中的位置为I(x+δx, y+δy, z+δz, t+δt )。
①根据亮度恒定假设:②根据⼩运动假设,将上式右侧⽤泰勒级数展开: H.O.T是泰勒级数展开式的⾼阶项,⼩运动情况下可以忽略为0.③根据上⾯两个公式可以得到: 或者下⾯的公式:⽽对于⼆维图像⽽⾔,只需要考虑x, y, t即可,其中Ix,Iy It分别为图像在(x, y, t)⽅向的差分,写为如下形式:④现在有两个未知数,只有⼀个⽅程。
因此⽤到第三个假设:即空间⼀致性假设,LK算法是利⽤3x3窗⼝内的9个像素点建⽴9个⽅程。
简写为下⾯的形式: 写成矩阵形式: 当然两个未知数,9个⽅程,这是⼀个超定问题,采⽤最⼩⼆乘法解决:写成如下形式:根据上式通过累加邻域像素点在三个维度的偏导数并做矩阵运算,即可算出该点的光流(Vx,Vy)。
源代码及效果:源代码见这⾥:。
效果并不好,很多错误匹配点。
参考⽂献:[1]. Lucas B and Kanade T. An Iterative Image RegistrationTechnique with an Application to Stereo Vision. Proc. Of 7th InternationalJoint Conference on Artificial Intelligence (IJCAI), pp.674-679.。
一种四旋翼无人机定位的改进LK光流算法
An Improved LK Algorithm for Optical Flow Localization of Four Rotors
一种四旋翼无人机定位的改进 LK 光流算法
李振宇, 谢广东广州 510000)
摘要: 在无人机迅猛发展的今天, 无人机的室内定位仍然是个难题, 集中出现精度不高、 不稳定、 过长的延时等问 题。 提前布置室内环境提供定位信息方案成本高, 且不符合经济效益。 针对四旋翼无人机, 提出一种改进后的 LK 光流算 法, 采用 Shi-Tomasi 角点检测算法、 双线性插值法, 提高无人机定位精度和稳定性。 并将该算法在载机上实现。 研究表 明: 改进后的 LK 光流法室内定位精度高, 稳定性好; 无人机在稳定光照条件下能进行定点飞行; 定点精度为半径 30 cm 的圆形。
Keywords: Four rotor unmanned aerial vehicle ( UAV) ; LK optical flow algorithm; Shi - Tomasi corner detection algorithm; Indoor positioning
0 前言 无人机行业正处于迅猛的发展中。 无人机的自主
全 球 定 位 系 统[1] ( Global Positioning System, GPS) 的定位精度能达到 3 m 内, 基本达到要求, 但 是对于室内定位, 因卫星遭遇传输信道受阻, 定位情 况不容乐观。 无人机摄像头光流定位方法精度有待提 升, 定点飞行不稳定, 出现时间过短、 成功的偶然性 较大等问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
运动目标检测之Lucas-Kanade光流算法读书笔记视觉是人类感知自身周围复杂环境最直接有效的手段之一,而在现实生活中大量有意义的视觉信息都包含在运动中,人眼对运动的物体和目标也更敏感,能够快速的发现运动目标。
随着计算机技术、通信技术、图像处理技术的不断发展,计算机视觉己成为目前的热点研究问题之一。
而运动目标检测是计算机视觉研究的核心课题之一,融合了图像处理、模式识别、人工智能、自动控制、计算机等众多领域的先进技术,在军事制导、视觉导航、视频监控、智能交通、医疗诊断、工业产品检测等方面有着重要的实用价值和广阔的发展前景。
一目标检测运动目标检测运动目标检测是指从序列图像中将运动的前景目标从背景图像中提取出来。
目前,已有的运动目标检测方法按照算法的基本原理可以分为三类:背景差分法,帧间差分法和光流法。
1背景差分法背景差分法又称背景减除法,背景差分法的原理是将当前帧与背景图像进行差分来得到运动目标区域,但是需要构建一幅背景图像,这幅背景图像必须不含运动目标,并且应该能不断的更新来适应当前背景的变化,构建背景图像的方法有很多,比较常用的有基于单个高斯模型的背景构建,基于混合高斯模型的背景构建,基于中值滤波器的背景构造,基于卡尔曼滤波器的背景构造,基于核函数密度估计的背景模型构造。
缺点:因为要求背景是静止的,所以背景的变化,场景中有很多干扰,比如场景中有树枝和叶子在风中晃动、水面的波动等等,还有照明的变化和天气的变化等都可能影响检测的结果2帧间差分法帧间差分法是一种通过对视频图像序列中相邻两帧作差分运算来获得运动目标轮廓的方法,它可以很好地适用于存在多个运动目标和摄像机移动的情况。
当监控场景中出现异常物体运动时,帧与帧之间会出现较为明显的差别,两帧相减,得到两帧图像亮度差的绝对值,判断它是否大于阈值来分析视频或图像序列的运动特性,确定图像序列中有无物体运动。
图像序列逐帧的差分,相当于对图像序列进行了时域下的高通滤波。
缺点:不能提取出对象的完整区域,只能提取出边界;同时依赖于选择的帧间时间间隔。
对快速运动的物体,需要选择较小的时间间隔,如果选择不合适,当物体在前后两帧中没有重叠时,会被检测为两个分开的物体:而对慢速运动的物体,应该选择较大的时间差,如果时间选择不适当,当物体在前后两帧中几乎完全重叠时,则检测不到物体。
3光流算法光流,它是一种运动模式,这种运动模式指的是一个物体、表面、边缘在一个视角下由一个观察者(比如眼睛、摄像头等)和背景之间形成的明显移动。
光流技术,如运动检测和图像分割,时间碰撞,运动补偿编码,三维立体视差,都是利用了这种边缘或表面运动的技术。
光流是空间运动物体在观测成像面上的像素运动的瞬时速度,光流的研究是利用图像序列中的像素强度的时域变化和相关性来确定各自像素位置的运动,即研究图像灰度在时间上的变化与场景中物体结构及其运动的关系。
图1 运动场与光流场对应关系图光流算法评估了两幅图像的之间的变形,它的基本假设是体素和图像像素守恒。
它假设一个物体的颜色在前后两帧没有巨大而明显的变化。
基于这个思路,我们可以得到图像约束方程。
不同的光流算法解决了假定了不同附加条件的光流问题。
二Lucas–Kanade算法在计算机视觉中,Lucas–Kanade光流算法是一种两帧差分的光流估计算法。
这个算法是最常见,最流行的。
它由Bruce D. Lucas 和Takeo Kanade提出。
它假定在所考虑的像素的局部邻域内,本质上光流是恒定的,由此利用最小二乘法原则对邻域内所有像素求解基本光流方程。
Lucas –Kanade 光流法是一种基于梯度的局部参数化光流估计方法,该算法假定在一个空间尺寸的邻域E 中光流矢量是恒定的,然后使用加权最小二乘法(weighted least squares)估计光流。
它计算两帧在时间t 到t + δt 之间每个像素点位置的移动。
由于它是基于图像信号的泰勒级数,这种方法称为差分,这就是对于空间和时间坐标使用偏导数。
LK 算法基于以下三个假设:1)亮度恒定。
2)时间连续或者是运动是“小运动”。
3)空间一致,临近点有相似运动,保持相邻。
假设1亮度恒定的假设即为了保证其等号成立不受亮度的影响,假设2是为了保证KLT 能够找到点,假设3则为以下原因假设,即对于同一个窗口中,所有的点的偏移量都相等。
图像约束方程可以写为:I (x ,y ,t ) = I (x + δx ,y + δy,t + δt ) (1)其中,(x, y, t) 为在(x,y )位置的像素。
我们假设移动足够的小,那么对图像约束方程使用泰勒公式,我们可以得到:(3)的梯度,用一阶差分代替一阶微分,于是光流基本计算公式有一般形式:X y tI u I v I +=- (4)u, v 分别是I(x,y,t)的光流向量中x ,y 的组成。
和则是图像在(x ,y ,t )这一点相应方向的差分 。
方程④有两个未知量,尚不能被解决,这也就是所谓光流算法的光圈问题。
那么要找到光流向量则需要另一套解决的方案。
而Lucas-Kanade 算法是一个非迭代的算法。
将上式写为矩阵相乘形式:x y t u I I I v ⎡⎤⎡⎤=-⎢⎥⎣⎦⎣⎦ (5)LK 光流:假设像素流在一个大小为m*m(m>1)的小窗中是一致的,那么从像素1...n , n = m^2 中可以得到下列一组方程:(6)图2 LK 光流算法示意图将⑥写成矩阵的形式,则有:(7)式⑦两个个未知数但是有多于两个的方程,这个方程组自然是个超定方程,也就是说方程组内有冗余为了解决这个超定问题,我们采用最小二乘法解Au b =的向量u :(8)得到:1()T T u A A A b-= (9)考虑矩阵的可逆性:22[]x x yT x y y I I I A A I I I =∑∑∑∑ (10)其中的求和是从1到n 。
于是得:(11)加权窗口:述普通的最小二乘解对窗口内n 个像素qi 一视同仁。
事实上,通常对于靠近中心像素p 的像素更多的权重会更好。
介于此,人们使用最小二乘方程的加权版本:(12)(13)计算的:(14)权重w 通常被设置为qi 和p 之间距离的高斯函数。
三LK 光流法改进算法1 LK 方法的金字塔改进LK 方法有一个缺陷,小速度,亮度不变以及区域一致性都是较强的假设,并不很容易得到满足。
如当物体运动速度较快时,假设不成立,那么后续的假设就会有较大的偏差,使得最终求出的光流值有较大的误差。
我们设邻域窗口半径为w,则光流d 定义为最小化残差方程?的速度:(15)考虑物体的运动速度较大时,算法会出现较大的误差。
那么就希望能减少图像中物体的运动速度。
一个直观的方法就是,缩小图像的尺寸。
假设当图像为400×400时,物体速度为[16 16],那么图像缩小为200×200时,速度变为[8,8]。
缩小为100*100时,速度减少到[4,4]。
所以在源图像缩放了很多以后,原算法又变得适用了。
所以光流可以通过生成原图像的金字塔图像,逐层求解,不断精确来求得。
假设图像的宽高每次缩放为原来的一般,共缩放了Lm层,则第0层为原图像。
设已知原图的速度向量为d,则每一层的速度为(16)基于金字塔的光流法的大概步骤如下:现在最深层Lm中求解光流。
这次计算的结果反馈给上一次Lm-1,作为该层初始时的光流值得估计g。
就这样一层一层的向上反馈,直到最高层,即原图。
对于每一层L,上方程变为:(17)每一层的计算结果通过如下方程反馈给上一层作为初始的光流估计:(18)由于金字塔的缩放减小了光流值,最底层的光流估计值可以设为0,即(19)图3 金字塔光流示意图2前后光流估计算法统的光流计算方法主要是基于灰度守恒和光流场的平滑性假设,但这些假设在阴影、边界和遮挡性的地方不再成立,为此,对其进行改进。
前向-后向光流方程:(20)光流约束方程为:(21)尽管Lucas-Kanade光流法计算简单,光流估计精度较高,但它有一个致命缺点,假定邻域Ω内各像素点光流保持恒定,而且光流计算依赖于窗口权重函数,这意味着如果在邻域Ω内存在严重违反光流约束方程的点或邻域Ω运动不连续,将使得估计的光流可靠性严重降低。
为此,引入Hessian矩阵判断领域Ω内每点对于基本约束方程的“良态性”。
方程?分别对x和y求偏导数,可得:(22)写成矩阵形式,即:(23)定义Hessian矩阵:(24)Hessian矩阵的条件数:(25)其中、分别为Hessian矩阵H的最大特征值和最小特征值,可以通过Hessian 矩阵的条件数大小来判断方程(23)解的稳定性,如果Hessian矩阵的条件数很大则方程(23)为病态方程,对应的Hessian矩阵秩很小,其解不稳定,计算的光流不可靠;如果Hessian 矩阵的条件数接近1,对应的Hessian矩阵秩很大,方程(23)为良态,其解鲁棒性较好。
由此可以通过计算Hessian矩阵的条件数来剔除邻域Ω内不可靠点。
Hessian矩阵的条件数很好地刻画了线性方程(11)解的稳定性,而且条件数越大,对应的Hessian矩阵的秩越小,为此可以先利用Hessian矩阵剔除邻域Ω内不可靠点,并把各点对应条件数的倒数作为该点权重,其算法如下:(1)计算图像中每点的一阶和二阶梯度;(2)分别计算每点对应Hessian矩阵的秩det(H)和条件数Cond(H),设定阈值τ,并对每个邻域Ω内的) (X W 进行归一化处理,则:(3)采用加权最小二乘法求解式(21)光流场(u,v)。
四总结如上所述,光流法基本思想是像素守恒,其思想简单,易于理解。
LK算法是对光流法的改进,在光流法上假设了小窗口光流一致原则和小运动以及亮度守恒,使得光流的求解变得非常的简单,并且能够进行大量实际应用。
但是,正是由于LK算法假设性太强,使得其应用受到极大限制。
所以出现了好多改进算法。
金字塔光流算法正是针对其小运动假设而做的改进,其用缩小图像尺寸的方法来较小运动矢量。
而前后光流算法可以剔除光流不一致或跳动较大的点,放松光流一致的假设的条件。
后续的改进算法还有很多,可以加上全局变量来处理遮挡的问题等等,目前只是学习的这里。
以上就是此次的读书笔记。