利索能及
我要发布
收藏
专利号: 2018115202004
申请人: 山东大学
专利类型:发明专利
专利状态:已下证
更新日期:2026-10-22
缴费截止日期: 暂无
联系人

摘要:

权利要求书:

1.基于星型网络结构的三维场景数据获取方法,其特征是,包括:

构建一个以中心服务器为根节点且以各个计算机终端为叶子节点的星型网络拓扑;中心服务器与各个计算机终端连接,每个计算机终端与一个Kinect传感器连接,每个计算机终端和其所相连的Kinect传感器组成一个Kinect客户端;基于网络时间协议的客户端/服务器工作模式让每个Kinect客户端与中心服务器对时同步,进而使得所有Kinect客户端在统一的时间标准下工作;

中心服务器向各个Kinect客户端下发数据采集和传输指令;每个Kinect客户端在统一的时间标准下采集图像数据并对所采集的图像数据进行压缩,对压缩后的每一帧图像数据附加一个全局的时间戳,结合传输控制协议将压缩后的数据传至中心服务器;

中心服务器在每接收到一个Kinect客户端的加入网络请求时,便启动一个线程接收该Kinect客户端传来的数据,使用内存池方式来接收不同Kinect客户端的图像数据,并将数据解压缩,实时显示各Kinect客户端获取的图像信息。

2.如权利要求1所述的方法,其特征是,基于网络时间协议的客户端/服务器工作模式让每个Kinect客户端与中心服务器对时同步,进而使得所有Kinect客户端在统一的时间标准下工作的具体步骤为:步骤(1-1):同一局域网内,采用网络时间协议NTP的客户端/服务器模式,中心服务器作为服务端,与各个Kinect客户端作为客户端;Kinect客户端A发送一个NTP报文给中心服务器,所述NTP报文携有离开Kinect客户端A时的时间戳T1;

步骤(1-2):当所述NTP报文到达中心服务器时,中心服务器在时间戳T1后面加上时间戳T2;

步骤(1-3):中心服务器将所述NTP报文反馈给Kinect客户端A,当所述NTP报文离开中心服务器时,中心服务器在时间戳T2后面再加上时间戳T3;

步骤(1-4):当Kinect客户端A接收到所述NTP报文时,Kinect客户端A在时间戳T3后面再加上本地时间戳T4;

步骤(1-5):计算NTP报文的往返时延delay:

delay=(T4-T1)-(T3-T2)

计算Kinect客户端A的相对时间差offset:

offset=((T2-T1)+(T3-T4))/2

步骤(1-6):Kinect客户端A根据往返时延和相对时间差,计算Tm来同步自己的系统时钟,使Kinect客户端系统时钟与中心服务器的时钟保持同步;

Tm=Tn+offset-delay

其中,Tm表示同步后的系统时间,Tn表示同步前的系统时间。

3.如权利要求1所述的方法,其特征是,中心服务器向各个Kinect客户端下发数据采集和传输指令之前,还包括建立中心服务器和各个Kinect客户端之间的TCP连接的具体步骤。

4.如权利要求3所述的方法,其特征是,建立起中心服务器和各个Kinect客户端之间的TCP连接的具体步骤为:步骤(2-1):采用Winsock通信所具有的C/S体系结构设计,中心服务器为服务端,各个连接Kinect客户端为客户端;在服务端和客户端均调用WSAStartup函数初始化Winsock动态链接库,并调用Socket函数来建立套接字,定义Socket函数使用TCP/IP通信协议;

步骤(2-2):在服务端调用bind函数为步骤(2-1)所定义的Socket函数绑定一个IP地址和端口;

步骤(2-3):服务端Socket对象绑定完成之后,调用listen函数使服务端的Socket进入监听状态,设定与服务端的最大连接数;

步骤(2-4):客户端Socket使用connect函数提出与服务端Socket建立连接的申请,服务端则调用accept函数接收客户端的连接请求,服务端为每个连接新开线程,进而服务端和客户端建立连接。

5.如权利要求1所述的方法,其特征是,中心服务器向各个Kinect客户端下发数据采集和传输指令的具体步骤为:步骤(3-1):服务端调用send函数向各Kinect客户端发送指令;

步骤(3-2):Kinect客户端调用recv函数,在未接收到数据时recv函数一直处于阻塞状态,直至接收到服务端发来的指令,recv函数开始继续执行;

步骤(3-3):Kinect客户端收到指令后,初始化Kinect传感器,并调用GetDefaultKinectSensot函数和Open函数启动Kinect传感器;

步骤(3-4):启动Kinect传感器后,客户端调用get_DepthFrameSource函数获取深度图像数据,调用get_ColorFrameSource函数获彩色图像数据,调用get_BodyIndexFrameSouce函数获取人体索引数据,人体索引数据即人体在深度图像中的位置,调用get_BodyFrameSource函数获取人体骨架数据;

步骤(3-5):客户端调用OpenReader函数打开深度图像数据、彩色图像数据、人体索引数据和人体骨架数据的读取器;客户端调用recv函数阻塞等待服务端发送的采集数据指令;

步骤(3-6):服务端发送采集数据指令给客户端,阻塞等待客户端发来的数据,客户端接收数据后调用AcquireLatestFrame函数获取各数据帧。

6.如权利要求1所述的方法,其特征是,每个Kinect客户端在统一的时间标准下采集图像数据并对所采集的图像数据进行压缩的具体步骤为:步骤(4-1):Kinect客户端顺序调用get_FrameDescription函数、get_Width函数和get_Height函数获取各数据帧的像素信息,调用GetLocalTime函数获取同步后的本地时间戳;

步骤(4-2):服务端接收到数据包后,接收采集的RGB-D图像数据;

步骤(4-3):客户端调用AccessUnderlyingBuffer函数访问图像数据的缓存,对数据进行压缩处理;

步骤(4-4):对客户端采集的每一帧图像数据进行小波正交变换,对长度为N的原始数据x,以小波基Ψ=[Ψ1,Ψ2,...ΨN]的形式展开,即:其中, 是一个N维矩阵, 是一个N×N的矩阵;

因此,原始数据x用小波基Ψ下的一组稀疏系数y=[y1,y2,…,yN]T,将稀疏系数y中的分量从大到小进行排序,保留排序靠前的K个分量,将剩余N-K个分量置零;进而得到了x的稀疏近似表示,即原始信号x由小波基Ψ下的K稀疏系数y=[y1,y2,…,yN]T来表示,其中,y中不为零分量的数量小于等于K个;

步骤(4-5):在客户端,将由步骤(4-4)得到的稀疏化数据x,投影到观测基Φ=[Φ1,Φ2,…,ΦM]T, 得到x的线性测量s,即s=Φx=ΦΨy=Ay

其中,传感矩阵A=ΦΨ是一个M×N的矩阵,即

7.如权利要求1所述的方法,其特征是,对压缩后的每一帧图像数据附加一个全局的时间戳,结合传输控制协议将压缩后的数据传至中心服务器的具体步骤为:步骤(5-1):各客户端对压缩后的每一帧图像数据附加一个全局的时间戳,将压缩后的数据发送至服务端,并使用select函数使客户端的非阻塞等待服务端的结束指令,以不阻碍每一帧数据的发送;

步骤(5-2):Kinect客户端调用release函数释放帧数据。

8.如权利要求1所述的方法,其特征是,中心服务器在每接收到一个Kinect客户端的加入网络请求时,便启动一个线程接收该Kinect客户端传来的数据,使用内存池方式来接收不同Kinect客户端的图像数据,并将数据解压缩,实时显示各Kinect客户端获取的图像信息的具体步骤为:步骤(6-1):中心服务器在每接收到一个Kinect客户端的加入网络请求时,便启动一个线程接收该Kinect客户端传来的数据,创建内存池,在服务端申请一块连续的内存空间,所述内存空间可容纳设定数量的对象;

步骤(6-2):服务端接收并使用贪婪SAMP算法解压各Kinect客户端采集的数据,即根据压缩信号s和传感矩阵A,估计信号x的稀疏表示系数 以重构原始信号步骤(6-3):首先从压缩数据包中得到压缩信号s和传感矩阵A,设定步长B;

步骤(6-4):设定初始值,令残差r0=s,重建信号 支撑集 支撑集大小L=B,迭代次数t=1;

步骤(6-5):计算u=abs(ATrt-1),即计算uj=,其中uj代表u的第j个分量,选择u中L个最大值,并将L个最大值对应A的列序号构成集合Bk;<·,·>表示求向量的内积,abs(·)表示求绝对值;

步骤(6-6):计算候选集Ck=Fk-1∪Bk,

步骤(6-7):求s=Atyt的最小二乘解:

步骤(6-8):从 中选出绝对值最大的L个分量,L个分量所对应的A的列记为AtL,L个分量所对应的A的列序号记为集合FtL;

步骤(6-9):更新残差

步骤(6-10):

如果残差rnew=0,则停止迭代,执行步骤(6-11);

如果||rnew||2≥||rt-1||2,更新步长L=L+B,返回步骤(6-5)继续迭代;

如果rnew≠0且||rnew||2<||rt-1||2,则Ft=FtL,rt=rnew,t=t+1;

如果 则停止迭代,执行步骤(6-11);否则,返回步骤(6-5)继续迭代;

步骤(6-11):重构 在FtL所对应的索引项的值为 其余项为零;

经过循环迭代,求出信号X近似稀疏系数 利用稀疏矩阵公式 求出初始信号X的近似值 在服务端重构信号,恢复客户端节点缓冲区获取的每一帧初始图像数据;

步骤(6-12):从内存池中为压缩后的数据分配内存节点,并将所述内存节点从内存池的链表结构中剔除;

步骤(6-13):借助OpenCV将所述内存节点的数据转为Mat结构,并调用imshow函数实时显示各传感器节点获取的图像信息,为防止多线程使用imshow函数冲突,在先调用cvNameWindow函数;对内存节点内的数据做相应处理,处理完每帧数据后释放所述内存节点,所述内存节点重新加入空闲内存节点链表。

9.基于星型网络结构的三维场景数据获取系统,其特征是,包括:中心服务器和若干个Kinect客户端;

构建一个以中心服务器为根节点且以各个计算机终端为叶子节点的星型网络拓扑;中心服务器与各个计算机终端连接,每个计算机终端与一个Kinect传感器连接,每个计算机终端和其所相连的Kinect传感器组成一个Kinect客户端;基于网络时间协议的客户端/服务器工作模式让每个Kinect客户端与中心服务器对时同步,进而使得所有Kinect客户端在统一的时间标准下工作;

中心服务器向各个Kinect客户端下发数据采集和传输指令;每个Kinect客户端在统一的时间标准下采集图像数据并对所采集的图像数据进行压缩,对压缩后的每一帧图像数据附加一个全局的时间戳,结合传输控制协议将压缩后的数据传至中心服务器;

中心服务器在每接收到一个Kinect客户端的加入网络请求时,便启动一个线程接收该Kinect客户端传来的数据,使用内存池方式来接收不同Kinect客户端的图像数据,并将数据解压缩,实时显示各Kinect客户端获取的图像信息。