运动目标检测方法的概述

目录

① 光流法

② 帧差法

③ 背景差分法

④ 混合高斯模型法

⑤ 总结


运动目标检测技术的应用十分的广泛,尤其是在智能视频监控领域。运动目标检测为后续的图像处理等操作提供了基础,在某种程度上,决定了整个系统的性能。运动目标检测(Moving Object Detection)就是要判断视频序列中运动目标是否存在,若存在的话,要确定运动目标的位置。运动目标检测的目的是从视频序列中将变化区域(前景目标区域)从背景中提取出来,运动区域的有效分割对于目标分类、跟踪和行为分析等后期的处理是非常重要的

运动目标检测根据图像传感器是否运动可以分为两种情况。第一种情况是在静态背景下的运动目标检测。在这种情况下,图像传感器相对于它的视场是静止的。第二种情况是在动态背景下的运动目标检测。在这种情况下,图像传感器会根据需要跟随运动目标运动或者转动。

    对于固定视频图像传感器的这种情况,背景建模是解决检测运动目标的有效方法。由于获取背景图像最简单的方法就是在场景没有运动目标存在的情况下进行,但在某些实际应用场合中无法满足这种要求。背景中可能含有轻微扰动的对象,比如树枝、树叶的摇动现象,光线的变化,室内开灯和关灯的操作等都会对运动目标检测的结果产生一定的影响,前景目标的阴影也可能被检测为运动目标的一部分等一系列的问题,使得背景建模成为一项非常困难的工作。运动目标的检测方法有光流法、帧差法、背景差分法、单高斯模型法和混合高斯模型法。

① 光流法

光流法(optical flow)是三种传统的运动目标检测算法之一。光流有运动(速度场)、带光学特征的部分和成像投影三个要素,其中运动是形成光流的必要条件

在物体运动的时候,在图像上对应物体的亮度模式也随之运动,所以称光流是图像亮度模式的视在运动。光流描述了相邻帧之间的变化信息,它能准确的定位出图像传感器与前景目标之间的位移信息。光流法分为基于频域的方法、基于能量的方法、基于匹配的方法和微分法四种。微分光流法包括光流基本方程和光流计算方法两个部分,其中,光流基本方程是微分光流法的基础。

光流场法用于运动目标检测的基本思路是:首先从图像传感器收集到视频序列中选择相邻的两帧作运动估计,得出两帧中存在的运动矢量。然后通过上述得到的运动矢量进行目标的分割,并且对上述分割的结果进行相应的后期处理,包括去噪处理和小区域融合等等。接着计算出融合后的区域数量。如果存在不同的区域,可以判断出序列中存在着运动的目标;如果没有不同的区域,则说明场景中不存在运动的目标。

假定I(x, y, t)表示t时刻像素点(x, y)的灰度值,u(x, y)v(x, y)表示点(x, y)在水平方向上和垂直方向上的速度分量,用U = (u, v)^{T}表示光流场,t + dt时刻,(x+dx, y+dy)处的灰度值为I(x+dx, y+dy, t+dt),根据连续不变性,则有如下公式:

将上述的公式用泰勒公式展开,可得出如下的公式。

忽略二阶无穷小项,可得出公式,如下所示。

 将u = \frac{dx}{dy},v = \frac{dy}{dt}带入上述公式,可得到如下公式。就是著名的光流场约束方程。

光流场U = (u, v)^{T}中包含两个未知量,所以还需要一个方程才能求出这两个变量。于是引入了另一个约束条件来帮助求解,这个约束条件称为全局平滑约束假设条件,假设条件为光流在整个图像上光滑变化(速度的变化率为零)。在1981年也引入了一个约束条件来帮助求解,这个约束条件称为局部平滑性约束。由于引入的约束条件不同,所以产生的光流分析法则是不同的。上述的两种典型的算法分别为H.S算法和L.K算法。

得到运动目标的光流(速度)是光流法的核心。光流法的优点在于检测精度高,适合做精确分析。能检测出独立的运动目标,而不需预知场景的任何信息,并且对变化的复杂背景的情况有较好的适应能力,对目标的颜色信息不敏感。同时,缺点也很明显,因为引入了光流方程、约束条件、一阶偏导等多个复杂的方程式,导致光流法计算量庞大,计算速度慢,对处理机等硬件要求就会相应地提高另外,由于该算法中采用了假设的局限性,所以光流法对背景中存在的噪声较为敏感,容易出现误检等现象。

对光流法的改进主要有对光流法本身的改进和将光流法与其他的方法相结合的改进两种。

② 帧差法

帧差法(frame difference)是传统的运动目标检测算法之一。帧差法的基本思想是:利用视频序列图像的相邻帧间的强相关性,将当前帧图像与参考图像(前一帧序列图像)的差别来获得运动目标的方法,如相邻帧差法、帧间差分法。

帧差法最简单的就是相邻帧差法,做差分的量可以为灰度、饱和度、亮度等等。基本算法是将前一帧图像作为参考图像,假设t时刻的图像帧灰度图像为I(x, y, t),它的前一帧图像的值为I(x, y, t-1),定义两帧图像之间的差为D(x, y),如下公式所示。

然后设置一个阈值T,该值的选定直接决定着检测结果的好坏。接着对D(x, y)进行二值化处理,如下所示, d(x, y) = 1对应的像素点为前景点,否则为背景点。 

通过帧间差分法将图像中的运动目标和背景区域分开来,阈值的选取很重要。

如果阈值选择的过大,就有可能将属于运动目标的像素错误地划分为背景像素进而造成漏检,并且检测出的运动目标实体内很可能会有很大的“空洞”。反之,如果阈值选择的过小,就有可能将属于背景的像素点错误判别为运动目标的像素点从而造成误检,并且检测结果中会有大量的噪声出现。因此,应该通过多次地进行实验进而来选择和确定合适的阈值。

帧差法具有较低的时间复杂度,运算简单等特点,但是它也存在一定的局限性。例如,提取出的运动实体内部会产生“空洞”现象,这种方法检测出来的运动区域大小与运动目标的速度有有一定的关系。当运动目标匀速运动的时候,帧间差分法检测的结果会与实际相一致。当物体运动缓慢的时候,相邻帧间的运动目标移动的距离就会较小,检测结果和实体差不多,但是如果慢到一定程度的话,就会检测不到运动目标。相反,如果物体运动的速度很大,检测到的运动区域相应的就会变大,进而造成误检,影响最终运动目标的检测的结果。

帧差法的优点在于对场景中的光线渐变不是很敏感,适用于动态变化的环境中,实时性能较好,并且运算量小,则计算速度快。同时,帧差法的缺点是无法检测静止不动的物体,一般不能完整地提取出运动目标区域,在运动实体内容易产生“空洞”的现象,从而不利于下一步的分析和处理。

针对帧间差分法的不足之处,有很多的改进和优化的算法被提了出来,如三帧图像差分法、四帧差法和多帧差法等等。其中,三帧差分法充分地考虑了运动像素在时间上的相关性,该方法对随机噪声有很好的抑制作用和效果,对动态检测较为灵敏,但是也有差分图像检测的阈值需要手动进行预先设定好的缺陷。

③ 背景差分法

    在背景静止不变的情况下,背景差分法是目前应用最广泛最常用的一种算法。背景差分法利用当前视频帧与背景建模图像进行差分并通过选取设定合适的阈值来进行二值化处理,进而得到前景目标。优点是能较完整的提取出运动目标,缺点是对光照和外部条件造成的环境变化等过于敏感,常常会将运动目标产生的阴影错误地检测为其自身的一部分从而造成误检。由于时间的流逝,实际场景的多种因素都会在一定程度上发生了变化,比如停留物的出现、光线等的变化、开灯和关灯、运动目标对背景的遮挡等等,因此背景需要得到实时而准确地更新,这是影响背景差分法检测效果的一个非常重要的因素。

虽然背景差分法背景建模方法各异,但是进行运动目标检测的流程大致是相同的,主要有图像的预处理,背景建模,前景目标的检测和图像的后处理等几个步骤

  • 图像的预处理,对图像进行包括频域变换或者滤波处理等操作用以衰减图像的噪声,在某些特殊的情况下,还要对图像进行格式转换,进而为后续的操作做准备;
  • 背景建模和模型的更新,根据某一个背景建模的原理进行背景建模。由于场景不是静止不变的,所以需要对背景模型进行相应地更新,以保证背景模型能在运动目标检测过程中一直是准确有效的。因此,背景模型的更新在整个运动目标检测过程中有着很重要的地位;
  • 运动目标的检测,利用输入的图像和背景模型的差异来判断所输入的图像中是否存在运动目标。输入的图像与背景模型差别较大的像素点被判定为前景点,而差别较小的像素点被判定为背景点
  • 图像的后处理,上述处理后的结果中一般会存在噪声和阴影等不被期待的区域,为了得到准确的运动目标区域,所以进行相应的后处理操作。

背景差分法的基本思想是:首先利用不包含运动目标的图像帧来建立背景模型,然后利用包含运动目标的当前图像帧和事先得到的不包含运动目标的背景模型来进行差分运算,得到的差分图形用预先设定好的阈值进行二值化处理,进而就可以得到运动目标区域。差分的结果大于预先设定好的阈值的像素点置为“255”,即为前景点。否则,差分结果小于设定的阈值,则像素点置为“0”,即为背景点。

假定f_{b}(x, y)是背景图像,f_{k}(x, y)是当前帧图像,T为预先设定好的阈值,该阈值的选定直接决定着检测结果的好坏。g_{k}(x, y)是进行差分后的结果图像,则背景差分法的数学表达式如下述公式所示。 

经典的背景模型可以分为两类:一类为单背景模型(用一个概率分布表示背景此刻所处的状态),。另一类为多背景模型(使用多了分布表示背景所处的不同模态),如混合高斯模型、非参数内核模型等方法。

(1)统计平均法

统计平均法是通过对连续的图像序列进行平均来获得背景图像的。首先初始化一个背景模型,该背景模型的尺寸大小均与视频帧的尺寸大小相同。背景模型中的初始像素值均设置为0,然后对视频的前若干帧中所处相同位置的像素值加和之后求均值,将这个求得的平均值赋给背景模型中相应位置上的像素点,公式如下所示。

式中,L为进行平均的图像帧数,通常,L的值越大,得到的背景图像则更接近实际背景的估计值。

因为单高斯模型法的运动目标检测的快速性和相对准确性,所以被广泛采用。单高斯模型是一种比较经典的基于概率分布,并且适用于背景单一不变的场合的背景提取的方法。单高斯模型的建模过程包括建立背景模型、运动目标检测、更新模型三个方面

(2)单高斯背景模型

单高斯背景模型的基本思想: 模型认为视频图像序列中背景的各个像素点所对应的像素值会随着时间的推移而发生一些变化,这个变化与扰动仍然近似地满足高斯分布。当有运动目标出现的时候,像素点的像素值会发生很大的变化,并且这个变化不服从高斯分布。因此可以根据某时刻某个像素点的像素值是否满足高斯分布来判定该像素点是背景点还是前景点。

对于随机的变量x,由正态分布可以得出x概率密度函数,则高斯分布的表达式如下述公式所示。

将背景图像中的每一个像素点用单个高斯分布模型来表示,则表达式如下述公式所示。

 其中,\mu是变量X的期望,\sigma是变量X的标准差,X_{t}表示当前帧中t时刻像素点的像素值,

\mu_{t}为当前帧中t时刻像素点的均值,\sum _{t}为当前帧中t时刻像素协方差矩阵。

  • 初始背景模型的确定

传统的单高斯模型中,通常选取视频图像序列的第一帧来建立背景。首先对图像中的所有像素点的均值和方差进行初始化,进而为每个像素点建立一个背景高斯模型。\mu_{0}为每个像素点的均值,\sigma _{0}^{2}为每个像素点的方差,由均值\mu_{0}和方差\sigma _{0}^{2}组成的具有高斯分布的图像B_{0}则为单高斯模型的初始背景模型估计。

  • 运动目标检测

在背景模型确定之后,对后续的视频帧进行运动目标检测。将后续的图像帧中的各个像素点与所确定的背景模型进行匹配,从而确定该像素点是否符合已建立的背景模型。如果该像素点符合背景模型,则可判定该像素点是背景点,否则判定为前景点。判断表达式如下述公式所示。

其中,T_{p}为预先设定好的阈值,阈值T_{p} = D *\sigma _{t}D为固定值,\sigma _{t}为标准差。“0”代表背景像素点,“1”代表前景像素点,也就是运动目标。

  • 模型的更新

由于视频图像序列不是随着时间的推移而静止不变的,所以背景也会在一定的程度上发生变化。因此,引入背景学习率\alpha (0 < \alpha < 1)对所建立的背景模型进行更新,相应更新表达式如下所示。

其中,t表示当前帧,t -1表示的是前一帧。学习率\alpha (0 < \alpha < 1)是决定着背景更新速度的重要参数,它体现了单高斯模型对实际背景的变化的响应能力。模型学习率\alpha (0 < \alpha < 1)是在背景模型的初始化中设定的,\alpha越大,则表示更新的速度越快,反之,\alpha越小,则表示更新的速度越慢。若模型的学习率\alpha较大的话,就会很快适应背景所发生的变化。在背景模型的更新中,学习率\alpha通常取值为0.05。 

 单高斯模型的优点是运算量小,计算的复杂度较低,检测效果较完整、准确、理想。如果在背景模型初始化的时候,输入的图像是没有运动物体出现的纯背景图像,运动目标的检测结果是非常不错的。但是,如果输入的图像中存在运动目标、其他的干扰(树枝和树叶的摇动或者水的波纹)或者场景中光照突变的时候,运动目标的检测效果会大大地降低,甚至造成严重的误检。总而言之,单高斯背景模型只适用于呈单峰分布的背景图像,不适用于复杂场景和会发生较大变化的场景中。对于呈多峰分布的复杂的背景图像,可以选择用混合高斯模型来进行建模。

④ 混合高斯模型法

混合高斯模型(Gaussian Mixture Model)是法使用K(一般为3到5)个高斯模型来表征图像帧中每一个像素点的特征。在混合高斯模型中,对图像中每个像素点建立K个高斯模型,对于t时刻像素点X的概率密度函数如下所示。

式中,\eta表示单高斯概率密度函数,W_{n,t}表示t时刻第n个高斯模型的权值大小,其中
\sum_{n=1}^{k}W_{n,t}=10\leq W_{n,t}\leq 1\mu _{n,t}表示t时刻第n个高斯模型的均值向量。\sum _{n,t}表示t时刻第n个高斯模型的协方差向量,其中\sum _{n,t} = \sigma _{n,t}^{2}II为单位矩阵)。\sigma _{n,t}t时刻第n个高斯模型的标准差。K表示的是高斯分布的数量,一般在3到5之间取值,就可以满足需要。在背景建模的过程中,模型数量K的值越大,则模拟的背景的效果越好、更真实。混合高斯模型不但可以模拟更为复杂的背景,而且能更好的适应场景中发生的实时变化。但是,随着K值的增大计算量也有所会增加,进而会对硬件的要求有所提高。 

  • 模型的初始化

在混合高斯模型法中,可以以每个像素点在某时刻(如t =1时刻)的像素值作为第一个高斯分布的均值,并且给这个高斯分布设置一个较大的方差。与单高斯模型法有区别的是,混合高斯模型法要为高斯分布函数设定一个权值。权值越大的高斯分布更新速度反而越慢,反之,权值越小,则更新的速度却越快。在模型初始化的时候,给第一个高斯分布设置的的权值较小,而其他的几个高斯分布函数的均值、方差和权值都设置为零。

  • 背景的选取

首先,按W_{n,t}/\sigma _{n,t}的比值将每个像素点的K个高斯分布由大到小进行排序,然后从中选择出最能表征背景的高斯分布。W_{n,t}/\sigma _{n,t}的值越大,则表示像素值的波动越小,而权重则越大,这些正是背景像素值的特性。因此,描述背景可能性越大的分布越靠前,描述背景可能性越小的分布则越靠后。所以选择前B个分布作为最终表征背景的高斯分布,余下的高斯分布则认为是前景。公式如下所示。

其中,H是一个门限阈值,H一般在0.5至1之间取值,其决定了拟合背景所需要的高斯模型的个数。如果H的值偏小,就会导致混合高斯模型所模拟的背景相对简单化,但是好处是计算量会有所降低。反之,如果H的值过大,不但会使计算量有所增加,而且会在一定程度上导致前景目标的漏检。在上述公式中,H取最佳的经验阈值为0.75。

  • 参数的更新及前景目标的提取

对获取的当前帧的每一个像素点分别与已经存在的K个高斯分布进行匹配,如果满足如下公式,则该像素点与高斯分布匹配成功。如果不满足公式,则说明匹配不成功。

匹配成功,则对第一个相匹配的高斯分布的参数进行更新,如下述公式所示。

对于不匹配的K-1个高斯分布的权值进行衰减处理,如下述公式所示。

如果获取的当前帧的像素点与K个高斯分布都匹配不成功,则用一个新的高斯分布代替权值最小的那个高斯分布,新的高斯分布以当前像素点的像素值为均值,并且给新的高斯分布初始化一个较大的方差(例如30)和一个较低的权值(例如0.02)。 

当前帧的像素值与B个高斯分布模型都不匹配,则判定该像素点为前景点(运动目标),否则为背景点。

以上的公式中,\rho为权值更新率。\alpha为模型学习率,一般在0.001至0.01之间取值,是决定着背景更新速度的重要参数。如果\alpha的值越小,则更新的速度就会越慢,反之,如果\alpha的值越大,则更新的速度就会越快。如果模型学习率\alpha较大,混合高斯模型就会很快适应背景的变化和干扰,同时也有可能将缓慢运动的前景目标“学习”为背景,造成漏检。如果模型学习率\alpha较小,则在检测的前期阶段可能会存在检测效果上的不准确的问题,但是随着模型的不断更新,背景模型的准确性是最终会趋于稳定的。混合高斯模型的原理图如下图所示。

与单高斯模型相比,混合高斯模型检测的效果更好。混合高斯模型对存在小幅度运动变化的背景有较好的抗干扰能力,缺点是速度慢,计算量大。虽然混合高斯模型引入了多个高斯模型,但是仍然无法解决对背景中光照突变敏感的问题,从而容易造成误检,并且对阴影的抑制效果较差,从而影响运动目标检测的结果

⑤ 总结

光流法的优点在于能检测出独立的运动目标,而不需预知场景的任何信息,并且对变化的复杂背景情况有较好的适应能力。缺点也很明显,计算量特别大,所以除非有特殊的硬件支持,否则很难实现实时检测。

帧差法的优点在于对场景中的光线渐变不敏感,适于动态变化的环境,并且运算量相对较小。缺点是一般不能完整的提取出运动目标,并且在运动实体内易产生“空洞”现象,从而不利于下一步的分析和处理。

背景差分法的优点是能完整的提取出运动目标,缺点是对光照和外部条件造成的环境变化过于敏感,常会将运动目标的阴影错误的检测为其自身的一部分。同时由于时间流逝,实际场景的多种因素都会发生一定的变化,背景需要得到实时地更新,这是影响其检测效果的一个重要因素。

单高斯分布模型的优点是运算量小,复杂度较低。单高斯背景模型适用于呈单峰分布的图像,对于复杂的场景和变化较大的场景,单高斯模型则难以表达背景,从而检测结果不理想。

混合高斯模型对存在小幅度运动的背景有较好的抗干扰能力,缺点是速度慢,计算量大,对光照突变较敏感,从而很容易造成误检,并且对阴影的抑制效果较差,影响运动目标检测的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/226562.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三列布局 css

实现如下图的三列布局&#xff1a; .box {width:1400px;margin:0 auto;padding-bottom:40px;> .left {float:left;width:180px;margin-top:100px;text-align:center;}> .center {float:left;margin-top:100px;margin-left:130px;item-box {float:left;text-align:left;…

自动化网络故障修复管理

什么是故障管理 故障管理是网络管理的组成部分&#xff0c;涉及检测、隔离和解决问题。如果实施得当&#xff0c;网络故障管理可以使连接、应用程序和服务保持在最佳水平&#xff0c;提供容错能力并最大限度地减少停机时间。专门为此目的设计的平台或工具称为故障管理系统。 …

鸿蒙系列--组件介绍之其他基础组件(上)

上回介绍了基础组件中最常用的组件常用的基础组件&#xff0c;接下来还有其他基础组件 一、Blank 描述&#xff1a;空白填充组件 功能&#xff1a;在容器主轴方向上&#xff0c;具有自动填充容器空余部分的能力。只有当父组件为Row/Column时生效 子组件&#xff1a;无 Blan…

nodejs微信小程序+python+PHP的物流快递管理系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

win11 如何在自己的电脑上配置本地服务器,让你可以通过http的方式访问文件和图片

首先&#xff0c;打开控制面板&#xff0c;找到"程序和功能"点击打开。 找到“Internet Information Services”(Internet信息服务)&#xff0c;将它的子项及子项的子项全部勾选&#xff0c;点击确定。 回到控制面板&#xff0c;将查看方式改为“大图标”或者“小图…

从实际业务问题出发去分析Eureka-Server端源码

文章目录 前言1.EnableEurekaServer2.初始化缓存3.jersey应用程序构建3.1注册jeseryFilter3.2构建JerseyApplication 4.处理注册请求5.registry&#xff08;&#xff09; 前言 前段时间遇到了一个业务问题就是k8s滚动发布Eureka微服务的过程中接口会有很多告警&#xff0c;当时…

【Unity地形】使用地形工具创建场景环境-Terrain

如上图Unity的地形工具可以让我们实现创建复杂、丰富的3D室外环境。 我们创建地形很简单&#xff0c;在层级面板中右键-3Dobject-Terrain 就可以创建一个默认的地形模型&#xff01;这个模型是Unity内置的。 接下来的地形编辑功能全部集中在这个地形的组件上 主要功能如下&…

SpringBoot 项目中常用的注解

每一层对应每个包&#xff0c;包名中应全为小写。 一、Common 层&#xff08;实体类&#xff09; 前提&#xff1a;导入 Lombok 依赖 Data&#xff1a;生成 get 和 set 方法以及 toString 方法 Getter&#xff1a;只生成 get 方法&#xff0c;避免对类中的成员变量修改。 …

AVL树(超详解)

文章目录 前言AVL树的概念AVL树的实现定义AVL树insert 单旋左单旋右单旋左单旋代码右单旋代码 双旋左右双旋右左双旋 测试AVL树的性能 前言 AVL树是怎么来的呢&#xff1f; 我们知道搜索二叉树会存在退化问题&#xff0c;退化以后就变成单支或者接近单支。 它的效率就变成O(N)…

Matplotlib找不到Times New Roman的解决方案

问题背景 在使用seaborn或者matplotlib进行论文画图的时候&#xff0c;一般都会用Times New Roman这个字体&#xff0c;但是在Linux系统里&#xff0c;经常会遇到以下的问题: findfont: Font family [Times New Roman] not found. Falling back to DejaVu Sans. 也就是说找不…

零代码也能玩出花:Mugeda在H5设计中的魔法力量

文章目录 一、Mugeda零代码可视化H5设计工具简介二、Mugeda零代码可视化H5设计实战案例1. 注册并登录Mugeda账号2. 选择模板3. 编辑页面内容4. 添加动画效果5. 预览和发布 三、Mugeda零代码可视化H5设计的优势《Mugeda零代码可视化H5设计实战》内容简介作者简介目录前言/序言 随…

【人工智能Ⅰ】实验9:BP神经网络

实验9 BP神经网络 一、实验目的 1&#xff1a;掌握BP神经网络的原理。 2&#xff1a;了解BP神经网络的结构&#xff0c;以及前向传播和反向传播的过程。 3&#xff1a;学会利用BP神经网络建立训练模型&#xff0c;并对模型进行评估。即学习如何调用Sklearn中的BP神经网络。…

基于openGauss5.0.0全密态数据库等值查询小案例

基于openGauss5.0.0全密态数据库等值查询小案例 一、全密态数据库简介二、环境说明三、测试步骤四、使用约束 一、全密态数据库简介 价值体现&#xff1a; 密态数据库意在解决数据全生命周期的隐私保护问题&#xff0c;使得系统无论在何种业务场景和环境下&#xff0c;数据在传…

【经验分享】日常开发中的故障排查经验分享(一)

目录 简介CPU飙高问题1、使用JVM命令排查CPU飙升100%问题2、使用Arthas的方式定位CPU飙升问题3、Java项目导致CPU飙升的原因有哪些&#xff1f;如何解决&#xff1f; OOM问题&#xff08;内存溢出&#xff09;1、如何定位OOM问题&#xff1f;2、OOM问题产生原因 死锁问题的定位…

利用html2Canvas将表格下载为html

给到我的需求是点击按钮时请求后端接口&#xff0c;根据后端返回的数据&#xff0c;生成表格,并将表格的内容直接下载为html,如下图。 平常做的下载都是后端返回二进制流&#xff0c;这次前端做下载那就必须把页面先画出来&#xff0c;因为下载下来的表格在页面上是不显示的&a…

[RoarCTF2019] TankGame

不多说&#xff0c;用dnspy反编译data文件夹中的Assembly-CSharp文件 使用分析器分析一下可疑的FlagText 发现其在WinGame中被调用&#xff0c;跟进WinGame函数 public static void WinGame(){if (!MapManager.winGame && (MapManager.nDestroyNum 4 || MapManager.n…

1.DQL查询数据(超重点)以及distinct(去重)

DQL(Data Query Language:数据查询语言) 1.所有查询操作都用 SELECT 2.无论是简单的查询还是复杂的查询它都能做 3.数据库中最核心的语言&#xff0c;最重要的语句 4.使用频率最高的语句 语法&#xff1a; SELECT 字段1&#xff0c;字段2&#xff0c;……FROM 表 有时候…

Go 泛型之泛型约束

Go 泛型之泛型约束 文章目录 Go 泛型之泛型约束一、引入二、最宽松的约束&#xff1a;any三、支持比较操作的内置约束&#xff1a;comparable四、自定义约束五、类型集合&#xff08;type set&#xff09;六、简化版的约束形式七、约束的类型推断八、小结 一、引入 虽然泛型是…

Jenkins Tutorial

什么是Jenkins Jenkins是一个自动化平台&#xff0c;它允许你使用pipelines去部署应用。它也可以自动化其他任务。 BUILDTESTDEPLOYMENT Jenkins 架构 首先&#xff0c;你拥有一个Master Server&#xff0c;它控制pipelines和安排Build到你的Agent上&#xff1b; 其次&…

c++环形缓冲区学习

C环形缓冲区设计与实现&#xff1a;从原理到应用的全方位解析 - 知乎 这里插入一个回调函数的学习&#xff1a; C回调函数详解_c 回调函数-CSDN博客 【C】C回调函数基本用法&#xff08;详细讲解&#xff09;_c 回调函数-CSDN博客