生成立体图像的方法和装置的制作方法

文档序号:6414817阅读:167来源:国知局
专利名称:生成立体图像的方法和装置的制作方法
技术领域
本发明涉及一种通过二维图像数据生成三维图像数据的方法和装置。
背景技术
人类能够从视觉上感知三维空间中的三维对象。这种能力被称为立体视觉。立体视觉发生在人脑根据分别由右眼和左眼接收到的两幅图像识别出一个三维对象时。换句话说,要发生立体视觉,右眼和左眼都必须各自接收一幅图像。
已经开发出一种称为立体视图的技术,在这种技术中图像处理在一幅二维图像上进行,以便观察者能够把处理后的二维平面图像当作一幅三维图像来感知。立体视图涉及一种图像处理技术,该技术修改一幅二维平面图像的图像数据以便为右眼和左眼各自生成图像数据。具体地,通过计算关于一幅图像中所描绘的一个对象(主题)的一个双眼视差,并且根据视差分别移动右眼和左眼方向中的图像的象素(点)的位置,来生成右眼和左眼各自的图像数据。
例如,视差是通过表示一个对象的远(或近)度的一个值(以下称为一个Z-值)来确定的,而这个值是根据对象的饱和度、亮度和色调中的至少一项来计算的。例如,日本专利JP2002-123842A公布了一种根据原始2D图像的饱和度和亮度来确定一个Z-值的方法。具体地,该方法包括(a)根据图像数据的饱和度确定每个象素的Z-值的步骤;(b)确定图像中包含的一个或多个对象的一条或多条等高线的步骤;(c)计算对象内的所有象素的Z-值的一个均值的步骤,以及(d)确定该均值是对象的一个Z-值的步骤。关于对象的一个视差是根据该对象的Z-值来确定的。
此外,为了改进对生成的3D图像的感知,更改了接近对象的象素的饱和度以便“模糊”对象的一个边缘。要注意这种模糊过程取决于一个经验规则,即一个对象在一幅图像中的位置越遥远,其图像越模糊(即其饱和度越低),而对象的位置越近,其图像越锐利(即其饱和度越高)。这是因为空气中的灰尘等模糊对象,使得遥远的对象的边缘往往较纤细。邻近的对象的数目和饱和度增加,并且对象的边缘更粗,从而看起来更锐利。
但是,存在不符合上述规则的图像,例如远处描绘了一片明亮的天空而近处描绘了一片深色的森林的一幅图像。在这种情况下,根据其计算Z-值的规则不表示对象的真实深度。因此不可能用生成的立体图像再现正确的视差,从而给了观察者一个不自然的印象。
此外,在一片阴影或强光笼罩着一个对象的某个特定部分的情况下,换句话说即在对象内的饱和度变化相当大的情况下,不可能计算对象的真实的Z-值。因此生成的立体图像给观察者的印象是只有笼罩的部分被局部地凸出(或凹进)。在这种情况下,由于不能精确地确定对象的边缘,因此模糊过程不能为改进3D图像的可塑性做出贡献。
另外,在对象中的一个Z-值变得较大的强光部分中,该部分的视差也相应地被估计得过高。因此,相会出现这样一种现象当生成一幅立体图像时,原始2D图像中的邻近的象素在相反的水平方向上移位了。此现象被称为象素交叉,它会在生成的立体图像中生成一个失真的部分。因此生成的立体图像的质量降低到无法被观察者欣赏的地步。在多个对象重叠的位置上这种现象发生得尤其严重。在这种位置上很容易发生图像失真;从而观察者相当难以实现对立体图像的自然感知。
如上所述,由于在现有技术中不可能根据原始图像数据计算一个正确的Z-值以生成一幅立体图像,因此难以生成一幅逼真的立体图像。

发明内容
在考虑到上述背景技术的情况下产生了本发明,以提供一种给予观察者自然可塑性印象的生成立体图像数据的方法,以及一种适应于该方法的生成立体图像数据的装置。本发明是申请人对给予人类强烈的可塑性印象的条件进行持续研究的结果。
根据本发明的一种生成一幅立体图像的方法的特征在于包括一个计算步骤,该步骤根据象素的图像数据计算象素的Z-值,象素形成一幅图像,每个Z-值被分配给一个象素,并且每个Z-值表示对应于所述象素的一个对象的深度;一个调整步骤,该步骤用不同于一个目标象素的另一个象素的Z-值调整计算步骤中获得的目标象素的Z-值;以及一个生成步骤,该步骤根据一个目标象素的调整后的Z-值确定目标象素的一个位移量,并且水平移动目标象素所述确定的位移量,以便生成右眼和左眼的图像。通过调整Z-值生成了一幅向观察者提供自然可塑性的立体图像。
在一个首选实施例中,在计算步骤中分别根据对R、G和B敏感的锥形细胞的比率来确定权重,其中锥细胞位于人眼的视网膜中。
在调整步骤中有可能调整象素的Z-值使得对应于在一幅原始图像中位置靠后的一个对象的一个象素的Z-值可以取的一个单个步长表示的深度深于对应于在原始图像中位置靠前的一个对象的一个象素的Z-值可以取的一个单个步长。
在调整步骤中有可能获得包含一个目标象素的一个区域内的象素的Z-值的均值,并且用获得的均值替换目标象素的Z-值。
此外,在调整步骤中有可能获得图像中的所有象素的Z-值的分布以及图像中所有象素的均值,并且用获得的均值校正分布的偏差。
此外,在调整步骤中有可能参考计算步骤中计算出的象素的Z-值以识别出由图像数据表示的图像中的至少一个对象,并且根据位于对应于识别出的对象的一个区域内的一个象素的Z-值来调整目标象素的Z-值。
此外,在调整步骤中有可能根据由用户指定的一个参数值来确定Z-值量化的步长、计算出的Z-值的上限和下限中的任何一项。
此外,在所述调整步骤中有可能通过比较一个区域内的一个象素的Z-值与另一个区域内的一个象素的Z-值来分析图像中的象素的Z-值的趋势。并且当分析的结果与一个预定的条件相符合时,在生成步骤中颠倒目标象素的位移量和目标象素的Z-值之间的一个数量关系。
在一个首选实施例中,立体图像生成装置可能进一步包括一个获得由多幅图像组成的移动图像的步骤,并且其中根据每幅图像生成一幅立体图像以便实时地生成对应于移动图像的立体图像。
根据本发明的一种生成一幅立体图像的立体图像生成装置的特征在于包括一个计算装置,用于根据多个象素的图像数据计算多个象素的Z-值,所述多个象素形成一幅图像,每个Z-值被分配给一个象素,并且每个Z-值表示对应于所述一个象素的一个对象的深度;一个调整装置,用于用不同于一个目标象素的另一个象素的Z-值调整计算步骤中获得的目标象素的Z-值;以及一个生成装置,用于根据一个目标象素的调整后的Z-值确定目标象素的一个位移量,并且水平移动目标象素所述确定出的位移量,以便生成右眼和左眼的图像。该装置可能进一步包括一个获得装置,用于从一个用户获得所述调整装置中所使用的一个参数。
本发明还提供一个计算程序,用于使一台计算机行使立体图像生成装置的功能。该程序可能储存在多种类型的储存介质中,并且通过一个网络下载,以便安装在计算中。


图1是描绘根据本发明的第一实施例的一个3D图像生成装置的框图。
图2是描绘由一个3D图像绘制应用程序所显示的一个屏幕的一个例子的示意图。
图3是描绘一个设置对话面板的一个配置的一个例子的示意图。
图4是描绘根据本发明的第一实施例显示一幅3D图像的一个机制的示意图。
图5也是描绘根据本发明的第一实施例显示一幅3D图像的一个机制的示意图。
图6描绘了立体眼镜。
图7是显示当选中一个3D模式时执行的图像处理的流程图。
图8是描绘一幅图像的数据格式的示意图。
图9是显示一个灰度值调整的流程图。
图10是显示灰度值调整(继续)的流程图。
图11是显示灰度值调整(继续)的流程图。
图12是描绘一个颠倒确定中所使用的采样区域和相应的加权系数的图。
图13是显示颠倒确定的流程图。
图14是显示颠倒确定(继续)的流程图。
图15是描绘平滑中所使用的矩阵区域MM的图。
图16是显示平滑的流程图。
图17是描绘一个分布调整的概念图。
图18是显示分布调整的流程图。
图19也是显示分布调整(继续)的流程图。
图20描绘了关于适合一个局部调整的一个对象的Z-值的一个分布。
图21是显示局部调整的流程图。
图22是显示局部调整中包含的一个等高线确定的流程图。
图23是显示等高线确定(继续)的流程图。
图24是显示等高线确定(继续)的流程图。
图25是显示局部调整中包含的一个对象中心确定的流程图。
图26是显示对象中心确定(继续)的流程图。
图27是显示对象中心确定(继续)的流程图。
图28是显示局部调整中包含的一个交点确定的流程图。
图29是显示局部调整中包含的一个平面内Z-值计算的流程图。
图30是显示一个平面内Z-值校正的流程图。
图31是显示一个Z-值调整的流程图。
图32是显示一个象素移位的流程图。
图33是显示象素移位(继续)的流程图。
图34是显示象素移位(继续)的流程图。
图35描绘了根据本发明的一个修改后的实施例的一个增进。
图36是显示根据修改后实施例的图像处理的一个概览的流程图。
图37是显示根据修改后的实施例的一个增进的流程图。
图38是描绘根据修改后的实施例显示一幅立体图像的一个方案的概念图。
图39也是描绘根据修改后的实施例显示一幅立体图像的一个方案的概念图。
图40也是描绘根据修改后的实施例显示一幅立体图像的一个方案的概念图。
图41也是描绘根据修改后的实施例显示一幅立体图像的一个方案的概念图。
图42是显示根据修改后的实施例进行的一个象素移位的流程图。
图43是描绘本发明的第二实施例的一个移动终端1A的一个功能配置的框图。
图44是移动终端1A的外部视图。
图45是描绘一个显示器21b的一个配置的示意图。
图45描绘了当一幅图像被肉眼观察到时激发立体视觉一个原理。
图47是显示由移动终端1A执行的显示一幅静态图像的一个过程的流程图。
图48是显示由移动终端1A执行的显示移动图像的一个过程的流程图。
图49是描绘根据本发明的第三实施例的一个3D图像生成装置1B的一个功能配置的一个例子的框图。
图50是显示3D图像生成装置1B执行的显示移动图像的一个过程的流程图。
图51是描绘根据本发明的一个应用的一个序列模拟器40的一个功能配置的框图。
具体实施例方式
现在将参照附图详细说明本发明的首选实施例。
<第一实施例>
<A.装置配置>
图1显示了本发明的第一实施例的一个3D图像生成装置1。在图1中,一个CPU(中央处理单元)11控制3D图像生成装置1的所有单元,以执行包括生成立体图像数据在内的处理。一个ROM(只读储存器)12被用于储存程序,其中一个程序在装置打开时被执行,并且储存相关数据。一个RAM(随机访问储存器)13被用作CPU 11的一个工作区域。
一个字符生成器14生成要显示在一个显示器上的字体数据。一个时间电路15输出一个当前时间。一个接口16将3D图像生成装置1连接到互联网(未显示)。一个传输控制单元17向/从连接到互联网的终端发送/接收数据。
一个磁盘驱动器18储存用于执行由3D图像生成装置1执行的图像处理的程序,包括一个OS程序和图像处理步骤中生成的数据。一个CD-ROM驱动器19被用于读出储存在一个CD-ROM 20中的图像数据。一个显示器21包括一个CRT、LCD或类似的设备,它在一个显示控制单元22的控制下显示一幅图像。
一个键盘23是标准的正常尺寸键盘,它使得用户能够输入指令。一个指针设备24是一个输入设备,例如一块供用户输入指令的触摸板。一个输入控制单元25通过键盘23和指针设备24获得要输出给CPU 11的指令输入。
CPU 11、ROM 12、RAM 13、字符生成器14、时间电路15、传输控制单元17、磁盘驱动器18、CD-ROM驱动器19、显示控制单元22以及输入控制单元25连接到一个内部总线26。从而数据通过内部总线26在这些单元之间传输。
在生成3D图像数据时,CPU 11执行一个显示一幅3D图像的应用程序,该应用程序被储存在ROM 12中。图2描绘了应用程序运行时显示在显示器21中的屏幕的一个例子。
如图2所示,应用程序运行时显示的屏幕是由一个主屏幕MD和一个菜单条MB构成的,其中菜单条MB包含菜单项。用户所选择的移动图像被显示在主屏幕MD中。
项目MI1至MI10被显示在菜单条MB中。选中项目MI1以便标识用户希望在其上执行图像处理的一幅图像。选中项目MI2以便设置一幅立体图像的显示选项。选中项目MI3以便储存一幅立体图像的数据。选中项目MI4以便终止应用程序。选中项目MI5以便在主屏幕MD上显示移动图像。选中项目MI6以便终止在主屏幕MD上显示移动图像。选中项目MI7以便暂停在主屏幕MD中显示移动图像。
项目MI8显示了一种模式(主屏幕MD上显示的移动图像的正常(2D)模式或立体图(3D)模式),选中该项目以便在这些模式之间切换。具体地,当用户作出选择时,MI8在正常(2D)和立体图(3D)模式之间变化。图2的上半图和下半图分别表示了2D模式和3D模式起作用时的一个屏幕。
选中项目MI9以便指定实现一个合并方案的一个模式(奇/偶模式或立体模式)。假定在此实施例中只有这两种方案可用。但是有可能添加对应于其他实现立体视觉的合并方案的其他模式。具体地,当合并多个图像以获得一幅立体图像时,有可能采用一种合并方案,其中使用了对应于四个观察点的四幅图像。此外,有可能采用一种立体视觉方案,其中使用了分别对应于由用户选择的八或九个观察点的八或九幅图像。
项目MI10表示实现一个凸出方向的一个模式,并且用于在这些模式之间切换,其中一种是F1模式,它给予立体图像的观察者一幅三维图像相对于屏幕表面后凹的视觉印象,另一种是F2模式,它给予立体图像的观察者一幅三维图像相对于表面前凸的视觉印象。在图2所描绘的两幅图像中均选中了F1模式;从而观察者将感知到一幅相对于表面后凹的三维图像。
图3显示了当用户点击项目MI2时显示器21中显示的一个对话面板的一个例子。如图3所示,一个标题栏BR位于屏幕的上方,用于引起此对话面板关闭的一个关闭框BC就位于此处。
滑动条IS1和IS2,输入框IB1、IB2、IB3和IB4、选中框IB5和IB6以及按钮BM2和BM3被安排在设置对话面板中。用户可操作滑动条IB1以指定一个接口深度值。用户所指定的“接口深度”值被显示在输入框IB1中。用户可以直接在输入框IB1中输入一个数字。
注意接口深度表示感知到的一幅图像相对于屏幕表面后凹(或前凸)的程度。从而接口深度越大,感知到的三维世界前凸(或后凹)的程度越大。例如,通过合并根据一个视差象素向左移位的用于用户左眼的一幅图像以及象素向右移位的用于用户右眼的一幅图像而生成的一幅立体图像被用户感知为仿佛世界相对于所述表面是后凹的,如果两幅图像的象素按相反方向移动,则用户会感知到立体图像是前凸的。
用户可移动滑动条IS2来指定一个“波动”值。用户所指定的值被显示在输入框IB2中。用户也可以直接在输入框IB2中输入一个数字。要注意波动表示一幅立体图像中最远(最深)点和最近(最浅)点之间的一个海拔高度差。从而波动越大,就越强调波动。相反,波动越小,用户感知到的世界越平面。
用户可以分别在输入框IB3和IB4中输入“对象深度”的最大和最小值。一个对象深度被分配给一幅图像中所包含的一个对象,它是以感知到的深度来表示对象的位置的一个参数(相对于屏幕表面向前或向后凸出的程度)。按钮BM1用于将一个对象深度的最大和最小值设为一个缺省值。
用户可通过选中选中框IB5或IB6来指定要描绘的第一条线(一条奇数号的线或一条偶数号的线)。当按下按钮BM2时,设定当前设置。当按下按钮BM3时,取消当前设置并且设定先前的设置。通过此对话面板设置的参数被用于以下将说明的图像处理中。
有多种使用一对图像来实现观察者的立体视觉的方案。在此实施例中应该采用一种所谓的奇-偶方案。在此情况下,通过将一个偏振条状滤波器放置在显示器21的一个屏幕上,带着偏振眼镜的用户能够以三维的方式感知屏幕上的一幅图像。
更具体地,如图4所示,以规则的间隔将用于左眼的具有预定的宽度和长度的偏振条状滤波器FL0、FL2...分别放置在屏幕的水平扫描线中的偶数号线SL0、SL2...上。以规则的间隔将具有预定宽度的偏振滤波器FL1、FL3分别放置在屏幕的奇数号线SL1、SL3...上。如图5所示,用于左眼的图像数据被显示在显示器21的偶数号线SL0、SL2...中,而用于右眼的图像数据被显示在显示器21的奇数号线SL1、SL3....中。左眼的偏振条状滤波器FL0、FL2...的偏振方向与右眼的偏振条状滤波器FL1、FL3...的方向正交。
如图6所示,在偏振眼镜GS上放置了一个用于左眼的滤波器Fleft和一个用于右眼的滤波器Fright。Fleft和Fright的偏振方向分别与用于左眼和用于右眼的偏振滤波器的方向相同。
当用户戴着偏振眼镜观看显示器21的屏幕时,源于显示器21的偶数号线SL0、SL2...的光线通过偏振滤波器FL0、FL2...传输;从而光线通过滤波器Fleft到达观察者的左眼,而不会到达观察者的右眼,因为滤波器Fright切断了光线。相反地,源于显示器21的奇数号线SL1、SL3...的光线通过偏振滤波器FL1、FL3...传输,从而到达观察者的右眼,但是光线不会到达观察者带滤波器Fleft的左眼。从而供左眼和右眼使用的图像分别输入给左眼和右眼,从而使得观察者能够以三维的方式感知一幅显示的图像。
<B.图像处理>
图7显示了当显示一幅3D图像的应用程序运行时,在用户已执行了一个确定操作以选择3D模式的情况下,由3D图像生成装置1执行的一个图像处理的流程。
首先,CPU 11读取彩色的移动图像的一帧的数据(步骤S101),并且检查数据是否是RGB格式的(步骤S102)。在数据不是RGB格式的情况下,CPU 11将数据转换成RGB格式(步骤S103)。可以以任何类型的格式对彩色移动图像的数据进行格式化。可以对数据进行压缩。在压缩数据的情况下,在步骤S103之前采用解压缩。彩色移动图像数据的象素的颜色深度(比特深度)可以是16、24或32比特。
此外,可将彩色移动图像数据储存在磁盘18或CD-ROM 20上。此外,可通过一条电缆从一个图像再现设备(例如一台DVD播放器)输入数据。此外,数据可以是通过卫星和电缆的一个TV节目广播的图像数据,由连接到3D图像生成装置1的一台电视机提供。此外,可以从互联网上的一台服务器下载数据。
接下来,CPU 11根据图像数据值(R值、G值、B值)计算象素的灰度值,并且将灰度值分配给象素的Z-值(步骤S104,以下称为一个灰度值调整)。
在为所有象素确定了Z-值之后,通过颠倒确定(步骤S105)、平滑(步骤S106)、分布调整(步骤S107)和局部调整(步骤S108和S109)来调整Z-值。最后,使用上述调整根据Z-值计算一个象素的位移度。通过移动象素生成一幅立体图像(步骤S110)。以下详细说明调整过程。
在以下说明中,假设描绘语法和数据类型声明的一种方法符合C语言或它的一个扩展(C++等)。此外,在此实施例中,通过16、24或32比特的颜色深度对彩色图像数据进行格式化,如上所述。如图8所示,在16比特彩色图像数据的情况下,每个象素对应于R、G和B分别具有5比特、6比特和5比特数据。在24比特数据的情况下,每个象素对应于R、G和B分别具有8比特、8比特和8比特数据。在32比特数据的情况下,每个象素具有在24比特彩色图像数据之前添加空白数据的数据。
<B-1灰度值调整>
现在将参考图9、10和11说明图7的步骤S104所示的灰度值调整。
在灰度值调整中,使用特定的权重修改R、G和B的灰度成分。具体地,根据方程(1),预定的权重被分别分配给每个象素的R、G和B颜色分量以修改一个灰度值。
Z=0.3*R+0.5*G+0.11*B (1)在16比特数据的情况下,一个象素的Z-值的可能取的值的范围为从0到31。在24或32比特数据的情况下,值的范围为从0到255。注意根据存在于人眼的视网膜中的对R、G和B敏感的锥形细胞的比率分别确定上述权重30%、59%和11%。虽然可采用其他权重,根据由上述权重获得的灰度生成的立体图像可以给观察者最自然的可塑性。
接下来,进一步调整加权调整后的灰度值。如果采用每se的灰度值来表示深度,其中一个步长等级对应于深度的一个单位,则对应于位于一幅原始2D图像中靠前的区域中的一个对象的一个象素的等级步长宽度与对应于位于靠后的区域中的一个对象的一个象素的等级步长宽度都表示深度差。换句话说,这样的灰度值不能正确地表示原始图像中的对象的深度。因此需要修改灰度值步长,以便对应于位于靠后的区域中的一个对象的一个象素的灰度的单个步长所表示的深度能够大于对应于位于靠前的区域中的一个对象的一个象素的灰度的单个步长。具体地,采用一个级数an(n=1,2,3...)来表示对应于不同深度的象素的灰度。根据根据方程(2)的一个算术级数或根据方程(3)的一个几何级数来修改象素的Z-值,以便向对应于位于靠后的区域中的一个对象的一个象素分配的深度单位大于对应于位于靠前的区域中的一个对象的一个象素。
an=a+(n-1)*d(2)an=a*rn-1(3)
其中n是一个正整数,a是一个初项,表示校正因子的公共差d和公共比r可以根据原始2D图像的特征确定。
在以下说明中,*src是一个表示储存原始图像数据src的地址的指针,WD表示原始2D图像中水平排列的象素数目,HT表示原始图像中垂直排列的象素数目,而*zinfo是表示储存一个计算出的Z-值的地址的一个指针。例如,如果原始2D图像的数据大小为1024点乘768点,则WD为1024而HT为768。
首先,如图9所示,CPU 11确定要处理的图像数据的颜色深度是否为16比特(步骤S201)。当颜色深度为16比特时,执行一个变量声明Unsigned Short*srcp(步骤S202),执行对一个目标象素的数据的强制转换以便获得unsigned short格式的数据,并且将数据src的地址分配给变量srcp(步骤S204)。
接下来,CPU 11将一个计数器CC的一个值重置为0(步骤S205)。在步骤S206中,CPU 11确定计数器CC的值是否小于WD*TH(步骤S206)。如果不满足步骤S206的条件,则CPU 11确定对于整屏幕的象素的处理完成,以结束灰度值调整。如果满足了步骤S206的条件,则在以下步骤S207至S210中执行灰度值调整。具体地,在步骤S207中,对于R值,CPU 11在储存在由指针*srcp所指定的一个区域内的16比特数据与一个十六进制数F800或二进制数1111100000000000之间进行一个AND操作,执行一个向右五比特的算术移位,并且乘以30。接下来CPU 11对以上计算出的值执行强制转换,以便获得一个int型的更新后的R值(步骤S207)。到目前为止,原始R值乘以30获得的一个值被赋给了变量R。在步骤S208中,对于G值,CPU 11在由指针*srcp指定的一个区域中储存的16比特数据与一个十六进制数据07E0之间执行一个AND操作,执行一个向右6比特的算术移位,然后乘以59。接下来CPU 11对以上计算出的值执行强制转换,以便获得一个int型的更新后的G值(步骤S208)。从而,由原始G值乘以59获得的一个值被赋给了变量G。
在步骤S209中,对于B值,CPU 11在由指针*srcp指定的一个区域中储存的16比特数据与一个十六进制数据001F之间执行一个AND操作,执行一个向右5比特的算术移位,然后乘以11。接下来CPU 11对以上计算出的值执行强制转换,以便获得一个int型的更新后的G值(步骤S208)。从而,由原始G值乘以11获得的一个值被赋给了变量B。最后,CPU 11将变量R、G和B之和除以100得到的值赋给由一个指针*zinfo标识的一个地址(步骤S210)。
到目前为止完成了对单个象素的处理,变量srcp、zinfo以及计数器CC的当前值加1(步骤S211),并且处理返回步骤S206以便在另一个象素上执行上述处理。在一个屏幕内的所有象素上类似地执行此处理。
在不满足步骤S201的条件的情况下,CPU 11进一步确定图像数据是否是24比特格式的(图10的步骤S215)。接下来,正如图9中所示的步骤S205和S206那样,重置计数器(步骤S216)并且进行步骤S217的确定。
接下来,以与16比特数据的情况类似的方式调整R、G和B值。具体地,执行图10中所示的步骤S218至S220而不是图9所示的步骤S207至209。具体地,对于变量B,将储存在由一个指针*src所指定的一个地址中的24比特数据乘以11,赋给变量B(步骤S218)。接下来,将储存在由一个指针*(src+1)所指定的一个地址中的24比特数据乘以59,赋给变量G(步骤S219)。接下来,将储存在由一个指针*(src+2)指定的一个地址中的24比特数据乘以30,赋给变量R(步骤S220)。以后的步骤,包括步骤S221和222,与16比特数据的情况相似。
如果不满足步骤S215的条件,则CPU 11确定数据的颜色深度为32比特数据。在此情况下,执行一个变量声明Unsigned long*srcp(图11的步骤S225),并且将一个目标象素的数据类型转换为unsigned long(步骤S226),并且将数据src的一个地址分配给变量srcp(步骤S227)。接下来,与16比特数据的情况类似,重置计数器(步骤S228)并且在步骤S229中执行终止检查。
在步骤S230至S232中调整R、G和B值。具体地,在储存在由一个指针*srcp指定的一个地址中的32比特数据与一个十六进制数00FF0000之间执行一个AND操作,并且执行一个向右16比特的算术移位,然后乘以30。将值的数据类型转换成int型,最后将值赋给变量R(步骤S230)。从而,由原始的8比特R值乘以30获得的一个值被赋给了变量R。
接下来,CPU 11在32比特数据与一个十六进制数0000FF00之间执行一个AND操作,并且执行一个向右8比特的算术移位,然后乘以59,以便将由原始G值乘以59获得的值赋给变量G。从而,由G值乘以11获得的值被赋给了变量B。接下来,CPU 11在储存在由指针*srcp指定的一个区域中的32比特数据与一个十六进制数000000FF之间执行一个AND操作,并且将其乘以11。此数据被转换为要赋给变量B的int型数据(步骤S232)。从而,由B值乘以11获得的值被赋给了变量B。以后的步骤与16和24比特数据的情况相似。
<B-2.颠倒确定>
参见图12至14,现在将说明图7的步骤S105的颠倒确定。在颠倒确定中调整步骤S104中计算出的一个Z-值以便触发自然可塑性。
如上所述,理论上为了生成一幅立体图像,只要根据一个象素的一个Z-值确定象素的位移量就够了。例如,位移量被确定为正比于步骤S104中计算出的一个Z-值。因此,立体图像的观察者感知到一个Z-值较大的对象(“较亮”的对象)位于近侧,而一个Z-值较小的对象(“较暗”的对象)位于远侧。从而当在一幅原始2D图像中一个较暗的对象实际上位于远侧而一个较亮的对象实际上位于近侧时,根据该2D图像生成的一幅3D图像将成功地触发自然和逼真的可塑性。
但是,有这样的一种情况,即一幅原始2D图像中包括一个应该位于远侧的Z-值较大的对象和一个应该位于近侧的Z-值较小的对象;例如当一个暗淡的对象位于一片明亮的背景(例如蓝天)中时。在这种情况下,如果位移量被简单地确定为正比于象素的一个Z-值,则由于远处和近处之间的对象的位置关系颠倒了,生成的一幅3D图像将触发不自然的可塑性。
根据以上情况,在颠倒确定中,分析一幅原始2D图像中的Z-值趋势,并且根据偏差确定是否颠倒位移量与Z-值之间的定性关系。具体地,如图12所示,将显示一幅原始2D图像的数据的一个屏幕分成左上、中上、右上、左中、中中、右中、左下、中下和右下区域SS1至SS9(以下称为“采样区域”),每个区域宽8象素,长8象素。可以修改采样区域的大小和数目。
每个采样区域具有一个权重。具体地,分别将3、4、3、2、5、2、1、2和1分配给SS1、SS2、SS3、SS4、SS5、SS6、SS7、SS8和SS9。虽然可以采用其他权重,但是权重是根据关于一幅图像中的一个对象的一般趋势来确定的。“一般趋势”是一个经验规则,即一幅图像的上半部分比图像的下半部分更可能包括一片背景(例如一片蓝天),并且当图像是包括一个人或一朵花的一张照片时,一个对象通常位于图像中央。根据一般趋势,最好将最大权重分配给一个中央区域,并且分配给上部区域的权重大于下部区域的权重。
以下将参见图13和14详细说明颠倒确定的流程。首先CPU11计算一幅图像的数据的所有象素的Z-值的一个均值(步骤S301)。接下来,CPU 11重置变量S1和S2的值,并且将一个计数器CT重置为0(步骤S302)。变量S1和S2分别是表示权重大于和小于屏幕中所有象素的平均权重的区域的权重的参数。计数器CT的一个值表示已进行颠倒确定的采样区域的数目。
接下来,检查计数器CT的一个当前值是否小于9(步骤S303),以确定是否已经在所有的采样区域SS上执行了颠倒确定。如果满足步骤S303的条件,则检查一个目标采样区域内的象素的Z-值的均值是否大于均值MZ(步骤S304)。
如果满足步骤S304的条件,则第CT个采样区域的一个权重被添加到变量S1(步骤S305)。如果不满足步骤S304的条件,则第CT个采样区域的权重被添加到变量S2(步骤S306)。接下来计数器CT的一个值加1(步骤S307),并且过程返回步骤S303以便在另一个采样区域上执行处理。
当已经为所有9个采样区域完成了颠倒确定时(步骤S303,“否”),处理转到图14的步骤S308,在该步骤中检查变量S1是否大于变量S2。在S1>S2的情况下(步骤S308,“是”),颠倒位移量和Z-值之间的一个定性关系(步骤S309)。在不满足步骤S308的条件的情况下(步骤S308,“否”),检查S1是否小于S2(步骤S310)。在S1<S2的情况下(步骤S310,“是”),不颠倒定性关系(步骤S311)。在S1>S2并且S1<S2的情况下,即S1=S2的情况下(步骤S310,“否”),检查采样区域SS5的Z-值的均值是否大于均值MZ(步骤S312)。如果满足步骤S312的条件,则不颠倒关系(步骤S313);如果不满足条件,则颠倒关系(步骤S314)。
可以采用另一个检查,如下所述。具体的,指定一个或多个采样区域,其中这些采样区域内的象素的平均Z-值大于图像中所包含的所有象素的平均Z-值,并且获取所述多个指定区域的权重之和。如果和值大于一个预定的阈值,则颠倒位移量和Z-值之间的关系,因为原始2D图像具有位于近侧的一个对象较暗而位于远侧的一个对象较亮的趋势。如果和值低于预定的阈值,则保持关系。
接下来,CPU 11检查显示一幅3D图像的应用程序的项目MI1是否被设为F2模式(前凸视图)(步骤S315)。当F2模式起作用时,颠倒或进一步颠倒在步骤S309、S311、S313和S314中已经颠倒或尚未颠倒的关系(步骤S316)。这是因为当F2模式起作用时,需要颠倒深度和Z-值之间的关系。在这个阶段,颠倒确定完成。通过颠倒确定获得的关于是否进行关系颠倒的最终确定反映在图7的步骤S110的后续处理中,以下将对其进行说明。
<B-3.平滑>
在颠倒确定之后,CPU 11执行平滑图7的步骤S104所计算出的Z-值的平滑偏差处理(步骤S106)。以下将说明执行此处理过程的原因。
如上所述,一幅立体图像是通过水平移动象素生成的,其中位移量对应于由其Z-值确定的视差。因此,在包含Z-值的差别相当大的象素的一个区域里,一个象素的视差与相邻象素的视差之间的差将会较大。在该区域中,在相邻象素按相反方向移动的区域中将发生“象素交叉现象”。此现象尤其倾向于出现在一个强光对象的边缘处。当该现象出现时,在生成的立体图像中将出现边缘模糊、晕光、干扰带或类似的现象。执行平滑以调整Z-值,以便防止这些异常。
具体地,如图15所示,CPU 11为一个象素Px计算包含在一幅原始2D图像中的Z-值的一个均值,以及一个预定的区域MM(以下称为一个矩阵)中的象素的Z-值的一个均值,该区域包含象素Px。然后CPU 11为象素Px的Z-值更新计算出的均值。相应地,象素Px的Z-值被分配给矩阵MM中的象素的Z-值的均值,其中矩阵MM的左上角包含象素Px,并且矩阵包含144点,其中纵向12点(My),水平12个象素(Mx)。经过平滑以后,与步骤S104中获得的Z-值相比,相邻象素的偏差被平滑了。
可以采用其他大小的矩阵MM。矩阵MM的大小越大,影响Z-值的均值的象素的数目越大。因此,相邻象素之间的Z-值之差较小;从而观察者感知到立体图像中描绘的世界越平面。另一方面,矩阵MM的大小越小,观察者对立体图像中描绘的世界的感知越粗糙。
以下将参考图16提供对平滑的详细说明。注意*outinfo是一个表示储存经过平滑的Z-值的地址的指针。
在步骤S401中,重置表示一个目标象素的纵向位置的一个计数器CLN的值。接下来,检查计数器CLN的一个值是否小于纵向象素HT的总数目(步骤S402)。如果不满足步骤S402的条件,则确定已经在屏幕上的所有象素上执行了平滑,从而平滑结束。
在步骤S403中,检查一个目标象素Px是否位于距离屏幕底部12个象素,或者HT-CLN是否等于或大于12。如果满足步骤S403的条件,则将12赋给表示矩阵MM的长度的一个变量MTh(步骤S404)。如果不满足步骤S403的条件,则将HT-CLN赋给变量MTh(步骤S405)。通过这个替换,调整了在目标象素的位置接近屏幕底端的情况下矩阵MM的大小。
接下来,初始化表示目标象素的水平位置的一个计数器CWD(步骤S406)。检查计数器CWD的当前值是否小于水平象素的总数目WD(步骤S407)。如果满足步骤S407的条件,则检查目标象素Px是否位于距离屏幕右边缘向左12或更多个象素,或者WD-CWD是否等于或大于12(步骤S408)。
如果满足步骤S408的条件,则将12赋给表示一个矩阵MM的宽度的一个变量MTw(步骤S409)。如果不满足步骤S408的条件,则将WD-CWD赋给变量MTw(步骤S410)。通过这个替换,调整了在目标象素的位置接近屏幕右边缘的情况下矩阵MM的大小。
接下来,对于由计数器CLN和CWD的值指定的一个目标象素,获取矩阵MM中的所有象素的Z-值(zinfo)之和(SM1),其中矩阵MM的大小由MTh*MTw定义(步骤S411)。将矩阵MM中所有象素的Z-值的一个均值SM1/(MTh*MTw)赋给outinfo(步骤S412)。
到目前为止,在单个象素上执行了平滑;从而计数器CWD的一个当前值加1(步骤S413),并且处理返回步骤S407以便在另一个目标象素上执行平滑。如果不满足步骤S407的条件,则确定已经在一行上的所有象素上执行了平滑。从而计数器CLN的一个当前值加1(步骤S414)并且处理返回步骤S402以便在另一个目标象素上执行平滑。从而最终在屏幕中的所有象素上执行了平滑。
B-4.分布调整现在将说明分布调整(图7的步骤S107)。由于经过平滑的象素的Z-值取决于图像中所有象素的Z-值的均值,因此Z-值的分布可能被偏置了。图17的上半部分显示了Z-值的一个偏置分布的例子。在此情况下,用不经过任何调整的Z-值生成的立体图像不会成功实现自然可塑性。由于以上原因,在这个分布调整中修改Z-值的分布,如图17的下半部分所示。
参见图18和19,以下将详细说明分布调整。*z_image是表示储存一个Z-值的地址的指针,ave_z是一个屏幕中的所有象素的Z-值的一个均值,mix和min_z分别是Z-值的最大值和最小值,而*adjust_z_image是表示执行经过分布调整的Z-值的地址的指针。首先计算max_z、min_z、ave_z(步骤S501)。接下来,max_z-ave_z和min_z-ave_z分别被赋给变量max_span和min_span,它们是表示分布差异的参数(步骤S502)。
接下来,检查颜色深度是否为16比特(步骤S503)。当颜色深度为16比特时,将31赋给一个表示等级大小的变量max(步骤S504)。当颜色深度为24比特或32比特时(步骤S503,“否”),将255赋给变量max(步骤S505)。
接下来,将计数器CLN的值重置为0,并且将储存z_image的一个地址分配给一个指针变量*pz_image,该指针变量表示一个目标象素的Z-值的修改后的值(步骤S506)。接下来,检查计数器CLN的一个值是否小于纵向象素HT的总数目(步骤S507)。如果不满足步骤S597的条件,则已经在所有象素上执行了处理;从而分布调整结束。
如果满足步骤S507的条件,则将计数器CWD的值重置为0(步骤S508)。在步骤S509中,检查计数器CWD的当前值是否小于纵向象素的总数目。如果不满足步骤S509的条件,则完成了一行上的所有象素的处理;从而计数器CLN的一个当前值加1(步骤S510),并且处理返回步骤S507以便在下一行的象素上执行分布调整。
如果满足步骤S509的条件,则检查pz_image是否大于ave_z(步骤S511)。在pz_image>ave_z的情况下,即Z-值大于平均值,将(z-ave_z)/max_span*(max-ave_z)赋给表示象素的修改值的变量z(步骤S512)。
如果不满足步骤S511的条件,则检查是否pz_image<ave_z(步骤S513)。如果满足步骤S513的条件,则将(z-ave_z)/(min_z-ave_z)*min_span赋给变量z(步骤S514)。如果不满足步骤S514的条件,或者*pz_image等于Z-值的均值ave_z,则将0赋给变量z(步骤S515)。
当在此阶段确定了变量z之后,将一个值pz_image+z赋给*adjust_z_image(步骤S516),以便储存目标象素的一个校正后的Z-值。接下来,*pz-image、adjust_z_image和CLN的值加1(步骤S517),并且处理返回步骤S509以便在另一个象素上执行分布调整。
现在将说明局部调整(图7的步骤S108)。可能出现除了上述调整外还需要进一步校正的情况。具体地,失真出现在关于单个对象的象素的Z-值的分布中。例如,在一个球形对象中,Z-值应该从中央到周边逐渐地并且径向地变化。但是可能出现由于某种原因对象的一个特定部分的Z-值相当大或小的情况,或者可能出现Z-值分布不规则的情况。
如果用具有上述失真分布的Z-值生成立体图像,则对象的深度顺序也会相应失真;从而一幅应该被感知为单个对象的图像对于观察者来说显得不自然。由于此原因,在局部调整中,在一个对象的基础上校正象素的Z-值。
以下将参考图21和21说明对局部调整的一个概览。首先,校正在步骤S101至S107中获得的Z-值的一个范围(步长数目)(图21的步骤S700)。接下来,获得等高线HL0至HL5,它们是由步骤S700中获得的具有相等的Z-值的象素组成的(步骤S701)。接下来,根据获得的等高线标识对象(例如图20的OB1和OB2)(步骤S702)。标识关于对象的Z-值的中心的Y坐标PPC。获得始于点PPC的垂直线与等高线的交点坐标Y。
用以上计算出的坐标获得关于对象的象素的Z-值(步骤S704和S705)。最后,校正相邻两条线之间的一个区域(以下称为等高面)内的Z-值(步骤S706)。注意当只获得一条等高线时,这条线内的区域应该被当成等高面。以下将说明详细的处理过程。
(a)等级步长的校正如上所述,在生成一幅立体图像时,象素位移的最小单位是一象素。换句话说,移动象素的距离不可能短于一个象素的宽度。因此,如果确定Z-值的一个增量1对应于等于一个象素的最小位移距离,则最大的Z-值255将导致象素位移的距离等于256个象素的宽度。但是,很大的位移距离(例如屏幕上的8mm)将会引起观察者的疲劳,并且会妨碍观察者以三维的方式感知图像。因此,CPU 11对步骤S101至107中获得的Z-值执行近似,以便用特定的离散值来替换Z-值。
具体地,CPU 11用一个舍入因子MK去除步骤S107中获得的一个Z-值,舍入小数位的数字(向上取整、向下取整或者舍入取整),并且将其乘以因子MK。从而用舍子因子MK的整数倍的数字替换了象素的Z-值。
换句话说,舍入因子MK是表示要离散化的Z-值的步长的一个数字。在此实施例中,舍入因子MK被设为这样一个值,获得此值的方式是用Z-值的最大数字255除以由用户指定的一个对象深度Ob,并且对其进行舍入。对象深度Ob是表示Z-值可用的步长数的一个参数。例如,如果MK=10,则可以为Z-值赋的值为0、1、2、3...25,这意味着Z-值可以有26步。
(b)等高线的计算以下将参考图22至24详细说明等高线的计算。*Outline是表示储存等高线基本数据的一个地址的指针,而*cord是表示储存Z-值矢量的一个地址的指针。Cord是具有Vinfo结构的数据。结构Vinfo包括以下数据元素Z-值,npoint(一个整数)以及*point(坐标数据)。
首先,CPU 11将255除以舍入因子MK所得的值赋给一个max,这是一个常数,而将0赋给一个变量Target_z,它表示已经被执行了处理的象素的数目(步骤S710)。
接下来,检查变量Target_z的一个值是否大于常数值max(步骤S711)。如果不满足步骤S711的条件,则等高线计算结束。如果满足步骤S711的条件,则将计数器CLN重置为0(步骤S712),并且检查计数器CLN的一个当前值是否小于HT(步骤S713)。如果不满足步骤S713的条件,则Target_z的一个值加1(步骤S714)并且处理返回步骤S711。如果满足步骤S713的条件,则将计数器CWD重置为0,并且将-1赋给变量P1和P2,将0赋给一个变量fnd(步骤S715)。
接下来,检查计数器CWD的一个值是否小于WD(步骤S716)。如果满足步骤S716的条件,则检查*outline的一个值是否等于Target_z的一个值(步骤S717)。如果满足步骤S717的条件,则检查变量P1的一个值是否大于0(步骤S718)。如果不满足步骤S718的条件,则将计数器CWD的值赋给变量P1(步骤S719),计数器CWD的一个值加1(步骤S720),并且处理返回步骤S716。如果满足步骤S718的条件,则处理前进到步骤S720以执行以后的处理。
如果不满足步骤S717的条件,则检查变量P1的一个当前值是否大于0(步骤S721)。如果满足步骤S721的条件,则将计数器CWD的一个当前值赋给变量P2,变量fnd的一个值加1(步骤S722),并且处理返回步骤S720以执行以后的处理。如果不满足步骤S716的条件,则检查变量fnd的一个值是否大于0(步骤S723)。如果不满足步骤S723的条件,则计数器CLN的一个当前值加1(步骤S724),并且处理返回步骤S713。
如果满足步骤S723的条件,则进行一个搜索以查找一个目标象素的相邻象素,所述象素的Z-值不同于目标象素的一个Z-值。具体地,搜索以图23的左半部分所示的顺序进行。首选,将一个目标象素P1与右上象素相比较(步骤S730)。如果两个象素的Z-值是相同的(步骤S730,“否”),则将目标象素P1的Z-值与直接位于象素P1上方的象素的一个Z-值相比较(步骤S731)。类似地,对与目标象素相邻的六个象素进行比较(步骤S732至S735)。搜索顺序的示意图如图23的右半部分所示。
如果找到一个Z-值不同于目标象素P1的Z-值的象素(步骤730、731、732、733、734和735中的“是”),则检查以前是否已经找到过这个象素,以便确认已经检查了目标象素P1周围的所有象素(步骤S736)。从而提取出包含不同Z-值的一个边缘。当检查了与所述边缘相关的所有象素之后(步骤S736,“是”),等高线计算结束。
如果不满足步骤S736的条件,则将先前处理中找到的一个象素的x和y坐标分别赋给cord点的x和y值(步骤S737)。接下来,cord点和npoint的值加1(步骤S738和S739),将找到的象素设为目标象素P1(步骤S740),并且处理返回步骤S730以执行比较。从而找到了边缘以便提取一条等高线。
(c)对象中心的确定以下将参考图25至27说明对象中心的确定(图21的步骤S702)。在对象中心的确定中,获取外切关于一个对象的最内的等高线的一个矩形的顶点坐标,将矩形的一个中心视为该对象的Z-值的一个中心。Cent_cord是表示储存该最内矩形的一个矢量区域的指针,center是要获得的一个中心的坐标,而*side_cord是表示储存除最内矩形外的其他矩形的一个矢量区域的指针。
首先,CPU 11选择一条等高线(步骤S750)。接下来初始化表示等高线上的象素的x和y坐标的最小和最大值的变量g_min_x、g_man_x、g_min_y、g_man_y(步骤S751)。在图25中,为了简便起见,将g_min_x的初始值显示为999999,但也可以采用大于WD的其他值。这一点对g_min_y同样适用。在步骤S752中将cord的一个值赋给cordp。
接下来,检查cord的npoint的值是否大于0(步骤S753)。如果不满足步骤S753的条件,则检查是否已经在所有等高线上执行了处理(步骤S754)。如果不满足步骤S754的条件,则处理返回步骤S750以便在另一条等高线上执行处理。如果满足步骤S754的条件,则处理结束。如果满足步骤S753的条件,则初始化变量。具体地,将计数器的一个值重置为0(步骤S755),将999999赋给min_x,将0赋给max_x,将999999赋给min_y,将0赋给max_y(步骤S756),并且将cord的npoint的值赋给一个变量PNT。
接下来,检查计数器CNT的一个当前值是否小于cord的npoint的值,即检查是否已经在关于一条等高线上的所有象素上执行了处理(步骤S757)。如果未完成处理(步骤S757,“是”),则检查变量PNT的一个x值是否小于min_x(步骤S758)。如果满足步骤S758的条件,则将水平最小位置赋给P1。具体地,将PNT的x值赋给p1.x,将PNT的y值赋给p1.y,并且将pi.x赋给min_x(步骤S759)。如果不满足步骤S758的条件,则省略步骤S759。
接下来,检查PNT的x值是否大于max_x(步骤S760)。如果满足步骤S760的条件,则将水平最大位置赋给p2。具体地,将PNT的x值赋给p2.x,PNT的y值赋给p2.y,并且将p2.x赋给max_x(步骤S761)。如果不满足步骤S760的条件,则省略步骤S761。
接下来,检查变量PNT的y值是否小于min_y(步骤S762)。如果满足步骤S762的条件,则将垂直最小位置赋给p3。具体地,将PNT的x值赋给p3.x,PNT的y值赋给p3.y,并且将p3.y赋给min_y(步骤S763)。如果不满足步骤S762的条件,则省略步骤S763。
接下来,检查变量PNT的y值是否小于max_y(步骤S764)。如果满足步骤S764的条件,则将垂直最大位置赋给p4。具体地,将PNT的x值赋给p4.x,PNT的y值赋给p4.y,并且将p4.y赋给max_y(步骤S765)。如果不满足步骤S672条件,则省略步骤S765。接下来,计数器PNT的一个值加1(步骤S766),并且处理返回步骤S757。
当计算一个外切矩形的顶点时(步骤S757,“否”),检查p1.x是否小于g_min_x以确定矩形是不是最内的那一个。如果矩形位于最内(步骤S767,“是”),则将cordp储存在cent_cord中(步骤S768),并且将p1.x赋给g_min_x(步骤S769)。接下来,计算始于最内矩形的顶点(p1.x,p3.y)且止于一个点(p2.x,p4.y)的一条线段与始于一个点(p2.x,p3.y)且止于一个点(p1.x,p4.y)的一条线段的交点。分别将交点的x和y坐标储存在center.x和center.y中(步骤S770)。如果矩形不是最内的那一个(步骤S767,“否”),则跳过步骤S768至770。
接下来,检查p2.x是否大于g_max_x(步骤S771)。如果p2.x>g_max_x(步骤S711,“是”),则将cordp储存在side_cord中,并且将p2.x储存在g_max_x中(步骤S772和S773)。如果p2.x小于g_max_x(步骤S771,“否”),则省略步骤S772和773。接下来,cordp的一个值加1(步骤S774)并且处理返回步骤S753以便在另一条等高线上执行类似的处理。
(d)交点的确定以下将参考图28说明交点确定(图21的步骤S703)。注意p[]是一个储存一个交点的坐标的数组。首先,选择一条等高线(步骤S78),将cord赋给cordp,并且将一个变量find设为0(步骤S781)。接下来,检查cord的npoint是否大于0(步骤S782)。如果不满足步骤S782的条件,则检查是否已经在所有等高线上执行了计算(步骤S783)。如果不满足步骤S783的条件,则处理返回步骤S780以便在另一条等高线上执行交点确定。如果满足步骤S783的条件则交点确定结束。
如果满足步骤S782的条件则将cordp的npoint赋给变量PNT,并且将计数器CNT的值重置为0(步骤S784)。接下来,检查计数器CNT的值是否小于cord的npoint(步骤S785)。如果满足步骤S785的条件,则检查PNT.x是否等于center.x(步骤S786)。
如果满足步骤S786的条件,则检查PNT.y是否大于center.y(步骤S787)。如果满足步骤S787的条件,则确定了始于所述中心的一条垂直线与等高线的一个交点。具体地,将PNT.x赋给p[find],并且将PNT.y赋给p[find](步骤S788)。
接下来,变量find的一个值加1(步骤S789),并且将-1赋给p[find].x和p[find].y(步骤S790)。接下来,cordp的一个值加1(步骤S791),并且处理返回步骤S782。
如果不满足步骤S786或787的条件,则CNT和PNT的值加1(步骤S792),并且处理返回步骤S785。如果不满足步骤S785的条件,则处理返回步骤S791。
(e)平面内Z-值计算以下将参考图29说明平面内Z-值计算(图21的步骤S704)。在此计算中,用先前处理中获得的一个对象的中心以及所述交点的坐标来修改一个等高的平面内的Z-值。一个恒定值dist表示在假设用一台照明机拍摄显示在屏幕上的图像的情况下,一台照相机的位置与一个屏幕之间的一个距离,一个恒定值focus表示照相机的一个焦距,而new_z[]表示用于储存在平面内Z-值计算中计算出的Z-值的一个数组。
首先,CPU 11选择一条等高线(步骤S795),并且将计数器CNT的值重置为0(步骤S796)。接下来,将HT减去center.y所得的值赋给cent_h,并且将dist/focus*cent_h赋给object_h,它表示对象的一个深度(步骤S797)。接下来,检查P[CNT].x的值是否大于0(步骤S798)。如果满足步骤S798的条件,则将object_h*focus/(p[CNT].y-center.y)-dist赋给new_z[CNT](步骤S799),以便修改一个等高平面内的一个象素的Z-值,以使得Z-值正比于对象和象素的Z-值的中心之间的距离的y分量。
接下来,计数器CNT的一个值加1(步骤S800),并且处理返回步骤S798。如果不满足步骤S798的条件,检查是否已经在所有等高线上执行了平面内Z-值计算(步骤S801)。如果不满足步骤S801的条件,则处理返回步骤S795,以便在另一条等高线上执行平面内计算。如果满足步骤S801的条件,则平面内计算结束。
(f)平面内修改Z-值的计算在一个Z-值的平面内修改的计算中,用图21的步骤S704中获得的一个Z-值校正一个等高平面内的一个Z-值。以下将参考图30提供对平面内修改Z-值的计算的详细说明。注意adjust_outline[]是储存校正前和校正后的Z-值之差的一个数组。
首先,选择在先前处理中获得的一个交点(步骤S805),并且将1赋给计数器CNT的值(步骤S806)。接下来,检查p[CNT].x是否大于0(步骤S807)。如果不满足S806的条件,则确定为一个交点完成了处理,并且检查是否已经在所有交点上执行了处理(步骤S808)。如果不满足步骤S808的条件,则处理返回步骤S805以便在另一个交点上执行处理。如果满足步骤S808的条件,则Z-值的平面内修改的计算结束。
如果满足步骤S807的条件,则将由一个坐标(p[CNT-1].x,p[CNT-1].y-1)所标识的一个象素Z-值赋给一个变量oz1(步骤S809),并且将由一个坐标(p[CNT].x,p[CNT].y-1)标识的一个象素的Z-值赋给一个变量oz2(步骤S810)。接下来,将oz2-oz1赋给一个变量sub1(步骤S811),并且将new_z[CNT]-new_z[CNT-1]赋给一个变量sub2(步骤S812),其中new_z[CNT]-new_z[CNT-1]是调整Z-值的一个增量。
接下来,检查sub1和sub2的符号是否相同(步骤S813)。如果符号相同(步骤S813,“是”),则将0赋给adjust_outline[CNT](步骤S814)。如果符号不同(步骤S813,“否”),则将sub2-sub1赋给adjust_outline[CNT](步骤S815)。接下来,计数器CNT加1(步骤S816),然后处理返回步骤S807。
(g)基于对象的Z-值调整在此调整中,用步骤S705中获得的平面内修改Z-值来调整一个对象中的象素的Z-值。以下将参考图31提供对基于对象的Z-值调整(图7的步骤S109)的详细说明。注意*adjust_z_image是表示储存调整后的Z-值的地址的指针。
首先,将计数器CLN重置为0(步骤S901),并且检查计数器CLN的当前值是否小于HT(步骤S902)。如果不满足步骤S902的条件,则处理结束。如果满足步骤S902的条件,则将0赋给计数器CWD,并且检查CWD是否小于WD(步骤S904)。如果满足步骤S904的条件,则获得目标象素的adjust_z_image(步骤S905),并且通过将adjust_z_image加到z-image来更新z_image(步骤S906)。到目前为止完成一个象素的一个Z-值的更新。
接下来,CNT的一个值加1(步骤S907),并且处理返回步骤S904以便在另一个象素上执行处理。如果不满足步骤S904的条件,则CWD的一个值加1(步骤S908)并且处理返回步骤S902以便在另一条线上的象素上执行处理。从而调整了所有象素的Z-值。
<B-6.象素移位>
在这一节里,根据到目前为止获得的一个Z-值以及由用户指定的一个参数确定视差(位移量),并且根据位移量水平移动一个象素。象素移位的整体处理 (图7步骤S110)如图32所示。注意*image3d是表示储存立体图像数据的地址的指针。
首先,将计数器CLN重置为0(步骤S1001),并且检查CLN的当前值是否小于HT(步骤S1002)。如果不满足步骤S1002的条件,则处理结束。如果满足步骤S1002的条件,则将计数器CWD重置为0(步骤S1003)。
接下来,检查CWD的当前值是否小于WD(步骤S1004)。如果满足步骤S1004的条件,则调整对应于各outinfo的Z-值的范围(步骤S1005)。以下将步骤S1005中获得的一个Z-值称为一个ZZ。以下将参考图33说明ZZ的计算。
首先,用舍入因子MK调整一个Z-值可能取的值(步骤S1020和S1021)。此调整与步骤S700的处理类似。以下将步骤S1020和S1021中获得的一个Z-值称为一个ZZ。
接下来,检查ZZ是否大于一个上限(步骤S1022)。上限是由用户在设置对话面板的输入框IB3中输入的。如果ZZ大于上限(步骤S1022,“是”),则用上限替换ZZ(步骤S1023)。类似地,检查ZZ是否小于一个下限(步骤S1024)。下限是由用户在设置对话面板的输入框IB4中输入的。如果ZZ小于下限(步骤S1024,“是”),则用下限替换ZZ。
通过前述处理过程,使得位于上限和下限之外的Z值进入预定范围内。考虑到Z-值较大和Z-值较小的象素的数目与象素总数相比较小这一事实而采用了此处理。当在不出现象素交叉现象的情况下调整Z-值可能取值的范围时,生成的立体图像的质量改进了。
再次参见图32,用先前步骤中获得的ZZ计算视差SS。现在将参考图34说明SS的计算。在步骤S105的颠倒确定中,检查是否实现了一个Z-值的颠倒(步骤S1030)。如果实现了颠倒(步骤S1030,“是”),则将256-ZZ赋给ZZ(步骤S1031)。接下来,将ZZ加上一个接口深度后获得的值赋给SS(步骤S1032)。接口深度是通过设置对话面板的输入框IB1输入的。如果没有实现颠倒(步骤S1032,“否”),则处理进行到步骤S1032。
再次参见图32,当计算视差SS时,检查计数器CLN的一个当前值的奇偶性(步骤S1007)。如果计数器CLN的值是偶数(步骤S1007,“是”),则将CN+SS赋给MV,它表示一个象素的位移量(步骤S1008)。如果计数器CLN的值是奇数,则将CN-SS赋给MV(步骤S1009)。从而,以相反的方向移动一个象素,以便为右眼和左眼生成图像。接下来,将由原始2D数据中的src+MV指定的一个位置的象素数据储存在image3d中(步骤S1010)。到目前为止结束了在一个象素上的处理。
接下来,image3d、outinfo和计数器CWD的值加1(步骤S1001),并且处理返回步骤S1004,以便在另一个象素上执行处理。在一条线上的象素上重复执行处理。当在一条线上的所有象素上执行了处理以后(步骤S1004,“否”),将src设为下一条线的开始(步骤S1012),并且CLN的一个当前值加1(步骤S1013),并且处理返回步骤S1002以便在下一条线上执行处理。当已经在所有线上进行了处理时(步骤S1002,“否”),处理结束。
正如到目前为止所说明的,Z值是以对象为基础被调整的,所述对象基础应被视为一个单个对象,从而保持了与对象内的象素相关的深度的顺序。因此,生成的立体图像成功的给予了观察者逼真的印象。
在此实施例中,由于上述调整是在一个Z-值上执行的,因此可以生成高质量的立体图像。此外,由于参数是由用户通过生成一幅立体图像的设置对话面板输入的,因此也可以根据用户偏好来生成一幅立体图像。
虽然在此实施例中是顺序实现图7中所示的步骤S103至S109的调整的,但是不必实现步骤S103至S109的所有步骤。当然也可以从步骤S103至S109的多个调整中选择要实现的一个或多个首选的调整。
<C.对第一实施例的修改>
<1.增强>
可以向一幅立体图像提供增强一个屏幕中显示的多个对象中的一个或多个特定对象的可塑性的效果。此增强对于一个对象在深度方向移动的情况尤其有效。图35是描绘增强的示意图。具体地,通过将一个预定的值加到对象OBa中包含的等高平面中的Z-值来实现增强,如图35所示。
图36显示了当实现3D模式时执行的增强的处理流程的一个例子。图35所示的处理与第一实施例的不同之处在于它在象素移位(步骤S1111)之前执行增强(步骤S1110)。步骤S1101至S1119与第一实施例的各步骤相同,因此省略对它们的说明。
以下将参考图37说明增强(步骤S1110)。注意offset_z是表示增强一个对象的程度的参数。首先,在步骤S1120至S1222中执行一个终止检查。具体地,将计数器CLN重置为0(步骤S1120),并且检查计数器的当前值是否小于HT(步骤S1121)。如果不满足步骤S1121的条件,则增强结束。如果满足步骤S1121的条件,则将CLN的值重置为0(步骤S1122)。
接下来,检查计数器CWD的当前值是否小于WD(步骤S1123)。如果满足步骤S1123的条件,则绘出一条半直线,它始于一个坐标(CWD,CLN),止于图像的上边缘顶部(步骤S1124),并且获得半直线与等高线的交点数目(步骤S1125)。
接下来,检查交点数目的奇偶性(步骤S1126)。如果交点数目为奇数(步骤S1126,“是”),则确定坐标(CWD,CLN)位于一个相应的矩形之内。接下来,将z_image+CLN*WD+CWD赋给pz_image(步骤S1128),并且将*pz_image+CLN*WD+CWD*的一个值赋给*pz_image(步骤S1129)。如果交点数目为偶数(步骤S1126,“否”),则忽略步骤1127至S1129。到目前为止,在一个象素上执行了增强。接下来,计数器CWD的一个值加1,并且处理返回步骤S1123以便在另一个象素上执行增强。当已在所有象素上执行了增强时此处理结束。
<2.显示方案>
在上述实施例中,采用了用于显示一幅立体图像的所谓的奇-偶方案,其中左眼的图像显示在显示器21的屏幕的偶数行上,而右眼的图像显示显示器21的屏幕的奇数行上。但是在本发明中可以采用其他显示方案。例如,可以在显示器21的一个屏幕的偶数行上显示右眼的图像,而在显示器21的一个屏幕的奇数行上显示左眼的图像。
另外,可以采用一种所谓的上-下方案,如图38所示,其中将用于左眼的一幅图像的偶数行的数据读出并储存在一个帧缓冲器的上半部分,而将用于右眼的一幅图像的奇数行的数据读出并储存在缓冲器的下半部分。此方案通常用在显示一幅立体图像的投影仪或或类似的设备中。当然,可以读取用于右眼的一幅图像的偶数行的数据并将其储存在缓冲器的上半部分,并且读取用于左眼的一幅图像的奇数行的数据并将其储存在缓冲器的下半部分。
此外,可以采用如图39所示的一种所谓的左-右方案,其中将用于左眼的偶数行的数据读出并储存在一个帧缓冲器的左半部分中,而将用于右眼的奇数行数据读出并储存在缓冲器的右半部分中。此方案通常用在显示一幅立体图像的一个CRT中。当然,可以将用于右眼的偶数行数据储存在缓冲器的左半部分中,而将用于左眼的奇数行数据储存在缓冲器的右半部分中。
此外,可以采用一种所谓的两帧方案,如图40所示,其中用于左眼的一幅图像被储存在偶数帧缓冲器中,而用于右眼的一幅图像被储存在奇数帧缓冲器中。此方案通常用在显示一幅立体图像的一个投影仪或类似的设备中。当然,可以将用于右眼的图像数据储存在偶数帧缓冲器中,而将用于左眼的图像数据储存在奇数帧缓冲器中。
此外,可以采用一种所谓的奇-偶文件分离方案,如图41所示,其中用于左眼的图像数据和用于右眼的图像数据分开储存在文件中。此方案通常用在显示一幅立体图像的一个投影仪中。
<3.数据储存区域>
可以将右眼和左眼的图像储存在不同的储存区域中。在此情况下,根据图42所示的一个流程实现象素移位(图7的步骤S110)。根据第一实施例的修改版本进行的象素移位与根据第一实施例本身进行的象素移位的不同之处在于,前者执行图42的步骤S1057至S1060,而不是图32的步骤S1007至S1011。具体地,分别将右眼和左眼的图像数据储存在由用于左眼和右眼的由Rimage3d和Limage3d标识的数据储存区域中。
更具体地,当在步骤S1056中获得视差SS时,将CN+SS赋给MV1并且将CN-SS赋给MV2(步骤S1057)。接下来,将由包含在原始2D图像数据中的src+MV1标识的一个位置上的一个象素的数据储存在Limage3d中(步骤S1058),并且将由src+MV2指定的一个位置上的一个象素的数据储存在Rimage3d中(步骤S1059)。接下来,将Limage3d、Rimage3d、outinfo和CWD的值加1(步骤S1060),并且处理返回步骤S1054以便在另一个象素上执行增强。
<4.数据类型>
在上述实施例中,图像数据是一幅2D彩色图像的数据,但是,本发明可以适用于一幅2D单色多等级图像(例如一部单色电影)的数据。此外,在上述实施例中,要处理的原始数据是移动图像的单帧的数据;但是,在本发明中可以处理一幅静止帧图片的数据。
<5.Z-值的计算>
在上述实施例中,一幅原始图像的R、G和B值分别被乘以系数0.59、0.30、0.11,以生成一个将被后续调整所处理的Z值;但是也可采用其他系数。可以修改系数以便从生成的3D图像中获得最自然的可塑性,或者可以根据用户偏好来修改。此外,可以根据亮度、饱和度或色调而不是RGB来描述一个象素的颜色。此外也可以采用ARGB,其中A表示一个象素的一个alpha分量等。
<6.对象的识别>
在上述实施例中,获取了关于Z-值的等高线,根据等高线识别了一个对象,然后校正关于对象的象素的Z-值。但是在本发明中可采用其他的识别一个对象的方法。例如,根据关于象素亮度、饱和度或色调的信息查找边缘,以便确定由边缘包围的一个区域对应于一个单个对象的区域。
<第二实施例>
<A.装置配置>
现在将说明本发明的第二实施例。相同的数字被分配给与第一实施例相同的元件。第二实施例与第一实施例不同之处在于采用了一个移动终端1A而不是3D图像生成装置1。图43显示了移动终端1A的一个功能配置,图44显示了移动终端1A的一个外部视图。如图44所示,移动终端1A是,例如,一台移动电话。以下说明主要描述第一和第二实施例的差别。
图43显示了一个无线电通信单元27,它包括一个天线AT,用于将移动终端连接到一个移动通信网络,以便发送和接收数据,例如移动的图像数据。该网络包括一个通信单元28,它包括一个扬声器单元和一个扩音器单元,用于实现语音通信。一个显示器21a具有交替显示2D模式图像和3D图像的功能,并且包括一个显示面板,用于在肉眼观察一幅图像时激发立体视觉。一个显示控制单元22a控制显示器单元21a。一个操作单元30是一个输入设备,例如一个十键键盘或一个光标键,通过它用户可以向移动终端1A输入指示。
以下将参考图45和46简要说明当肉眼观察一幅图像时激发立体视觉的原理。如图45所示,显示器21a包括一个背光板211、液晶面板212以及其上放置了视差栏栅的液晶面板213。以等于一个裂缝的宽度的间隔分别显示面板中的用于左眼的条形图像L1至L5和用于右眼的条形图像R1至R5,以便当观察者位于离屏幕一个预定距离远处时,图像L1至L5只到达观察者的左眼而图像R1至R5只到达观察者的右眼。在此情况下,如果将图像生成为使得图像L1至L5和图像R1至R5的视差之差为一个常数,则当图像被肉眼观察到时会激发立体视觉。
再次参考图44,一个十键键盘TK被放置在移动终端1A的下半主体中,并且在上述TK中安放了功能键和一个开关DK,该开关用于在一个正常模式(2D模式)和一个立体视图模式(3D模式)之间切换。显示器21a的一个屏幕被放置在FK和DK上方。天线AT被放置在屏幕上方。分别用于包含在无线电通信单元28中的扬声器单元和扩音器单元的孔28a和28b被放置在移动终端1A的适当位置处。
<2.操作>
<A.静态图像的显示>
图47显示了由移动终端1A执行的显示一幅静态图像的处理流程的一个例子,其中图像被储存在移动终端1A中。首先,在用户打开移动终端1A执行特定操作以选择一幅图像(步骤S2000)之后,CPU 11启用正常模式(2D模式)(步骤S2001)。接下来,CPU 11向一个显示控制单元22a输出图像数据(步骤S2002)。因此,用户能够以通常的方式观察静态图像。
当用户输入一条指令以停止图像再现时(步骤S2003“否”和步骤S2004“是”),CPU 11终止显示图像(步骤S2005)。
当开关DK被操作时(步骤S2003,“是”),CPU 11启用立体视图模式(步骤S2006),并且开始生成一幅立体图像的数据(步骤S2007)。CPU 11将生成的数据输出给显示控制单元22a(步骤S2008)。因此,用户能够观察立体图像。生成一幅立体图像的数据的方法与第一实施例所采用的方法相同,因此省略对它的说明。
当用户输入一条指令以停止图像再现时(步骤S2009“否”和步骤S2110“是”),CPU 11终止显示图像(步骤S2111)。当用户再次操作开关DK(步骤S2009,“是”),处理返回步骤S2001并且实现正常模式(2D模式)。
<B.移动图像的显示>
图48显示了通过一个移动通信网络下载移动图像并且在移动终端1A中显示它们的处理流程的一个例子。当移动终端1A被打开时,CPU 11启用正常模式(2D模式)(步骤S3001)。当用户进行预定操作时,接收包含多帧的移动图像的数据(步骤S3002)。CPU11将接收到的数据储存在RAM 13中,并且将第一帧的数据输出给显示控制单元22a(步骤S3003)。
接下来,CPU 11确定数据是否包含后续的帧(步骤S3004)。在数据不包含后续帧的情况下(步骤S3004,“否”),或者在虽然数据包含后续帧但用户输入了一条指令以终止图像再现的情况下(步骤S3007,“是”),CPU 11终止图像再现。如果数据包含后续帧(步骤S3004,“是”),CPU 11从RAM 13读取另一帧的数据,并且将其输出给显示控制单元22a。
通过上述过程,图像数据被逐帧读出并输出给显示器,直到用户输入一条指令来终止图像再现(步骤S3006“否”和步骤S3007“否”)。当用户输入一条指令来终止图像再现时(步骤S3006“否”和步骤S3007“是”),图像再现终止(步骤S3005)。到目前为止,移动终端1A的用户能以缺省设置按正常模式观察移动图像。
当用户操作开关DK时(步骤S3006,“是”),CPU 11启用立体视图模式(步骤S3008)。接下来,CPU 11从RAM 13一帧接一帧地读出图像数据(步骤S3009)。CPU 11在读出的数据上执行处理,以便生成一幅上述的立体图像(步骤S3010),并且将处理后的数据输出给显示控制单元22a(步骤S3011)。通过此过程,用户能够观察一幅移动的立体图像。
逐帧显示立体移动图像直到满足以下条件之中的至少一个没有后续帧(步骤S3012,“否”);用户操作开关DK(步骤S3013,“是”);用户输入一条终止图像再现的指示(步骤S3014,“是”)。
当用户操作开关DK(步骤S3013,“是”),处理返回步骤S3001,并且CPU 11启动正常模式(2D模式),并且将下一帧的图像数据输出给显示控制单元22a。
在此实施例中,当用户操作开关DK时,显示在显示器21a上的图像(包括一幅静止图像和移动的多幅图像)立体在2D图像和3D图像之间切换。从而用户能在观看图像的同时在2D图像和3D图像之间切换图像。切换能力向用户提供了空前的享受。例如,有可能用户一般以2D模式观看移动的图像并且切换到3D模式以便欣赏最爱的场景。
虽然在此实施例中假定移动图像的数据完全是下载的,但是接收和再现移动图像的方法并不限于上述方法。例如,可采用实况流,其中移动终端1A一幅接一幅地接收图像数据。
<第三实施例>
图49显示了第三实施例的一个3D生成装置1B的功能配置。3D生成装置1B与第一实施例的3D生成装置1的不同之处在于,它具有一个显示控制单元22b、第一数据缓冲器31和第二数据缓冲器32,而不是显示控制单元22,它具有一个显示器21b,而不是显示器21。在此实施例中,采用了一种在佩戴眼镜34的用户中激发立体视觉的方案,其中眼镜34上放置了液晶百叶窗。
与第二实施例类似,在3D图像生成装置1B中可选择立体图模式和正常模式。在3D模式中,显示控制单元22b分别在第一数据缓冲器31和第二数据缓冲器32中储存左眼和右眼的图像数据。显示控制单元22b控制一个开关33,以便交替选择第一数据缓冲器和第二数据缓冲器。具体地,以一个预定的时间间隔在显示器21b上刷新一个屏幕,并且显示控制单元22b与刷新间隔同步地切换开关33。此外,显示控制单元22b与刷新间隔同步地控制眼镜34的百叶窗的开关。
更具体地,当开关33选择第一数据缓冲器31时,打开位于左眼的眼镜上的百叶窗(即透明状态),并且关闭位于右眼的眼镜上的百叶窗(即截止状态)。另一方面,当开关33选择第二数据缓冲器32时,打开位于右眼的眼镜上的百叶窗(即透明状态),并且关闭位于左眼的眼镜上的百叶窗(即截止状态)。通过此过程,用于左眼的图像只到达左眼,而用于右眼的图像只到达右眼,从而激发了立体视觉。当实现2D模式时,显示控制单元22b将图像数据储存在第一数据缓冲器中,并且控制开关33选择第一数据缓冲器31。
图50显示了显示用3D生成装置1B接收到的移动图像的处理流程的一个例子。处理流程的要点与参考图48所说明的第二实施例的流程相同,只不过分别执行步骤S3003b和S3011b而不是步骤S3003和S3011。
更具体地,在2D模式中,CPU 11从储存在RAM 13中的数据中提取单帧的图像数据,并且将其储存在第一数据缓冲器31中,然后选择开关33的第一数据缓冲器31(步骤S3003b)。因此,用户能够以缺省设置观看2D的移动图像。
当实现3D模式时,显示控制单元22b将步骤S3010中生成的用于左眼的图像数据储存在数据缓冲器31中,并且将用于右眼的图像数据储存在第二数据缓冲器32中(步骤S3011b)。接下来,显示控制单元22b与显示器单元21b的刷新间隔同步地转换开关33,使其在第一和第二数据缓冲器之间切换。因此,用户可成功地以三维的方式观看帧图像。在其他帧上逐一执行类似的处理,从而向用户提供移动图像的立体视觉。
<应用>
可以将本发明的3D生成装置应用于用于控制汽车、火车、飞机或类似设备的培训的仿真器。具体地,在仿真器的一个屏幕上显示立体图像使得被培训者能够更逼真地感知显示出的图像。图51显示了一个驾驶仿真器40的一个例子,其中包含了3D图像生成装置1B。
如图51所示,一个操作单元41包括一个控制设备,例如一个方向盘。由用户输入的一条指令被提供给一个仿真处理单元42。仿真处理单元42根据由操作单元41输入的指令执行处理,以生成要显示在屏幕上的图像数据。图像数据被输出给一个帧缓冲器43。
当实现2D模式(正常模式)时,在3D图像生成装置1B上显示2D图像。当实现3D模式时,从帧缓冲器43中提取单帧的图像数据,并且生成一幅立体图像的数据。从而在屏幕上显示了一幅立体图像。
根据本发明的生成一幅3D图像的方法可由LSI(大规模集成电路)实现。立体图像可显示在包含该LSI的多种电子设备上。例如可以将一种根据本发明生成一幅3D图像的方法应用到一个通信终端、数码相机、TV接收机或储存显示器,或应用到医学器具,例如内诊镜。
虽然到目前为止已说明了本发明的首选实施例,但是要理解它们并不是用来将本发明限于这些实施例的。相反,本发明将覆盖替换、变体和等价物,它们可包含在本发明的范围内。
权利要求
1.一种生成立体图像的方法包括一个计算步骤,该步骤根据多个象素的图像数据计算多个象素的Z-值,其中所述多个象素形成一幅图像,每个Z-值被分配给一个象素,并且每个Z-值表示对应于所述一个象素的一个对象的深度;一个调整步骤,该步骤用不同于一个目标象素的另一个象素的Z-值调整所述的计算步骤中获得的目标象素的一个Z-值;以及一个生成步骤,该步骤根据一个目标象素的调整后的Z-值确定目标象素的一个位移量,并且水平移动所述目标象素所述确定的位移量,以便生成右眼和左眼的图像。
2.权利要求1所述的方法,其中在所述的计算步骤中,通过把多个预定权重加到一个目标象素的图像数据的多个颜色分量来获得目标象素的一个Z-值。
3.权利要求2所述的方法,其中分别根据对R、G和B敏感的锥形细胞的比率来确定所述多个权重,其中锥形细胞位于人眼的视网膜中。
4.权利要求1所述的方法,其中在所述的调整步骤中,调整象素的Z-值使得对应于在一幅原始图像中位置靠后的一个对象的一个象素的Z-值可以取的一个单个步长表示的深度深于对应于在原始图像中位置靠前的一个对象的一个象素的Z-值可以取的一个单个步长。
5.权利要求1所述的方法,其中在所述的调整步骤中通过比较一个区域内的一个象素的Z-值与另一个区域内的一个象素的Z-值来分析图像中的象素的Z-值的趋势;并且当分析的一个结果与一个预定的条件相符合时,在所述的生成步骤中颠倒目标象素的位移量和目标象素的Z-值之间的一个数量关系。
6.权利要求1所述的方法,其中在所述的调整步骤中获得包含一个目标象素的一个区域内的多个象素的Z-值的一个均值;并且用获得的均值替换所述目标象素的Z-值。
7.权利要求1所述的方法,其中在所述的调整步骤中获得图像中的所有象素的Z-值的一个分布以及图像中所有象素的一个均值;并且用获得的所述均值校正所述分布的偏差。
8.权利要求1所述的方法,其中在所述的调整步骤中参考所述的计算步骤中计算出的多个象素的Z-值,识别出由所述图像数据表示的图像中的至少一个对象;并且根据位于对应于所述识别出的对象的一个区域内的一个象素的Z-值,调整所述目标象素的Z-值。
9.权利要求1所述的方法,其中在所述的调整步骤中,根据由用户指定的一个参数值确定Z-值量化的步长大小。
10.权利要求1所述的方法,其中在所述的调整步骤中,根据由用户指定的一个参数值确定计算出的Z-值的一个上限或一个下限。
11.权利要求11所述的方法,进一步包括获得由多幅图像组成的移动图像的步骤,并且其中根据每幅图像生成一幅立体图像,以便实时地生成对应于移动图像的立体图像。
12.一种生成立体图像的立体图像生成装置包括一个计算装置,用于根据多个象素的图像数据计算多个象素的Z-值,所述多个象素形成一幅图像,每个Z-值被分配给一个象素,并且每个Z-值表示对应于所述一个象素的一个对象的深度;一个调整装置,用于用不同于一个目标象素的另一个象素的Z-值调整所述的计算装置中获得的目标象素的Z-值;以及一个生成装置,用于根据一个目标象素的调整后的Z-值确定目标象素的一个位移量,并且水平移动所述目标象素所述确定的位移量,以便生成右眼和左眼的图像。
13.权利要求12所述的装置,进一步包括一个获得装置,用于从一个用户获得所述的调整装置中所使用的一个参数。
14.权利要求13所述的装置,其中参数表示所述Z-值的一个上限或一个下限。
15.权利要求13所述的装置,其中参数表示所述Z-值量化的步长大小。
16.权利要求13所述的装置,进一步包括储存装置,用于储存用于右眼和左眼的图像数据;以及显示装置,用于根据一个预定的方案显示由储存在所述储存装置中的图像数据表示的一幅图像。
17.一种引起一台计算机行使以下功能的计算机程序产品一个计算装置,用于根据多个象素的图像数据计算多个象素的Z-值,所述多个象素形成一幅图像,每个Z-值被分配给一个象素,并且每个Z-值表示对应于所述一个象素的一个对象的深度;一个调整装置,用于用不同于一个目标象素的另一个象素的Z-值调整所述的计算装置中获得的目标象素的Z-值;以及一个生成装置,用于根据一个目标象素的调整后的Z-值确定目标象素的一个位移量,并且水平所述移动目标象素所述确定的位移量,以便生成右眼和左眼的图像。
全文摘要
在一个3D图像生成装置1中根据2D图像数据的灰度值计算象素的深度值(Z-值)。接下来,在Z-值上执行一个颠倒确定、平滑、分布调整、局部调整和类似的操作。接下来,根据最终获得的象素的Z-值来确定象素的视差,并且根据视差移动象素,以便生成一幅立体图像的数据。
文档编号G06K9/00GK1675937SQ0381960
公开日2005年9月28日 申请日期2003年8月20日 优先权日2002年8月20日
发明者江良一成 申请人:江良一成
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1