具体实施方式
以下是本发明的具体实施例并结合附图,对本发明的技术方案作进一步的描述,但本发明并不限于这些实施例。
本实施例提供了一种实时摄像方法,如图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。
随着动态监控点的移动,会出现摄像头影像切换。根据动态监控点的移动切换摄像头拍摄的画面。此时iffront.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。
随着动态监控点的移动,会出现摄像头影像切换。根据动态监控点的移动切换摄像头拍摄的画面。此时iffront.next!=null则front->front.next;根据实际情况可知,在队列中的摄像头的排列顺序与他们实际情况的位置序列是一致的,因此当检测没有进入队列的摄像头,若出现同时满足入队的两个条件的时候(通过控制检测时间间隔,可控制仅出现一个摄像头为Ai满足入队条件),则直接执行Ai=rear.next,rear=rear.next;。
本实施例中,呈现模块24用于呈现余弦距离最大的摄像头拍摄的画面。随着动态监控点的移动,会出现摄像头影像切换。根据动态监控点的移动切换摄像头拍摄的画面。可以全方位地捕捉到田径运动员比赛的全过程,并且不影响观看效果。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。