一种实时摄像方法及***
技术领域
本发明涉及目标检测及跟踪领域,尤其涉及一种实时摄像方法及***。
背景技术
在大型田径运动会上,经常会直播运动员比赛的全过程。传统的检测方法是动态目标跟踪方法,即摄像头跟随运动员一起,或者摄像头固定在某一个位置摇动摄像头,进行动态目标跟踪。这样最大的弊端就是跟踪的目标监控时间短暂以及比赛全过程不能完整记录下来。
公开号为CN105208282A的专利提供了一种比赛现场根据篮球位置控制摄像头自动跟拍的方法,包括云台;包括跟踪控制单元,所述跟踪控制单元包括采集模块、转换模块、控制模块、终端通讯模块、显示模块、球体识别模块;包括高清可变焦可360°转动的摄像机;包括视频处理单元;所述终端通讯模块与摄像机通讯。该发明提供的一种比赛现场根据篮球位置控制摄像头自动跟拍的方法,对球体的准确识别以及对摄像头的自动控制是其中主要解决的问题。但是该发明是将摄像头固定在一个位置摇摆,进行动态目标的跟踪。
公开号为CN104835182A的专利提供了一种摄像机上实现动态目标实时跟踪的方法,所述的方法包括摄像机采集所述的动态目标的图像;控制模块基于SVM方法特征检测以及基于相邻帧差法运动检测对所述的动态目标的图像进行分析;所述的摄像机根据所述的控制模块的分析结果调整所述的摄像机的方向及位置,以实现对所述的动态目标的跟踪。采用该种结构的摄像机上实现动态目标实时跟踪的方法,同时采用SVM方法检测和相邻帧差法运动检测,具有更好的检测能力,能更精确的捕捉到目标位置,并能控制摄像机对目标进行有效跟踪,对于复杂背景的适应能力,很大程度上降低了静态目标误检率,克服SVM方法检测时动态背景适应能力的问题,应用范围广泛。该发明也是将摄像头固定在一个位置摇摆,进行动态目标的跟踪。不能高质量地监控动态目标比赛全过程。
发明内容
本发明要解决的技术问题目的在于提供一种实时摄像方法及***,用以解决传统的动态目标跟踪方法跟踪目标监控时间短暂,动态目标运动的全过程不能完整记录的问题。
为了实现上述目的,本发明采用的技术方案为:
一种实时摄像方法,包括步骤:
S1、计算动态监控点与均匀安装在摄像范围侧的摄像头的位置信息;
S2、判断所述位置信息是否满足预设条件,若是,进入循环队列;否则,不进入循环队列;
S3、根据所述进入循环队列的位置信息将摄像头由大到小编号并放置到摄像切换的循环队列;
S4、呈现所述最大编号的摄像头拍摄的画面。
进一步地,均匀安装所述摄像头的步骤具体包括:
根据所述动态监控点的移动速率与视觉暂留时间计算所述摄像范围侧的摄像头的间隔距离;
根据所述摄像范围侧的长度大小及所述间隔距离计算均匀安装所述摄像头的数量。
进一步地,步骤S1具体包括:
计算所述摄像头与所述动态监控点的余弦距离与欧式距离以及所述动态监控点与所述摄像头的方向向量的夹角。
进一步地,步骤S2具体包括:
判断所述摄像头与所述动态监控点的欧氏距离是否不大于第一阈值且所述动态监控点与所述摄像头的方向向量的夹角不大于第二阈值,若是,进入循环队列;否则,不进入循环队列。
进一步地,步骤S3具体包括:
根据所述摄像头与所述动态监控点的余弦距离将摄像头由大到小编号并放置到摄像切换的循环队列。
一种实时摄像***,包括:
计算模块,用于计算动态监控点与均匀安装在摄像范围侧的摄像头的位置信息;
判断模块,用于判断所述位置信息是否满足预设条件,若是,进入循环队列;否则,不进入循环队列;
循环模块,用于根据所述进入循环队列的位置信息将摄像头由大到小编号并放置到摄像切换的循环队列;
呈现模块,用于呈现所述最大编号的摄像头拍摄的画面。
进一步地,所述计算模块包括:
均匀安装计算单元;用于根据所述动态监控点的移动速率与视觉暂留时间计算所述摄像范围侧的摄像头的间隔距离并根据所述摄像范围侧的长度大小及所述间隔距离计算均匀安装所述摄像头的数量。
进一步地,所述计算模块还包括:
位置信息计算单元,用于计算所述摄像头与所述动态监控点的余弦距离与欧式距离以及所述动态监控点与所述摄像头的方向向量的夹角。
进一步地,所述判断模块还用于判断所述摄像头与所述动态监控点的欧氏距离是否不大于第一阈值且所述动态监控点与所述摄像头的方向向量的夹角不大于第二阈值,若是,进入循环队列;否则,不进入循环队列。
进一步地,所述循环模块还用于根据所述摄像头与所述动态监控点的余弦距离将摄像头由大到小编号并放置到摄像切换的循环队列。
本发明与传统的技术相比,有如下优点:
利用余弦距离和循环队列算法,高质量监控动态目标运动的全过程。
附图说明
图1是本发明实施例提供的一种实时摄像方法流程图;
图2是本发明实施例提供的一种实时摄像***结构图;
图3是本发明实施例计算余弦距离的坐标轴示意图。
具体实施方式
以下是本发明的具体实施例并结合附图,对本发明的技术方案作进一步的描述,但本发明并不限于这些实施例。
本实施例提供了一种实时摄像方法,如图1所示,包括步骤:
S11:计算动态监控点与均匀安装在摄像范围侧的摄像头的位置信息;
S12:判断位置信息是否满足预设条件,若是,进入循环队列;否则,不进入循环队列;
S13:根据所述进入循环队列的位置信息,将摄像头由大到小编号并放置到摄像切换的循环队列;
S14:呈现最大编号的摄像头拍摄的画面。
本实施例通过计算动态监控点与摄像头的余弦距离,由大到小将摄像头的编号放置到循环队列。由此达到高质量监控动态目标比赛的全过程,同时不影响比赛过程的目的。
其中,余弦距离,也称为余弦相似度,是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量。
向量,是多维空间中有方向的线段,如果两个向量的方向一致,即夹角接近零,那么这两个向量就相近。而要确定两个向量方向是否一致,这就要用到余弦定理计算向量的夹角。
循环队列是指,为充分利用向量空间,克服“假溢出”现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列。这种循环队列可以以单链表的方式来在实际编程应用中来实现。
其中,***作为队列用的存储区还没有满,但队列却发生了溢出,我们把这种现象称为“假溢出”。单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。
循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。因此无法通过条件front==rear来判别队列是"空"还是"满"。
解决这个问题的方法如下:
数据结构常用的:队满时:(rear+1)%n==front,n为队列长度(所用数组大小),由于rear,front均为所用空间的指针,循环只是逻辑上的循环,所以需要求余运算。如图情况,队已满,但是rear(5)+1=6!=front(0),对空间长度求余,作用就在此6%6=0=front(0)。
类型定义采用环状模型来实现队列,各数据成员的意义如下:
front指定队首位置,删除一个元素就将front顺时针移动一位;
rear指向元素要***的位置,***一个元素就将rear顺时针移动一位;
count存放队列中元素的个数,当count等于MaxQSize时,不可再向队列中***元素。
队空:count=0
队满:count=MaxQSize
循环队列的操作特点是“先进先出”。前者主要是头指针、尾指针的使用,后者主要是理解循环队列提出的原因及其特点。两者都要掌握队列空与满的判定条件以及出队列、入队列操作的实现。
本实施例中,在摄像范围侧每隔固定距离安装一台摄像头。
其中,均匀安装摄像头的具体步骤为:
根据动态监控点的移动速率与视觉暂留时间计算摄像范围侧的摄像头的间隔距离;
根据摄像范围侧的长度大小及间隔距离计算均匀安装摄像头的数量。
优选的,以百米跑道为例,在百米跑道一侧每隔固定距离安装一台摄像头,如图3所示。
优选的,在百米跑道的一侧每隔2.5米固定安装一台摄像头。
由于摄像头距离跑道外环线的最短距离将直接影响拍摄的画面的清晰度和拍摄跑道的范围,但本发明只需要保证相邻两个摄像头所能够拍摄的范围没有死角即可。
在物体快速运动时,当人眼所看到的影像消失后,人眼仍能继续保留其影像0.1~0.4秒左右的图像,这种现象被称为视觉暂留现象。而田径运动员在比赛的过程中平均速度是10米/秒,因此相邻两个摄像头应保持的距离在1米到4米之间,就可以保证摄像头切换画面时给观看者的影响视觉是连续的,这里选取的距离为2.5米,因此在百米跑道上安装的摄像头数量可为40台。
每台摄像头固定编号,这些摄像头按照顺时针方向组合成单向循环队列,队首指针为头部指针,即front指针,队尾指针为尾部指针,即rear指针。
其中,循环队列头部指针指向余弦距离最大的摄像头,循环队列尾部指针指向余弦距离最小的摄像头。画面呈现的是头部指针对应的摄像头里面的画面。由此达到高质量监控动态监控点比赛的全过程,同时不影响比赛过程的目的。
本实施例中,所述摄像头的位置信息需满足预设条件才能进入循环队列,具体包括步骤:
计算摄像头与动态监控点的余弦距离与欧氏距离以及动态监控点与摄像头的方向向量的夹角;
判断摄像头与动态监控点的欧氏距离是否不大于第一阈值且动态监控点与摄像头的方向向量的夹角不大于第二阈值;若是,进入循环队列;否则,不进入循环队列。
具体的,余弦距离的计算具体包括如下步骤:
对每一个动态监控点、每一个摄像头以及跑道建立二维坐标图;
根据摄像头与动态监控点的坐标信息计算每个摄像头与动态监控点的余弦距离。
其中,动态监控点与摄像头的余弦距离通过安置于动态监控点的位置***计算。
优选的,以跑道的圆心为坐标轴的原点,横坐标为起点与原点的连线,纵坐标垂直于横坐标,如图3所示。
所有摄像头的坐标位置信息可以确定下来。
假设任意摄像头的坐标为An(xn,yn),其中0≤n≤40,动态监控点的坐标为d(x,y),则动态监控点到摄像头的方向向量为W(An_d)=(Xn-x,Yn-y),摄像头与动态监控点的距离Wn=|W(An_d)|;
这里设定摄像头i与跑道中心的单向箭头线Li,摄像头i与动态监控点的连线为虚线Di,设定Li和Di夹角标记为ai(0≤ai≤90),则摄像头i与动态监控点的余弦距离为cos(ai)。
设定当前动态监控点坐标为Pt(Xt,Yt),距离当前时间的前0.2秒的估计坐标为P0(X0,Y0),则运动员的方向向量P=(Xt-X0,Yt-Y0),同时可以求出P和W(An_d)的夹角为:
θ=arcos[(Xn-x,Yn-y)(Xt-X0,Yt-Y0)]/[|(Xn-x,Yn-y)|*|(Xt-X0,Yt-Y0)|]
如图3所示,E是经过动态监控点Pt和跑道圆心(0,0)的虚线,F是垂直于E的虚线,跑道的半径标志为R。
将所有摄像头的距离按照以上步骤计算完成后,生成队列Q。
本实施例中,判断摄像头与动态监控点的欧氏距离是否不大于第一阈值且动态监控点与摄像头的方向向量的夹角不大于第二阈值;若是,进入循环队列;否则,不进入循环队列。
具体的,判断队列Q是否能进入循环队列,需同时满足以下两个条件:
1)满足Wn≤R,即摄像头与动态监控点的欧氏距离不大于跑道半径。图3中F虚线的左上方所有摄像头均满足,但是F虚线的右下方的摄像头不满足条件。
2)θ≤90°,即动态监控点到摄像头的方向向量夹角不大于90度。图3中E虚线的下方摄像头均满足条件,上方的摄像头均不满足条件。
队列Q中同时满足下面两个条件的进入循环队列,否则,不进入循环队列。即虚线E和F的左下方部分进入循环队列。
将所有摄像头的编号按照余弦距离放入到循环队列中,而头部指针指向的是余弦值最大的摄像头,尾部指针指向的是余弦距离最小的摄像头,则front=(rear+1%)40。
随着动态监控点的移动,会出现摄像头影像切换。根据动态监控点的移动切换摄像头拍摄的画面。此时if front.next!=null则front->front.next;根据实际情况可知,在队列中的摄像头的排列顺序与他们实际情况的位置序列是一致的,因此当检测没有进入队列的摄像头,若出现同时满足入队的两个条件的时候(通过控制检测时间间隔,可控制仅出现一个摄像头为Ai满足入队条件),则直接执行Ai=rear.next,rear=rear.next。
本实施例中,呈现余弦距离最大的摄像头拍摄的画面。可以全方位地捕捉到田径运动员比赛的全过程,并且不影响观看效果。
本实施例还提供了一种实时摄像***,如图2所示,包括:
计算模块21,用于计算动态监控点与均匀安装在摄像范围侧的摄像头的位置信息;
判断模块22,用于判断位置信息是否满足预设条件,若是,进入循环队列;否则,不进入循环队列;
循环模块23,用于根据进入循环队列的位置信息将摄像头由大到小编号并放置到摄像切换的循环队列;
呈现模块24,用于呈现最大编号的摄像头拍摄的画面。
本实施例通过计算动态监控点与摄像头的余弦距离,由大到小将摄像头的编号放置到循环队列。由此达到高质量监控动态目标比赛的全过程,同时不影响比赛过程的目的。
其中,余弦距离,也称为余弦相似度,是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量。
循环队列是指,为充分利用向量空间,克服“假溢出”现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列。这种循环队列可以以单链表的方式来在实际编程应用中来实现。
其中,***作为队列用的存储区还没有满,但队列却发生了溢出,我们把这种现象称为“假溢出”。单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。
循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。
循环队列的操作特点是“先进先出”。前者主要是头指针、尾指针的使用,后者主要是理解循环队列提出的原因及其特点。两者都要掌握队列空与满的判定条件以及出队列、入队列操作的实现。
本实施例中,计算模块21包括:
均匀安装单元,用于根据所述动态监控点的移动速率与视觉暂留时间计算所述摄像范围侧的摄像头的间隔距离并根据所述摄像范围侧的长度大小及所述间隔距离计算均匀安装所述摄像头的数量。
优选的,如图3所示,优选的,在百米跑道的一侧每隔2.5米固定安装一台摄像头。本发明只需要保证相邻两个摄像头所能够拍摄的范围没有死角即可。
在物体快速运动时,当人眼所看到的影像消失后,人眼仍能继续保留其影像0.1~0.4秒左右的图像,这种现象被称为视觉暂留现象。而田径运动员在比赛的过程中平均速度是10米/秒,因此相邻两个摄像头应保持的距离在1米到4米之间,就可以保证摄像头切换画面时给观看者的影响视觉是连续的,这里选取的距离为2.5米,因此在百米跑道上安装的摄像头数量可为40台。
本实施例中,计算模块21还包括:
位置信息计算单元,用于计算摄像头与动态监控点的余弦距离与欧式距离以及动态监控点与摄像头的方向向量的夹角。
对每一个动态监控点、每一个摄像头以及跑道建立二维坐标图;
根据摄像头与动态监控点的坐标信息计算每个摄像头与动态监控点的余弦距离。
优选的,以跑道的圆心为坐标轴的原点,横坐标为起点与原点的连线,纵坐标垂直于横坐标,如图3所示。
所有摄像头的坐标位置信息可以确定下来。
假设任意摄像头的坐标为An(xn,yn),其中0≤n≤40,动态监控点的坐标为d(x,y),则动态监控点到摄像头的方向向量为W(An_d)=(Xn-x,Yn-y),摄像头与动态监控点的距离Wn=|W(An_d)|;
这里设定摄像头i与跑道中心的单向箭头线Li,摄像头i与动态监控点的连线为虚线Di,设定Li和Di夹角标记为ai(0≤ai≤90),则摄像头i与动态监控点的余弦距离为cos(ai)。
设定当前动态监控点坐标为Pt(Xt,Yt),距离当前时间的前0.2秒的估计坐标为P0(X0,Y0),则运动员的方向向量P=(Xt-X0,Yt-Y0),同时可以求出P和W(An_d)的夹角为:
θ=arcos[(Xn-x,Yn-y)(Xt-X0,Yt-Y0)]/[|(Xn-x,Yn-y)|*|(Xt-X0,Yt-Y0)|]
如图3所示,E是经过动态监控点Pt和跑道圆心(0,0)的虚线,F是垂直于E的虚线,跑道的半径标志为R。
将所有摄像头的距离按照以上步骤计算完成后,生成队列Q。
本实施例中,所述判断模块22还用于判断摄像头与动态监控点的欧氏距离是否不大于第一阈值且动态监控点与摄像头的方向向量的夹角不大于第二阈值;若是,进入循环队列;否则,不进入循环队列。
具体的,判断队列Q是否能进入循环队列,需同时满足以下两个条件:
1)满足Wn≤R,即摄像头与动态监控点的欧氏距离不大于跑道半径。图3中F虚线的左上方所有摄像头均满足,但是F虚线的右下方的摄像头不满足条件。
2)θ≤90°,即动态监控点到摄像头的方向向量夹角不大于90度。图3中E虚线的下方摄像头均满足条件,上方的摄像头均不满足条件。
队列Q中同时满足下面两个条件的进入循环队列,否则,不进入循环队列。即虚线E和F的左下方部分进入循环队列。
本实施例中,循环模块23用于将每台摄像头固定编号,这些摄像头按照顺时针方向组合成单向循环队列,队首指针为头部指针,即front指针,队尾指针为尾部指针,即rear指针。
其中,循环队列头部指针指向余弦距离最大的摄像头,循环队列尾部指针指向余弦距离最小的摄像头。画面呈现的是头部指针对应的摄像头里面的画面。由此达到高质量监控动态监控点比赛的全过程,同时不影响比赛过程的目的。
优选的,将所有摄像头的编号按照余弦距离放入到循环队列中,而头部指针指向的是余弦值最大的摄像头,尾部指针指向的是余弦距离最小的摄像头,则front=(rear+1%)40。
随着动态监控点的移动,会出现摄像头影像切换。根据动态监控点的移动切换摄像头拍摄的画面。此时if front.next!=null则front->front.next;根据实际情况可知,在队列中的摄像头的排列顺序与他们实际情况的位置序列是一致的,因此当检测没有进入队列的摄像头,若出现同时满足入队的两个条件的时候(通过控制检测时间间隔,可控制仅出现一个摄像头为Ai满足入队条件),则直接执行Ai=rear.next,rear=rear.next。
本实施例中,呈现模块24用于呈现余弦距离最大的摄像头拍摄的画面。随着动态监控点的移动,会出现摄像头影像切换。根据动态监控点的移动切换摄像头拍摄的画面。可以全方位地捕捉到田径运动员比赛的全过程,并且不影响观看效果。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。