APP下载

复用计算的虚拟肝脏体纹理合成与映射方法

2015-04-16陈国栋何汉鑫

计算机工程与应用 2015年19期
关键词:面片纹理像素

陈国栋,潘 翔,何汉鑫

CHEN Guodong,PAN Xiang,HE Hanxin

福州大学 物理与信息工程学院,福州350002

College of Physics and Information Engineering,Fuzhou University,Fuzhou 350002,China

1 引言

随着科学技术的发展,虚拟手术已经成为计算机技术和医学领域结合的重点研究内容[1-4]。虚拟肝脏手术是虚拟手术的应用之一,绘制肝脏体纹理是虚拟肝脏手术的重要内容,具有真实感的纹理能够方便医生观察确定病灶位置,以及进刀的部位和角度。生成三维纹理有多种方式,传统的纹理映射应用的最为广泛[5],能够快速简单地生成表面纹理,但是会存在变形及接缝处不连续的现象,并且如果获取的纹理图像分辨率较低,这样的问题将会更加突出,无法满足真实感绘制的要求。基于二维样本图片合成三维纹理正逐渐成为研究热点,可以利用输入的小尺寸纹理图片合成任意大小的表面纹理。Wei 最早进行了这方面的探索[6],该算法提出了两种应用,即多输入源的纹理合成以及基于二维图像的体纹理合成。合成时在各个输入源搜索最佳匹配邻域,取差值最小的邻域逐块合成表面纹理,其缺点在于合成的纹理比较模糊。Kopf 提出了一种优化算法[7],扩展了二维的纹理优化方法,结合直方图匹配合成了多种体纹理,合成效果令人满意。江巨浪[8]通过设置二维纹理在三维空间中的运动路径,使样图纹理值沿着路径着色,能够合成木材与大理石两种典型纹理。基于样图的体纹理合成存在的主要问题是合成时间较长,在处理较大尺寸的体纹理时,这一问题将更加突出。本文提出一种改进二维复用计算合成纹理的方法,适合应用于合成虚拟肝脏体纹理这样没有明显周期性的纹理,利用OpenCV 结合OpenGL 编程实现。先通过VHP 肝脏数据集图片合成体纹理空间,接着在三维空间进行体纹理的排布,参考了陈昕在二维提出的复用计算方法[9],进行修改后将其扩展至三维空间。建立图片空间,体纹理空间和三维模型空间的映射关系,把样图纹理映射到模型中的点进行着色;并且在切割时也能表现出纹理结构。

2 预处理工作

人体可视化研究旨在将成千上万个人体断面数据信息在计算机里整合,构成人体形态学信息研究的实验平台,为开展各种人体相关研究提供形象而真实的数据。美国于1989 年确立了“可视人计划”(VHP)。获取了人体连续横断面图像,其数据来源于一中年男性,层间间距为1 mm,总共有1 878 个断层图像,分辨率为2 048×1 216,采用24 位真彩色定义图像数据,总数据量为13 GB[10],本文采用的肝脏图片来源VHP 数据集,总共180 张jpg 格式的彩色图片,分辨率为2 048×1 216,局部截取后分辨率为600×630,如图1(a)。因为后期合成体纹理时,用OpenGL 生成三维纹理,要求纹理的长宽高都要为2 的n次方,并且采取肝脏体和血管分别贴图的方案。所以根据肝脏在原始图片中的位置,除去头尾几张肝脏区域较小的图片,抽取中间的128 张图片,用OpenCV 按编号顺序读取并截取每张图片特定位置的感兴趣区域(ROI),区域大小为128×128。接着根据数据集合成体纹理空间,在XY平面读取每一张截取图像的数据,在Z轴方向上累加128张图片,即先在左右排列,再前后排列,其中相交的点的像素值则取平均值,再通过OpenGL的glTexImage3D函数生成三维纹理。这样构建的好处在于使得肝脏表面的纹理同内部纹理有所不同,增加肝脏纹理的多样性,更贴近现实中的肝脏纹理。这里设计了体纹理的查看界面,通过拖动XYZ坐标轴上的小球可以观看每个切割面上的纹理,如图1(b)。

图1 数据源预处理

3 复用计算体纹理合成

3.1 合成初始区域

依据VHP 数据集提供的人体肝脏连续横断面图像,合成出了如图1(b)所示的肝脏体纹理样本。根据陈昕提出的二维纹理复用计算的方法,首先需要合成一个初始区域,然后才能复用合成余下的部分。

在合成初始区域时,首先要确定纹理块的参数,即合成纹理块尺寸和重叠区域的体积(在二维平面上为重叠区域的面积)。这里参考王一平[11]在二维纹理合成时采用的方法,并将其拓展到三维空间,具体做法是通过计算RGB分量的L2 距离(即颜色差值的平方和)[12]来度量每个尺寸的合成纹理块对样本体纹理的特征包容性,特征包容性越好的块对样本纹理块的全局特征保持的就越好,选择特征包容性最好的纹理块尺寸进行分布排列,此方法可以自适应的确定纹理块尺寸。在确定重叠区域体积时,为了减少计算量,采取固定的体积计算,设为合成纹理块尺寸的1/6,经测试对实验结果影响不大。在排列布块时,首先计算肝脏体模型在XYZ方向上的最小值点,记为点A(xmin,ymin,zmin),其三维坐标分别为模型XYZ方向上的最小值。以A点作为起始点,合成一个初始区域。在排列布块时,陈昕的方法是根据结构纹理的周期性,以间隔布块的方式消除相邻块间的约束,由于肝脏纹理不具有明显的结构性与周期性,这里采用类似二维光栅扫描线方法,如图2。

图2 第k 层扫描线合成示意图

在扫描线合成方法中,计算L2 距离以及寻找匹配块是制约合成速度的主要因素。采用像素块方法计算L2 距离以及分类块拼接的方法,对纹理合成过程进行加速。参考文献[12]提出了一种基于像素块计算L2 距离的块纹理合成方法,针对此方法本文做了三维的拓展,具体做法是先对合成好的体纹理块进行预处理,按照m×n×k像素块进行划分,如图3 所示为按照2×2×2分块示意图。对于边缘一些尺寸不足m×n×k的像素块,按其实际体积计算。把每个像素块当作计算L2 距离的一个“像素点”进行计算,计算每个像素块的RGB均值作为该“像素点”的颜色值,并且保持各块相对位置不变的原则。在后期匹配计算及选块填充时,再按照原始样本和分块后的样本的相对位置关系分布输出。这样,当m×n×k取值较小时,可以提高m×n×k倍的速度,加速合成过程。需要注意的是,此处划分的尺寸应该小于初始根据特征包容性计算出来的尺寸,算是二次划分。实现中,取2×2×2 的划分尺寸,这样经缩小处理的纹理样本能够较好地保持原始样本的纹元信息,如图3 所示。

图3 按照2×2×2 分块平面示意图

基于块的纹理合成相对于基于点的纹理合成优势在于合成速度快,但是其缺点在于随机性不强,容易产生重复拼贴的纹理块,会影响图像质量。这种问题在三维情况下同样存在。因此本文考虑在搜索匹配块时,首先对划分的纹理块进行分类,计算每个纹理块的RGB均值,并对RGB三个分量值加和,在此记为PCC(Per Cube Color),这里取纹理块尺寸为16×16×16,原始体纹理块尺寸为128×128×128,128/16=8,则总共有8×8×8=512 个纹理块。按照PCC 的取值范围将样本纹理分为三类,如图4。这样做的目的是消除个别块多次重复拼贴的可能性,增加随机性。并且在最终合成结果上,也要保持各类块数目的概率分布同样本块一样。因此,在实现上,根据概率论采取随机选择方法就可以保持同样的概率分布。合成时,先在所有块中随机选取一个块填充,在之后的匹配搜索中,先随机选取一个块类,然后在这个块类中再按照L2 距离作匹配搜索。这样既增加了随机性并且保持概率分布不变,也减少了搜索匹配块的时间。如图5 所示为三类块中的代表,A类块颜色较深,C类块最为明亮。其中任意一类块的重复拼贴,都会对合成质量有较大影响。

图4 分类块拼贴

图5 块分类

剩下的步骤就是按照L2 距离进行匹配块的搜索,拼贴到输出区域中,而重叠区域缝合在3.3 节讨论。

3.2 复用合成剩余区域

合成好初始区域后,按照成倍增长的方式合成剩余区域。具体实现上,需要重新计算合成纹理块体积,本文设为已合成区域长宽高各一半作为新的纹理块体积,然后在XYZ正方向上(因为之前已选取模型上最小值点A作为初始合成点)逐步添加纹理块,当已合成区域长宽高都增加1 倍后,即合成区域体积增加至8 倍后,再重新计算新的纹理块尺寸,开始新一轮的复用计算,直到已合成区域完整包含整个模型空间为止,合成过程如图6 所示;整个复用过程算法流程如图7 所示。这样做的好处是可以保证整个体纹理空间可以完整的包含模型空间,在后期的纹理映射时不会遗漏掉模型中的部分点,并且每一轮的复用所采用的纹理块尺寸不同,后期的合成可以直接使用前期的合成结果,可以有效地提高合成速度。

图6 复用合成过程示意图

图7 复用计算算法流程

3.3 重叠区域缝合

传统的二维纹理合成,在处理体纹理合成中的重叠区域问题上,只需要考虑三种重叠形状,即上下重合、左右重合以及上下左右重合(L 形)。而在三维的情况下,体纹理的空间排列有好几种重叠的情况,具体来说,有两个、四个和八个体纹理块重叠的情况,总共有如图8所示的几种重叠区域形状。为了简单而高效地处理多种情况,在重叠区域像素的缝合问题上,采用类似“羽化”的缝合方法[13],即对重叠区域像素根据其到各体纹理边界的距离做色彩的插值计算。如果当前待合成像素处于两个体纹理重叠的区域中,如图9,则有:

图8 几种重叠情况

图9 “羽化”算法示意

图中,C为阈值,Cresult为融合计算后的色彩值,CA和CB分别表示体纹理块A和体纹理块B中相应位置的像素值,ω(x)为为对应位置处的权重,和当前待合成像素到块A边界及块B边界距离有关。二维情况下ω(x)为当前合成点到相应边界线的垂线,而在三维情况下,则表现为当前合成点到相应边界平面的垂线。其他重叠情况也类似,只要增加参数个数就可以。“羽化”的方法方便快捷,可以保持衔接的部分虚化,起到渐变的作用从而达到自然衔接的效果。在边缘像素的处理问题上,提出一种阈值判断的方法,假如当前待合成的纹理块包含大部分边缘像素,大于给定的阈值,则保留该纹理块,否则舍弃该块,采用“羽化”方法从已合成区域缝合边缘像素。实现上,取阈值为30%,经测试能取得比较好的处理效果。

4 体纹理的映射

合成好体纹理并且正确地在三维空间排列后,接下来需要把体纹理映射到肝脏体模型上。首先需要预先把肝脏体的表面模型转化为四面体模型,采用了德国Weierstrass 实验室开发的tetgen 库[14-16],获取到模型上所有点的位置信息以及所有四面体的信息。接着根据模型中每个点B的位置判断其属于哪个体纹理块,计算当前点B与该体纹理中心点A在XYZ三个方向上的距离d,d的取值根据当前点B相对于中心点A位置的不同而不同。再用体纹理尺寸的一半减去d即可算出当前点B的三维纹理坐标,如图10所示。在计算模型表面的三角面片分布时,提出一种新方法,即通过判断每个四面体的四个面是否具有相邻面来计算,如果当前四面体四个面都有相邻面,则为模型内部四面体。如当前四面体其中有一个面无相邻面,则为表面四面体。每个三角面片三个点的纹理坐标已经根据以上方法计算得到,这样只要在绘制时利用简单的纹理映射即可完成。

图10 三维纹理坐标的计算

4.1 三角面片内部点集计算

在上文中,根据模型表面三角面片三个顶点在相应体纹理中的位置来确定其纹理,由于点数量较少,会造成映射形成的表面纹理较模糊的问题。针对以上问题,提出一种计算每个三角面片内部所有点的纹理值方法,以达到合成精细纹理的目的。设三角面片三个顶点分别为A(x0,y0,z0),B(x1,y1,z1),C(x2,y2,z2),三角形ABC内部任意一点D(x,y,z),如图11 所示。需要计算三角形内部所有点集D的空间坐标,进一步算出其纹理坐标。根据数学知识,可知任意不共线的两个向量可表示由这两个向量所确定的平面内的任意一点。利用该性质可得到对于三角形内部任意一点D(x,y,z),有:

其中0 ≤a≤1,0 ≤b≤1,并且a+b≤1。当a=0,b=0时,表示点A;当a=1,b=0 时,表示点B;当a=0,b=1 时,表示点C。由式(2)可得:

图11 三角面片内部点计算

遍历a和b的取值可以得到三角形内部的所有点。其中,a和b的步进值很重要,步进值设的过小,计算得到的点数目很多,其中会有大量重复的点,虽然对最终的合成效果没有明显的影响,但是加大了系统的负担,增加了计算时间。步进值设的过大,则计算得到的点数目较少,对合成效果有较大影响。通过相应值的测试,设置a和b的步进值为线段AB和AC长度值的倒数,即设AB和AC长度为lAB和lAC,根据空间两点的距离公式,则有:

长度单位为像素,则a和b的步进值分别为1/lAB和1/lAC,在计算D点坐标时进行四舍五入取整即可。计算出内部所有点的位置信息后,再根据前文所论述的方法计算纹理坐标,完成表面纹理的细化工作,如图11所示。

4.2 切割显示

体纹理的优势之一在于能够表现物体内部纹理,因此需要设计切割肝脏体显示内部纹理结构功能。由于切割不是本文研究的重点,采用了翟朝亮的切割算法[17]实现对肝脏体的切割。对切割所形成的新三角面片按照上述方法计算其内部点集进而得出纹理坐标,可以达到显示切面的效果。

5 实验及结果分析

利用Visual C++结合OpenCV 和OpenGL,在PC 机上实现了上述算法,PC 机的配置为Core 2 Duo E4700 2.6 GHz CPU,2 GB RAM,NVIDIA GeForce GT 430显卡,所得到的肝脏效果图如图12 所示。

图12 肝脏效果图

从合成效果图可以看出,未计算内部点集的情况下,合成的纹理较模糊,只能大致表现出纹理结构。计算内部点集后,纹理结构更为精细。其中,步进值的设置对内部点集的计算有较大的影响,步进值较大则计算点数目较少,会在表面出现颗粒情况。步进值较小则计算点数目较多,会影响合成速度。同时为了在效果上进行对比,选用了文献[18]和文献[7]所提出的代表方法得到的效果图如图13 所示。可以看出文献[18]的方法出现部分纹理有变形的情况且比较模糊,文献[7]的方法较精细但显得纹理杂乱无章,而本文的方法则可以表现出精细和未变形的纹理。由于其他合成方法应用场合的特殊性以及有些方法没有提供实验数据,而为了比较合成速度,表1 列出了复用计算方法合成不同大小模型体纹理的时间开销以及同常规非复用方法的对比,二者使用同一套肝脏数据源,非复用方法使用的是基本的块纹理拼贴方法,每次的合成纹理块尺寸不变;图14 给出了各个模型的效果图,表1 最后一行的尺寸数据是所用的肝脏模型,与之前初始合成阶段采用间隔布块的研究工作相比,合成时间进一步缩短。

图13 文献[18]和文献[7]方法效果图

图14 不同尺寸模型的合成对比

表1 复用计算合成效率对比

可以看出,同二维的情况类似[9],在数据量较少的情况下,两种方法的平均合成时间差别不大。当模型的尺寸逐渐增大时,复用方法的平均合成时间逐渐降低,非复用方法则保持基本稳定。因此,把复用计算的方法扩展到三维,对于虚拟手术这样需要显示高精度纹理并且合成速度有要求的场合,具有很好的应用前景。

6 结束语

提出一种合成并且映射肝脏体纹理的方法,首先对数据集进行预处理,根据数据集构建肝脏体纹理块,接着参考二维的情况在模型空间复用合成体纹理块,计算模型每个点的纹理坐标进行映射,并且为了精细化纹理还计算了每个三角面片内部点集并映射相应的纹理,最后实现了切割显示。二维情况下为小尺寸样图-大尺寸样图,三维情况下为样图-样本体纹理-全模型体纹理。实验结果表明,本文方法相比传统方法在处理大体积大数据的模型体纹理合成方面,有着明显的速度优势,并且能够合成较高质量的体纹理,在虚拟手术可视化方面有一定的应用价值。目前本文方法存在的主要缺点在于切割显示的速度不是很理想,需要在后期的研究中加以改进。

[1] 邢英杰,张少华,刘晓冰.虚拟手术系统技术现状[J].计算机工程与应用,2004,40(7):88-90.

[2] 杨君顺,冯青.基于虚拟现实与系统仿真的人机心理研究[J].艺术与设计:理论,2007(4):41-44.

[3] 李曼.虚拟手术系统对实践教学的作用探讨[J].湖南中医药大学学报,2007(3):72-73.

[4] 顾巍.虚拟肝脏手术规划系统的关键技术研究[D].长沙:国防科学技术大学,2009.

[5] Catmull E.A subdivision algorithm for computer display of curved surfaces[R].Utah Univ Salt Lake City,1974.

[6] Wei L Y.Texture synthesis from multiple sources[C]//Proceedings of ACM SIGGRAPH 2003 Sketches and Applications,2003.

[7] Kopf J,Fu C W,Cohen-Or D,et al.Solid texture synthesis from 2D exemplars[J].ACM Transactions on Graphics(TOG),2007,26(3):2-3.

[8] 江巨浪,薛峰,郑江云,等.一种基于样图的体纹理快速生成算法[J].计算机辅助设计与图形学学报,2011,23(8):1312-1318.

[9] 陈昕,王文成.基于复用计算的大纹理实时合成[J].计算机学报,2010,33(4):768-775.

[10] 张绍祥,刘正津.数字化可视人体研究[J].第三军医大学学报,2003(7):4-7.

[11] 王一平,王文成,吴恩华.块纹理合成的优化计算[J].计算机辅助设计与图形学学报,2006,18(10):1502-1507.

[12] 任军利,王伟.基于以像素块计算L2 距离的块纹理合成[J].现代计算机:专业版,2011(3):34-37.

[13] Liang L,Liu C,Xu Y Q,et al.Real-time texture synthesis by patch-based sampling[J].ACM Transactions on Graphics(ToG),2001,20(3):127-150.

[14] Si H.TETGEN:A quality tetrahedral mesh generator and three-dimensional Delaunay triangulator.2004-01.

[15] Si H.On Refinement of constrained Delaunay tetrahedralizations[C]//Proceedings of the 15th International Meshing Roundtable,2006:509-528.

[16] Si H.TETGEN:A 3D Delaunay tetrahedral mesh generator.2003.

[17] 翟朝亮,陈国栋,王娜,等.基于体纹理的肝脏可视化仿真方法研究[J].电视技术,2012,36(17):169-172.

[18] Pietroni N,Otaduy M A,Bickel B,et al.Texturing internal surfaces from a few cross sections[C]//Proceedings of Computer Graphics Forum.[S.l.]:Blackwell Publishing Ltd,2007,26(3):637-644.

猜你喜欢

面片纹理像素
像素前线之“幻影”2000
基于BM3D的复杂纹理区域图像去噪
初次来压期间不同顶板对工作面片帮影响研究
“像素”仙人掌
使用纹理叠加添加艺术画特效
ÉVOLUTIONDIGAE Style de vie tactile
TEXTURE ON TEXTURE质地上的纹理
甜面片里的人生
消除凹凸纹理有妙招!
高像素不是全部