一种能够同时产生多位调频网点的方法及装置的制作方法

文档序号:7966860阅读:299来源:国知局
专利名称:一种能够同时产生多位调频网点的方法及装置的制作方法
技术领域
本发明涉及一种数字图像半色调领域的网点生成方法和装置,具体涉及一种能够同时产生多位调频网点的方法和装置。
背景技术
数字半色调是一种将连续色调的图像转换成单色调图像的技术,这一技术常用于打印机、计算机显示器及其它二值的电子显示设备上再现彩色或灰度的图像,着重解决如何使得半色调图像达到一种连续调图像的视觉效果。有许多实现方法,主要分为三类规则抖动法、误差扩散法和最佳化的方法,其中误差扩散方法是近些年来被广泛采用数字半色调技术。
在通常的调频挂网方法中,误差扩散方法是最常用的方法。误差扩散方法是把原图像的每个像素点的灰度值与阈值相比较产生网点的同时,把像素点的灰度值与阈值之间的误差扩散到该像素点周围的像素点上,例如对于一个256级灰度的图像,阈值为127,有一个像素点的灰度值为150,经比较可知,该像素点应记为白色网点(其灰度值为255),但实际上该像点并不是真正的白色,与白色之间存在的灰度差为105,于是将105这个误差按一定的方法分散到该像素点周围的像素点上。
将误差扩散到周围像素点的方法有很多种,其中Floyd-Steinberg误差扩散算法是一种最通用的误差扩散方法,该算法是将一个像素的误差分配到周围的四个点上。即将误差的7/16加到当前像素点右边第一个像素点上,误差的3/16加到下一行左边第一个像点上,误差的5/16加到下一行正对的像点上,误差的1/16加到下一行右边第一个像点上,这样把当前像点的误差分散到周围的像点上,反复进行该过程,对图像中的每个像点进行同样的半色调化和灰度值的修正即可。
为了进一步提高误差扩散方法处理图像的质量,又出现了一些改进的算法,如Jarvis算法。附图1A是基于Jarvis算法的误差扩散原理示意图,当前像素X的误差分配到附图1A所示的12个相邻像素上去。这12个位置上的某些位置的误差分配比例是相同的,因此只需要4个不同的误差分配比例,其中可取D1=1/48,D2=3/48,D3=5/48,D4=7/48的比例来分配当前像素X的误差。这样通过增加误差扩散范围,使得输出的半色调图像效果更好。
虽然基于Jarvis误差扩散方法的图像半色调处理能取得更好的效果,却因为误差扩散涉及到更多行更多像素点,导致存储量增大和速度更慢,难以达到日益发展的高速打印机和复印机的实时性要求,应用范围受到限制。
并且,上述算法在误差扩散时,若总是单方向的扫描处理源图像,例如从左到右一个扫描行一个扫描行的处理每个像素点,则会形成一个扫描行的误差简单的加至下一行,从而引起误差的堆积,表现在输出图形上是图像有一种驱赶的趋势。所以在扫描时,往往采用‘S’形的扫描方式,即奇数行从左到右扫描如图1A所示,偶数行从右到左扫描,如图1B所示,依次类推,直至最后一行。
在申请号为CN200510063255.3的中国专利申请中公开了一种能够高速产生调频网点的方法(
公开日2005年9月14日),该方法降低了存储器的操作次数,但是只能对图像进行逐个像素的处理,即每次只能处理一个像素,生成一位网点,却不能同时对多个像素处理并同时产生多个网点。
在美国专利申请“Multi-dimensional error diffusion technique“中(专利号US5271070)公开一种误差扩散的并行处理方法,图像自上而下,从左到右进行处理,根据Floyd-Steinberg算法可知,当前某个像素点可与该像素点下一行左边的第二个像素点并行处理,还可以与下二行左边的第四个像素点并行处理,依次类推,实现多个像素点的并行处理。例如当前行第五个像素点可与第二行的第三个像素点及第三行第一个像素点并行处理。该方法虽然能同时处理多个像素点,但还需要对存储器进行多次读写操作,且对源图像不能采用“S”形的图像扫描处理,因此影响网点的生成速度,不利于解决误差堆积带来的驱赶效应。

发明内容
针对现有技术存在的缺陷,本发明的目的是提供一种能够同时产生多位基于误差扩散方法的调频网点的方法和装置,采用该方法和装置能够同时处理同一行N(N≥2)个相邻像素点,产生N位网点,并且对误差行存储器只需进行一次读和一次写的操作,就能完成多个误差累积值在误差行存储器中的更新,大大提高调频网点的产生速度,降低了存储器的存取操作。
为达到以上目的,本发明采用的技术方案是一种能够同时产生多位调频网点的方法,包括以下步骤a)初始化误差行存储器的值为0,所述误差行存储器的值是指像素点的最终误差累积值以及像素点的中间误差累积值;b)初始化误差分配/累积寄存器堆的值为0,所述误差分配寄存器堆的值是指像素点对其周围点的误差分配值,所述误差累积寄存器堆用于暂存从误差行存储器中读出的像素点的中间误差累积值;c)获取第一行中F组中的第一组N个相邻源像素的灰度值,并根据误差行存储器和误差分配/累积寄存器堆的值,通过N个网点生成电路产生N位网点,N≥2,所述F≥1;d)更新误差行存储器和误差分配/累积寄存器堆中的值;e)获取该行中下一组N个相邻源像素的灰度值,重复步骤c、d、e,直到该行的所有像素点处理完毕;f)获取下一行的第一组N个相邻源像素的灰度值,重复步骤c、d、e、f,直到图像上的所有像素点处理结束。
进一步,步骤a中,对误差行存储器进行初始化时还包括以下步骤1)以N个相邻位置为单位进行误差行数据的组织,同行N个位置先顺序存储,不同行的相同列N个位置再相邻存储;2)确定误差行总线宽度为N*W*(H-1),其中,N为当前同时处理的像素个数,W为误差行存储器一个位置的数据宽度,H为一个像素的误差所能够扩散到的行数(包括当前处理像素所在的行)。
更进一步,步骤b中,所述的误差分配寄存器堆的值是指对当前处理的N个相邻像素及对产生的下一行N个相邻像素的最终误差累积值都有误差分配的当前处理像素之前处理的所有像素的全部误差分配值。
所述的误差累积寄存器堆的值是指从误差行存储器中读出的当前处理的N个相邻像素正对的下面一行N个相邻位置上的中间误差累积值。
更进一步,步骤c中,依据当前N个像素的灰度值及误差行存储器和误差分配/累积寄存器堆的值产生N位网点时所采用的方法包括如下步骤步骤1,首先同时获取当前N个相邻源像素的灰度值,并从误差行存储器中读取该N个相邻像素对应的最终误差累积值;步骤2,
根据该组N个相邻源像素中第1个要处理像素点的灰度值、步骤1中从误差行存储器中读取的属于该点的最终误差累积值和从误差分配寄存器堆中读取相应位置的误差分配值,计算出该点的最终灰度值以及该点对周围点的误差分配值;步骤3,然后依次根据相邻的下一个要处理像素点的灰度值,步骤1中从误差行存储器中读取属于该点的最终误差累积值及从误差分配寄存器堆中读取相应位置的误差分配值,再加上该组N个相邻源像素中前面的像素对该点所产生的误差分配值,计算出该点的最终灰度值以及该点对周围点的误差分配值;步骤4,重复步骤3,直到该组N个相邻源像素都处理完毕;上述各个步骤处理过程中,当计算出该点对周围点的误差分配值后,该点对当前处理的N个相邻源像素中的后面其他像素点产生的误差分配值直接传送给所需要的网点生成电路,而其他误差分配值则寄存到误差分配寄存器堆中;更进一步,步骤1中,N组网点生成电路同时获取第i行的N个相邻源像素的灰度值,并从误差行存储器中一次读出第i行当前N个相邻源像素对应位置的最终误差累积值,及第i+1行正对位置的中间误差累积值,并将中间误差累积值缓存到误差累积寄存器堆中;对于当前处理的N个相邻源像素中的第1个像素Pi,j,j表示列数,从误差分配寄存器堆得出同一行的以前所有像素处理所产生的误差分配到此像素的误差值之和S1;第1组网点生成电路将当前处理像素中的第1个像素Pi,j对应位置上的最终误差累积值L01加上S1再和步骤1获取的第1个源像素灰度值相加得出第1个最终像素灰度值,将该值和阀值比较产生第1个最终网点,并计算该点对周围点的误差分配值;步骤2中,对于当前处理像素中的第2个像素Pi,j+1,从误差分配寄存器堆中直接得出同一行的以前非当前处理的所有像素所产生的误差分配到此像素的误差分配值之和,再加上当前处理像素中第1个像素Pi,j处理所产生的分配到此像素的误差分配值,得出总和S2;第2组网点生成电路将当前处理像素中第2个像素Pi,j+1对应位置上的最终误差累积值L02加上S2再和第2个源像素灰度值相加得出第2个最终像素灰度值,将该值和阀值比较产生最终网点2,并计算该点对周围点的误差分配值;步骤3中,以此类推,对于当前处理像素中的第M个像素Pi,j+M-1,2<M≤N,依据误差扩散算法中处理一个像素产生的误差最多向同行几个相邻像素进行误差扩散,确定误差分配寄存器堆中是否存在由第M个像素同行前面的非当前处理像素分配给第M个像素的误差分配值,若存在,则从误差分配寄存器堆中直接得出分配到第M个像素的误差分配值之和S’M,再将第M个像素之前的当前处理像素中的像素产生的所有误差分配到第M个像素的误差分配值相加之和为S”M,S’M与S”M相加得出同行第M个像素之前所有像素分配到第M个像素误差分配值总和SM;第M组网点生成电路将当前处理像素中第M个像素Pi,j+M-1对应位置上的最终误差累积值L0M加上SM再和第M个源像素灰度值相加得出第M个最终像素灰度值,将该值和阀值比较产生最终网点M,并计算该点对周围点的误差分配值。
更进一步,步骤d中,更新误差行存储器和误差分配/累积寄存器堆中的值采用的方法包括如下步骤1)根据当前处理的每个像素的各自的最终像素灰度值和阀值得出当前N个相邻像素产生的误差分配到所有相邻像素的值D1j’,D2j,Dkj...DNj’,Dkj’是指第K(1≤K≤N)个像素产生的一组误差分配值。
2)误差分配寄存器堆中每N个相邻像素的所有误差分配值为一列,前一列N个相邻像素对应值被更新为后一列N个相邻像素的对应的误差分配值,而最后一列N个像素的误差分配值被更新为当前N个相邻像素产生的误差分配到所有相邻像素的值D1j’,D2j’...DNj’;3)误差累积寄存器堆中原N个相邻像素Pi+1,j-N-Pi+1,j-1的误差累积值更新为当前N个相邻像素对应位置下一行上N个相邻像素Pi+1,j-Pi+1,j+N-1的中间误差累积值;4)根据误差分配/累积寄存器堆的内容和当前N个相邻像素处理产生的误差分配值,得出当前行下面第i+1行的N个相邻位置Pi+1,j-N-Pi+1,j-1的最终误差累积值,和第i+2行的N个相邻位置Pi+2,j-N-Pi+2,j-1的中间误差累积值,并一次写入误差行存储器中的相应位置,其中误差行存储器某一位置的写入数据为误差分配寄存器堆中的扩散到该点的所有误差分配值之和加上当前N个相邻像素处理产生的扩散到该位置的误差分配值之和再加上该位置的误差累积值的总和。
为了实现本发明的另外一个目的,本发明的技术方案是一种能够同时产生多位调频网点的装置,该装置(1)包括误差行存储器(2)及与其相连的误差行存储器控制电路(4),此外,该装置还设有网点生成器(6),误差分配/累积寄存器堆(3)及与其相连的误差分配/累积寄存器堆控制电路(5);所述的网点生成器(6)由N组网点生成电路(10)构成,N≥2,每组网点生成电路(10)由灰度生成电路(7)及与其相连的阈值比较电路(8)和误差生成电路(9)构成,每组网点生成电路(10)负责产生一个最终的网点及产生该点对其周围像素点的误差分配值;其中,所述的每组网点生成电路(10)中的误差生成电路(9)与该组网点生成电路后面组网点生成电路中的灰度生成电路(7)及误差行存储器控制电路(4)和误差分配/累积寄存器堆控制电路(5)直接相连;所述误差行存储器(2)用于存储像素点的最终误差累积值以及像素点的中间误差累积值;所述误差分配/累积寄存器堆(3)包括误差分配寄存器堆和误差累积寄存器堆,所述误差分配寄存器堆用于暂存像素点对其周围点的误差分配值,所述误差累积寄存器堆用于暂存从误差行存储器中读出的像素点的中间误差累积值。
进一步,所述每组网点生成电路(10)中的灰度生成电路(7)的输入端在与源像素、误差行存储器控制电路(4)、误差分配/累积寄存器堆控制电路(5)连接的同时,还连接该组网点生成电路前面组网点生成电路中的误差生成电路,用来产生源像素经过误差扩散后的最终灰度值;其输出端与阈值比较电路(8)和误差生成电路(9)连接,用来将阈值和最终灰度值比较产生最终网点和计算出当前处理像素对其周围点的误差分配值。
更进一步,误差分配/累积寄存器堆(3)采用由触发器组成的寄存器阵列实现,所述的误差分配寄存器堆保存的是对当前处理的N个相邻像素及对产生的下一行N个相邻像素的最终误差累积值都有误差分配的当前处理像素之前已处理的所有像素的全部误差分配值;所述的误差累积寄存器堆保存的是从误差行存储器中读出的当前处理的N个相邻像素正对的下面一行相邻N个位置上的误差累积值,该误差累积值为中间误差累积值。
更进一步,所述误差行存储器控制电路(4)由读地址寄存器,写地址寄存器,读写控制电路及写入数据生成电路组成,其中读地址寄存器和写地址寄存器由当前处理像素中第一个像素的列号来产生,一次读出误差行存储器中与当前同时处理的N个相邻像素对应位置及下面行正对位置的误差累积值;写入数据的生成电路则由加法器组成,其中加法器的输入来自于误差累积值、所有当前像素处理后产生的误差分配值及误差分配寄存器堆中保存的相关误差分配值。
更进一步,所述误差行存储器控制电路(4)连接到误差行存储器(2)用来产生误差行存储器的读写地址、读写控制信号及读写数据,误差行存储器控制电路(4)的输入来自包括当前处理像素中首个像素的坐标、误差分配/累积寄存器堆控制电路(5)及每一组网点生成电路(10)的误差生成电路(9)。
更进一步,所述误差分配/累积寄存器堆控制电路(5)由n个多路器组成,其中n为误差分配/累积寄存器堆中的寄存器个数,用来产生误差分配/累积寄存器堆(3)的输入及控制信号,从而完成一次处理周期内误差分配/累积寄存器堆(3)的一次更新及每一行开始时的初始化清零。多路器的输入包括所有当前处理像素产生的误差分配值,所有当前误差累积值,当前误差分配/累积寄存器堆中的原值,多路器的输出为误差分配/累积寄存器堆中寄存器的更新值。
更进一步,所述误差分配/累积寄存器堆控制电路(5)输入端与每一组网点生成电路(10)的误差生成电路(9)、误差行存储器控制电路(4)和误差分配/累积寄存器堆(3)相连。
本发明的效果在于在数字图像半色调领域,利用基于误差扩散的方法产生调频网点时,通过本发明所述的方法和装置采用专用硬件电路来实现每次同时处理多个像素,产生多位网点,同时更新误差行多个相邻位置的误差累积值,并且只需对误差行进行一次读一次写操作,大大提高了调频网点的产生速度。


图1A是基于Jarvis算法且“S”形扫描时奇数行的误差扩散原理示意图;图1B是基于Jarvis算法且“S”形扫描时偶数行的误差扩散原理示意图;图1C、图1D是基于Jarvis算法的误差扩散分配示意图;图2是本发明所述的同时处理同行多个相邻像素的高速调频网点生成装置的框图;图3是本发明所述装置中一组网点生成电路的框图;图4A是本发明具体实施例-基于Jarvis算法,采用同时处理同行2个相邻像素的方法处理一个图像的流程图;图4B是本发明具体实施例-基于Jarvis算法且同时处理同行2个相邻像素的高速调频网点生成装置的框图;图5A是本发明具体实施例-基于Jarvis算法且同时处理同行2个相邻像素的高速调频网点生成装置中一个图像宽度为8个像素的误差行存储器示意图;图5B是所处理图像中某相邻三行部分像素点的示意图;图6是本发明具体实施例-基于Jarvis算法且同时处理同行2个相邻像素的高速调频网点生成装置中的误差分配/累积寄存器堆示意图;图7是本发明装置具体实施例-基于Jarvis算法且同时处理同行2个相邻像素的高速调频网点生成装置中的灰度生成电路I的框图;图8是本发明装置具体实施例-基于Jarvis算法且同时处理同行2个相邻像素的高速调频网点生成装置中的灰度生成电路II的框图;图9是本发明具体实施例-基于Jarvis算法且同时处理同行2个相邻像素的高速调频网点生成装置中的误差分配/累积寄存器堆控制电路中多路器的框图;图10是本发明具体实施例-基于Jarvis算法且同时处理同行2个相邻像素的高速调频网点生成装置中的误差分配/累积寄存器堆数据更新过程示意图;图11是本发明具体实施例-基于Jarvis算法且同时处理同行2个相邻像素的高速调频网点生成装置中的误差行存储器控制电路的框图;图12是本发明具体实施例-基于Jarvis算法且同时处理同行2个相邻像素时误差行存储器的读写过程示意图。
具体实施例方式
下面结合说明书附图和具体实施方式
对本发明作进一步地描述。
首先介绍本发明的执行误差扩散的装置所用到的基本部件。
在误差扩散中,每个点对其周围的点都有误差扩散,相应地,对于当前处理点来说,也会被周围的点的误差扩散所影响,因此需要处理完影响到当前像素点的所有点,才能处理当前像素点。
以Floyd-Steinberg算法为例,由于一个像素点的误差扩散到其周围四个点,因此容易得到一个规律,即,任意一个像素点仅被其周围的4个点的误差扩散所影响。也就是说,假设一个图像由n行m列个像素点组成,i为行数,j为列数(以后均表示相同意义),则在处理完第i-1行的点Pi-1,j+1时,第i-1行的所有像素点汇聚到像素点Pi,j上的误差扩散就已经可以计算出来了。因此在第i-1行的其余的点还没有全部处理完之前,需要一个存储器来保存第i-1行中的点对像素点Pi,j的误差累积值,以便在处理第i行的点时可以将其取出并用于计算Pi,j的网点值和它对周围的像素的误差扩散。由于图像由多行像素点组成,而这样的存储器通常按行来存储各点的误差累积值,因此,将这样一个存储器称为误差行存储器。本实施例中,采用SRAM(静态随机存取存储器)作为误差行存储器。
这样,当计算某个像素点的网点值和误差扩散时,在获取当前像素的灰度值后,就可以利用从误差行存储器中读出的上一行的像素点在该点的误差累积值,再加上当前像素的前面的点对该点的误差扩散,得到该点的最终灰度值,再和阈值比较便可生成当前像素的网点,同时可以得到其分配给周围点的误差值,本发明中,将每个像素根据误差扩散算法分配给相邻像素的误差值,也就是前面所说的误差扩散,称为误差分配值。
接着,在得到一个像素点对其周围点的误差分配值后,还需要将这些误差分配值暂存一段时间以用于处理该像素的误差扩散所影响到的像素点。本发明利用寄存器组来暂存这些误差分配值,可以称这些寄存器组为一个寄存器堆。
基于相同的道理,由于Jarvis算法在处理当前像素时,最多会对当前处理像素后面的2个点及下面两行的10个点产生误差扩散,因此需要保存该行对下面两行的误差扩散,换个角度,对于任意一点来说,其最多会受到上面两行的10个点及当前行前面的2个点的影响,如图1C所示。可以理解,这些影响不能一次计算出来,而是随着每行数据的处理分批产生的,因此需要将各批产生的误差累积值保存起来用于生成最后的灰度值。
也就是说,对于任意点Pij来说,首先在处理第i-2行的点Pi-2,j+2时就产生了第i-2行在该点的一个误差累积值,我们将其称为中间误差累积值,我们需要在处理下一行(i-1)数据之前将其保存在误差行存储器中,然后在处理第i-1行的点Pi- 1,j+2时就产生了第i-1行在该点的一个误差累积值,我们需要将以前已经保存在误差行存储器中的中间误差累积值读出并加上第i-1行在该点产生的误差累积值得到上两行的一个总的误差累积值,我们可以将其称为最终误差累积值。
如图1D所示,在处理完Pij点*时,第i-1行和第i行对第Pi+1,j-2点@最终误差累积值和Pi+2,j-2点@’的中间误差累积值就同时产生出来了。为了方便起见,我们可以将其作为一个数据包同时保存在误差行存储器中。这样在计算点Pi+1,j-2(图中为@)的最终灰度值时,需要从误差行存储器中读入点Pi+1,j-2的最终误差累积值,同时Pi+2,j-2(图中为@’)的中间误差累积值也在同一个数据包中被从存储器中读出,但是,中间误差累积值只有在处理完Pi+2,j-2(图中为@’)的误差分配值后才能用于计算最终误差累积值,因此我们需要将其在寄存器中暂存起来。
为了暂存随着最终误差累积值同时被读入的中间误差累积值,用以参加生成新的最终误差累积值的计算,还需要设置新的寄存器堆以保存读入的中间误差累积值,本发明中称其为误差累积寄存器堆。
附图2是本发明所述的同时处理相邻多个像素的高速调频网点生成装置的框图,该装置(1)包括误差行存储器(2),误差分配/累积寄存器堆(3),误差行存储器控制电路(4),误差分配/累积寄存器堆控制电路(5),网点生成器(6),共五部分。该装置由一个误差行存储器(2)用来保存处理过程中的误差扩散结果,所述的误差扩散结果包括某些点的最终误差累积值或中间误差累积值,由一个误差分配/累积寄存器堆(3)用来缓冲中间误差值,所述的中间误差值包括误差分配值或中间误差累积值;与其相连的误差行存储器控制电路(4)和误差分配/累积寄存器堆控制电路(5)负责控制误差行存储器(2)和误差分配/累积寄存器堆(3)的输入和输出。该装置能够同时处理同行多个相邻像素,产生多位网点。当当前处理行中先处理的像素对同行其它像素进行误差扩散时,总是向后处理的像素进行,则本发明所述的方法和装置就能够同时处理同行多个相邻像素,因此该装置可以满足误差扩散算法的“S”扫描处理方式,即一行从左到右的顺序处理源像素而下一行从右到左的顺序处理源像素。
附图3是本发明所述装置中网点生成电路的框图,网点生成电路(10)由灰度生成电路(7),阈值比较电路(8),误差生成电路(9)三部分构成。其中,灰度生成电路(7)的输入为源像素值,误差行存储器内对应该像素的最终误差累积值,该像素同一行前面的相邻像素对其产生的误差分配值,输出则为该像素处理后产生的误差分配值和最终的网点。本发明所述装置同时处理几个像素,就包含这样的几组网点生成电路(10)。
下面,以基于Jarvis算法同时产生两位网点为例说明本发明的装置组成。
附图4A是采用同时处理同行2个相邻像素的本发明具体实施方法处理一个图像的流程图,包括如下步骤步骤1对误差行存储器进行初始化;步骤2对设定误差分配/累积寄存器堆进行初始化设置;步骤3获取一行2个相邻源像素,并根据当前这2个像素及误差行存储器和误差分配/累积寄存器堆的值产生2位网点;步骤4对误差行存储器及误差分配/累积寄存器堆进行更新;步骤5判断是否一行处理结束,如否,则转入步骤3,如是则转入步骤6;步骤6判断是否图像处理结束,如否,则转入步骤2,如是处理结束。
附图4B是基于Jarvis算法且能够同时处理同行2个相邻像素的高速调频网点生成装置。如图4B所示,该装置(11)包括误差行存储器(12),误差分配/累积寄存器堆(13),误差行存储器控制电路(14),误差分配/累积寄存器堆控制电路(15),灰度生成电路I(16),阈值比较电路I(17),误差生成电路I(18),灰度生成电路II(19),阈值比较电路II(20),误差生成电路II(21)共十部分。该装置中灰度生成电路I(16),阈值比较电路I(17),误差生成电路I(18)构成第一组网点生成电路(10);该装置中灰度生成电路II(19),阈值比较电路II(20),误差生成电路II(21)构成第二组网点生成电路(10)。
其中,所述灰度生成电路I(16)用来产生源像素1的最终灰度值,它的输入连接到源像素1、误差行存储器控制电路(14)和误差分配/累积寄存器堆控制电路(15),它的输出则提供给阈值比较电路I(17)和误差生成电路I(18)。
所述灰度生成电路II(19)用来产生源像素2的最终灰度值,它的输入连接到源像素2、误差行存储器控制电路(14)和误差分配/累积寄存器堆控制电路15和误差生成电路I(18),它的输出则提供给阈值比较电路II(20)和误差生成电路II(21)。
所述误差行存储器(12)是用来存储最终误差累积值和中间误差累积值,它连接到误差行存储器控制电路(14)并由其控制。
所述误差分配/累积寄存器堆13由硬件触发器组成,用来缓冲中间误差分配值,它连接到误差分配/累积寄存器堆控制电路15并由其控制。
在上述装置中,之所以能同时处理2个相邻像素,产生2位网点,是因为两组网点生成电路之间存在紧密的联系,即将像素1的误差生成电路I(18)输出的4个误差分配值中分配给像素2的值直接输入给像素2的灰度生成电路II(19)而不需要将其寄存到误差分配/累积寄存器堆(13)中,这样就确保了像素2的最终网点及其误差分配值的同时产生。
该装置工作时,对于像素1,灰度生成电路I(16)根据当前处理像素1的源像素值和误差行存储器(12)中所存储的最终误差累积值、及误差分配/累积寄存器堆(13)中暂存的误差分配值得出最终的像素1的灰度值,然后通过阈值比较电路I(17)产生网点1,同时最终的像素灰度还通过误差生成电路I(18)得出像素1对其周围点的误差分配值。
同理,对于像素2,灰度生成电路II(19)根据当前处理像素2的源像素值和误差行存储器(12)中所存储的最终误差累积值、和误差分配/累积寄存器堆(13)中暂存的误差分配值以及误差生成电路I(18)产生的像素1的误差分配值得出最终的像素2的灰度值,然后通过阈值比较电路II(20)产生网点2,同时最终的像素2的灰度值还通过误差生成电路II(21)得出像素2对其周围点的误差分配值。
附图5A是一个图像宽度为8个像素的误差行存储器示意图,其中(i,j)表示第i行,第j列的像素对应的误差行位置。
图5B是所处理图像中某相邻三行部分像素点的示意图,其中,Pi,j表示第i行、第j列的像素点。
由Jarvis算法可知一个像素的误差可以扩散到该像素下面两行的相关像素,因此,本实施例中误差行存储器设定为2行。假定当前处理的2个相邻像素为Pi,5和Pi,6,在同时处理同行2个相邻像素时,需要同时读出误差行存储器中当前2个相邻像素Pi,5和Pi,6对应位置的最终误差累积值,以及下一行正对的2个相邻位置(对应于像素点Pi+1,5和Pi+1,6)的中间误差累积值,以保证下一行的2个相邻位置的值在当前像素处理后的误差行写入时被立即更新。
为此误差行存储器的数据排列方式是以误差行中一行2个相邻位置及下一行正对2个相邻位置共4个位置为一个单元,以单元为单位顺序排列如图5A所示,误差行存储器第一个单元对应源图像第1行的第1个像素P1,1和第2个像素P1,2的最终误差累积值及第2行的第1个像素P2,1和第2个像素P2,2的中间误差累积值,误差行存储器第二个单元对应源图像第1行的第3像素P1,3和第4个像素P1,4的最终误差累积值及第2行的第3像素P2,3和第4个像素P2,4对应的中间误差累积值,以此类推,误差行最后一个单元对应源图像第一行的第7个像素P1,7和第8个像素P1,8的最终误差累积值及第2行的第7个像素P2,7和第8个像素P2,8的中间误差累积值。
误差行存储器的总线宽度要求能够一次读出/写入误差行1个单元4个位置的数据。假定误差行一个像素对应位置数据宽度8位,则误差行存储器的总线宽度就应为4*8=32位。由于当前行已处理像素在误差行中对应的最终误差累积值在产生最终网点后就不会再使用了,因此误差行写入的一个单元中,前两个位置是当前处理行下一行两个相邻像素对应的最终误差累积值,后两个位置是当前处理行下二行两个相邻像素对应的中间误差累积值,由此可知,误差行存储器的两行可以重复使用,误差行存储器初始值设为零。
附图6是本实施例中误差分配/累积寄存器堆示意图,它包含有当前处理像素的同一行之前4个相邻像素的所有误差分配值及读出的当前处理行的下面一行的两个中间误差累积值。
由Jarvis算法可知,误差行的一个位置上的误差可能来自当前行的最多5个相邻像素,而误差行中相邻的两个位置上的误差可能来自当前行的最多6个相邻像素,该具体实施例一次处理同一行的2个相邻像素,所以误差分配寄存器堆需要保存同一行中当前处理像素之前的4个相邻像素的所有误差分配值,它们与当前处理的2个相邻像素产生误差分配值一起,用来更新当前处理行下一行和下二行的误差行存储器中当前处理像素之前的2个相邻像素对应位置的最终误差累积值(对应像素点Pi+1,3Pi+1,4)和中间误差累积值(对应像素点Pi+2,3Pi+2,4),即更新误差行中当前处理像素对应单元之前的一个单元四个位置的值。由Jarvis算法容易得知只有当前行的下一行的最终误差值与误差行存储器中的原值有关,当前行的下面第二行的误差值在当前行开始处理前为0,当前行的下一行的误差行中某两个相邻位置的最终误差累积值的写入是在它们后面2个相邻像素对应的误差行读出之后才进行的,所以误差累积寄存器堆中只需要保存2个当前行的下一行的中间误差累积值即可。
本实施例中,误差分配/累积寄存器堆(13)为能够缓冲相邻4个像素的所有误差分配值及当前处理行的下一行的2个中间误差累积值的寄存器堆,其中设Pi,5和Pi,6为两个相邻的当前处理像素,Pi,mDj,(m=1..4,j’=1...4)表示像素Pi,5和Pi,6同一行前面4个相邻像素Pi,1-Pi,4的所有误差分配值,Pi,3L1、Pi,4L1则表示读出的Pi,3、Pi,4位置上对应的下一行的误差行存储器中的中间误差累积值。
本实施例中,依据当前获取的同行2个相邻源像素及误差行存储器和误差分配/累积寄存器堆的值产生2位网点时采用如下方法,包括如下步骤1)获取第i行的2个相邻源像素,假定这2个当前处理像素为P1,5和Pi,6。
2)从误差行存储器中一次读出对应当前2个相邻源像素Pi,5和Pi,6位置的最终误差累积值及下面行(第i+1行)正对位置上Pi+1,5和Pi+1,6的中间误差累积值,即误差行存储器一个单元4个位置的误差累积值,因为误差行是按单元存储的,1个位置的误差累积值对应一个存储器单元,当前处理的2个相邻像素Pi,5和Pi,6所对应的误差累积值是最终误差累积值,设为L01和L02,当前处理的2个相邻像素下方一行Pi+1,5和Pi+1,6所对应的误差累积值为中间误差累积值,设为L11和L12;3)对于当前处理像素中的第1个像素Pi,5,由误差分配/累积寄存器堆的内容计算出当前处理像素的同一行的所有以前的像素处理所产生的误差分配到当前处理像素中的第1个像素Pi,5的误差值的和S1;将当前处理像素中的第1个像素Pi,5对应位置上的最终误差累积值L01加上S1,再和当前处理像素中的第1个像素的源像素值相加得出最终灰度值,将该值和阈值比较即可产生与第1个像素Pi,5对应的最终网点1并计算该点对其周围点的误差分配值,同时将其对第2个像素点Pi,6的误差分配值传送给第2个像素点Pi,6;同时,对于当前处理像素中的第2个像素Pi,6,由误差分配寄存器堆的内容计算出当前处理像素的同一行的所有以前的非当前处理像素处理所产生的误差分配到当前处理像素中的第2个像素的误差分配值再加上当前处理像素中的第1个像素处理所产生的分配给第二个像素的误差分配值之和为S2。S1等于Pi,3D3+Pi,4D4,其中Pi,3D3、Pi,4D4分别表示Pi,3、Pi,4两个像素对第1个像素Pi,5所产生的误差分配,S2等于P4D3+P5D4,其中,Pi,4D3、Pi,5D4分别表示Pi,4、Pi,5两个像素对第2个像素Pi,6所产生的误差分配。
将当前处理像素中的第2个像素Pi,6对应位置上的最终误差累积值L02加上S2,再和当前处理像素中的第2个像素的源像素值相加得出最终像素值,将该值和阈值比较即可产生与第2个像素Pi,6对应的最终网点2。
附图7是本实施例中的灰度生成电路I的框图,它由一个加法器产生像素1的最终灰度值,其中像素1的最终灰度值等于源像素1的值加上从误差行存储器中读出的对应该位置的当前最终误差累积值再加上误差分配寄存器堆中缓冲的同行以前像素对当前像素1的误差分配值。灰度生成电路I(16)的逻辑表达式为像素1的最终像素灰度=源像素值1+L01+Pi,4D4+Pi,3D3;附图8是本实施例中灰度生成电路II的框图,它由一个加法器产生像素2的最终灰度值,其中像素2的最终灰度值等于源像素2的值加上从误差行中读出的对应该位置的当前最终误差累积值加上误差分配寄存器堆中缓冲的同行以前像素对当前像素2的误差分配值再加上处理当前像素1产生的对当前像素2的误差分配值。灰度生成电路II(19)的逻辑表达式为像素2的最终像素灰度=源像素值2+L02+Pi,5D4+Pi,4D3。
结合本实施例中所述的具体实施装置来说,阈值比较电路I(17)用来将灰度生成电路I(16)所产生的灰度与阈值进行比较产生网点1,它的输入连接到灰度生成电路I(16),输出即是最终网点1;阈值比较电路II(20)用来将灰度生成电路II(19)所产生的灰度与阈值进行比较产生网点2,它的输入连接到灰度生成电路II(19),输出即是最终网点2;误差生成电路I(18)用来将由灰度生成电路I(16)所产生的灰度通过计算或查表而产生当前像素1的误差分配值,它的输入连接到灰度生成电路I(16),输出将提供给误差行存储器控制电路(14)和误差分配/累积寄存器堆控制电路(15)和灰度生成电路II(19);误差生成电路II(21)用来将由灰度生成电路II(19)所产生的灰度通过计算或查表而产生当前像素2的误差分配值,它的输入连接到灰度生成电路II(19),输出将提供给误差行存储器控制电路(14)和误差分配/累积寄存器堆控制电路(15)。
本实施例中更新误差行存储器及误差分配/累积寄存器堆时采用如下方法,包括如下步骤21)根据最终像素值和阈值得出当前2个相邻像素Pi,5和Pi,6产生的误差分配到所有相邻像素的分配值,Pi,5的分配值是D11、D12、D13、D14,Pi,6的分配值是和D21、D22、D23、D24。
2)误差分配寄存器堆中每2个相邻像素的误差分配值更新为后2个相邻像素的对应值,而最后2个相邻像素的误差分配值更新为Pi,5的分配值D11、D12、D13、D14和Pi,6的分配值D21、D22、D23、D24,本实施例中,即将Pi,1Dj,赋值为Pi,3Dj,将Pi,2Dj,赋值为Pi,4Dj’,而原Pi,3Dj’,Pi,4Dj,则分别赋值为Pi,5的分配值D11、D12、D13、D14和Pi,6的分配值D21、D22、D23、D24,(i=1..2,j’=1..4);结合本实施例中的具体实施装置中来说,误差分配/累积寄存器堆控制电路(15)用来控制误差分配/累积寄存器堆(13)的存取和更新,误差分配寄存器堆缓冲当前处理像素前面4个相邻像素的所有误差分配值,误差累积寄存器堆缓冲前面2个相邻像素对应当前行下一行的中间误差累积值,一次更新相邻两个像素的误差分配值和中间误差累积值。误差分配/累积寄存器堆控制电路(15)的输入连接到误差生成电路I(18)、误差生成电路II(21)、误差分配/累积寄存器堆(13)及误差行存储器控制电路(14),误差分配/累积寄存器堆控制电路(15)的输出连接到误差分配/累积寄存器堆(13)和灰度生成电路I(16)和灰度生成电路II(19)和误差行存储器控制电路(14)。
3)误差累积寄存器堆中原2个相邻像素Pi+1,3和Pi+1,4的中间误差累积值更新为当前2个相邻像素Pi,5和Pi,6对应位置的下面行(第i+1行)上Pi+1,5和Pi+1,6的中间误差累积值,将与原2个相邻像素Pi+1,3和Pi+1,4对应的误差累积值Pi+1,3L1和Pi+1,4L1分别赋值为L11和L12,即更新后的L11和L12分别对应的是第i+1行上Pi+1,5和Pi+1,6的中间误差累积值。
附图9是本发明的装置中的误差分配/累积寄存器堆控制电路中多路器的框图,误差分配/累积寄存器堆控制电路通过n个多路选择器来完成在每个处理周期内误差分配/累积寄存器堆的一次更新及每一行开始时的初始化清零,其中n为误差分配/累积寄存器堆中的寄存器个数,即对应误差分配/累积寄存器堆中的每一个寄存器都包含有结构相同的一个多路器,本实施例中,n=18。其中多路器的输入包括当前处理像素的所有误差分配值或处理当前像素读出的中间误差累积值以及误差分配/累积寄存器堆的原值,多路器的输出即误差分配/累积寄存器堆中寄存器的更新值。
附图10是本实施例中的误差分配/累积寄存器数据更新过程示意图,Pi,jDj,表示第i行第j个像素的误差分配值,当得出当前2个相邻像素误差分配值D11、D12、D13、D14和D21、D22、D23、D24及读出的当前行下一行中间误差累积值L11和L12后,对应于Pi,3Dj’和Pi,4Dj’多路器分别输出为D11、D12、D13、D14和D21、D22、D23、D24;对应于Pi,3L1和Pi,4L1,多路器分别输出为L11和L12,对应于Pi,1Dj’和Pi,2Dj’,多路器分别输出为Pi,3Dj’和Pi,4Dj’(j’=1..4)。
4)根据步骤2)中误差分配寄存器堆的内容和步骤3)中误差累积寄存器堆的内容和当前2个相邻像素Pi,5和Pi,6处理后的误差分配值得出Pi+1,3、Pi+1,4的最终误差累积值和Pi+2,3和Pi+2,4的中间误差累积值并一次写入误差行存储器中。当前处理像素Pi,5和Pi,6处理完成时,则可得出在当前处理像素Pi,5和Pi,6前2个相邻像素Pi,3和Pi,4对应的误差行单元4个位置(即Pi+1,3、Pi+1,4、Pi+2,3和Pi+2,4)的所有最终写入数据Pi+1,3L11、Pi+1,4L12、Pi+2,3L21和Pi+2,4L22,其中PL11、PL12表示与Pi+1,3、Pi+1,4对应的最终误差累积值,PL21和PL22则分别表示与Pi+2,3和Pi+2,4对应的中间误差累积值;具体来说,其中Pi+1,3L11=Pi,3L1+Pi,1D2+Pi,2D3+Pi,3D4+Pi,4D3+Pi,5D2,Pi+1,4L12=Pi,4L1+Pi,2D2+Pi,3D3+Pi,4D4+Pi,5D3+Pi,6D2,Pi+2,3L21=Pi,1D1+Pi,2D2+Pi,3D3+Pi,4D2+Pi,5D1,Pi+2,4L22=Pi,2D1+Pi,3D2+Pi,4D3+Pi,5D2+Pi,6D1。
附图11是本发明装置中的误差行存储器控制电路(14)的框图,它由读地址寄存器,写地址寄存器,读写控制电路及写入数据生成电路器组成,其中读地址寄存器,写地址寄存器由当前处理像素中第1个像素Pi,5的坐标生成,写入数据生成电路则由加法器组成,它根据当前两个相邻的处理像素Pi,5的误差累积值、Pi,6误差累积值、处理Pi,5产生的误差分配值、处理Pi,6产生的误差分配值和相关中间误差累积值一起得出一次误差行的写入数据,读写控制电路则产生误差行存储器的读写控制信号。
本实施例中,如当前处理像素中第1个像素Pi,5的列号为j=5,则读地址寄存器=4*5=20,一次读出以当前读地址开始的一个单元连续4个位置的数据L01、L02、L11和L12,写地址寄存器则为4*5-8=12,误差行写入数据生成电路产生当前行下面一行和下面二行的各2个相邻位置的写入数据Pi+1,3L11和Pi+1,4L12及Pi+2,3L21和Pi+2,4L22,假定当前处理像素为Pi,5和Pi,6,当前2个相邻像素处理后的误差值D11、D12、D13、D14和D21、D22、D23、D24用Pi,5Dj’和Pi,6Dj’代表,则其中Pi+1,3L11=Pi,3L3+Pi,1D2+Pi,2D3+Pi,3D4+Pi,4D3+Pi,5D2,Pi+1,4L12=Pi,4L1+Pi,2D2+Pi,3D3+Pi,4D4+Pi,5D3+Pi,6D2,Pi+2,3L21=Pi,1D1+Pi,2D2+Pi,3D3+Pi,4D2+Pi,5D1,Pi+2,4L22=Pi,2D1+Pi,3D2+Pi,4D3+Pi,5D2+Pi,6D1。
附图12是本实施例中误差行存储器的读写过程示意图。Pi,5和Pi,6为当前处理2个相邻像素,如采用现有技术,每次只能处理1个像素,并且只能更新误差行一列2个位置的数据,对于像素Pi,5和像素Pi,6,则需要两次相同的处理过程,而采用本发明所述的方法和装置,当同时处理当前像素Pi,5和像素Pi,6时,能够一次从误差行存储器中读出一个单元四个值即当前像素Pi,5和像素Pi,6对应的最终误差累积值L01和L02及下一行正对位置Pi+1,5和像素Pi+1,6的中间误差累积值L11和L12,其中L01用来产生像素Pi,5的最终灰度,L02用来产生像素Pi,6的最终灰度,而L11和L12被缓冲并存储在误差累积寄存器堆中,在以后用来产生与该位置对应的PL11和PL12(最终误差累积值)。当当前处理像素Pi,5和像素Pi,6的误差分配值产生后,误差行存储器中另一单元中的对应的四个像素的误差累积值Pi+1,3L11、Pi+1,4L12、Pi+2,3L21和Pi+2,4L22的值就可以被确定并写入,在该行以后的像素处理中不会再更改误差行中这些位置的内容,同时因为影响Pi+1,3L11、Pi+1,4L12、Pi+2,3L21和Pi+2,4L22最终误差累积值的非当前处理像素的相关误差值被缓冲在误差分配/累积寄存器堆中,所以不需要再次读取误差行存储器即可完成Pi+1,3L11、Pi+1,4L12、Pi+2,3L21和Pi+2,4L22的写入。因为本发明中误差行的总线宽度至少为误差行4个位置的数据宽度,因此读一个单元中的四个值L01、L02、L11和L12(分别对应附图5B中的Pi,5、Pi,6、Pi+1,5、Pi+1,6)只需一次存储器读操作而写另一个单元中的四个值Pi+1,3L11、Pi+1,4L12、Pi+2,3L21和Pi+2,4L22(分别对应附图5B中的Pi+1,3、Pi+1,4、Pi+2,3、Pi+2,4)也只需一次存储器写操作,可见采用本发明装置,同时处理2个相邻像素,只需要一次存储器读来读出L01、L02、L11和L12及一次存储器写操作写入Pi+1,3L11、Pi+1,4L12、Pi+2,3L21和Pi+2,4L22即可。大大提高了网点产生的速度。
结合本发明的装置来说,误差行存储器控制电路(14)用来控制误差行存储器(12)的读写,本发明与现有装置不同的是它一次更新误差行2个相邻像素对应位置的误差累积值。它的输入来自误差生成电路I(18)和误差生成电路II(21)及误差分配/累积寄存器堆控制电路(15),它的输出连接到灰度生成电路I(16)和灰度生成电路II(19),同时它还和误差行存储器(12)相连。
如果需要同时产生N位网点,其装置构成与2位网点相似,如图2所示,其不同之处在于具体实现时,所述的网点生成器(6)由N组网点生成电路(10)构成。在实现时,同时获取一行N个相邻源像素,并根据当前这N个像素及误差行存储器(2)和误差分配/累积寄存器堆(3)产生N位网点,本领域技术人员应该可以理解,还需要增加误差行存储器的总线宽度,以满足一次读取和存储数据的需要。假设当前同时处理的像素数为N个,误差行存储器一个位置的数据宽度为W,一个像素的误差所能够扩散到的行数H(包括当前行),误差行总线宽度最小为N×W×(H-1)。
具体来说,依据当前N个像素的灰度值及误差行存储器和误差分配/累积寄存器堆的值产生N位网点时所采用的方法包括如下步骤1)N组网点生成电路同时获取第i行的N个相邻源像素的灰度值,并从误差行存储器中一次读出第i行当前N个相邻源像素对应位置的最终误差累积值,及第i+1行正对位置的中间误差累积值;
2)对于当前处理的N个相邻源像素中的第1个像素Pi,j,j表示列数,从误差分配寄存器堆得出同一行的以前所有像素处理所产生的误差分配到此像素的误差值之和S1;第1组网点生成电路将当前处理像素中的第1个像素Pi,j对应位置上的最终误差累积值L01加上S1再和步骤1)获取的第1个源像素灰度值相加得出第1个最终像素灰度值,将该值和阀值比较产生第1个最终网点,并计算该点对周围点的误差分配值;同时,对于当前处理像素中的第2个像素Pi,j+1,从误差分配寄存器堆中直接得出同一行的以前非当前处理的所有像素所产生的误差分配到此像素的误差分配值之和,再加上当前处理像素中第1个像素Pi,j处理所产生的分配到此像素的误差分配值,得出总和S2;第2组网点生成电路将当前处理像素中第2个像素Pi,j+1对应位置上的最终误差累积值L02加上S2再和第2个源像素灰度值相加得出第2个最终像素灰度值,将该值和阀值比较产生最终网点2,并计算该点对周围点的误差分配值;以此类推,同时,对于当前处理像素中的第M个像素Pi,j+M-1,2<M≤N,依据误差扩散算法中处理一个像素产生的误差最多向同行几个相邻像素进行误差扩散,确定误差分配寄存器堆中是否存在能够将误差分配给第M个像素的同行前面非当前处理像素的误差分配值,若存在,则从误差分配寄存器堆中直接得出分配到第M个像素的误差分配值之和S’M,再将第M个像素之前的当前处理像素中的像素产生的所有误差分配到第M个像素的误差分配值相加之和为S”M,S’M与S”M相加得出同行第M个像素之前所有像素分配到第M个像素误差分配值总和SM;第M组网点生成电路将当前处理像素中第M个像素Pi,j+M-1对应位置上的最终误差累积值L0M加上SM再和第M个源像素灰度值相加得出第M个最终像素灰度值,将该值和阀值比较产生最终网点M,并计算该点对周围点的误差分配值。
当处理完当前N个相邻像素后,更新误差行存储器和误差分配/累积寄存器堆中的值采用的方法包括如下步骤1)根据当前处理的每个像素的各自的最终像素灰度值和阀值得出当前N个相邻像素产生的误差分配到所有相邻像素的值D1j’,D2j’..DNj’,Dkj’是指第K个像素产生的一组误差分配值,1≤K≤N。对于Jarvis算法,j’=1...4;2)误差分配寄存器堆中每N个相邻像素的所有误差分配值为一列,前一列N个相邻像素对应值更新为后一列N个相邻像素的对应值,而最后一列N个像素的误差分配值更新为当前N个相邻像素产生的误差分配到所有相邻像素的值D1j’,D2j’...DNj’;3)误差累积寄存器堆中原N个相邻像素Pi+1,j-N-Pi+1,j-1的误差累积值更新为当前N个相邻像素对应位置下一行上N个相邻像素Pi+1,j-Pi+1,j+N-1的中间误差累积值;4)根据误差分配/累积寄存器堆的内容和当前N个相邻像素处理产生的误差分配值,得出当前行下面第i+1行的N个相邻位置Pi+1,j-N-Pi+1,j-1的最终误差累积值,和第i+2行的N个相邻位置Pi+2,j-N-Pi+2,j-1的中间误差累积值,并一次写入误差行存储器中的相应位置,其中误差行存储器某一位置的写入数据为误差分配寄存器堆中的扩散到该点的所有误差分配值之和加上当前N个相邻像素处理产生的扩散到该位置的误差分配值之和再加上该位置的误差累积值的总和。
以上所述仅为本发明的其中一个具体实施例而已,并不用以限制本发明,如以上用误差扩散到12个相邻位置的Jarvis算法来描述本发明装置每次同时生成2位网点的实施例,但本发明同样适用于基于误差扩散原理的,且每次同时生成多于两个网点的装置,因而凡在本发明的精神和原则之内,所作的任何修改,等同替换,改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种能够同时产生多位调频网点的方法,包括以下步骤a)初始化误差行存储器的值为0,所述误差行存储器的值是指像素点的最终误差累积值以及像素点的中间误差累积值;b)初始化误差分配/累积寄存器堆的值为0,所述误差分配寄存器堆的值是指像素点对其周围点的误差分配值,所述误差累积寄存器堆的值是指从误差行存储器中读出的像素点的中间误差累积值;c)获取第一行F组中第一组N个相邻源像素的灰度值,并根据误差行存储器和误差分配/累积寄存器堆的值,通过N组网点生成电路产生N位网点,所述F≥1,N≥2;d)更新误差行存储器和误差分配/累积寄存器堆中的值;e)获取该行中下一组N个相邻源像素的灰度值,重复步骤c、d、e,直到该行的所有像素点处理完毕;f)获取下一行的第一组N个相邻源像素的灰度值,重复步骤c、d、e、f,直到图像上的所有像素点处理结束。
2.如权利要求1所述的一种能够同时产生多位调频网点的方法,其特征在于步骤a中,对误差行存储器进行初始化时还包括以下步骤1)以N个相邻位置为单位进行误差行数据的组织,同行N个位置先顺序存储,不同行的相同列N个位置再相邻存储;2)确定误差行总线宽度为N*W*(H-1),其中,N为当前同时处理的像素个数,W为误差行存储器一个位置的数据宽度,H为一个像素的误差所能够扩散到的包括当前处理像素所在行的行数。
3.如权利要求1或2所述的一种能够同时产生多位调频网点的方法,其特征在于步骤b中,所述的误差分配寄存器堆的值是指对当前处理的N个相邻像素及对产生的下一行N个相邻像素的最终误差累积值都有误差分配的当前处理像素之前已处理的所有像素的全部误差分配值。所述的误差累积寄存器堆的值是指从误差行存储器中读出的当前处理的N个相邻像素正对的下面一行N个相邻位置上的中间误差累积值。
4.如权利要求3所述的一种能够同时产生多位调频网点的方法,其特征在于步骤c中,依据当前N个像素的灰度值及误差行存储器和误差分配/累积寄存器堆的值产生N位网点时所采用的方法包括如下步骤步骤1,首先同时获取当前N个相邻源像素的灰度值,并从误差行存储器中读取该N个相邻像素对应的最终误差累积值;步骤2,根据该组N个相邻源像素中第1个要处理像素点的灰度值、步骤1中从误差行存储器中读取的属于该点的最终误差累积值和从误差分配寄存器堆中读取相应位置的误差分配值,计算出该点的最终灰度值以及该点对周围点的误差分配值;步骤3,然后依次根据相邻的下一个要处理像素点的灰度值、步骤1中从误差行存储器中读取的属于该点的最终误差累积值及从误差分配寄存器堆中读取的相应位置的误差分配值,再加上该组N个相邻源像素中前面的像素对该点所产生的误差分配值,计算出该点的最终灰度值以及该点对周围点的误差分配值;步骤4,重复步骤3,直到该组N个相邻源像素都处理完毕;上述各个步骤处理过程中,当计算出该点对周围点的误差分配值后,该点对当前处理的N个相邻源像素中的后面其他像素点产生的误差分配值直接传送给所需要的网点生成电路,而其他误差分配值则寄存到误差分配寄存器堆中。
5.如权利要求4所述的一种能够同时产生多位调频网点的方法,其特征在于步骤1中,从误差行存储器中一次读出第i行当前N个相邻源像素对应位置的最终误差累积值,及第i+1行正对位置的中间误差累积值,并将中间误差累积值缓存到误差累积寄存器堆,且N组网点生成电路同时获取第i行的N个相邻源像素的灰度值;对于当前处理的N个相邻源像素中的第1个像素Pi,j,j表示列数,从误差分配寄存器堆得出同一行的以前所有像素处理所产生的误差分配到此像素的误差值之和S1;第1组网点生成电路将当前处理像素中的第1个像素Pi,j对应位置上的最终误差累积值L01加上S1再和步骤1获取的第1个源像素灰度值相加得出第1个最终像素灰度值,将该值和阀值比较产生第1个最终网点,并计算该点对周围点的误差分配值;步骤2中,对于当前处理像素中的第2个像素Pi,j+1,从误差分配寄存器堆中直接得出同一行的以前非当前处理的所有像素所产生的误差分配到此像素的误差分配值之和,再加上当前处理像素中第1个像素Pi,j处理所产生的分配到此像素的误差分配值,得出总和S2;第2组网点生成电路将当前处理像素中第2个像素Pi,j+1对应位置上的最终误差累积值L02加上S2再和第2个源像素灰度值相加得出第2个最终像素灰度值,将该值和阀值比较产生最终网点2,并计算该点对周围点的误差分配值;步骤3中,以此类推,对于当前处理像素中的第M个像素Pi,j+M-1,2<M≤N,依据误差扩散算法中处理一个像素产生的误差最多向同行几个相邻像素进行误差扩散,确定误差分配寄存器堆中是否存在由第M个像素同行前面的非当前处理像素分配给第M个像素的误差分配值,若存在,则从误差分配寄存器堆中直接得出分配到第M个像素的误差分配值之和S’M,再将第M个像素之前的当前处理像素中的像素产生的所有误差分配到第M个像素的误差分配值相加之和为S”M,S’M与S”M相加得出同行第M个像素之前所有像素分配到第M个像素误差分配值总和SM;第M组网点生成电路将当前处理像素中第M个像素Pi,j+M-1对应位置上的最终误差累积值L0M加上SM再和第M个源像素灰度值相加得出第M个最终像素灰度值,将该值和阀值比较产生最终网点M,并计算该点对周围点的误差分配值。
6.如权利要求5所述的一种能够同时产生多位调频网点的方法,其特征在于步骤d中,更新误差行存储器和误差分配/累积寄存器堆中的值采用的方法包括如下步骤1)根据当前处理的每个像素的各自的最终像素灰度值和阀值得出当前N个相邻像素产生的误差分配到所有相邻像素的值D1j’,D2j’,Dkj’...DNj’,Dkj’是指第K个像素产生的一组误差分配值,1≤K≤N。2)误差分配寄存器堆中每N个相邻像素的所有误差分配值为一列,前一列N个相邻像素对应值更新为后一列N个相邻像素的对应值,而最后一列N个像素的误差分配值更新为当前N个相邻像素产生的误差分配到所有相邻像素的值D1j’,D2j’...DNj’;3)误差累积寄存器堆中原N个相邻像素Pi+1,j-N-Pi+1,j-1的误差累积值更新为当前N个相邻像素对应位置下一行上N个相邻像素Pi+1,j-Pi+1,j+N-1的中间误差累积值;4)根据误差分配/累积寄存器堆的内容和当前N个相邻像素处理产生的误差分配值,得出当前行下面第i+1行的N个相邻位置Pi+1,j-N-Pi+1,j-1的最终误差累积值,和第i+2行的N个相邻位置Pi+2,j-N-Pi+2,j-1的中间误差累积值,并一次写入误差行存储器中的相应位置,其中误差行存储器某一位置的写入数据为误差分配寄存器堆中的扩散到该点的所有误差分配值之和加上当前N个相邻像素处理产生的扩散到该位置的误差分配值之和再加上该位置的误差累积值的总和。
7.一种能够同时产生多位调频网点的装置,该装置(1)包括误差行存储器(2)及与其相连的误差行存储器控制电路(4),其特征在于该装置还设有网点生成器(6),误差分配/累积寄存器堆(3)及与其相连的误差分配/累积寄存器堆控制电路(5);所述的网点生成器(6)由N组网点生成电路(10)构成,N≥2,每组网点生成电路(10)由灰度生成电路(7)及与其相连的阈值比较电路(8)和误差生成电路(9)构成,每组网点生成电路(10)负责产生一个最终的网点及产生该点对其周围像素点的误差分配值;所述的每组网点生成电路中的误差生成电路(9)与该组网点生成电路后面组网点生成电路中的灰度生成电路(7)及误差行存储器控制电路(4)和误差分配/累积寄存器堆控制电路(5)直接相连;其中,所述误差行存储器(2)用于存储像素点的最终误差累积值以及像素点的中间误差累积值;所述误差分配/累积寄存器堆(3)包括误差分配寄存器堆和误差累积寄存器堆,所述误差分配寄存器堆用于暂存像素点对其周围点的误差分配值,所述误差累积寄存器堆用于暂存从误差行存储器中读出的像素点的中间误差累积值。
8.如权利要求7所述一种能够同时产生多位调频网点的装置,其特征在于所述每组网点生成电路(10)中的灰度生成电路(7)的输入端在与源像素、误差行存储器控制电路(4)、误差分配/累积寄存器堆控制电路(5)连接的同时,还连接该组网点生成电路前面组网点生成电路中的误差生成电路,用来产生源像素经过误差扩散后的最终灰度值;其输出端与阈值比较电路(8)和误差生成电路(9)连接,用来将阈值和最终灰度值比较产生最终网点和计算出当前处理像素对其周围点的误差分配值。
9.如权利要求7或8所述一种能够同时产生多位调频网点的装置,其特征在于误差分配/累积寄存器堆(3)采用由触发器组成的寄存器阵列实现,所述的误差分配寄存器堆保存的是对当前处理的N个相邻像素及对产生的下一行N个相邻像素的最终误差累积值都有误差分配的当前处理像素之前已处理的所有像素的全部误差分配值;所述的误差累积寄存器堆保存的是从误差行存储器中读出的当前处理的N个相邻像素正对的下面一行相邻N个位置上的误差累积值,该误差累积值为中间误差累积值。
10.如权利要求9所述一种能够同时产生多位调频网点的装置,其特征在于误差行存储器控制电路(4)由读地址寄存器,写地址寄存器,读写控制电路及写入数据生成电路组成,其中读地址寄存器和写地址寄存器由当前处理像素中第一个像素的列号来产生,一次读出误差行存储器中与当前同时处理的N个相邻像素对应位置及下面行正对位置的误差累积值;写入数据的生成电路则由加法器组成,其中加法器的输入来自于误差累积值、所有当前像素处理后产生的误差分配值及误差分配寄存器堆中保存的相关误差分配值。
11.如权利要求10所述一种能够同时产生多位调频网点的装置,其特征在于误差行存储器控制电路(4)连接到误差行存储器(2)用来产生误差行存储器的读写地址、读写控制信号及读写数据,误差行存储器控制电路(4)的输入来自包括当前处理像素中首个像素的坐标、误差分配/累积寄存器堆控制电路(5)及每一组网点生成电路(10)的误差生成电路(9)。
12.如权利要求11所述一种能够同时产生多位调频网点的装置,其特征在于误差分配/累积寄存器堆控制电路(5)由n个多路器组成,其中n为误差分配/累积寄存器堆中的寄存器个数,用来产生误差分配/累积寄存器堆的输入及控制信号,从而完成一次处理周期内误差分配/累积寄存器堆(3)的一次更新及每一行开始时的初始化清零。
13.如权利要求12所述一种能够同时产生多位调频网点的装置,其特征在于所述误差分配/累积寄存器堆控制电路(5)输入端与每一组网点生成电路(10)的误差生成电路(9)、误差行存储器控制电路(4)和误差分配/累积寄存器堆(3)相连。
全文摘要
本发明涉及一种能够同时产生多位调频网点的方法及装置,属于数字图像半色调领域。现有图像串行处理技术中,每次只能处理一个像素产生一位网点,网点产生速度较慢,而现有图像并行处理技术中,并行处理多个像素时需要对误差行进行多次读写操作,同样影响网点的生成速度。本发明所述的方法每次同时处理同行多个相邻像素,产生多位网点;并且同时更新误差行多个位置的误差累积值。本发明所述的装置由误差行存储器,误差行存储器控制电路,误差分配/累积寄存器堆,误差分配/累积寄存器堆控制电路,网点生成电路组构成。采用本发明所述的方法和装置,大大提高了调频网点的产生速度,实现了每次处理多个相邻像素只需对误差行进行一次读写操作。
文档编号H04N1/405GK1941840SQ20061011313
公开日2007年4月4日 申请日期2006年9月15日 优先权日2006年9月15日
发明者陈 峰, 刘志红, 温晓辉, 朱伟 申请人:北京大学, 北京北大方正电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1