发明名称 一种基于图像空间的三维动态数据压缩和平滑方法
摘要 本发明提出一种基于图像空间的三维动态数据压缩和平滑方法,在服务器端基于图像空间对投影后的采样点进行压缩:首先计算图像中采样点在一定时间间隔内的空间位置,然后对运动轨迹进行聚类压缩,极大提高数据压缩比。在客户端对相邻刚体过渡区域进行平滑处理,消除压缩比过大时相邻刚体之间的裂缝,从而使得服务器端可以传输较大压缩比时的动态数据。传统交互式三维图形可视化方法中,每当客户端视点参数改变,服务器端需要重新绘制和传输一幅新视点下的图像,客户端视点变化频繁导致过大的数据传输量,本发明采样点运动轨迹的压缩在图像空间完成,较好的利用了GPU并行计算特点,实现三维动态场景数据的快速紧密压缩,降低了网络带宽的限制。
申请公布号 CN103116897B 申请公布日期 2015.11.18
申请号 CN201310023762.9 申请日期 2013.01.22
申请人 北京航空航天大学 发明人 赵沁平;马志强;王莉莉;张鑫维
分类号 G06T9/00(2006.01)I 主分类号 G06T9/00(2006.01)I
代理机构 北京科迪生专利代理有限责任公司 11251 代理人 杨学明
主权项 一种基于图像空间的三维动态数据压缩和平滑方法,其特征在于,该方法包括如下步骤:步骤(1)、基于图像空间的三维动态数据压缩:计算图像中采样点在一定时间间隔内的运动轨迹的空间位置,然后对采样点的运动轨迹进行聚类压缩,将具体有相似运动轨迹的采样点聚为一类;首先计算当前视点下采样点在N帧不同时刻的空间位置,然后以四个像素点为一组构造小刚体,采用并查集方法对构造好的小刚体进行合并,并将不能构造成刚体的采样点向合并后的刚体中合并,对不能合并的散点的运动轨迹进行压缩;具体的图像空间的三维动态数据压缩方法具体如下:1)计算采样点的运动轨迹对在不同视点下模型像素点即采样点的运动轨迹进行压缩传输,在客户端依据采样点的运动轨迹及连接信息重构三维动态场景,因此首先要计算出采样点的运动轨迹;假如传输N帧的运动场景,已知场景中某模型三角面片的三个顶点A<sub>0</sub>,A<sub>1</sub>,A<sub>2</sub>,采样点S为此三角形在某视点投影后所包含的一个像素点,无论此三角形如何变化,S相对于这三角形三个顶点的α,β,γ是始终不会发生变化的,在t时刻存在下面的关系:<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><mfenced open = '{' close = ''><mtable><mtr><mtd><mrow><mi>S</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><msub><mi>A</mi><mn>0</mn></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>.</mo><mi>&alpha;</mi><mo>+</mo><msub><mi>A</mi><mn>1</mn></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>.</mo><mi>&beta;</mi><mo>+</mo><msub><mi>A</mi><mn>2</mn></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>.</mo><mi>&gamma;</mi></mrow></mtd></mtr><mtr><mtd><mrow><mi>&alpha;</mi><mo>+</mo><mi>&beta;</mi><mo>+</mo><mi>&gamma;</mi><mo>=</mo><mn>1</mn></mrow></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000773071790000011.GIF" wi="1381" he="181" /></maths>由于场景中所有模型顶点的运动轨迹是已知,因此只要求得采样点S相对于其所在三角面片三个顶点的α,β,γ,即可求得其在所传输N帧时间范围内的每一帧的空间位置,采样点S在t时刻的空间位置,依据其纹理坐标和深度值即可求得S(t),而A<sub>0</sub>(t)、A<sub>1</sub>(t)和A<sub>2</sub>(t)已知,因此依据公式(1)即可求出S相对于其所在三角面片三个顶点的α,β,γ,从而求得采样点S在N帧不同时刻的空间位置,即在N帧内的运动轨迹;2)构造小刚体对采样得到图片中的采样点,按照从左到右、从上到下的顺序,每四个像素点为一组,如果其中某三个像素经过判定可以构成刚体,则进行刚体的构造,并判断剩余点是否合并到该刚体内;假定有采样组M(i,j,k,w),依次判断采样组中M<sub>1</sub>(i,j,w),M<sub>2</sub>(i,j,k),M<sub>3</sub>(i,k,w)和M<sub>4</sub>(j,k,w)是否能构成刚体,假如判断到M<sub>2</sub>时能构成刚体,则停止判断,求刚体M<sub>2</sub>在N帧内每一帧的运动矩阵,然后判断剩余的采样点w是否能合并到刚体M<sub>2</sub>中;对于M<sub>2</sub>(i,j,k)中的采样点i,算法首先找到另一个采样点j,保证i和j之间的距离在整个N帧内的变化量要一直小于用户设定的误差阈值ε,即基于刚体的性质,i和j之间的距离distance(i,j)在T<sub>0</sub>帧到T<sub>N‑1</sub>帧几乎是不发生变化的,一旦找到第二个采样点,算法寻找能最终构成一个刚体的第三个采样点k,保证i和k以及j和k之间的距离在N帧的变化量要一直小于用户设定的阈值ε,即保证k和i、j之间的距离在T<sub>0</sub>帧到T<sub>N‑1</sub>帧几乎是不发生变化的,由于N有可能是上千帧,因此算法计算时,三角形边距离的变化量一旦不满足用户设定的阈值ε就退出,找到满足条件的j和k构成三角形后,使用函数ComputeTFX(i,j,k,q)计算此三角形在N帧内的每一帧T<sub>m</sub>相对于T<sub>0</sub>帧的运动矩阵q<sub>m</sub>(0&lt;m&lt;N);求刚体每一帧相对于第T<sub>0</sub>帧运动矩阵的过程为:假定三角形(i,j,k)在T<sub>m</sub>帧时的空间位置为(a,b,c),首先将采样点i移动到此点在T<sub>m</sub>帧对应的空间位置a上,得到移动矩阵Q1;然后将三角形(i,j,k)的法线n<sub>1</sub>旋转到T<sub>m</sub>帧三角形(a,b,c)的法线位置n<sub>0</sub>,得到旋转矩阵Q2;最后将三角形(i,j,k)的边(i,j)旋转到(a,b),得到旋转矩阵Q3,T<sub>m</sub>帧相对于第T<sub>0</sub>帧的运动矩阵q<sub>m</sub>,即Q1、Q2和Q3的相乘,用公式(2)表示为:q<sub>m</sub>=Q1*Q2*Q3                   (2)求得三角形(i,j,k)在N帧内的运动矩阵后,需要使用函数Err()验证所求矩阵的正确性,函数Err()返回采样点(i,j,k)在运动矩阵q<sub>m</sub>下得到的空间位置与其原有空间位置的差值,一旦差值大于用户设定的误差阈值ε,则表明采样点(i,j,k)不能被构造成一个刚体,仅当N帧内所有的空间位置的差值都小于ε时,才认为三角形(i,j,k)的运动矩阵对采样点(i,j,k)是正确的,能够最终构成一个小刚体,当刚体(i,j,k)构造成功后,仍采用函数Err()判断剩余一个采样点w是否能够被合并到刚体中;3)合并小刚体合并小刚体时,整体是按照从左到右、从上到下的顺序对构造后的小刚体进行合并,对单个刚体仅向右和向下搜索,看是否有刚体可进行合并,如果是刚体,则合并时采用并查集的树形结构来进行聚类,如果是非刚体,则合并小刚体时,不进行任何操作;把经过小刚体构造后的剩余采样点,称之为初始散点,在进行小刚体合并时,由于只是合并小刚体,并没有将初始散点合并到某一类刚体中的,在合并完小刚体以后,需对初始散点进行验证合并,判断他们是否能够合并到合并后的刚体中,以尽量对采样点进行压缩,提高压缩比;4)剩余散点的压缩当完成刚体的构造和合并,并将初始散点合并到刚体中后,仍有一部分散点剩余,称之为剩余散点,假定某剩余散点S的运动轨迹为S={P<sub>0</sub>,P<sub>1</sub>,…,P<sub>7</sub>},使用集合M存储S压缩后的运动轨迹,M初始为空集,首先将S开始和结束时刻的空间位置P<sub>0</sub>,P<sub>7</sub>连接,并将P<sub>0</sub>,P<sub>7</sub>从S中删除加入M,即S={P<sub>1</sub>,P<sub>2</sub>…,P<sub>6</sub>},M={P<sub>0</sub>,P<sub>7</sub>},然后计算S中剩余空间点P<sub>k</sub>到M中相邻点的连线P<sub>0</sub>P<sub>7</sub>的距离d<sub>k</sub>,如果d<sub>k</sub>大于设定的某个距离阈值ε,则将P<sub>k</sub>从S中删除加入M,依据此原理,得到S压缩后的运动轨迹M,当合并完刚体,剩余散点较多的情况下,通过此压缩方法实现对剩余散点运动轨迹的压缩;步骤(2)、对相邻刚体的过渡区域进行平滑处理:首先查找刚体的边界,并确定刚体的过渡区域,然后通过对刚体过渡区域采样点取其周围一定范围内采样点空间位置平均值,实现对刚体过渡区域采样点的平滑处理;消除压缩比过大时相邻刚体之间的裂缝,保证客户端重构场景的绘制质量;步骤(2)在图像空间构造小刚体以及进行刚体合并时,设置的误差阈值ε越大,则最终合并得到的刚体数量越少,即能够合并到一个刚体中的采样点数目越多,得到的动态数据的压缩比越大;但压缩比过大时,相邻刚体之间会出现视觉上的裂缝;提出对相邻刚体过渡区域的平滑处理方法,消除传输数据压缩比过大时相邻刚体之间的裂缝,保证客户端重构场景的绘制质量,使得服务器端可以传输较大压缩比时的动态数据;具体的相邻刚体过渡区域平滑处理方法具体如下:1)查找刚体的边界首先给每个刚体赋值不同的颜色,并建立刚体中每个采样点和其图像中位置的映射关系;然后对刚体中的每一个采样点M,查找其在图像中周围四个采样点的颜色,如果四个采样点中有一个采样点的颜色和M不同,则M就是刚体的边界点;2)确定每个刚体的过渡区域;首先近似计算每个刚体过渡区域的宽度:假定某个刚体的过渡区域占整个刚体的X%,刚体所包含采样点个数为N,边界点个数为L,则过渡区域的宽度d可近似计算为d=(N*X%)/L,其中X是用户可定义的参数;然后确定刚体过渡区域:对于刚体边界上的采样点M,判断其周围四个采样点的颜色值,如果其中一个采样点P和M的颜色值相同,则沿着M到P的方向取d个采样点作为刚体过渡带上的采样点;判断完刚体上的边界点即可确定刚体的过渡区域;3)对刚体的过渡区域中采样点进行平滑;对刚体过渡区域上的每个采样点M取其周围A*A范围内采样点空间位置平均值作为M平滑后的空间位置,从而实现刚体过渡区域的平滑。
地址 100191 北京市海淀区学院路37号