2024年4月22日发(作者:权晏然)
三维显示技术介绍
目前的三维立体显示技术共可以分为分光立体眼镜 (Glasses-based
Stereoscopic)、自动分光立体显示 (Autostereoscopic Displays)、全息术 (Hologram)
和体三维显示 (Volumetric 3-D Display)4大类。
其中的前两类应该都是大家很熟悉的技术了,它们都采用了视差的方式来给
人以3D显示的感觉:分别为左眼和右眼显示稍有差别的图像,从而欺骗大脑,
令观察者产生3D的感觉。由于人为制造视差的方式所构造的3D景象并不自然,
它加重了观察者的脑力负担,因此看久了会令人头痛。而全息术则利用的并不是
数字化的手段,而是光波的干涉和衍射,它一般只能生成静态的三维光学场景,
并且对观察角度还有要求,所以就目前而言,它对于人机交互应用而言还并不适
合。
体三维显示则与前三者不同,它是真正能够实现动态效果的3D技术,它可
以让你看到科幻电影中一般“悬浮”在半空中的三维透视图像。体三维显示技术目
前大体可分为扫描体显示 (Swept-Volume Display)和固态体显示 (Solid-Volume
Display)两种。其中,前者的代表作是Felix3D和Perspecta,而后者的代表作则
名为DepthCube。
Felix3D拥有一个很直观的结构框架,它是一个基于螺旋面的旋转结构,如
下图所示,一个马达带动一个螺旋面高速旋转,然后由R/G/B三束激光会聚成
一束色度光线经过光学定位系统打在螺旋面上,产生一个彩色亮点,当旋转速度
足够快时,螺旋面看上去变得透明了,而这个亮点则仿佛是悬浮在空中一样,成
为了一个体象素(空间象素,Voxel),多个这样的voxel便能构成一个体直线、体
面,直到构成一个3D物体,过程很直观,不是么?
Perspecta可能是扫描体3D显示领域最令人瞩目的成就了,它采用的是一种
柱面轴心旋转外加空间投影的结构,如下图所示,与Felix3D不同,它的旋转结
构更简单,就一个由马达带动的直立投影屏,这个屏的旋转频率可高达730rpm,
它由很薄的半透明塑料做成。当需要显示一个3D物体时,Perspecta将首先通过
软件生成这个物体的198张剖面图(沿Z轴旋转,平均每旋转2°不到截取一张垂
直于X-Y平面的纵向剖面),每张剖面分辨率为798×798象素,投影屏平均每旋
转2°不到,Perspecta便换一张剖面图投影在屏上,当投影屏高速旋转、多个剖
面被轮流高速投影到屏上时,我们便会发现,一个可以全方位观察的自然的3D
物体出现了!
从上面可以看出,Perspecta的投影帧频达到了198×730/60=2409fps,这个速
度足够哄骗我们的眼睛,利用视觉暂留效应生成真实的3D场景;由于其每一帧
需要798×798象素,以24位真彩色计,每秒钟需要的数据量竟高达
(2409×798^2×3)/1024^3=4.286GB!鉴于普通激光器的激发时间受限,Felix3D
是无法提供这么高的带宽和帧频的,Felix中一副3D图像最多只能达到1万体象
素,而Perspecta则能显示将近10亿个体象素。为实现如此高的显示精度,
Perspecta采用了名为空间光处理(Digital Light Processing)的技术,其核心是三块
基于微机电系统(MEMS)的DLP光学芯片,每块芯片上均布设了由百万个以上数
字化微镜像器件(Digital Micro-Mirror)组成的高速发光阵列,这三块DLP芯片分
别负责R/G/B三色图像,并被合成为一副图像,由经底座中的固定光学系统以
及随马达同步旋转的光中继镜片的反射,最终被投影至屏幕上面。值得一提的是,
Perspecta在PC上几乎是即插即用的,它能够与3DS Max、OpenGL很好地兼容。
尽管几近完美的3D显示能力和简单的结构令Perspecta的制造成本大为减
少,成为目前最有可能率先进入电子消费市场的体显示设备,但是,它和其他所
有的扫描体显示技术一样存在着致命的弱点—“亮度”和“旋转”。全向开放外加投
影的显示结构流明值较低,容易受到背景光影响;而高速的旋转则使得Perspecta
对安置平台的平稳程度要求较高,其摆放的桌面不能随意晃动,否则将导致体象
素显示模糊,甚至完全无法成像,因此它不能使用在宇航器、航空器及其航海船
只等场合。为解决这一问题,聪明的人们又提出了固态体显示技术。
早期的固态体显示技术,如solidFELIX,主要采用一整块立方体水晶作为显
示介质,在水晶中掺杂了稀土元素,当两束相干红外线激光在水晶内部的某空间
点处相交时,它们将激发该点发光,目前这套系统仍处于实验室阶段。而
DepthCube系统则代表了目前固态体显示技术的最高成就,它采用了一种很特别
的方式:层叠液晶屏幕方式来实现三维体显示,它的外形就像一台80年代的电
视机一样,其结构如上图所示,DepthCube的显示介质由20个液晶屏层叠而成,
每一个屏的分辨率为1024×748,屏与屏之间间隔约为5mm;这些特制屏体的液
晶象素具有特殊的电控光学属性,当对其加电压时,该象素的液晶体将像百叶窗
的叶面一样变得平行于光束传播方式,从而令照射该点的光束透明地穿过,而当
对其电压为0时,该液晶象素将变成不透明的,从而对照射光束进行漫反射,形
成一个存在于液晶屏层叠体中的voxel。在任一时刻,有19个液晶屏是透明的,
只有1个屏是不透明的,呈白色的漫反射状态;DepthCube将在这20个屏上快
速的切换显示3D物体截面从而产生纵深感,它还采用了一种名为“三维深度反
锯齿”(3D Depth Anti-Aliasing)的显示技术来扩大这20个屏所能表现的纵深感,
令1024×748×20的物理体空间分辨率实现高达1024×748×608的显示分辨率;和
Perspecta一样,DepthCube也采用了DLP成像技术;由于DepthCube的观察角
度比较单一,主要是在显示器的正面,因此并不需要像Perspecta一样高的帧频,
其每秒钟仅需显示1200个截面即可产生足够的体显示效果。
最后要说的是,所有的体显示技术均只能产生半透明的3D透视图,而无法
显示不透明的三维物体,这是因为一束光线并不能遮挡住另一束光线的传播,因
而也就没有必要采用二维3D显示技术中复杂的不可见面消隐机制对3D图形进
行额外的z深度处理。此外,目前在国内,浙大的光学仪器国家重点实验室也正
在积极开展体显示技术的相关研究工作,并已经取得了可喜的进展。
基于立体显示器的立体视觉实现
20世纪60年代Julesz对人的立体视觉的生理机制研究发现,山双目视差
(binocular disparity)产生立体视觉。麻省理工学院的R.Robert把过去的二维
图像分析推广到二维景物分析,完成了三维景物分析研究,这标志着立体视觉技
术的诞生[1]。现在,立体视觉也成为计算机科学的一个重要分支,其在医学领
域的应用也得到极大发展,已经显示出了极大的应用前景[2,3]
1 人眼立体视觉原理与人工立体视觉
由眼的神经机制研究可得出立体视觉的形成过程主要包括两个阶段[4]:第
一阶段是抽取双眼物像中的某种基元,然后进行基元匹配并检测出视差信息;第
二阶段是从获得的视差信息中感知深度信息。被观察的外界目标由于双眼位置差
异双眼视网膜上形成的物像也略有差异,经过立体成像的两阶段山大脑皮层对视
差图像融合产生立体视觉。根据人的立体视觉原理,实现人工立体视觉必须具备
以下3个条件[5]:首先所观察的两幅影像必须有一定的左右视差;其次左右两
眼必须分别观察左右各一幅图像,即实现左右分像;最后是两幅影像所放置的位
置必须使响应视线成对相交。根据投影面、人眼以及观察对象之间的相对位置,
可有零视差、负视差、正视差和发散视差之分[6,7]。
2 立休视觉的传统实现方法
总体来讲,立体成像的方法有两类,一是激光全息照相,二是根据双目视差
立体视觉原理实现立体成像。前者利用激光相干特性原理,经过适当处理得到的
全息图不同于传统二维图像,而是原物体准确的再现[8]。运用该技术必须借助
激光装置上才能再现原物体的影像,目前还不便于推广普及。目前应用较广的立
体成像,本质上就是把具有一定视差的两幅图像分别投影到双眼视网膜,最后根
据双目立体视差实现立体视觉,这就是根据双目视差的立体视觉原理实现立体成
像[5,6,9]。分光法、补色法和场分割法是目前常用的立体成像技术。
2.1 分光法
即把视差两幅图像显示在计算机屏幕上的不同位置或两个屏幕上,借助光学
设备使左右眼分别只看到对应的图像,实现立体视觉成像,典型的应用是棱镜分
光和立体头盔式显示器(HMD)。棱镜由于其采用光学分光而不便于控制立体视
差范围;立体头盔式显示器由计算机输出的两幅视差图像分别显示在两块独立的
液晶显示屏上,实现立体视觉,其优点是能方便控制视差图像、便携和便宜等优
点,但由于与眼睛距离太近且容易沾上水蒸气而影响观察,且目前其的分辨率很
低。
2.2 补色法
所谓补色法,就是将视差图像用红绿等两种补色同时显示出来并用相应的补
色观察,其原理与多倍仪立体观察一样。该方法简便易行,除补色眼镜外无须其
他硬件设备,但它影响彩色图像的立体观察。
2.3 场分割法
场(幅)分隔法,也称时分制法。该方法是指将视差图像按场(幅)序交替
显小,用场同步信号分别把视差图像投影到双眼视网膜。根据其显示模式可以分
为交错显小(Interlacing)、画面交换(Page一Flipping)、线遮蔽(Line -Blanking),
画面同步倍频(Sync一Doubling)。目前由于传输带宽与分辨率之间的矛盾,该
方法在改善画质和消除闪烁等方面也还有待改进的地方。当前常用的3D立体眼
镜正是基于这一技术。
3 基于立体显示器的立体视觉实现
基于场分割法的立体成像技术到目前为止是一种技术原理上最成熟、应用也
最广泛的立体成像方法。已有采用这一技术研制的立体显示器,用户只需利用微
软公司软件DX接口编程实现将已有的三维模型转换成后缀名为.x文件实现立
体视觉显示[10]。本研究要实现的是在基于SHARP公司的立体显示器程序实现
三维模型的显示。
3.1 基于立体显示器的立体视觉硬件实现技术
立体显示器由液晶显示层(liquid crystal display)和位于其后的照明板
(illumination plate)两层构成,照明板上的双凸镜能形成均匀、明亮的垂直细条
纹(light lines),液晶显示层上像素(pixs)实现分光(见图1)。液晶显示器以
每秒60帧的频率分别在奇、偶列像素上交替显示左、右眼图像,由于采用了精
确的分光措施,左/右眼只能分别看到奇/偶数列像素上的图像。根据使用者的个
体差异,调整照明层与显示层的距离α,即可实现最佳的立体视觉。由上图不难
看出,该显示器还可供多人同时观察(如图2)。严格意义上讲,该显示器结合
了分光法和场分割法的研究特点,继承了其优点。
3.2 基于立体显示器的立体视觉编程
由于临床和科研需要将二维图像或计算机绘制的二维模型实现其立体显示,
但以往也仅是将采用各种重建的三维图像投影到2维平面上显示,并不能真正实
现三维立体显示。而该类显示器采用通用行业标准,它们能在Windows 95/
98/Me1NT/2k/XP等操作系统下运行,除能将单幅图片构造出双目视差的立体图
像外,还能将运用其它三维软件制作的三维图像转换成扩展名为.x的三维图像
格式文件直接显示,因此我们需要做的仅仅是将各种三维图像数据转换为扩展名
为.x文件,并在该立体显示器上显示该三维图像(见图3)。
3.2.1 模型转换 目前器官二维模型制作的常用表面绘制法[12-14],首
先是用CT扫描器官获取其轮廓,也常见采用X光片提取器官轮廓,然后用专用
的三维软件根据其轮廓制作三维器官模型.正是由于三维软件的多样性造成三维
模型的数据格式多样性,在本显示器实现立体显示以前,必须将各种数据格式转
化为X文件所默认的数据格式。X文件是Direct3D默认的模型和动画数据的存
储格式[15],同各种二维建模软件的数据文件存储了二维模型的顶点坐标、颜色、
法线向量和纹理坐标等信息一样,有相似的数据结构(如图4)。
三维模型转换为.x格式数据文件是实现采用立体显示器实现立体显示的关
键步骤。本研究拟采用第三方软件conv3d,通过以下命令
conv3ds file.3ds
将3DSMAX软件采用的表面绘制法制作的舰关节三维模型转换为X格式文
件;当然也可以编译DX9.0的软件开发包中提供的3DSMAX的模型输出外挂
程序XskinExp.dle的项目文件Xskinexp.dsw生成外挂程序而直接在三维造型
软件中将三维模型转换为X格式数据文件。
3.2.2 读三维数据 由于VC6.0中集成了文件读写功能[11],在程序中设置
数据缓冲区,打开文件,读取X格式数据文件中的数据,并存入预先设置的数
据缓冲区。用以下编程语言实现:
……
//设置数据缓冲区
LPD3DXBUFFER pD3DXMtrlBuffer;
//载入X格式数据文件file.x
D3DXLoadMeshFromX("file.x",
D3DXMESH_SYSTEMMEM,
g_pd3dDevice,NULL,
&pD3DXMtrlBuffer,NULL,
&g_dwNumMaterials,
&g _pMesh);
// pD3DXMtrlBuffer指向三维模型数据
D3DXMATERIAL* d3dxMaterials=
(D3DXMATERIAL*)pD3DXMtrlBuffer一>
GetBufferPointe();
g_pMeshMaterials=
new D3DMATERIAL9[]dwNumMaterials];
for (DWORD i =O;i (MeshMaterials[i]=d3dxMaterials[i].MatD3D;//材质赋值 ……//贴图和环境光赋值 } …… 3.2.3 模型的立体显示 通过DX9.0中封装的函数可以对以上几步所得到的 三维数据绘制在立体显示器上。 …… //I清除显存中的数据 g _pd3dDevice->Clear(0,NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,255),1.of,0); //开始绘制图像 g _pd3dDevice->BeginScene() ; //设置世界、视图和投影矩阵 SetupMatrices(); //将三维网格数据写入显存设备 for(DWORD i=0;i< g _dwNumMaterials; i++) {//为每个网格分别设置材质和贴图 g _pd3dDevice一>SetMaterial(& g _pMeshMaterials [i]); g _pd3dDevice->SetTexture(0,g _pMeshTextures[i]); //绘制网格单元 g _pMesh->DrawSubset( i);} //结束显存设备写入 g _pd3dDevice->EndScene(); //在立体显示器上实现立体显示 g _pd3dDevice->Present( NULL,NULL,NULL,NULL); 4 结果与讨论 采用以上研究步骤将髓关节的三维模型显示在该立体显示器上(见图5), 并且不同位置看可观察到立体效果。 该显示器与以上几种技术方法相比具有以下优点:不依赖任何外部设备, 且成像质量高、观察范围广且允许多人同时使用;只要有足够的照片,它还能形 成360 0 全景图;由于采用微软公司的接口技术,为其推广奠定了坚实的基础。 然而,由于其目前技术工艺限制,该显示器的成本较高,离市场要求还有一定差 距。 计算机立体视觉是一门新兴、有着广阔应用前景的学科,随着计算机技术和 光电子技术的发展,该立体技术将不断发展,并逐步实用化,相信在不久的将来, 其在医学、教育和制造业等方面将起重要作用。
2024年4月22日发(作者:权晏然)
三维显示技术介绍
目前的三维立体显示技术共可以分为分光立体眼镜 (Glasses-based
Stereoscopic)、自动分光立体显示 (Autostereoscopic Displays)、全息术 (Hologram)
和体三维显示 (Volumetric 3-D Display)4大类。
其中的前两类应该都是大家很熟悉的技术了,它们都采用了视差的方式来给
人以3D显示的感觉:分别为左眼和右眼显示稍有差别的图像,从而欺骗大脑,
令观察者产生3D的感觉。由于人为制造视差的方式所构造的3D景象并不自然,
它加重了观察者的脑力负担,因此看久了会令人头痛。而全息术则利用的并不是
数字化的手段,而是光波的干涉和衍射,它一般只能生成静态的三维光学场景,
并且对观察角度还有要求,所以就目前而言,它对于人机交互应用而言还并不适
合。
体三维显示则与前三者不同,它是真正能够实现动态效果的3D技术,它可
以让你看到科幻电影中一般“悬浮”在半空中的三维透视图像。体三维显示技术目
前大体可分为扫描体显示 (Swept-Volume Display)和固态体显示 (Solid-Volume
Display)两种。其中,前者的代表作是Felix3D和Perspecta,而后者的代表作则
名为DepthCube。
Felix3D拥有一个很直观的结构框架,它是一个基于螺旋面的旋转结构,如
下图所示,一个马达带动一个螺旋面高速旋转,然后由R/G/B三束激光会聚成
一束色度光线经过光学定位系统打在螺旋面上,产生一个彩色亮点,当旋转速度
足够快时,螺旋面看上去变得透明了,而这个亮点则仿佛是悬浮在空中一样,成
为了一个体象素(空间象素,Voxel),多个这样的voxel便能构成一个体直线、体
面,直到构成一个3D物体,过程很直观,不是么?
Perspecta可能是扫描体3D显示领域最令人瞩目的成就了,它采用的是一种
柱面轴心旋转外加空间投影的结构,如下图所示,与Felix3D不同,它的旋转结
构更简单,就一个由马达带动的直立投影屏,这个屏的旋转频率可高达730rpm,
它由很薄的半透明塑料做成。当需要显示一个3D物体时,Perspecta将首先通过
软件生成这个物体的198张剖面图(沿Z轴旋转,平均每旋转2°不到截取一张垂
直于X-Y平面的纵向剖面),每张剖面分辨率为798×798象素,投影屏平均每旋
转2°不到,Perspecta便换一张剖面图投影在屏上,当投影屏高速旋转、多个剖
面被轮流高速投影到屏上时,我们便会发现,一个可以全方位观察的自然的3D
物体出现了!
从上面可以看出,Perspecta的投影帧频达到了198×730/60=2409fps,这个速
度足够哄骗我们的眼睛,利用视觉暂留效应生成真实的3D场景;由于其每一帧
需要798×798象素,以24位真彩色计,每秒钟需要的数据量竟高达
(2409×798^2×3)/1024^3=4.286GB!鉴于普通激光器的激发时间受限,Felix3D
是无法提供这么高的带宽和帧频的,Felix中一副3D图像最多只能达到1万体象
素,而Perspecta则能显示将近10亿个体象素。为实现如此高的显示精度,
Perspecta采用了名为空间光处理(Digital Light Processing)的技术,其核心是三块
基于微机电系统(MEMS)的DLP光学芯片,每块芯片上均布设了由百万个以上数
字化微镜像器件(Digital Micro-Mirror)组成的高速发光阵列,这三块DLP芯片分
别负责R/G/B三色图像,并被合成为一副图像,由经底座中的固定光学系统以
及随马达同步旋转的光中继镜片的反射,最终被投影至屏幕上面。值得一提的是,
Perspecta在PC上几乎是即插即用的,它能够与3DS Max、OpenGL很好地兼容。
尽管几近完美的3D显示能力和简单的结构令Perspecta的制造成本大为减
少,成为目前最有可能率先进入电子消费市场的体显示设备,但是,它和其他所
有的扫描体显示技术一样存在着致命的弱点—“亮度”和“旋转”。全向开放外加投
影的显示结构流明值较低,容易受到背景光影响;而高速的旋转则使得Perspecta
对安置平台的平稳程度要求较高,其摆放的桌面不能随意晃动,否则将导致体象
素显示模糊,甚至完全无法成像,因此它不能使用在宇航器、航空器及其航海船
只等场合。为解决这一问题,聪明的人们又提出了固态体显示技术。
早期的固态体显示技术,如solidFELIX,主要采用一整块立方体水晶作为显
示介质,在水晶中掺杂了稀土元素,当两束相干红外线激光在水晶内部的某空间
点处相交时,它们将激发该点发光,目前这套系统仍处于实验室阶段。而
DepthCube系统则代表了目前固态体显示技术的最高成就,它采用了一种很特别
的方式:层叠液晶屏幕方式来实现三维体显示,它的外形就像一台80年代的电
视机一样,其结构如上图所示,DepthCube的显示介质由20个液晶屏层叠而成,
每一个屏的分辨率为1024×748,屏与屏之间间隔约为5mm;这些特制屏体的液
晶象素具有特殊的电控光学属性,当对其加电压时,该象素的液晶体将像百叶窗
的叶面一样变得平行于光束传播方式,从而令照射该点的光束透明地穿过,而当
对其电压为0时,该液晶象素将变成不透明的,从而对照射光束进行漫反射,形
成一个存在于液晶屏层叠体中的voxel。在任一时刻,有19个液晶屏是透明的,
只有1个屏是不透明的,呈白色的漫反射状态;DepthCube将在这20个屏上快
速的切换显示3D物体截面从而产生纵深感,它还采用了一种名为“三维深度反
锯齿”(3D Depth Anti-Aliasing)的显示技术来扩大这20个屏所能表现的纵深感,
令1024×748×20的物理体空间分辨率实现高达1024×748×608的显示分辨率;和
Perspecta一样,DepthCube也采用了DLP成像技术;由于DepthCube的观察角
度比较单一,主要是在显示器的正面,因此并不需要像Perspecta一样高的帧频,
其每秒钟仅需显示1200个截面即可产生足够的体显示效果。
最后要说的是,所有的体显示技术均只能产生半透明的3D透视图,而无法
显示不透明的三维物体,这是因为一束光线并不能遮挡住另一束光线的传播,因
而也就没有必要采用二维3D显示技术中复杂的不可见面消隐机制对3D图形进
行额外的z深度处理。此外,目前在国内,浙大的光学仪器国家重点实验室也正
在积极开展体显示技术的相关研究工作,并已经取得了可喜的进展。
基于立体显示器的立体视觉实现
20世纪60年代Julesz对人的立体视觉的生理机制研究发现,山双目视差
(binocular disparity)产生立体视觉。麻省理工学院的R.Robert把过去的二维
图像分析推广到二维景物分析,完成了三维景物分析研究,这标志着立体视觉技
术的诞生[1]。现在,立体视觉也成为计算机科学的一个重要分支,其在医学领
域的应用也得到极大发展,已经显示出了极大的应用前景[2,3]
1 人眼立体视觉原理与人工立体视觉
由眼的神经机制研究可得出立体视觉的形成过程主要包括两个阶段[4]:第
一阶段是抽取双眼物像中的某种基元,然后进行基元匹配并检测出视差信息;第
二阶段是从获得的视差信息中感知深度信息。被观察的外界目标由于双眼位置差
异双眼视网膜上形成的物像也略有差异,经过立体成像的两阶段山大脑皮层对视
差图像融合产生立体视觉。根据人的立体视觉原理,实现人工立体视觉必须具备
以下3个条件[5]:首先所观察的两幅影像必须有一定的左右视差;其次左右两
眼必须分别观察左右各一幅图像,即实现左右分像;最后是两幅影像所放置的位
置必须使响应视线成对相交。根据投影面、人眼以及观察对象之间的相对位置,
可有零视差、负视差、正视差和发散视差之分[6,7]。
2 立休视觉的传统实现方法
总体来讲,立体成像的方法有两类,一是激光全息照相,二是根据双目视差
立体视觉原理实现立体成像。前者利用激光相干特性原理,经过适当处理得到的
全息图不同于传统二维图像,而是原物体准确的再现[8]。运用该技术必须借助
激光装置上才能再现原物体的影像,目前还不便于推广普及。目前应用较广的立
体成像,本质上就是把具有一定视差的两幅图像分别投影到双眼视网膜,最后根
据双目立体视差实现立体视觉,这就是根据双目视差的立体视觉原理实现立体成
像[5,6,9]。分光法、补色法和场分割法是目前常用的立体成像技术。
2.1 分光法
即把视差两幅图像显示在计算机屏幕上的不同位置或两个屏幕上,借助光学
设备使左右眼分别只看到对应的图像,实现立体视觉成像,典型的应用是棱镜分
光和立体头盔式显示器(HMD)。棱镜由于其采用光学分光而不便于控制立体视
差范围;立体头盔式显示器由计算机输出的两幅视差图像分别显示在两块独立的
液晶显示屏上,实现立体视觉,其优点是能方便控制视差图像、便携和便宜等优
点,但由于与眼睛距离太近且容易沾上水蒸气而影响观察,且目前其的分辨率很
低。
2.2 补色法
所谓补色法,就是将视差图像用红绿等两种补色同时显示出来并用相应的补
色观察,其原理与多倍仪立体观察一样。该方法简便易行,除补色眼镜外无须其
他硬件设备,但它影响彩色图像的立体观察。
2.3 场分割法
场(幅)分隔法,也称时分制法。该方法是指将视差图像按场(幅)序交替
显小,用场同步信号分别把视差图像投影到双眼视网膜。根据其显示模式可以分
为交错显小(Interlacing)、画面交换(Page一Flipping)、线遮蔽(Line -Blanking),
画面同步倍频(Sync一Doubling)。目前由于传输带宽与分辨率之间的矛盾,该
方法在改善画质和消除闪烁等方面也还有待改进的地方。当前常用的3D立体眼
镜正是基于这一技术。
3 基于立体显示器的立体视觉实现
基于场分割法的立体成像技术到目前为止是一种技术原理上最成熟、应用也
最广泛的立体成像方法。已有采用这一技术研制的立体显示器,用户只需利用微
软公司软件DX接口编程实现将已有的三维模型转换成后缀名为.x文件实现立
体视觉显示[10]。本研究要实现的是在基于SHARP公司的立体显示器程序实现
三维模型的显示。
3.1 基于立体显示器的立体视觉硬件实现技术
立体显示器由液晶显示层(liquid crystal display)和位于其后的照明板
(illumination plate)两层构成,照明板上的双凸镜能形成均匀、明亮的垂直细条
纹(light lines),液晶显示层上像素(pixs)实现分光(见图1)。液晶显示器以
每秒60帧的频率分别在奇、偶列像素上交替显示左、右眼图像,由于采用了精
确的分光措施,左/右眼只能分别看到奇/偶数列像素上的图像。根据使用者的个
体差异,调整照明层与显示层的距离α,即可实现最佳的立体视觉。由上图不难
看出,该显示器还可供多人同时观察(如图2)。严格意义上讲,该显示器结合
了分光法和场分割法的研究特点,继承了其优点。
3.2 基于立体显示器的立体视觉编程
由于临床和科研需要将二维图像或计算机绘制的二维模型实现其立体显示,
但以往也仅是将采用各种重建的三维图像投影到2维平面上显示,并不能真正实
现三维立体显示。而该类显示器采用通用行业标准,它们能在Windows 95/
98/Me1NT/2k/XP等操作系统下运行,除能将单幅图片构造出双目视差的立体图
像外,还能将运用其它三维软件制作的三维图像转换成扩展名为.x的三维图像
格式文件直接显示,因此我们需要做的仅仅是将各种三维图像数据转换为扩展名
为.x文件,并在该立体显示器上显示该三维图像(见图3)。
3.2.1 模型转换 目前器官二维模型制作的常用表面绘制法[12-14],首
先是用CT扫描器官获取其轮廓,也常见采用X光片提取器官轮廓,然后用专用
的三维软件根据其轮廓制作三维器官模型.正是由于三维软件的多样性造成三维
模型的数据格式多样性,在本显示器实现立体显示以前,必须将各种数据格式转
化为X文件所默认的数据格式。X文件是Direct3D默认的模型和动画数据的存
储格式[15],同各种二维建模软件的数据文件存储了二维模型的顶点坐标、颜色、
法线向量和纹理坐标等信息一样,有相似的数据结构(如图4)。
三维模型转换为.x格式数据文件是实现采用立体显示器实现立体显示的关
键步骤。本研究拟采用第三方软件conv3d,通过以下命令
conv3ds file.3ds
将3DSMAX软件采用的表面绘制法制作的舰关节三维模型转换为X格式文
件;当然也可以编译DX9.0的软件开发包中提供的3DSMAX的模型输出外挂
程序XskinExp.dle的项目文件Xskinexp.dsw生成外挂程序而直接在三维造型
软件中将三维模型转换为X格式数据文件。
3.2.2 读三维数据 由于VC6.0中集成了文件读写功能[11],在程序中设置
数据缓冲区,打开文件,读取X格式数据文件中的数据,并存入预先设置的数
据缓冲区。用以下编程语言实现:
……
//设置数据缓冲区
LPD3DXBUFFER pD3DXMtrlBuffer;
//载入X格式数据文件file.x
D3DXLoadMeshFromX("file.x",
D3DXMESH_SYSTEMMEM,
g_pd3dDevice,NULL,
&pD3DXMtrlBuffer,NULL,
&g_dwNumMaterials,
&g _pMesh);
// pD3DXMtrlBuffer指向三维模型数据
D3DXMATERIAL* d3dxMaterials=
(D3DXMATERIAL*)pD3DXMtrlBuffer一>
GetBufferPointe();
g_pMeshMaterials=
new D3DMATERIAL9[]dwNumMaterials];
for (DWORD i =O;i (MeshMaterials[i]=d3dxMaterials[i].MatD3D;//材质赋值 ……//贴图和环境光赋值 } …… 3.2.3 模型的立体显示 通过DX9.0中封装的函数可以对以上几步所得到的 三维数据绘制在立体显示器上。 …… //I清除显存中的数据 g _pd3dDevice->Clear(0,NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,255),1.of,0); //开始绘制图像 g _pd3dDevice->BeginScene() ; //设置世界、视图和投影矩阵 SetupMatrices(); //将三维网格数据写入显存设备 for(DWORD i=0;i< g _dwNumMaterials; i++) {//为每个网格分别设置材质和贴图 g _pd3dDevice一>SetMaterial(& g _pMeshMaterials [i]); g _pd3dDevice->SetTexture(0,g _pMeshTextures[i]); //绘制网格单元 g _pMesh->DrawSubset( i);} //结束显存设备写入 g _pd3dDevice->EndScene(); //在立体显示器上实现立体显示 g _pd3dDevice->Present( NULL,NULL,NULL,NULL); 4 结果与讨论 采用以上研究步骤将髓关节的三维模型显示在该立体显示器上(见图5), 并且不同位置看可观察到立体效果。 该显示器与以上几种技术方法相比具有以下优点:不依赖任何外部设备, 且成像质量高、观察范围广且允许多人同时使用;只要有足够的照片,它还能形 成360 0 全景图;由于采用微软公司的接口技术,为其推广奠定了坚实的基础。 然而,由于其目前技术工艺限制,该显示器的成本较高,离市场要求还有一定差 距。 计算机立体视觉是一门新兴、有着广阔应用前景的学科,随着计算机技术和 光电子技术的发展,该立体技术将不断发展,并逐步实用化,相信在不久的将来, 其在医学、教育和制造业等方面将起重要作用。