本发明涉及编码装置、解码装置以及非暂时性计算机可读介质。
背景技术:
诸如3d打印机(三维打印机)这样的三维制造装置是分布式的。作为用于3d打印机的数据格式,广泛使用由多边形的网格表示描述三维形状的格式,诸如stl(标准三角测量语言:standardtriangulatedlanguage)格式或3ds格式。
另外,申请人提出一种被称为“fav”的数据格式,该格式由体素表示描述要用3d打印机建模的三维模型(“thenext-generation3dprintingdataformatfav,whichenablesanunprecedentedwiderangeofexpression,”tomonaritakahasi和masahikofujii,fujixeroxtechnicalreport,no.26,2017年4月27日)。在fav格式下,除了表达三维形状之外,还通过使体素具有诸如颜色、材料、与其他体素的联系强度等的各种属性来表达各种特性。
如可以从二维全彩图像的位图表示的数据量变得庞大的事实推断的,在体素具有各种属性(特别是颜色)时,表达三维形状的体素形式的数据(被称为体素数据)量变得非常庞大。因此,需要一种能够减少体素数据量的编码方法。
jp-b-2888186和jp-b-3885413公开了用于减少二维图像的数据量的编码方法。这些方法使用预测编码方法,该预测编码方法从在关注像素附近的像素的值预测关注像素的值,以设置与邻近像素对应的预测器,并且这些方法基于正确预测关注像素的值的预测器的识别信息来编码关注像素的值。
和由ct(计算机断层摄影:computedtomography)等形成的三维体素数据不同,表达要建模的三维形状的体素数据具有稀疏的特性。即,要建模的三维形状一般仅占据限定三维形状的三维空间的一部分,并且界定三维空间的正规独立网格的网格位置包括体素(三维形状的一部分)存在的位置和没有体素存在的位置。因此,如果仅转移应用于密集设置像素的二维图像的编码方法,则无法预期高编码效率。
jp-a-2005-235210公开了一种编码包括体素数据的三维体数据的方法。该编码方法包括以下步骤:将包括点纹理数据、体素数据或八叉树数据(octreedata)中的至少一个的三维体数据转换成向中间节点给予预定标签的自适应八叉树数据;编码自适应八叉树的节点;以及从由编码自适应八叉树的节点的步骤中的编码获得的数据生成位流。该文献的第[0072]段描述了对于通过逐步等分体积获得的节点中的p节点分别编码深度信息和颜色信息,并且对于深度信息,将关注体素的同一层以及紧接其下方的层中的邻近体素的值的组合用作上下文(context),以执行是一种预测编码的ppm编码。
jp-a-07-230555公开了一种在存储介质中存储的原始纹理图像由离散余弦变换单元空间地变换成空间频率图像数据的方法。多边形计算单元计算多边形的尺寸,并且计算要粘贴的纹理的分辨率。空间低通滤波器以与纹理的分辨率对应的截止频率对空间频率图像数据的低频带进行滤波。逆空间变换已滤波的空间频率图像数据,然后将其缩小为预定尺寸的贴图细化(mipmap)图像。
已经提出一种技术,该技术用于对由ct(计算机断层摄影)等获得的体数据执行诸如dct(离散余弦变换:discretecosinetransform)等的频率转换,并且切割转换结果的高频分量,从而减少数据量(“volumedatacompressionusingthree-dimensionaldiscretecosinetransform,”hiroyukimorishita和yoshioohno,informationprocessingsocietyresearchreportgraphicsandcad(cg),1995(63(1995-cg-075),1995年6月14日;yiji“volumedatacompressionusingvectorquantizationanddiscretecosinetransform,”koichiharuyama和nobuyukiumezu,theinstituteofimageinformationandtelevisionengineerswinterconventionproceedings(2001),90,2001年12月6日)。
技术实现要素:
本发明的非限制性实施方式的一个方面涉及,如与在不使用上下文信息的情况下编码体素属性值的同时基于上下文信息编码指示体素的存在/不存在的结构信息的方法相比,提高整个体素数据的编码效率。
对表达由3d打印机等制造的三维形状的数据建模是稀疏的。即,在限定三维形状的坐标系的网格位置中存在许多没有三维形状的网格位置。在对这种建模数据简单地执行有损压缩的情况下,在解码压缩数据时,所谓的蚊式噪声可能发生在三维形状存在的区域与没有三维形状存在的区域之间的边界附近,并且指示三维形状的属性的值可能出现在没有三维形状存在的区域中的网格位置处。在使用这种已解码数据制造对象(三维形状)时,三维形状的一部分可以在三维形状最初不存在的位置处制造。
本公开的非限制性实施方式的另一个方面涉及提供一种机制,即使在以有损方式压缩和解压缩(解码)表示三维形状的三维数据时,该机制也能够切割最初没有三维形状存在的区域中的噪声。
根据本公开的第一方面,提供了一种编码装置,该编码装置包括:提取单元,该提取单元从由空间中的网格位置处设置的体素的集合表达三维形状的体素数据提取(i)指示各网格位置处的体素的存在/不存在的结构信息,和(ii)包括各体素的属性值的属性信息;结构编码单元,该结构编码单元通过根据第一上下文信息确定与具有至少网格位置的结构元素的结构信息对应的结构码,来编码结构信息,该第一上下文信息指示结构元素周围的至少一个预定网格位置处的体素的存在/不存在;以及属性编码单元,该属性编码单元使用第二上下文信息将关注体素的属性值编码成属性码,第二上下文信息指示关注体素周围的至少一个预定网格位置处的体素的存在/不存在。
根据本公开的第二方面,在第一方面的编码装置中,对于第一上下文信息的各值,提供了用于结构信息的编码的结构码表。结构编码单元使用与关于结构元素的第一上下文信息的值对应的结构码表,来确定与关于结构元素的结构信息对应的结构码。
根据本公开的第三方面,在第一至第二方面中的任意一个的编码装置中,结构编码单元将彼此相邻的多个网格位置的组设置为结构元素。结构编码单元使用指示三维地在结构元素周围的多个预定网格位置处的体素的存在/不存在的第一上下文信息,来编码指示在结构元素中包括的各网格位置处的体素的存在/不存在的组合的结构信息。
根据本公开的第四方面,在第一至第三方面中的任意一个的编码装置中,对于第二上下文信息的各值,提供了用于编码属性信息的属性码表。属性编码单元基于关注体素周围的体素的属性值,来对与关注体素对应的属性值进行预测编码。属性编码单元将与对应于关注体素的第二上下文信息的值对应的属性码表,用作预测编码中的码表。
根据本公开的第五方面,在第三方面的编码装置中,对于由结构信息表示没有体素的网格位置,属性编码单元不输出由预测编码确定的属性码。
根据本公开的第六方面,在第一至第五方面中的任意一个的编码装置中,属性编码单元将与包括关注体素所在的网格位置的结构元素对应的第一上下文信息用作第二上下文信息。
根据本公开的第七方面,提供了一种存储程序的非暂时性计算机可读介质,该程序使得计算机执行编码处理,该编码处理包括:从由空间中的网格位置处设置的体素的集合表达三维形状的体素数据提取(i)指示各网格位置处的体素的存在/不存在的结构信息,和(ii)包括各体素的属性值的属性信息;通过根据第一上下文信息确定与具有至少网格位置的结构元素的结构信息对应的结构码,来编码结构信息,该第一上下文信息指示在结构元素周围的至少一个预定网格位置处的体素的存在/不存在;以及使用第二上下文信息将关注体素的属性值编码成属性码,第二上下文信息指示关注体素周围的至少一个预定网格位置处的体素的存在/不存在。
根据本公开的第八方面,提供了一种解码装置,该解码装置包括:输入单元,该输入单元输入由根据第一方面的编码装置生成的结构码和属性码;结构解码单元,该结构解码单元使用第一上下文信息解码结构码,该第一上下文信息是在与结构码对应的结构元素周围的至少一个预定网格位置处的已经解码体素的存在/不存在的组合;属性解码单元,该属性解码单元使用第二上下文信息解码属性码,该第二上下文信息指示在与属性码对应的体素周围的至少一个预定网格位置处的已经解码体素的存在/不存在;以及恢复单元,该恢复单元根据解码后的结构信息和各体素的属性值恢复体素数据。
根据本公开的第九方面,提供了一种存储程序的非暂时性计算机可读介质,该程序使得计算机执行解码处理,该解码处理包括:输入由第一方面的编码装置生成的结构码和属性码;使用第一上下文信息解码结构码,该第一上下文信息是在与结构码对应的结构元素周围的至少一个预定网格位置处的已经解码体素的存在/不存在的组合;使用第二上下文信息解码属性码,该第二上下文信息指示在与属性码对应的体素周围的至少一个预定网格位置处的已经解码体素的存在/不存在;以及根据解码后结构信息和各体素的属性值恢复体素数据。
根据本公开的第十方面,提供了一种编码装置,该编码装置包括:提取单元,该提取单元从由体素的集合表达三维形状的三维数据提取结构信息,该结构信息指示各网格位置处的体素的存在/不存在,所述体素分别具有属性值并且设置在空间中的网格位置处;压缩单元,该压缩单元通过对在各网格位置处的三维数据的属性值执行有损压缩来生成压缩数据;以及输出单元,该输出单元将结构信息和压缩数据彼此关联地输出。
根据本公开的第十一方面,第十方面的编码装置还包括结构编码单元,该结构编码单元对结构信息进行编码,并根据上下文信息确定与包括至少一个相邻网格位置的关注结构元素的结构信息对应的结构码,该上下文信息指示在关注结构元素周围的至少一个预定网格位置处的体素的存在/不存在。输出单元将包括由结构编码单元确定的结构码的已编码结构信息代替结构信息而与压缩数据关联地输出。
根据本公开的第十二方面,在第十一方面的编码装置中,对于第一上下文信息的各值提供了用于编码结构信息的结构码表。结构编码单元使用与关于关注结构元素的上下文信息的值对应的结构码表,来确定与关注结构元素的结构信息对应的结构码。
根据本公开的第十三方面,在第十一至第十二方面中的任意一个的编码装置中,结构编码单元将彼此相邻的多个网格位置的组设置为关注结构元素。结构编码单元使用指示三维地在关注结构元素周围的多个预定网格位置处的体素的存在/不存在的上下文信息,来编码指示在关注结构元素中包括的各网格位置处的体素的存在/不存在的组合的结构信息。
根据本公开的第十四方面,第十至第十三方面中的任意一个的编码装置还包括扩添加单元,该添加单元向与体素相接并且没有体素的网格位置添加体素,该添加的体素具有根据该没有体素的网格位置附近的至少一个体素的求得的属性值。压缩单元对由添加单元将添加了体素的三维数据执行有损压缩。
根据本公开的第十五方面,提供了一种存储程序的非暂时性计算机可读介质,该程序使得计算机执行编码处理,编码处理包括:从由体素的集合表达三维形状的三维数据提取结构信息,该结构信息指示各网格位置处的体素的存在/不存在,所述体素分别具有属性值并且设置在空间中的网格位置处;通过对各网格位置处的三维数据的属性值执行有损压缩来生成压缩数据;以及将结构信息和压缩数据彼此关联地输出。
根据本公开的第十六方面,提供了一种解码装置,该解码装置包括:输入单元,该输入单元输入结构信息和压缩数据,该结构信息和该压缩数据彼此关联并且由第十方面的编码装置输出;生成单元,该生成单元通过对压缩数据执行与有损压缩对应的解压缩处理,来生成针对各网格位置的解压数据;以及改变单元,该改变单元把由解压数据表示没有体素的网格位置的属性值改变为表示没有体素的值。
根据本公开的第十七方面,提供了一种存储程序的非暂时性计算机可读介质,该程序使得计算机执行解码处理,该解码处理包括:输入结构信息和压缩数据,该结构信息和该压缩数据彼此关联并且由第十方面的编码装置输出;通过对压缩数据执行与有损压缩对应的解压缩处理,来生成针对各网格位置的解压数据;以及将由解压数据表示没有体素的网格位置的属性值改变为表示没有体素的值。
凭借本公开的第一或第七方面,可以如与在不使用上下文信息的情况下编码体素属性值的同时基于上下文信息编码指示体素的存在/不存在的结构信息的方法相比,提高整个体素数据的编码效率。
凭借本公开的第二方面,可以根据第一上下文信息编码结构信息。
凭借本公开的第三方面,如与对于各网格位置编码结构信息的方法相比,可以进一步提高编码效率。
凭借本公开的第四方面,可以根据第二上下文信息编码属性信息。
凭借本公开的第五方面,如与输出没有体素的网格位置的属性码的方法相比,可以进一步提高编码效率。
凭借本公开的第六方面,可以比将不同上下文信息用于编码结构信息和属性信息的方法更简化编码所必要的构造。
凭借本公开的第八或第九方面,可以解码由上述编码装置生成的代码。
凭借本公开的第十、第十五、第十六或第十七方面,即使在以有损方式压缩和解压缩(解码)表示三维形状的三维数据时,也可以切掉最初没有三维形状存在的区域中的噪声。
凭借本公开的第十一或第十二方面,可以压缩与压缩数据关联的结构信息。
凭借本公开的第十三方面,如与对于各网格位置编码结构信息的方法相比,可以进一步提高编码效率。
凭借本公开的第十四方面,可以防止或减少由于由三维数据表示的三维形状的表面引起的有损压缩噪声在压缩数据的解码结果中出现在三维形状内部。
附图说明
将基于以下附图详细地描述本发明的示例性实施方式,附图中:
图1是例示了根据第一示例性实施方式的编码装置的功能构造的图;
图2是例示了包括多个网格位置的结构元素和构成与其对应的上下文信息的网格位置组的示例的图;
图3是例示了用于关注体素的颜色预测的相邻体素组的图;
图4是用于说明结构元素的编码的机制的图;
图5是用于说明颜色预测结果的编码的机制的图;
图6是例示了解码装置的功能构造的图;
图7是例示了根据第二示例性实施方式的编码装置的构造的图;
图8是用于说明三维dct单元的处理的图;
图9是例示了三维dct单元的内部构造的图;
图10是例示了根据第二示例性实施方式的解码装置的构造的图;
图11是例示了根据第二示例性实施方式的修改例的编码装置的构造的图;以及
图12是例示了根据第二示例性实施方式的另一个修改例的编码装置的构造的图。
具体实施方式
[第一示例性实施方式]
下文中,将参照图1描述根据第一示例性实施方式的编码装置。
参照图1,编码装置100包括结构信息生成单元102、上下文生成单元104、颜色预测单元106、颜色信息生成单元108、基于上下文的编码单元110以及颜色信息编码单元112。
体素数据10被输入到该装置。体素数据10是,例如由一组体素限定要在三维制造设备中制造的三维形状的数据。体素是充当三维形状的构成单位的元素。体素被容纳在独立盘状的小空间中,该小空间通过用与x、y以及z坐标轴平行的等间隔直线将包含三维形状的三维空间划分成网格来获得。该小空间在下文中被称为网格位置或单元格。小空间具有立方体形状,并且体素通常为但不限于为占据整个小空间的立方体形状元素。独立体素具有至少一个属性,诸如颜色、材料、与相邻体素的关系的强度(例如表示结合强度)。空间中的网格位置包括:存在构成三维形状的体素的网格位置,和没有这种体素的网格位置。体素数据10包括指示在各独立网格位置处的体素的存在/不存在的信息和关于具有体素的网格位置指示体素的至少一个属性的值的信息。fav格式是能够表达这种体素数据10的数据格式的示例(“thenext-generation3dprintingdataformatfav,whichenablesanunprecedentedwiderangeofexpression,”tomonaritakahasi和masahikofujii,fujixeroxtechnicalreport,no.26,2017年4月27日)。
结构信息生成单元102从输入的体素数据10提取指示在三维空间中的各网格位置(单元格)中的体素的存在/不存在的结构信息。结构信息是如下的数据,其中,指示网格位置处的体素的存在/不存在的值(这些值可以每网格位置由一位(比特)表达)根据网格位置的预定排列顺序来排列。在体素数据10为fav格式时,因为体素数据10包括:被命名为指示各网格位置处的体素的存在/不存在的“voxel_map”的数据,所以结构信息生成单元102可以从体素数据10提取“voxel_map”。
上下文生成单元104生成要用于基于上下文的编码单元110的编码的上下文信息。上下文信息是在三维地包围关注网格位置(在一些情况下,该网格位置没有体素,但为了方便起见,它被称为“关注体素”)的至少一个预定网格位置处的体素的存在/不存在的组。
例如,在图2所例示的示例中,假定在体素数据10的关注层中以2x2矩阵彼此相邻的四个体素是关注体素,八个参考网格位置(为了方便起见,被称为“参考体素”)处的体素的存在/不存在的组合是上下文信息,并且八个参考体素包括与关注层中的关注体素组相邻的四个参考体素和紧接在四个关注体素下方的四个参考体素。在这种情况下,在同一层(即,由具有同一z坐标的网格位置组形成的层)中,编码(和解码)由之字形扫描(zigzagscanning)推进,在之字形扫描中,x方向是层内的主扫描方向,并且y方向是副扫描方向,并且在完成一层的编码(解码)时,处理沿z方向进行到下一层的编码(和解码)。当前被编码(或解码)的层是关注层,并且在关注层中当前被编码(或解码)的网格位置组是关注结构元素(即,所例示的四个关注体素的组)。在一个示例中,关注层中的参考体素是与关注结构元素相邻并且在关注结构元素在主扫描方向和副扫描方向上的前面侧上(即,在编码或解码时已知参考体素的值)的网格位置。另外,紧接着在下方的层在编码或解码进行的z方向向上推进时,是沿着编码的进展方向紧接在关注层之前的层。
在该示例中,所例示的四个相邻关注体素的组被认为是一个结构元素,并且基于结构元素编码结构信息。即,在编码关注层中的结构信息时,每4(2x2)个体素确定代码。例如,对于结构元素中的四个关注体素限定如图例示的顺序。关于特定结构元素的结构信息是,通过按所限定顺序排列指示在结构元素中包括的关注体素的网格位置处的体素的存在/不存在的值(例如,由表示0和1的一位值来表达)来获得的值。类似地,对于参考体素限定如图例示的顺序。上下文信息是,通过按所限定顺序排列指示在参考体素的网格位置处的体素的存在/不存在的值来获得的值。
颜色预测单元106从与关注体素相邻的体素的颜色来预测体素数据10中的关注体素的颜色。颜色预测单元106包括多个预测器(未示出),所述多个预测器使用不同方法来获得关注体素的颜色的预测值。此处所提及的“不同方法”包括:用于预测器的预测的一个或多个相邻体素不同的情况,和使用不同预测表达来从一个或多个相邻体素的颜色预测关注体素的颜色的情况。如果在由多个预测器获得的预测值中存在与关注体素的颜色匹配的预测值,则颜色预测单元106向随后阶段的处理单元(例如,基于上下文的编码单元110)输出指定获得已匹配预测值的预测器的信息。在对多个预测器排名并且存在进行与关注体素的颜色匹配的预测的多个预测器的情况下,向随后阶段输出指定最高排名预测器的信息。在多个预测器都未获得与关注体素的颜色匹配的预测值时,颜色预测单元106向随后的处理单元输出指示“误预测”的预定值。例如可以通过在编码体素数据的过程中提高具有高成功预测频率的预测器的排名,来动态改变预测器的排名。
在图3所例示的示例中,假定在关注层中紧接在关注体素x下方的网格位置是a,并且在关注层中沿主扫描方向和副扫描方向紧接在关注体素x之前的网格位置分别是b和c。例如,颜色预测单元106包括:第一预测器,该第一预测器输出网格位置a处的体素的颜色,作为关注体素x的颜色的预测值(下文中被简称为“预测值”);第二预测器,该第二预测器输出网格位置b的颜色,作为预测值;以及第三预测器,该第三预测器输出网格位置c的颜色,作为预测值。这些第一至第三预测器仅是示例。代替这些,可以使用为了预测而参考多个网格位置处的颜色的预测器。这种预测器的示例包括:如下预测器,该预测器输出网格位置a和b处的颜色的平均值,作为预测值;如下预测器,该预测器输出网格位置a和c处的颜色的平均值,作为预测值;以及如下预测器,该预测器输出网格位置b和c处的颜色的平均值,作为预测值。进一步地,作为要为了预测而参考的关注体素的相邻网格位置,不仅可以使用与图3所例示的关注体素的表面相邻的网格位置(立方体单元格),还可以使用与关注体素的侧相邻的网格位置(在图3的示例中,为由虚线指示的网格位置d)或与关注体素的立方体的顶点相邻的网格位置(在图3的示例中,为紧接在网格位置d下方的网格位置)。
在没有要参考的网格位置处的体素时,预测器预测预定颜色(例如,白色或黑色),作为网格位置的颜色。
在颜色预测单元106中的所有多个预测器误预测时(即,在多个预测器都未获得与关注体素的颜色匹配的颜色时),颜色信息生成单元108计算指示预定参考网格位置(例如,图3示例中的网格位置a)的颜色与关注体素的颜色之间的差异(即,预测误差)的颜色信息。
基于上下文的编码单元110使用由上下文生成单元104生成的上下文信息,来编码由结构信息生成单元102生成的结构信息和由颜色预测单元106获得的预测结果(即,指示成功预测的预测器或误预测的值)。稍后将用示例的方式来更详细地描述由基于上下文的编码单元110执行的编码处理。
颜色信息编码单元112编码由颜色信息生成单元108生成的颜色信息,以生成颜色信息码。不特别限制用于该编码的编码方法,可以用相关技术的方法和将来开发的方法中的任意一个来实施但该编码。
接着,将参照图4描述由基于上下文的编码单元110执行的、编码结构信息的处理的示例。该示例使用图2所例示的关注体素和参考体素。
在该示例中,基于上下文的编码单元110具有与上下文信息的各个值对应的码表。在图2的示例中,上下文信息是,指示八个参考体素的位置(网格位置)处的体素的存在/不存在的8位值。由此,准备28(即,256)个码表(所例示的码表#0到#255)。与是要编码的对象的关注结构元素的结构信息(在附图中被指示为“关注结构信息”)的值对应的码字,被登记在各码表中。在图2的示例中,关注结构元素包括四个关注体素,并且关注结构信息是,指示这四个关注体素的位置处的体素的存在/不存在的4位值。用于各上下文信息的码表可以基于以下内容来生成:要编码的体素数据10被扫描一次,获得体素数据10中的结构元素的结构信息和上下文信息的组合的出现频率,并且基于出现频率的信息来执行体素数据的优化。另外,从过去的大量体素数据的示例获得的上下文信息的码表的组,可以被登记在基于上下文的编码单元110中并且用于编码。
基于上下文的编码单元110从由结构信息生成单元102生成的结构信息读取关注结构元素的值(关注结构信息),并且从上下文生成单元104获取与关注结构元素对应的上下文信息。然后,基于上下文的编码单元110在与上下文信息对应的码表中输出与关注结构信息对应的码字,作为是关注结构信息的编码结果的结构码。
接着,将参照图5描述由基于上下文的编码单元110执行的、编码颜色预测单元106的预测结果的处理的示例。在该示例中,使用包括与图2所例示的关注结构元素对应的参考体素组的上下文信息。另外,在该示例中,假定颜色预测单元106具有三个预测器1至3,这三个预测器输出图3所例示的参考网格位置a、b以及c的颜色,作为关注体素x的预测值。还假定如果在预测器1至3中存在正确预测关注体素x的颜色的预测器,则输出预测器的识别信息,作为预测结果;并且如果没有这种预测器,则输出指示误预测的预定值,作为预测结果。对于预测器排名,例如,预测器1(a)被排名为最高,预测器2(b)被排名为次之,并且预测器3(c)被排名为最低。
在该示例中,基于上下文的编码单元110具有与图2所例示的上下文信息的值对应的总共256个码表#0至#255。与颜色预测单元106的预测结果的各值对应的码字被登记在各码表中。例如,在使用码表#0的情况下,如果颜色预测单元106的预测结果是“预测器1”,则将预测结果转换成是对应码字的一位值“0”。可以基于以下内容来生成用于各上下文信息的码表:要编码的体素数据10被扫描一次,获得体素数据10中的各体素的颜色预测结果和上下文信息的组合的出现频率,并且基于出现频率的信息来执行体素数据的优化。另外,从过去的大量体素数据的示例获得的上下文信息的码表的组,可以被登记在基于上下文的编码单元110中并且用于编码。
在编码颜色预测结果的处理中,基于上下文的编码单元110从上下文生成单元104获取与关注体素所属于的结构元素对应的上下文信息。然后,从与上下文信息对应的码表,输出与关注体素的颜色的预测结果对应的码字,作为关注体素的颜色预测码。
在将结构信息和颜色预测结果的编码一起考虑时,由基于上下文的编码单元110执行的处理如下。
首先,每当从由结构信息生成单元102生成的结构信息提取具有4个体素的关注结构元素的结构信息(关注结构信息)时,基于上下文的编码单元110从上下文生成单元104获取由与关注结构元素对应的参考体素组指示的上下文信息。基于上下文的编码单元110使用用于与上下文信息对应的结构信息的码表来编码关注结构信息。与此并行地,基于上下文的编码单元110从颜色预测单元106获取在关注结构元素中包括的各关注体素的预测结果,并且使用用于与上下文信息对应的颜色预测结果的码表来编码各关注体素的预测结果。因此,在该示例中,基于上下文的编码单元110将四个颜色预测码与一个结构码关联地输出。四个颜色预测码根据图2所例示的关注体素的顺序来输出。
结合该处理,颜色信息生成单元108生成颜色信息,该颜色信息指示颜色预测单元106输出预测值“误预测”的体素的颜色的预测误差。然后,颜色信息编码单元112编码该颜色信息,以生成颜色信息码。
因此,基于上下文的编码单元110在输出一个结构码的同时输出四个颜色预测码。如果在这四个颜色预测码中存在一个或更多个“误预测”,则基于上下文的编码单元110输出与“误预测”对应的各体素的颜色信息码。假定在基于上下文的编码单元110和颜色信息编码单元112的随后阶段处安装逐结构元素地组合基于上下文的编码单元110和颜色信息编码单元112的输出的组合单元,则组合单元的输出数据的内容如下:
[结构1][颜色预测11(成功)][颜色预测12(成功)][颜色预测13(误预测)][颜色信息13][颜色预测14(误预测)][颜色信息14][结构2][颜色预测21(成功)][颜色预测22(成功)][颜色预测23(成功)][颜色预测14(成功)][结构3]...
在该输出数据的符号中,[结构1]等指示结构码,[颜色预测11(成功)]等指示颜色预测码,并且[颜色信息13]等指示颜色信息码。
在未安装组合单元的情况下,从基于上下文的编码单元110和颜色信息编码单元112并行输出结构码、颜色预测码以及颜色信息码。即使在这种情况下,例如,在解码时,结构码、颜色预测码以及颜色信息码可以基于结构码的排列顺序(即,输出顺序)、颜色预测码的排列顺序以及颜色信息码的排列顺序,来彼此关联。
基于上下文的编码单元110和颜色信息编码单元112的输出数据,或通过在组合单元中逐结构元素地组合输出数据获得的数据,作为流或作为文件递送到解码侧。在生成对于要编码的体素数据10优化的码表组(用于结构信息并且用于颜色预测结果)时,还将这种组递送到解码侧。
概略地说,由编码装置100获得的编码结果(结构码、颜色预测码以及颜色信息码的组)可以通过以相反方式执行上述的编码过程来解码。将参照图6来描述执行该解码处理的解码装置200的示例。
解码装置200包括体素生成单元202、上下文生成单元204、颜色预测单元206、颜色值生成单元208、基于上下文的解码单元210、以及颜色信息解码单元212。
颜色信息解码单元212接收编码结果中的颜色信息码,并且由颜色信息的编码的逆处理来将颜色信息码转换成颜色信息(预测误差)。
颜色值生成单元208将由颜色信息解码单元212解码的颜色信息(预测误差)添加到已经解码的预定参考网格位置的颜色值,以生成与颜色信息对应的体素的颜色值。
基于上下文的解码单元210将编码结果数据中的结构码和颜色预测码,分别解码成结构信息和颜色预测结果。在该解码中,上下文生成单元204从网格位置的已经获得的解码结果(体素的存在/不存在和颜色值)获得上下文信息,并且从与上下文信息对应的码表读取由要解码的代码指示的信息。即,在解码特定结构码时,基于上下文的解码单元210从用于结构码的码表指定与关于与结构码对应的结构元素的上下文信息对应的码表(参见图2),从码表读取与结构码对应的关注结构信息的值,并且将该值作为解码结果输出到体素生成单元202。进一步地,在解码属于结构元素的各体素的颜色预测码时,基于上下文的解码单元210指定用于与上下文信息对应的颜色预测信息的码表(参见图3),从码表读取与颜色预测码对应的预测结果,并且将该结果作为解码结果输出到颜色预测单元206。
颜色预测单元206具有与编码单元100的颜色预测单元106相同的多个预测器。和颜色预测单元106中的预测器相同,这些预测器中的每个预测器从与关注体素相邻的体素的颜色预测关注体素的颜色。为了预测而要参考的相邻体素的颜色已经被解码。颜色预测单元206从多个预测器,选择由基于上下文的解码单元210从颜色预测码解码的颜色预测结果所指示的预测器的预测值,并且将该预测值输出到体素生成单元202。在颜色预测结果的值是除了“误预测”之外时,预测值指示颜色值。在颜色预测结果的值是“误预测”时,没有对应的预测器。在这种情况下,颜色预测单元206获取由颜色值生成单元208从颜色信息生成的颜色值,并且将该颜色值输出到体素生成单元202。
体素生成单元202使用从基于上下文的解码单元210输入的结构信息来生成体素。即,在结构信息中,在“存在体素”的网格位置处生成体素,并且不在“不存在体素”的网格位置处生成体素。另外,体素生成单元202使所生成的体素而与从颜色预测单元206输入的颜色值相关。因此,恢复具有颜色值的体素组。
上下文生成单元204从由上述处理恢复的体素组生成上下文信息。所生成的上下文信息用于基于上下文的解码单元210的解码处理。
上面已经描述了根据第一示例性实施方式的编码装置100和解码装置200。在第一示例性实施方式中,因为不仅结构信息使用上下文信息来编码,颜色信息也使用上下文信息来编码,所以预期如与基于上下文仅编码结构信息相比可以进一步提高编码效率(压缩比)。在用于三维制造的体素数据中,各网格位置处的体素的存在/不存在(即,网格位置是要制造的三维对象的一部分,还是在三维对象外部),受周围网格位置处的体素的存在/不存在影响。这是因为三维对象通过连续累积材料来制造。同样,网格位置中的体素的颜色受周围网格位置处的体素的存在/不存在影响。例如,关于由三维制造生成的三维形状的颜色,在许多情况下,仅对在三维形状表面附近的体素着色足够,并且不必要对在三维形状内部的深度位置处的体素着色。因此,体素的颜色不仅受该体素周围的体素的颜色趋势影响,还受周围网格位置处的体素的存在/不存在影响。由此,通过将上下文信息用于颜色编码,预期编码效率高于在不使用上下文信息的情况下的编码效率。
进一步地,在第一示例性实施方式中,因为结构信息基于包括多个体素的结构元素来编码,所以如与结构信息基于体素编码的情况相比,进一步提高编码效率。
上述第一示例性实施方式仅是示例,并且可以进行各种修改和改进。
例如,当体素具有除了颜色之外的属性时,与颜色类似,使用上下文信息的编码还可以适用于除了颜色之外的属性。体素所拥有的除了颜色之外的属性例如可以包括材料信息、指示与周围体素的关系的强度的联系信息等。材料信息是指示用于制造相关体素的材料的类型的识别信息。联系信息例如是通过按相邻体素的预定排列顺序排列指示相关体素与相邻体素之间的关系的强度的值构造的数值。这里,作为要包括在联系信息中的相邻体素的范围,可以使用6邻域(相邻体素与相关体素面相接)、18邻域(相邻体素与相关体素侧相接)以及26邻域(相邻体素与相关体素顶点相接)中的任意一个。在使用6邻域的情况下,假定相邻体素的排列顺序例如按相关体素的上、下、右、左、前以及后的顺序限定,通过按该顺序排列并且合并相关体素与上相邻体素之间的关系的强度值、相关体素与下相邻体素之间的关系的强度值...相关体素与后相邻体素之间的关系的强度值获得的一个数值是相关体素的联系信息。由联系信息指示的与各相邻体素的关系的强度,例如可以用作指示相关体素及其相邻体素之间的结合强度的信息。代替颜色编码的部分(即,负责颜色预测单元106、颜色信息生成单元108、颜色信息编码单元112以及基于上下文的编码单元110中的颜色预测结果的编码处理的部分)或除了这些部分之外,编码装置100还可以具有对诸如材料或联系强度的其他属性执行相同编码处理的机制。
在第一示例性实施方式中,作为要用于编码体素的颜色(或其他属性)的上下文信息,使用用于编码体素所属于的结构元素(在图2的示例中为关注层中的4个(2x2)相邻体素)的结构信息的上下文信息(参见图2),但这仅是示例。用于编码体素的颜色或其他属性的上下文信息可以与用于编码结构信息的上下文信息分离地生成并且使用。这种情况下的上下文信息例如可以为,按预定顺序排列的、要对于属性编码的体素周围的预定网格位置处的体素的存在/不存在。
在上下文信息在结构信息的编码和属性信息的编码中独立生成的情况下,需要用于生成上下文信息的多个机制,但在第一示例性实施方式中,生成上下文信息的仅一个机制就足够了。
取图2所例示的结构元素(2x2体素)或构成上下文信息的相邻体素组(所例示的八个体素)的方式仅是示例。可以使用包括更多或更少体素的结构元素。进一步地,可以增加或减少用于上下文信息的结构元素的相邻体素的数量。
进一步地,对于没有关注结构元素中的体素的网格位置,基于上下文的编码单元110无法输出颜色预测码。同样,可以从基于上下文的编码单元112向颜色信息编码单元112通知没有关注结构元素中的体素的网格位置,并且颜色信息编码单元112无法对于所通知的网格位置输出颜色信息码。通过这样做,进一步提高编码效率(压缩比)。即使在这种码减少的情况下,因为解码装置200可以知道从结构码的解码结果删除与关注结构元素中的特定网格位置对应的哪个颜色预测码或颜色信息码,所以在推进解码时没有问题。
[第二示例性实施方式]
下文中,将参照图7来描述根据第二示例性实施方式的编码装置。
参照图7,编码装置400包括块切出单元402、三维dct单元404、量化单元406、编码单元408以及结构信息生成单元410。
体素数据10被输入到该装置。
块切出单元402从体素数据10切出块。在图8的(0)所例示的示例中,块300例如是在纵向、横向以及深度方向上具有预定数量的体素(例如,八个体素)的分块。
三维dct单元404对由块切出单元402切出的块执行三维离散余弦变换(dct)。
在一个示例中,三维dct单元404执行图9所例示的处理。即,首先,如图8的(1)例示,三维dct单元404沿着预定方向(例如,x方向)对块300执行一维dct4041。即,在这种情况下,对沿在具有恒定z坐标的层内具有相同y坐标的每一列内的x方向排列的体素的属性值(例如,颜色值)执行dct。对于具有不同z坐标的不同层执行该处理。在列中存在没有体素的网格位置。这种网格位置在例如用预定属性值(例如,0)、相邻体素的属性值或周围体素组(例如,属于包括网格位置的块的体素组)的属性值的平均值填塞(填充)之后经受一维dct。用于特定列的一维dct的处理结果覆写在该列中的各体素的值上。接着,三维dct单元404对于是一维dct4041的处理结果的块执行围绕特定坐标轴(例如,z轴)的90度旋转4043的处理。接着,如图8的(2)例示,三维dct单元404对于被旋转块在与之前相同的方向上执行一维dct4045。因为块已经旋转90度,所以一维dct4045是在与更早的一维dct4041不同的坐标轴方向上的dct。接着,三维dct单元404以与更早90度旋转4043不同的坐标轴为转轴向一维dct4045的处理结果的块应用90度旋转4047。然后,如图8的(3)例示,三维dct单元404在与之前相同的方向上对被旋转的块执行一维dct1049。一维dct4049是在与一维dct4041和一维dct4045不同的坐标轴的方向上的dct。借助上述处理,对块执行三维dct。
返回参照图7,量化单元406对从三维dct单元404输出的各块的三维dct结果的数据执行已知量化处理。虽然因此减少数据量,但因为编码装置400的处理是伴随有量化的有损压缩处理,所以即使在解码压缩结果的已编码数据时,已编码数据也无法返回为与原始体素数据相同的数据。即使在体素数据的情况下,类似图像的jpeg压缩,在解码由这种压缩获得的已编码数据时,诸如蚊式噪声的噪声发生。
编码单元408对由量化单元406获得的量化结果的数据执行诸如熵编码这样的现有技术的编码处理,以生成体素数据10的已编码数据(压缩数据)50。
结构信息生成单元410生成指示在由块切出单元402切出的块的各网格位置(单元格)中的体素的存在/不存在的结构信息52。结构信息是如下的数据,其中,指示网格位置处的体素的存在/不存在的值(这些值可以每网格位置由一位表达)根据网格位置的预定排列顺序来排列。当体素数据10为fav格式时,因为体素数据10包括被命名为指示各网格位置处的体素的存在/不存在的“voxel_map”的数据,所以结构信息生成单元410可以从体素数据10提取“voxel_map”,并且可以从该“voxel_map”提取相关块中的各单元格的信息,以生成结构信息52。
由编码单元408生成的已编码数据50和由结构信息生成单元410生成的结构信息52以它们彼此关联的状态输出。
接着,将参照图10描述用于解码已编码数据50的解码装置500的示例。
解码装置500包括解码单元502、逆量化单元504、三维逆dct单元506以及遮蔽处理单元508。已编码数据50和对应的结构信息52输入到解码装置500。解码装置500解码(扩展)被压缩的已编码数据50。
解码单元502通过与编码单元408的编码处理对应的解码处理,来解码所输入的已编码数据50。逆量化单元504逆量化解码单元502的解码结果。三维逆dct单元506对逆量化结果的数据执行逆dct处理。因此,频率空间的信息返回到真实空间的属性值。
因为由此恢复的体素数据包括由于量化而产生的噪声,所以存在属性值出现在没有体素(因此没有属性值)的网格位置处的情况。在用于制造目的的体素数据的情况下,如果属性值出现在体素最初不存在的网格位置处,则将制造网格位置,这将导致与原始形状不同的形状。为了防止这种情形,解码装置500包括遮蔽处理单元508。
遮蔽处理单元508参考与已编码数据50对应的结构信息52,以遮蔽各网格位置处的解码结果(即,三维逆dct单元506的输出)的属性值中的、在原始体素数据10中没有体素的网格位置的值(即,将值变为表示没有体素的值)。因为从遮蔽处理单元508输出的体素数据经受有损压缩,所以各体素的属性值在一些情况下无法与原始体素数据10确切相同,但体素的三维形状与原始体素数据10的三维形状相同。
接着,将参照图11描述第二示例性实施方式的修改例。
在第二示例性实施方式中,结构信息52是原始数据。同时,根据该修改例的编码装置400包括结构编码单元412,该结构编码单元412压缩并且编码由结构信息生成单元410生成的结构信息。结构编码单元412对结构信息52执行基于上下文的压缩和编码。在图11中,结构信息生成单元410从由块切出单元402生成的块生成结构信息。相反,结构信息生成单元410可以从输入到块切出单元402的体素数据10生成结构信息。这还适用于图7所例示的装置构造的情况。
对于该压缩和编码,结构编码单元412从体素数据10生成上下文信息,并且基于上下文信息来压缩结构信息。
和第一示例性实施方式的基于上下文的编码单元110类似,结构编码单元412对结构信息执行编码处理。
借助该编码处理,将结构信息转换成已编码结构信息52a。
与该修改例的编码装置400对应的解码装置500,可以从已编码结构信息52a解码结构信息,并且将结构信息供给遮蔽处理单元508。在该解码中,从已经获得的网格位置的解码结果(体素的存在/不存在或颜色值)获得上下文信息,并且从与上下文信息对应的码表读出由要解码的代码指示的信息。即,在解码特定结构码时,解码装置500指定用于结构码的码表中的、与关于与结构码对应的结构元素的上下文信息对应的码表(参见第一示例性实施方式中的图2),从码表读取与结构码对应的关注结构信息的值,并且将该值当作解码结果。在该修改例中,因为结构信息的编码基于具有多个体素的结构元素来执行,所以如与结构信息的编码基于体素来执行的情况相比,进一步提高编码效率。
接着,将参照图12描述第二示例性实施方式的另一个修改例。
该修改例的编码装置400包括体素添加单元401。体素添加单元401向与体素数据10中没有体素的网格位置中的体素相邻的网格位置(为了方便起见被称为“网格位置x”),添加具有属性值的体素,该属性值根据在网格位置x附近的至少一个体素的属性值来确定。
这里,网格位置x的“邻域”例如可以为与网格位置(单元格)x相邻的网格位置(例如,与单元格x面相接的6邻域、除了6邻域之外还有是与单元格x侧相接的邻域的18邻域、以及除了18邻域之外还有是与单元格x点相接的邻域的26邻域等)。另外,从与网格位置x相邻的网格位置到相邻网格位置(即,离网格位置x两个单元格的距离的网格位置)的距离可以被设置为“邻域”。一般说来,在离网格位置x预定数量的单元格的距离内的网格位置(单元格)组可以被设置为“邻域”。没有体素的网格位置x和位于其附近的体素组,可以从由结构信息生成单元410从体素数据10生成的结构信息(指示各网格位置处的体素的存在/不存在)来获得。
体素添加单元401通过预定计算方法,从位于没有体素的网格位置x附近的体素的属性值,获得要添加到网格位置x的体素的属性值。该计算方法例如可以是获得邻近体素的属性值的平均值的方法,或根据离网格位置x的距离对邻近体素的属性值加权并且平均的方法。还可以使用其他计算方法。
在体素添加单元401向没有体素的网格位置中与体素相邻的各网格位置添加体素时,由原始体素数据10表示的三维形状的表面(即,三维形状与没有三维形状的空间之间的界面)被另外体素组的层覆盖。体素添加单元401可以通过将体素添加处理重复n次,来用具有n个体素的厚度的另外体素层覆盖由原始体素数据10表示的三维形状的表面。由体素添加单元401执行的处理可以被当作是扩展由原始体素数据10表示的三维形状的处理。
块切出单元402、三维dct单元404、量化单元406以及编码单元408对已经由体素添加单元401执行体素添加的体素数据,执行与上述相同的处理。
如上所述,当执行包括诸如量化这样的处理的有损压缩时,不存在于原始数据中的诸如蚊式噪声等的强噪声出现在已解码数据中。这种噪声特别出现在属性值突然变化的边缘附近。特别地,在表示要制造的三维形状的体素数据10的情况下,强噪声出现在三维形状与外部之间的边界附近。当该噪声的属性值出现在三维形状外部的网格位置处时,网格位置被识别为构成三维形状的体素,但这通过使用结构信息的遮蔽处理单元508的处理删除。然而,噪声还出现在边界附近的三维形状的内部。这种强噪声可能使得在三维形状内部的体素的属性值从其原始值大幅变化,但这种变化无法由遮蔽处理单元508处理。
相比之下,因为图12的修改例的编码装置400用具有基于三维形状表面附近的体素的属性值的属性值的另外体素,来覆盖由原始体素数据10表示的三维形状的表面,所以三维形状与外部之间的边界从原始三维形状向外移动。因此,通过借助于体素添加单元401向体素数据10的三维形状的表面添加具有足够厚度的体素层,在向体素添加之后的数据应用有损压缩时,防止或减少在由已解码数据表示的三维形状的表面附近的噪声出现在原始三维形状内部。
因为由此添加的体素由遮蔽处理单元508来删除,所以它不影响制造。
以上例示的编码装置100和400以及解码装置200和500在一个示例中可以被构造为硬件逻辑电路。作为另一个示例,例如可以通过允许内置计算机执行表示各装置中的各功能模块的功能的程序,来实施编码装置100和400以及解码装置200和500。这里,计算机具有电路构造,该电路构造例如包括诸如cpu这样的处理器、诸如随机存取存储器(ram)和只读存储器(rom)这样的存储器(主储存器)、用于控制硬盘驱动器(hdd)的hdd控制器、各种i/o(输入/输出)接口、用于执行与诸如局域网这样的网络的连接的控制的网络接口等,作为硬件,这些部件例如经由总线连接。另外,用于诸如cd或dvd这样的便携式盘记录介质的读和/或写的盘驱动器、用于各种标准的便携式非易失性记录介质(诸如闪存)的读和/或写的存储读/写器等,可以经由i/o接口连接到总线。描述以上所例示的各功能模块的处理内容的程序经由诸如cd或dvd这样的记录介质或经由诸如网络这样的通信单元存储在诸如硬盘驱动器这样的固定存储装置中,并且被安装在计算机中。在固定存储装置中存储的程序被读取到rma中,并且由诸如cpu这样的处理器执行,以实施以上所例示的功能模块组。另外,编码装置100和400以及解码装置200和500可以由软件和硬件的组合来实施。
对本发明的示例性实施方式的上述说明是为了例示和说明的目的而提供的。并非旨在对本发明进行穷尽,或者将本发明限于所公开的精确形式。显而易见的是,很多修改例和变型例对于本领域技术人员是明显的。选择了实施方式进行说明,以最好地解释本发明的原理及其实际应用,以使本领域其它技术人员能够理解本发明的各种实施方式,以及适合于所设想的具体用途的各种变型。本发明的范围旨在由所附权利要求及其等同物来限定。