具体实施方式
下面将结合附图和实施例对本发明进行详细的描述。
图1是根据本发明的生成图像路径陷印效果的方法的流程图。
如图1所示,该方法包括以下步骤:
步骤1、路径离散化和有效数据裁剪步骤,即,将相交路径在参与陷印的各个图像对象的空间下离散化,并进行参与陷印的有效数据的裁剪;
步骤2、陷印区间划分步骤,即,根据各个参与陷印的图像对象的颜色变化划分陷印区间,并存储颜色满足陷印条件的陷印区间在用户空间下的坐标;
步骤3、陷印效果生成步骤,即,选择合适的图像空间作为最终生成陷印的空间,并在该空间下对存储的陷印区间逐个地生成陷印效果,并输出陷印结果。
以下将分别对上述3个步骤进行说明。
首先,描述路径离散化和有效数据裁剪步骤(图1中的步骤S1)。
该步骤的目的是在图像空间下裁剪出参与陷印的有效数据,从而减少陷印的计算量和存储资源,提高处理效率,并避免在用户空间下裁剪有效数据的过程中引入误差。具体地讲,在对图像对象作路径陷印时,图像点阵中远离页面上图元与图像对象相交的路径的部分点阵对于陷印处理是没有贡献的。因此,为了节省计算量和存储资源,提高处理效率,需要对当前图像对象的点阵数据进行裁剪,仅获得参与陷印的有效数据。为了避免在裁剪有效数据的过程中引入误差,本发明在图像空间下进行图像数据操作。因此,首先需要将相交路径从用户空间下转换到图像空间下,然后按照图像栅格进行离散化。对相交路径进行离散化之后,根据离散点来确定该路径都穿越了哪些图像像素,然后,可将这些像素及其周围的相邻点作为有效数据裁剪出来。
在详细描述该步骤之前,首先对用户空间和图像空间这两个概念进行简单说明。用户空间是指PDF文件中所定义的坐标空间,所有的页面图元对象的位置都是在该空间下描述的,其坐标原点位于页面的左下角。图像空间则是指图像点阵自身的坐标空间,其坐标原点位于图像点阵的左上角。图像被放置到页面上时,需要经过图像空间向用户空间的坐标变换。
在该步骤中,离散化步骤主要是指在图像空间下按照图像栅格计算相交路径与栅格线的交点,并将这些交点记录为离散点。为了更精确地获取离散点,可首先将路径在用户空间下折线化,即,将曲线描述的路径转化为一条条端点首尾相连的折线段。这些折线段在精度阈值的控制下,尽可能地逼近原有的曲线形态。然后,将折线化后的结果逐段进行离散化,即,将折线段的起止端点坐标从用户空间变换到图像空间,并根据端点在图像栅格内的位置,计算折线段与栅格线的交点。
计算折线段与栅格线的具体算法如下:
步骤一、根据折线段起止点的坐标,计算折线段的斜率,并确定扫描方向。如果斜率小于1,按照X方向自左向右扫描;如果斜率大于1,按照Y方向自上向下扫描。
步骤二、记录起止点为离散点的首末点。如果起点在扫描方向上的坐标大于终点坐标,将起止点对调,保证扫描是递增扫描的;起点在扫描方向上的坐标向上取整,取整后坐标所对应的栅格线(垂直于扫描方向的栅格线),作为当前扫描栅格线。
步骤三、计算当前扫描栅格线与折线段的交点,如果交点在扫描方向上的坐标大于终点在扫描方向的坐标值,则转到步骤五;比较该交点与折线段和前一个栅格线的交点(在该交点为所求的第一个交点的情况下,比较该交点与折线段起点)在垂直于扫描方向的坐标取整值,如果两者相差为一,表示该两个交点之间有平行于扫描方向的栅格线出现,转到步骤四,否则,记录该交点为离散点,取下一个相邻的栅格线作为当前扫描栅格线,重复步骤三。
步骤四,计算路径与所述平行于扫描方向的栅格线的交点,如果该交点与已有交点重合,则不重复计入离散点集内,否则将该交点记为离散点,插入到步骤三所求的两个交点之间,返回步骤三。
步骤五,如果扫描点的起止点对调过,将所有求得的离散点逆序排列。获得最终的折线段离散点,结束操作。
此外,在计算折线段与栅格线的交点过程中,如果路径的折线段与栅格线重合,则需要根据图像对象相对于路径的位置将路径平移,从而使路径穿越像素点内部,这样才能正确识别该路径所穿越的像素点。注意,平移量不可以过大,最大不得超过1。在之后记录陷印区间的坐标时,还需要对相应的坐标值补偿该平移量,以得到原始坐标值。可按照如下原则进行平移:如果相交路径的折线段与水平栅格线重合,则根据图像对象是位于路径前进方向的上侧还是下侧将该路径向上或向下平移;如果相交路径的折线段与垂直栅格线重合,则根据图像对象是位于路径前进方向的左侧还是右侧将该路径向左或向右平移。
图2示出了路径离散化的示意图,其中,网格即为图像栅格,w、h分别为图像的宽、高,P1至P7点为折线段与图像栅格的交点。具体地讲,在图2中,由于折线段的斜率小于1,所以扫描方向是X方向,折线段与垂直栅格线1交于点P3,起点P1在Y方向向下取整坐标为h-1,P3在Y方向向下取整坐标为h-2,两值相差为一,则可判知水平栅格线h-1与折线段相交,交点为P2,将P2插入P1与P3之间,然后继续扫描计算。折线段与下一条垂直栅格线2交于点P4,P4在Y方向向下取整坐标为h-2,因此P3与P4之间不存在水平栅格线的交点,继续下一条垂直栅格线的扫描计算。
在将路径离散化完成之后,可根据离散点来确定路径都穿越了哪些图像像素,这些像素及其周围邻点便可以作为有效数据裁剪出来。有效数据的裁剪只在图像点阵和Mask点阵中进行。根据路径的尺寸大小,可采用以下两种方式进行裁剪。
第一种裁剪方式是依次对每个离散点进行有效数据的裁剪。如图3所示,相邻的两个离散点的中点必在像素点的内部,因此可以确定相交的图像像素,即路径上的像素点。而像素点的邻点,对于按照X方向扫描的路径,取每个像素的上下邻点;按照Y方向扫描的路径,取每个像素的左右邻点。邻域的宽度定义为陷印宽度在当前图像空间下的向上取整值。假设离散点是N个,陷印宽度为M个像素,则最终裁剪出来的有效数据大小是(N-1)*M个像素。在图3中,离散点是9个,陷印宽度为3个像素,最终裁剪出来的有效数据大小是24个,如图3右侧表所示。虽然在这种裁剪方式中,邻点都并非是当前路径点在垂直于路径方向上的邻点,但是在之后的处理过程中,划分陷印区域的步骤是根据路径点的颜色值来进行划分,而填充陷印区域的步骤是逐点计算的,并不改变邻点在图像中的位置。因此这种裁剪方式不会造成计算误差,而且可以大大提高数据操作的效率。
第二种裁剪方式是以相交路径的最小外接矩形区域作为裁剪区域对图像数据进行裁剪。具体地讲,每一条图像陷印路径都有一个BBox参数,其定义了该条路径在用户空间下的最小外接矩形。如果BBox的大小不大于一个指定的阈值,可以将整个BBox区域作为一个有效数据区域来进行裁剪,这样,可以保证文字或者图形标志等小区域的复杂路径被一次完整地裁剪出来。
以上两种剪裁方式都是在各自的图像空间下进行的,保证了所裁剪的数据不会因为图像在用户空间下的空间变换而引入误差。大部分情况下,有效数据的裁剪可使用第一种方式进行处理,但对于一些小尺寸的路径表达,例如文字、标识(logo)等,如果使用第一种方式,很可能因保存过多的辅助信息,导致处理的数据量和复杂度增加,因此,使用第二种方式进行处理更为恰当。
应该理解,以上两种有效数据裁剪方式仅仅是示例性实施方式,本领域的技术人员在本发明基础之上容易想到的任何裁剪方式都应包括在本发明的保护范围之内。
通过以上离散化和裁剪步骤,可获得路径两侧参与陷印的所有图像对象在其各自的图像空间下的有效数据。
接着,描述陷印空间划分步骤(图1中的步骤2)。
该步骤的目的是根据各个图像在路径上的采样点的颜色值来划分陷印空间,达到准确识别Mask点阵中的镂空部分和不镂空部分的交界处以及图像点阵的颜色变化部分的目的,从而提高陷印的精度。
在步骤1中提取了所有图像对象的有效数据之后,开始对每条相交路径依次进行图像陷印处理。每条路径至少会有一个图像对象参与陷印的生成。图像对象可以包含图像点阵或Mask点阵。关于Mask点阵,可规定:取0值表示该点镂空,露出下方页面的原有内容;取1值则表示使用该点在当前图元对象的值,来遮盖住下方页面的原有内容,或者反之。如果一条路径上只有一个图像对象参与陷印,那么只需要计算该图像内的颜色变化即可。但如果一条路径上有多个图像对象参与陷印,由于每个图像对象的点阵分辨率和空间位置并不相同,在扫描路径的过程中,不能保证在步进一个图像的像素点的同时,其他图像的像素点也同样会被步进。因此,每次步进完成一个像素后,需要在所有的图像对象内查找离当前扫描点距离最近的下一个扫描点,该扫描点所处的图像空间即为当前扫描的图像空间,下一次的步进就发生在该图像空间内。而且,计算步进区间内的颜色值时,读取新的图像像素点颜色也只发生在该图像对象内,其他的图像对象仍保持上一次读取的像素颜色值不变,不必重复读取,节省了效率。
基于以上原理,对于包含Mask点阵或图像点阵的图像对象,该步骤包括两个层次的陷印区间划分,第一层次的陷印区间划分针对包含Mask点阵的图像对象,第二层次的陷印区间划分针对包含图像点阵的图像对象。具体地讲,如果参与路径陷印的图像对象中具有包含Mask点阵的图像对象,则先进行第一层次的陷印区间划分,即,根据Mask点阵的镂空部分和不镂空部分划分陷印区间,然后,如果这些陷印区间内具有包含图像点阵的图像对象,则进行第二层次的陷印区间划分,即,根据图像颜色的跳变将上述陷印区间进一步划分为多个子陷印区间;如果参与路径陷印的图像对象中仅有包含图像点阵的图像对象,则先将所述路径的起点和终点分别作为陷印区间的起点和终点,然后,进行第二层次的陷印区间划分,即,根据图像颜色的跳变将这个陷印区间进一步划分为多个子陷印区间。
在第一层次的陷印区间划分过程中,取所有含有Mask点阵的图像对象为当前图像对象集合,陷印区间的终点从所述路径的起点开始,沿着路径前进方向步进。每次步进时,首先获取在当前图像对象集合中的各个图像对象的空间下离当前终点最近的离散点,并判断在从该陷印区间的起点到该离散点之间的陷印区间内路径两侧的陷印对象组合相比于从该陷印区间的起点到当前终点之间的当前陷印区间内路径两侧的陷印对象组合是否发生变化。如果发生变化,则将当前终点记录为当前陷印区间的终点和下一陷印区间的起点,并开始下一陷印区间的步进;如果没有变化,则当前终点步进到该离散点。重复以上步骤,直到步进到所述路径的终点为止。
其中,需要指出的是,第一层次中所述的陷印对象组合,是指在当前陷印区间内,路径两侧参与陷印的对象集合。路径的陷印可能是由两个或多个对象共同作用完成的,需要根据这些对象来决定哪里作陷印,哪里不必作陷印。比如,对于包含Mask点阵的图像对象,镂空部分不作陷印处理,不镂空部分作陷印处理。作陷印作陷印
在第二层次的陷印区间划分过程中,取所有含有图像点阵的图像对象为当前图像对象集合,子陷印区间的终点从所述每个陷印区间的起点开始,沿着路径前进方向步进。每次步进时,首先获取在当前图像对象集合中的各个图像对象的空间下离当前终端最近的离散点,并判断当前终点与该离散点的颜色是否发生了跳变。如果发生了跳变,则将当前终点记录为当前子陷印区间的终点和下一子陷印区间的起点,并开始下一子陷印区间的步进;如果没有发生跳变,则将当前终点步进到该离散点。重复以上步骤,直到步进到该陷印区间的终点为止。
其中,可通过判断图像梯度是否大于预先指定的阈值来确定前后两个图像点的颜色是否发生跳变。图像梯度的计算公式如下,其中A和B分别对应沿路径前进方向的前后两个图像点的最终颜色值,具体地,当前终点与各个图像空间下离该当前终点最近的离散点的最终颜色值,C1~Cn对应各个色版:
Grad=MAX(ABS(A.C1-B.C1),ABS(A.C2-B.C2),…,ABS(A.Cn-B.Cn))
其中,Grad表示图像梯度,MAX表示取最大值,ABS表示取绝对值。各个图像对象的对应点的颜色值从其各自图像空间下的有效数据获取。
另外,需要指出的是,在根据这两个层次划分陷印区间的过程中,可以先将整条相交路径按照第一层次进行划分,得到第一层次的陷印区间,然后对这些陷印区间中含有包含图像点阵的图像对象按照第二层次进行划分,得到第二层次的子陷印区间。或者,也可并行进行这两个层次的划分过程,即,在进行第一层次的陷印区间划分时,如果在当前陷印区间内发现含有包含图像点阵的图像对象,则首先对该陷印区间进行第二层次的陷印区间划分,得到该陷印区间的子陷印区间,然后在返回到第一层次的陷印区间划分过程。
以下将参照图4对陷印区间划分过程进行说明。在图4中,假设含有N个图像对象,其中Mask点阵为Nm个,图像点阵为NI个。处理流程如下:
第一层次的陷印区间划分:设置路径起点为陷印区间的起点P0。如果Nm=0,则设置路径终点为陷印区间的终点P1,进入第二层次的陷印区间划分。否则,需要先划分出Mask点阵的镂空和不镂空部分。取所有含有Mask点阵的图像对象,作为当前的图像对象集合(Current Image Object Set,简称CIOS)。沿着路径前进方向,陷印区间的终点P1开始从起点步进,步进的大小受到CIOS内各个图像对象的离散点位置的影响。每次步进,获取各个图像空间下离P1点最近的离散点,并获取从P1点到该离散点的当前步进区间内路径两侧的陷印对象组合(Current Trap Objects Array,简称CTOA)。如果CTOA与前一个步进区间内的CTOA内容一致,则将该离散点作为新的P1点,继续步进。否则,P1点将变为下一个陷印区间的起点P0,重复以上步骤。同时,如果CTOA中含有图像点阵,先进入第二层次的陷印区间划分;不含图像点阵,则该区间被记录,以备后续生成陷印结果。如果步进到路径终点,则流程结束,
第二层次的陷印区间划分:必然含有图像点阵,需要根据图像的颜色跳变来划分陷印区域,取所有含有图像点阵的图像对象作为CIOS。以P0点作为子陷印区域的起点SP0,终点SP1开始从SP0步进。每次步进,获取各个图像空间下离SP1点最近的离散点,并判断当前终点SP1与该离散点的颜色是否发生了跳变。如果没有发生跳变,则将该离散点作为新的终点SP1,继续步进。如果发生了跳变,则子陷印区域[SP0,SP1]被记录,并以SP1作为新的起点步进,直至到达P1。这样,用一串子陷印区域[SP0,SP1]1,[SP0,SP1]2,…,[SP0,SP1]n代替了区间[P0,P1],作为后续生成陷印结果的陷印区间。之后,返回第一层次的陷印区间划分过程。
在陷印区间划分完之后,根据各个图像在路径上的离散点的颜色值来判断是否满足陷印条件,将满足陷印条件的区间转换到用户空间下保存起来,以备后续的陷印效果生成。该步骤为本领域的公知技术,因此,省略其描述。
这里,顺便一提的是,当多于两个对象时,参与组合的对象中必然至少有一个是含有Mask点阵或者叠印参数,因为在该对象覆盖下的页面图元的内容也会对最终的路径陷印生成做出贡献,因此,为了进一步优化满足陷印条件的区间选择,除了根据各个图像在路径上的离散点的颜色来判断是否满足陷印条件之外,还需要根据各对象的类型和之间的层次关系来对路径折线段进行区间划分,来决定哪里作陷印,哪里不必作陷印。比如,在申请号为200810224340.7的中国专利申请“一种打印文件的陷印生成方法及装置”中公开了如何根据包含Mask点阵的图像对象及其与其它图像对象之间的层次关系来对Mask边界中的每个边界点确定是否进行陷印处理。
这里,需要指出的是,在本发明中,并不对如何选择满足陷印条件的陷印区间,即,确定哪些区间需要作陷印、哪些区间不必作陷印的步骤做严格限制,可采用任何公知的或优化的方法。
从以上描述可看出,参与陷印的各个图像对象在各自空间下沿着路径的前进方向,交替步进,从而保证了对Mask点阵的镂空与非镂空的交界处以及图像点阵梯度变化部分的准确识别。
最后,描述陷印效果生成步骤(图1中的步骤3)。
该步骤的目的是在合适的图像空间下生成陷印效果,以使陷印结果与原始图像具备一致的空间位置关系,从而提高陷印的精度。
因此,在该步骤中,首先选择合适的图像空间作为最终的生成陷印的空间,以使陷印结果与图像具有一样的空间变换,从而在位置和内容上是精确吻合的。陷印空间的选择遵循以下原则:
第一原则:如果参与陷印的对象不含Mask点阵,选择离散点数目多的图像对象的空间作为陷印空间;
第二原则:如果含有一个Mask点阵,选择该Mask点阵的图像对象空间作为陷印空间;
第三原则:如果含有两个或者两个以上的Mask点阵,优先考虑与陷印效果位于路径同侧的Mask点阵的图像空间,否则,选择异侧的Mask点阵的图像空间。如果一侧有多个Mask点阵,优先考虑位于页面顶层的Mask点阵的图像空间。
确定了陷印空间后,将存储为用户空间坐标的陷印区间变换到该陷印空间,然后对其进行陷印颜色的填充,填充的范围是以路径为长,两倍陷印宽度为宽的区域(实际实现时,为保证区域边缘不露白,要生成冗余数据,区域为上述区域的1.5倍大小)。陷印颜色是逐点计算并填充。根据陷印颜色生成的规则,将该点在路径两侧陷印对象中各自的对应点的颜色作为陷印颜色生成的输入值。作为陷印空间的图像对象的对应点的颜色值可以在其有效数据中直接获取,其他的图像对象的对应点的颜色值需要从陷印空间下变换到各自图像空间,才能从其有效数据中获得。这个空间变换,有可能导致变换后的位置超出了有效数据的范围,由于图像数据在局部都是连续变化的,因此可以取其有效数据中最近邻的图像像素值即可。这里,根据图像对象的对应点的颜色值生成陷印效果是本领域的公知技术,因此,省略其描述。
在输出陷印效果时,对于上述第一原则,需要将陷印结果作为普通的图像对象输出,对于第二和第三原则,需要将陷印结果作为Type3类型的图像对象输出,Type3类型的图像对象包括一个图像点阵和一个Mask结果点阵。该Mask结果点阵即为选择的Mask点阵的有效数据内容,之所以陷印结果需要Mask结果点阵作用其上,这是因为除了陷印区间本身约束了陷印结果在路径方向上的起止位置,同时Mask结果点阵也保证了陷印宽度范围内的陷印效果与原始Mask的内容是相吻合的。
此外,对于陷印结果的输出,还可以进一步地做优化处理,如果陷印区间内每个点生成的陷印结果颜色都一致,且不含Mask点阵,则该陷印结果可以不作为图像对象输出,而是作为一个图形对象输出即可,该对象的边界即为陷印区间的范围,图形颜色即为陷印结果颜色。这样,可以大大地减少生成的陷印结果文件的大小,提高输出效率。
相应地,本发明提供一种生成图像路径陷印效果的装置。如图5所示,该装置包括:输入单元50,输入要处理的页面,该页面中包括图元对象与图像对象相交的路径;陷印处理单元52,对所述相交路径生成陷印效果;输出单元54,输出陷印效果。其中,陷印处理单元52进一步包括:数据裁剪单元521,将相交路径在参与陷印的各个图像对象的空间下离散化,并进行参与陷印的有效数据的裁剪,并将裁剪的有效数据存储在数据存取单元中;陷印区间划分单元522,从数据存取单元读取存储的参与陷印的各个图像对象的有效数据,根据这些图像对象及其有效数据划分陷印区间,并将颜色满足陷印条件的陷印区间在用户空间下的坐标存储到数据存取单元中;数据存取单元523,存储裁剪的有效数据和颜色满足陷印条件的陷印区间在用户空间下的坐标,以供陷印区间划分单元和陷印效果生成单元读取;陷印效果生成单元524,从数据存取单元读取存储的参与陷印的各个图像对象的有效数据和陷印区间在用户空间下的坐标,根据读取的这些数据选择合适的图像空间作为最终生成陷印的空间,并在该空间下对存储的陷印区间逐个地生成陷印效果。这些单元所执行的操作与上述相应的步骤相同,因此,省略其描述。
图6是根据现有技术与本发明生成的图像路径陷印效果比对的示意图,其中,如6A所示,在原始页面上文字与图像重叠,如6B所示,陷印效果发生在字母的边缘上,6C为根据现有技术生成的图像路径陷印效果图,6D为根据本发明生成的图像路径陷印效果图。通过6C与6D比较可看出,本发明准确地识别了图像点阵的梯度变化部分,也就是说,本发明在识别图像的灰度变化(深色与浅色区域的交界处)上具有更加精确的表达。
图7是根据本发明生成的另一图像路径陷印效果示例。在该示例中,将做路径陷印的图像对象包括一个含有图像点阵的图像对象(图7A)和一个含有Mask点阵的图像对象(图7B)。在显示Mask对象的图7B中,标号1表示Mask点阵中的镂空部分,在彩色图像中该部分实际上为透明部分,标号2表示Mask点阵中的非镂空部分,在彩色图像中该部分实际上为黄色。在显示陷印结果的图7C中,标号1和2表示第一层次的陷印区间划分,其中,标号1表示Mask点阵的镂空部分,该部分不作陷印,标号2表示Mask点阵的非镂空部分,该部分与图像数据作陷印。标号3和4表示在Mask点阵的非镂空部分基础上作的第二层次划分,其中,标号3和4所表示的部分的衔接处为图像颜色跳变的地方,在彩色图像中该跳变处实际上从黑色跳变到蓝色;标号3表示的部分不满足陷印规则,故不作陷印;标号4表示的部分满足陷印规则,生成陷印区域。为了使陷印结果的打印效果更加突出陷印区域,在图7C中用单一的颜色表示标号4中的陷印效果,但是,实际上在彩色图像中陷印效果是路径两侧对象的混合色,而不是单一的颜色。从该图可看出,标号1和2标示了第一层次的划分,说明了对Mask点阵镂空与非镂空部分的识别,标号3和4标示了第二层次的划分,说明精确吻合了图像颜色的梯度变化。而诸如波兰AC&C公司的PDF Trapping等产品对该样张都没有陷印效果生成。
从以上描述可看出,与传统的图像路径陷印效果的处理方法相比,本发明所提出的技术方案,至少具备以下几个方面的优点:
一、能够非常有效地提高路径在图像对象中的陷印精度。首先,由于图像对象参与陷印的数据是在各自的图像空间下获取,避免了空间变换的引入,保持了与图像原始内容的一致性。其次,路径在划分陷印区间的过程中,路径扫描是在各个图像空间下交替步进的,保证了对Mask点阵的镂空与非镂空的交界处、以及图像点阵梯度变化部分的准确识别。最后,选择适当的图像空间作为最终的陷印结果空间,使陷印结果继承了同样的空间变换关系,这能在很大程度上使得陷印位置和陷印内容与原始的图像对象保持一致。
二、很大程度地提高了陷印处理的效率。在陷印处理过程中,大多数时候是在各个图像空间下进行数据操作。即使是在陷印空间中对存储为用户空间坐标的陷印区间生成陷印效果时,需要将陷印区间的坐标从用户空间变换到陷印空间以及将参与陷印的其图像空间不是陷印空间的图像对象的对应点变换到其各自图像空间,但是由于相关变换计算只涉及到参与陷印的少量有效数据,因此,运算开销和存储开销也是很小的,这就避免了其它同类产品中图像点阵进行空间变换的大量开销,极大地节省了数据处理的时间,提升了效率。
以上参考实施例描述了本发明。但是,本领域的技术人员应该理解,本发明不限于所公开的实施例,在不脱离本发明的基本原理的情况下,任何类似的修改、替换或变形都应包括在本发明的保护范围内。