专利名称:图像处理装置及其处理方法
技术领域:
本发明涉及一种图像处理装置及其处理方法,尤其涉及一种利用双端口存储器实现数据读写并行的图像处理装置及处理方法。
背景技术:
在图像处理领域中,数字半色调是一种将连续色调的图像转换成二值色调图像的技术,这一技术常用于打印机、计算机显示器及其它二值的电子显示设备上再现彩色或灰度的图像,着重解决的问题是如何使得半色调图像达到一种连续调图像的视觉效果。有许多实现方法,主要分为三类规则抖动法、误差扩散法和最佳化的方法。其中误差扩散方法是近些年来被广泛采用的数字半色调技术。
在通常的调频挂网方法中,误差扩散方法是最常用的方法。误差扩散方法是把原图像的每个像素点的灰度值与阈值相比较产生网点的同时,把像素点的灰度值与阈值之间的误差扩散到该像素点周围的像素点上,例如对于一个256级灰度的图像,阈值为127,有一个像素点的灰度值为150,经比较可知,该像素点应记为白色网点(其灰度值为255),但实际上该像点并不是真正的白色,与白色之间存在的灰度差为105,于是将105这个误差按一定的方法分散到该像素点周围的像素点上。
将误差扩散到周围像素点的方法有很多种,其中Floyd-Steinberg误差扩散算法是一种最通用的误差扩散方法,该算法是将一个像素的误差分配到周围的四个点上。该算法首先比较当前像素点的灰度值与阈值,将该像素点记为1或0,即白色或黑色网点,然后计算误差,分配误差到周围的像素点,修改周围像素点的灰度值。图1A是基于Floyd-Steinberg算法的误差扩散分配示意图,如图所示,按Floyd-Steinberg误差扩散算法,当前像素*的误差将按图中所示的比例被分配到它所相邻的四个像素上去。即将误差的7/16加到当前像素点右边第一个像素点上,误差的3/16加到下一行左边第一个像点上,误差的5/16加到下一行正对的像点上,误差的1/16加到下一行右边第一个像点上,这样把当前像点的误差分散到周围的像点上,反复进行该过程,对图像中的每个像点进行同样的半色调化和灰度值的修正即可。
从理论上说,误差扩散方法能很好的反映原图的层次关系和颜色,如果我们进行误差扩散的点越多,效果会越好,故在此基础上又提出能涉及很多点的算法。例如,Stucki算法进一步改善了Floyd-Steinberg算法。图2A是基于Stucki算法的误差扩散分配示意图,如图所示,按Stucki误差扩散算法,当前像素*的误差被分配到如图所示的12个相邻像素上去,这12个位置上的某些位置的误差分配比例相同,只需要5个不同的误差分配比例,其中D1=1/44,D2=2/44,D3=5/44,D4=4/44,D5=8/44。由于Stucki算法涉及了更多的点,因此输出图像的效果更好。
在图像处理过程中,误差扩散的点越多,需要进行的运算量越大,处理数据的速度也越慢。对于利用硬件电路实现高速产生调频网点的装置而言,误差扩散的点越多,电路规模越大,影响调频网点产生速度的因素也越多,其中存储器的读写操作一直是影响调频网点产生速度的一个重要因素。在传统的误差扩散实现方法中,需要用到大量的存储器读写操作,存储器的存取速度在基于误差扩散算法的系统中,往往成为速度的瓶颈,而这一缺陷也一直制约着误差扩散方法的广泛应用。
虽然现有技术对高速生成调频网点的方法进行了多种探索,但是在误差扩散时,仍然要对存储器进行至少一次读和一次写的操作,且读和写分别进行,大大影响了网点产生的速度。
发明内容
针对上述问题,本发明提供了一种能够同时读写数据的图像处理装置,包括双端口存储器、存储控制器,其中所述双端口存储器包括端口1和端口2,其中,
所述存储控制器包括端口1写控制电路,端口2读控制电路;所述端口1写控制电路连接至所述端口1,用于对端口1进行写操作,所述端口2读控制电路连接至所述端口2用于对端口2进行读操作;其中,所述图像由多行像素点构成,所述图像处理装置还包括误差扩散装置,用于对各像素点执行依次对其周围的像素点误差扩散,且误差扩散到其下面1行;其中,所述图像由多行像素点构成,图像处理装置还包括误差扩散装装置,用于对各像素点执行依次对其周围的像素点误差扩散,且误差扩散到其下面多行;其中,所述存储器为误差行存储器,用于存储前一行对当前处理行各点的误差累积值;其中,所述存储器为误差行存储器,用于存储前一行对当前处理行最终误差累积完成点的最终误差累积值以及同时产生的当前处理行下1行、下两行...下n-1行中间误差累积完成点的n-1个中间误差累积值。
其中,同时产生的最终误差累积值和n个中间误差累积值存储以数据包的形式存储。
其中,还包括寄存器、寄存器控制电路、灰度生成电路和误差生成电路;所述寄存器用于暂存当前处理像素点的误差扩散到周围点的误差分配值;所述存储控制器中的端口2读控制电路从误差行存储器中读出当前处理点的误差累积值,提供给灰度生成电路,同时存储控制其中的端口1写控制电路利用寄存器中的误差分配值计算出累积完成点的误差累积值并写入误差行存储器;
寄存器控制电路用于将来自误差生成电路的误差分配值暂存到误差分配寄存器中,以及为误差行存储器控制电路和灰度生成电路提供计算所需要的误差分配值;灰度生成电路用于产生各像素点的最终灰度值;误差生成电路用于将由灰度生成电路所产生的最终灰度值通过计算而产生当前处理点的误差分配值,并提供给误差分配寄存器控制电路。
其中,还包括寄存器、寄存器控制电路、灰度生成电路和误差生成电路;所述寄存器用于暂存每个像素点的误差扩散到其周围点的误差分配值以及从误差行存储器中读出的用于计算最终误差累积值的中间误差累积值;所述存储控制器中的端口2读控制电路从误差行存储器中读出由最终误差累积值和中间误差累积值组成的数据包,并将最终误差累积值提供给灰度生成电路,将中间误差累积值缓存到寄存器中,同时所述端口1写控制电路利用寄存器中的误差分配值和中间误差累积值计算出最终误差累积完成点的最终误差累积值和中间误差累积完成点的中间误差累积值并写入误差行存储器;寄存器控制电路用于将来自误差生成电路的误差分配值暂存到误差分配寄存器中,以及为存储控制器和灰度生成电路提供计算所需要的误差分配值;灰度生成电路用于产生各像素点的最终灰度值;误差生成电路用于将由灰度生成电路所产生的灰度通过计算而产生当前像素的误差分配值,并提供给误差分配寄存器堆控制电路。
其中,还包括阈值比较电路,用于将灰度生成电路所产生的最终灰度值与阈值进行比较产生网点。
其中,所述寄存器控制电路为多路选择器。
其中,
所述灰度生成电路由加法器组成。
其中,所述误差行存储器为静态随机存取存储器。
本发明进一步提供了一种利用误差扩散装置执行误差扩散的图像处理方法,该图像由多行像素点构成,该装置包括误差行存储器,用于存储当前处理行每个位置点的误差累积值;寄存器堆,用于寄存当前处理行各点对其周围点的误差分配值;该方法包括,以行为单位依次处理各个点,处理过程为首先,初始化误差行存储器的值为0;步骤1,初始化寄存器堆的值为0;读取当前处理行中第1个要处理点的灰度值,并从误差行存储器中读取属于该点的误差累积值;步骤2,利用上个周期读入的点的灰度值和该点的误差累积值以及寄存器堆中相应位置的误差分配值计算该点的最终灰度值以及该点对周围点的误差分配值并更新寄存器堆,同时,读取当前行中下一个要处理点的灰度值,并从误差行存储器中读取属于该点的误差累积值;步骤3,根据寄存器堆中相应位置的误差分配值计算误差累积完成点的误差累积值并将其写入到误差行存储器的相应位置;利用上个步骤读入的点的灰度值和该点的误差累积值以及寄存器堆中相应位置的误差分配值计算该点的最终灰度值以及该点对周围点的误差分配值并更新寄存器堆,同时,读取当前行中下一个要处理点的灰度值,并从误差行存储器中读取属于该点的误差累积值;
步骤4,重复步骤3,直到下一行点的误差累积值全部计算并写入到误差行存储器的相应位置;步骤5,重复步骤1-4,依次处理下一行,直到全部行处理完,结束。
本发明提供了一种利用误差扩散装置执行误差扩散的图像处理方法,该图像由多行像素点构成,该装置包括误差行存储器,用于存储当前要处理行每个位置点的误差累积值以及下一行中与其同列各点的中间误差累积值;寄存器堆,用于寄存当前处理行各点对其周围点的误差分配值;该方法包括,以行为单位依次处理各个点,处理的过程为首先,初始化误差行存储器的值为0;步骤1,初始化寄存器堆的值为0;读取当前处理行中第1个要处理点的灰度值,并从误差行存储器中读取属于该点的误差累积值和中间误差累积完成点的中间误差累积值,并将中间误差累积值缓存到寄存器堆中;步骤2,利用上个步骤读入的点的灰度值和该点的最终误差累积值以及寄存器堆中相应位置的误差分配值计算该点的最终灰度值以及该点对周围点的误差分配值并更新寄存器堆,同时,读取当前行中下一个要处理点的灰度值,并从误差行存储器中读取属于该点的误差累积值和中间误差累积完成点的中间误差累积值,并将中间误差累积值缓存到寄存器堆中;步骤3,根据寄存器堆中相应位置的误差分配值和中间误差累积值计算最终误差累积完成点的误差累积值和中间误差累积完成点的中间误差累积值,并将其写入到误差行存储器的相应位置;
利用上个步骤读入的点的灰度值和该点的最终误差累积值以及寄存器堆中相应位置的误差分配值计算该点的最终灰度值以及该点对周围点的误差分配值并更新寄存器堆,同时,读取当前行中下一个要处理点的灰度值,并从误差行存储器中读取属于该点的误差累积值和中间误差累积完成点的中间误差累积值,并将中间误差累积值缓存到寄存器堆中;步骤4,重复步骤3,直到下面行所有点的最终误差累积值和中间误差累积值全部计算并写入到误差行存储器的相应位置;步骤5,重复步骤1-4,依次处理下一行,直到全部行处理完,结束。16、根据权利要求15所述的方法,其特征在于所述中间误差累积值的个数为误差扩散的行数-1。本发明的图像处理装置及图像处理装置简单地采用双端口存储器进行数据读写并行操作,大大地提高了处理速度。
图1A和图1B所示为现有技术中基于Floyd-Steinberg算法的误差扩散分配示意图;图2A、图2B和图2C所示为现有技术中基于Stucki算法的误差扩散分配示意图;图3所示为现有技术中Floyd-Steinberg算法的误差扩散装置组成图;图4所示为误差分配寄存器堆控制电路由多路选择器构成的框图;图5所示为图3中的误差分配寄存器结构图;图6所示为图3的误差扩散装置对存储器读写操作周期示意图;图7所示为现有技术中的双端口存储器的用法连接图;图8所示为本发明第一实施例的误差扩散装置组成图;
图9所示为图8所示装置的误差行存储器控制电路结构图;图10所示为本发明的误差扩散装置对存储器读写操作周期示意图;图11所示为现有技术中Stucki算法的误差扩散装置组成图;图12所示为图10所示装置中的误差分配/累积寄存器堆结构图;图13所示为本发明第二实施例的误差扩散装置组成图;图14所示为误差扩散n行示意图;图15所示为最终误差累积值和中间误差累积值组成的数据包。
具体实施例方式
下面结合说明书附图来说明本发明的具体实施方式
。
我们先简要介绍本发明在进行调频网点产生的处理过程中利用到的几个基本电路。
在误差扩散中,每个点对其周围的点都有误差扩散,相应地,对于当前处理点来说,也会被周围的点的误差扩散所影响,因此需要处理完影响到当前像素点的所有点,才能处理当前像素点。
以Floyd-Steinberg算法为例,由于一个像素点的误差扩散到其周围四个点,因此我们容易得到一个规律,即,任意一个像素点仅被其周围的4个点的误差扩散所影响,如图1B所示。也就是说,假设一个图像由n行m列个像素点组成,i为行数,j为列数(以后均表示相同意义),则在处理完第i-1行的点Pi-1,j+1时,第i-1行的所有像素点汇聚到像素点Pi,j上的误差扩散就已经可以计算出来了。因此在第i-1行的其余的点还没有全部处理完之前,我们需要一个存储器来保存第i-1行中的点对像素点Pi,j的误差累积值,以便在处理第i行的点时可以将其取出并用于计算Pi,j的网点值和它对周围的像素的误差扩散。由于图像由多行像素点组成,而这样的存储器通常按行来存储各点的误差累积值,因此,我们将这样一个存储器称为误差行存储器,我们优选地采用SRAM(静态随机存取存储器)作为误差行存储器。
这样,我们计算某个像素点的网点值和误差扩散时,在获取当前像素的灰度值后,就可以利用从误差行存储器中读出的上一行的像素点在该点的误差累积值,再加上当前像素的左边的点对该点的误差扩散,得到该点的最终灰度值,再和阈值比较便可生成当前像素的网点,同时可以得到其分配给周围点的误差值,我们将每个像素根据误差扩散算法分配给相邻像素的误差值,也就是前面所说的误差扩散,称为误差分配值。
接着,在得到一个像素点对其周围点的误差分配值后,还需要将这些误差分配值暂存一段时间以用于处理该像素的误差扩散所影响到的像素点。我们利用寄存器组来暂存这些误差分配值。容易理解,寄存器组的个数取决于算法的种类,如对于Floyd-Steinberg算法,需要3个寄存器组来暂存每个像素点的误差分配值(以后说明)。我们称这些寄存器组为一个寄存器堆。
上面介绍了误差扩散电路中需要用到的几个基本电路单元。下面参照图3说明现有技术中利用Floyd-Steinberg算法进行误差扩散的误差扩散装置组成。
如图所示,该装置1包括误差行存储器2,误差行存储器控制电路误差行存储器控制电路3,误差分配寄存器堆4,误差分配寄存器堆控制电路5,灰度生成电路6,阈值比较电路7,误差生成电路8,共七部分。
误差行存储器2和误差分配寄存器堆4的功能已经在上文中详细地进行了说明,这里不再赘述。
其中,误差行存储器控制电路3负责完成误差行存储器2的读和写操作,其从误差行存储器2中读出当前处理点Pij的误差累积值提供给灰度生成电路6用于计算当前点的最终灰度值,以及利用误差分配寄存器堆控制电路5输出的误差分配值计算出Pi+1,j-1误差累积值并写入误差行存储器2;其中,误差分配寄存器堆控制电路5用于控制误差分配寄存器堆4的移位更新、清零等操作,即将来自误差生成电路8的误差分配值暂存到误差分配寄存器堆4中,以及为误差行存储器控制电路误差行存储器控制电路3和灰度生成电路提供计算所需要的误差分配值。误差分配寄存器堆控制电路5可以由多路选择器来实现。其与误差分配寄存器的连接关系如图4所示。
误差分配寄存器堆的结构如图5所示。假设Pij为第i行的当前处理点,Pj-1和Pj-2点为其前面处理过的点,图中E1-E4代表误差分配系数,其中E1=1/16,E2=3/16,E3=5/16,E4=7/16(由于E4是当前点对左边点的误差分配值,计算下一行点的误差累积值时并不使用,因此仅需要存储当前点的误差分配值PjE4)。阴影部分为用于计算图1B所示点*的误差累积值所用到的三个点的误差分配值,其被提供给误差行存储器控制电路3进行加法计算。
灰度生成电路6用来产生源像素的最终灰度,而最终像素的灰度值等于源像素的值加上从误差行存储器中读出的对应该位置的误差累积值再加上误差分配寄存器堆中缓冲的同一行的以前像素对当前像素的误差分配值。因此,灰度生成电路6由一个加法器组成,它的输入连接到点的源像素和误差分配寄存器堆控制电路5以及误差行存储器控制电路误差行存储器控制电路3,它的输出则提供给阈值比较电路7和误差生成电路8;其根据当前处理像素的灰度值和误差行存储器控制电路误差行存储器控制电路3的输出值及误差分配寄存器堆控制电路5的输出值得出最终的像素灰度,提供给阈值比较电路7产生网点和误差生成电路8得出该像素的误差分配值。
阈值比较电路7用来将灰度生成电路6所产生的最终灰度值与阈值进行比较产生网点。
误差生成电路8用来将由灰度生成电路6所产生的最终灰度值通过与阈值进行比较计算而产生当前像素的误差分配值,它的输入与灰度生成电路6相连,输出提供给误差分配寄存器堆控制电路5。
下面结合图3参照图6,说明现有技术中对误差行存储器2的读写操作过程。
首先,初始化误差行存储器和误差分配寄存器堆使其清零,然后从第1行第1列开始点开始依次处理每个像素点,由于已经对初始化误差行存储器和误差分配寄存器堆已经初始化为0,因此计算出第1行1列的点的最终灰度值即为读入的像素灰度值,其最终灰度值计算完之后就可以对其周围点的误差分配值进行计算了,而这时第2行第0列点P2,0的误差累积就已经完成了,应该将其写入到误差行存储器中,但该值没有意义(不在图像内的点),因此不保存;可以理解,由于第0行(没有图像)对第1行的点均没有误差扩散,因此从误差行存储器中读出的第1行的所有点的误差累积值均为初始化了的值即为0,不再赘述;当处理到第i行第j列像素点Pij时,第一个周期内,误差行存储器控制电路误差行存储器控制电路3读出(图5中为R)误差行存储器2中第i-1行对该点的误差累积值e1;在第二个周期内,误差分配寄存器堆控制电路5根据误差分配寄存器堆4中第i行j-1列点对该点的误差分配值e2计算(图5中为M)出Pij+e1+e2=Pij’,以及其对于周围点的误差分配值进行计算并寄存到寄存器堆中,这时,由于第Pi+1,j-1点已经可以计算出来,因此将Pij与Pi,j-1、Pi,j-2的分配值按照图4阴影部分进行相加得到Pi+1,j-1点的误差累积值;在第三个周期内,将其对第Pi+1,j-1点的误差累积值写入(图5中为W)到误差行存储器中。
不难看出,对于每一个像素操作时,存储器的读写访问是分开进行的。因此,当处理4个像素时,每4个操作周期能够完成2个像素点的处理,完成4个像素点总共需要8个周期,平均2个操作周期处理一个像素点。
以上详细地介绍了本发明所利用到的基本的误差扩散装置。
下面简单介绍本发明所应用到的双端口存储器的结构,如图7所示。
现有的双端口存储器具有两组地址、数据读写端口,主要用于两个器件(器件A和器件B)之间进行数据交换,其中两个器件各自独占一个端口。在现有技术的双端口的应用中,对于每个器件而言,其与普通存储器没有区别。
本发明充分利用到双端口存储器具有两组地址、数据读写端口的特性,将其应用到图像处理中,可以并行存取不同地址的数据,使得采用双端口存储器作为误差行存储器的图像处理装置实现了读写操作的并行性。
实施例一参照图8,详细描述本发明第一个实施例,即利用Floyd-Steinberg算法的误差扩散装置。本发明的误差扩散装置与现有技术的装置不同之处在于,本发明利用双端口存储器作为误差行存储器。
如图所示,本发明的误差扩散装置1’包括双端口误差行存储器2’,误差行存储器控制电路误差行存储器控制电路3’,误差分配寄存器堆4,误差分配寄存器堆控制电路5,灰度生成电路6,阈值比较电路7,误差生成电路8,共七部分。其中附图标记相同的部件与现有技术的装置完全相同,不再一一赘述。
如图9所示,与现有技术不同的是,误差行存储器控制电路误差行存储器控制电路3’的两组数据线和地址线分别连接至双端口误差行存储器2’的端口(PORT)A和端口B,用于控制双端口存储器2’两个端口的同时读写操作,为了简化设计,我们可以对特定的端口只进行读或者写操作。误差行存储器控制电路3’中包括两个端口的控制电路,其中端口A写控制电路用于向双端口误差行存储器2’的端口A中写入数据,端口B读控制电路用于从双端口误差行存储器2’的端口B中读出数据。从而实现了写入和读出数据操作的并行,避免了读写操作的冲突对处理速度的影响。
附图10直观地示出了本发明的误差扩散装置对存储器读写操作的示意图。由图中看出,在读第3个像素的误差累积值的同时可以向误差行中写入第1个像素对应的下一行的像素点的误差累积值,对存储器的读写在一个操作周期内就可以完成。整个处理过程如下首先,初始化双端口误差行存储器的值为0;步骤1,初始化寄存器堆的值为0;读取当前处理行中第1个要处理点P1,1的灰度值,并从误差行存储器中读取属于该点的误差累积值(因为初始化存储器,因此读出的值为0);步骤2,
利用上个步骤读入的点P1,1的灰度值和该点的误差累积值以及寄存器堆中相应位置的误差分配值(初始化的值为0)计算该点的最终灰度值以及该点对周围点的误差分配值并更新寄存器堆,同时,读取当前行中下一个要处理点P1,2的灰度值,并从误差行存储器中读取属于该点的误差累积值;步骤3,根据寄存器堆中相应位置的误差分配值计算误差累积完成点P2,0的误差累积值并将其写入到误差行存储器的相应位置(该值没有意义,也可以不写入);利用上个步骤读入的点P1,2的灰度值和该点的误差累积值以及寄存器堆中相应位置的误差分配值计算该点的最终灰度值以及该点对周围点的误差分配值并更新寄存器堆,同时,读取当前行中下一个要处理点P1,3的灰度值,并从误差行存储器中读取属于该点的误差累积值;这样,到步骤3时,读(R)、写(W)、计算(M)都是在一个周期内就可以完成。
这样,再依次处理下面的点,当读取Pi,j点的误差累积值时,同时计算Pi,j-1点的误差分配值,同时将已经计算完成的Pi+1,j-3点的误差累积值写入到存储器中的相应位置;这样依次处理每个点,直到下一行点的误差累积值全部计算并写入到误差行存储器的相应位置,再将寄存器清零,处理下一行的各点,直到全部行处理完,结束。
可以看出,同样是对4个像素点进行处理,采用本发明所述的方法,只需要最多6个操作周期就可以完成图像处理。
由此推出,使用分开读写的存储器,处理N个像素需要2×N个周期,使用并行读写的存储器,处理N个像素只需N+2个周期,后者的网点产生速度有大幅度的提高。
实施例二其次我们再阐述本发明基于Stucki算法的误差扩散装置。
由于Stucki算法在当前处理行时,会对下面的两行的12个点产生误差扩散,因此需要保存该行对下面两行的误差扩散,换个角度,对于任意一点来说,其会受到上面两行及当前行的12个点的影响,如图2B所示。可以理解,这些影响不能一次计算出来,而是随着每行数据的处理分批产生的,因此需要将各批产生的误差累积值保存起来用于生成最后的灰度值。
也就是说,对于任意点Pij来说,首先在处理第i-2行的点Pi-2,j+2时就产生了第i-2行在该点的一个误差累积值,我们将其称为中间误差累积值,我们需要在处理下一行(i-1)数据之前将其保存在误差行存储器中,然后在处理第i-1行的点Pi-1,j+2时就产生了第i-1行在该点的一个误差累积值,我们需要将以前已经保存在误差行存储器中的中间误差累积值读出并加上第i-1行在该点产生的误差累积值得到上两行的一个总的误差累积值,我们可以将其称为最终误差累积值。
如图2C所示,在处理完Pij点*时,第i-1行和第i行对第Pi+1,j-2点@最终误差累积值和Pi+2,j-2点@’的中间误差累积值就同时产生出来了。为了方便起见,我们可以将其作为一个数据包同时保存在误差行存储器中。这样在计算点Pi+1,j-2(图中为@)的最终误差累积值时,需要从存储器中读入最终误差累积值,同时Pi+2,j-2(图中为@’)的中间误差累积值也在同一个数据包中被从存储器中读出,但是,中间误差累积值只有在处理完Pi+2,j-2(图中为@’)的误差分配值后才能用于计算最终误差累积值,因此我们需要将其在寄存器中暂存起来。
为了暂存随着最终误差累积值同时被读入的中间误差累积值,用以参加生成新的最终误差累积值的计算,还需要设置新的寄存器堆以保存读入的中间误差累积值,我们这里称其为误差累积值寄存器堆。图11示出了利用Stucki算法的现有技术的误差扩散装置图,可以看出,其与利用Floyd-Steinberg算法的误差扩散装置的不同之处在于,误差行存储器12同时存储Pij点的最终误差累积值和Pi+1,j点的中间误差累积值数据包;增加了误差累积寄存器堆用于保存中间误差累积值,它和原来的误差分配寄存器堆一起构成了误差分配/累积寄存器堆14,以及误差分配/累积控制电路15用于控制误差分配/累积寄存器堆14。
处理任意Pij点的操作过程为,误差行控制器从误差行存储器中读出Pij点的最终误差累积值和Pi+1,j点的中间误差累积值数据包,将Pi+1,j点的中间误差累积值提取出来缓存到中间误差累积值寄存器中(等处理到Pi,j+2点时用于计算Pi+1,j点的最终误差累积值),并将Pij点的最终误差累积值提供给灰度生成电路,计算出Pij点的误差分配值,同时误差行控制器负责计算Pi+1,j-2点的最终误差累积值及Pi+2,j-2点的中间误差累积值并将它们作为一个数据包一次写入误差行存储器中。
误差分配/累积寄存器堆14的结构如图12所示。假设当前处理点为Pij,图中Pj代表第i行当前处理点的误差值,Pj-1至Pj-4点依次为其前面处理过的点,D1-D5代表误差分配系数,Lj至Lj-2代表从误差行存储器中读出的Pi+1,j至Pi+1,j-2点的误差累积值,误差分配/累积寄存器堆控制电路5根据需要将以上数据提供给误差行存储器控制电路13,误差行存储器控制电路13产生一个写入数据包,其包括最终误差累积值Pi,jL1和中间误差累积值Pi,jL2,其中Pi,jL1可表示为Pi,jL1=Pi,j-2L2+Pi,jD2+Pi,j-1D4+Pi,j-2D5+Pi,j-3D4+Pi,j-4D2,Pi,jL2可表示为Pi,jL2=Pi,jD1+Pi,j-1D2+Pi,j-2D3+Pi,j-3D2+Pi,j-4D1。阴影部分直观地表示出计算两部分值所用到的数据。
本发明同样在Stucki算法的现有技术的误差扩散装置基础上采用双端口存储器作为误差行存储器,其原理和构成与本发明第一实施例的Floyd-Steinberg算法的误差扩散装置完全相同,如图13所示,双端口误差行存储器22由误差行存储器控制电路23控制同时读和写操作,使得读写并行得到实现。采用双端口存储器大大提高了误差扩散装置的处理速度。
本发明的第二实施例整个处理过程如下
首先,初始化误差行存储器的值为0;步骤1,初始化寄存器堆的值为0;读取当前处理行中第1个要处理点P1,1的灰度值,并从误差行存储器中读取属于该点的误差累积值和中间误差累积完成点P2,1的中间误差累积值,并将中间误差累积值缓存到寄存器堆中;步骤2,利用上个步骤读入的点P1,1的灰度值和该点的最终误差累积值以及寄存器堆中相应位置的误差分配值计算该点的最终灰度值以及该点对周围点的误差分配值并更新寄存器堆,同时,读取当前行中下一个要处理点P1,2的灰度值,并从误差行存储器中读取属于该点的误差累积值和中间误差累积完成点P2,2的中间误差累积值,并将中间误差累积值缓存到寄存器堆中;步骤3,根据寄存器堆中相应位置的误差分配值(来自P1,1点)和中间误差累积值(初始化为0)计算最终误差累积完成点P2,-1的最终误差累积值和中间误差累积完成点P3,-1的中间误差累积值,并将其写入到误差行存储器的相应位置;利用上个步骤读入的点P1,2的灰度值和该点的最终误差累积值以及寄存器堆中相应位置的误差分配值计算该点的最终灰度值以及该点对周围点的误差分配值并更新寄存器堆;同时,读取当前行中下一个要处理点P1,3的灰度值,并从误差行存储器中读取属于该点的误差累积值和中间误差累积完成点P2,3的中间误差累积值,并将中间误差累积值缓存到寄存器堆中。
步骤3中的读(R)、写(W)、计算(M)都是在一个周期内就可以完成。
这样,在一次处理下面的点,读取Pi,j点的最终误差累积值和Pi+1,j点的中间误差累积值时,计算Pi,j-1点的误差分配值,同时将Pi+1,j-4点的最终误差累积值和Pi+2,j-4点的中间误差累积值写入到误差行存储器中;
这样依次处理每个点,直到下一行点的误差累积值和中间误差累积值全部计算并写入到误差行存储器的相应位置,再将寄存器清零,处理下一行的各点,直到全部行处理完,结束。
通过如上所述的技术方案,可以理解采用双端口存储器可以应用到于基于误差扩散原理的,将误差扩散到更多行的点的图像处理方法中。例如图14所示的误差扩散方法,一个点的误差扩散到它下面的n(n≥1)行,可以采用本发明的图像处理装置,其中采用双端口存储器作为误差行存储器,用于存储最终误差累积完成在某个点上的最终误差累积值以及下面的中间误差累积完成的共n-1个点的中间误差累积值所组成的数据包,图15示出了数据包的组成,数据包包括最终误差累积完成点的最终误差累积值、以及该点下面紧邻的中间误差累积完成的n-1个点的中间误差累积值,标记为中间误差累积值1至中间误差累积值n-1。误差累积/分配寄存器堆用于暂存从误差行存储器中读出的上述中间误差累积值,同理,寄存器的个数也应随算法作相应地调整。
通过对本发明的几个实施例的详细描述,本领域技术人员可以理解,本发明的技术方案除了运用在以上所举实施例的装置中,还能够用于其它任何需要对存储器进行同时读写操作的图像处理装置中。例如在任何现有的误差扩散装置中,只要是上一行的点对下面的行有误差扩散的图像处理方法,都需要使用存储器存储已处理完的点的信息以用于处理下一个点,所述的信息可以包括误差累积值、误差分配值(例如美国专利文件US2002/0003632A1)或者已处理完点的最终灰度值、最终灰度值与阈值之间的差值等等,为了加快处理速度,可以使用双端口存储器进行存储,其所包括的两个端口均与存储控制器相连接,只要对其中的一个端口进行读操作,对另一个端口进行写操作就能够完成同时读写功能。
以上所述仅为本发明的其中几个实施例而已,并不用以限制本发明,因而凡在本发明的精神和原则之内,所作的任何修改,等同替换,改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种能够同时读写数据的图像处理装置,包括双端口存储器、存储控制器,其中所述双端口存储器包括端口A和端口B,其特征在于所述存储控制器包括端口A写控制电路和端口B读控制电路;所述端口A写控制电路连接至所述端口A,用于对端口A进行写操作,所述端口B读控制电路连接至所述端口B,用于对端口B进行读操作。
2.根据权利要求1所述的图像处理装置,其特征在于所述图像由多行像素点构成,所述图像处理装置对各像素点依次执行对其周围的像素点误差扩散,且误差扩散到其下面1行。
3.根据权利要求1所述的图像处理装置,其特征在于所述图像由多行像素点构成,所述图像处理装置对各像素点依次执行对其周围的像素点误差扩散,且误差扩散到其下面多行。
4.根据权利要求2所述的图像处理装置,其特征在于所述存储器为误差行存储器,用于存储前一行对当前处理行各点的误差累积值。
5.根据权利要求3所述的图像处理装置,其特征在于所述存储器为误差行存储器,用于存储前一行对当前处理行最终误差累积完成点的最终误差累积值以及同时产生的当前处理行下1行、下2行...下n-1行中间误差累积完成点的n-1个中间误差累积值。
6.根据权利要求5所述的图像处理装置,其特征在于同时产生的最终误差累积值和n-1个中间误差累积值存储以数据包的形式存储。
7.根据权利要求4所述的图像处理装置,其特征在于,还包括寄存器、寄存器控制电路、灰度生成电路和误差生成电路;所述寄存器用于暂存当前处理像素点的误差扩散到周围点的误差分配值;所述存储控制器中的端口B读控制电路从误差行存储器中读出当前处理点的误差累积值,提供给灰度生成电路,同时存储控制其中的端口A写控制电路利用寄存器中的误差分配值计算出累积完成点的误差累积值并写入误差行存储器;寄存器控制电路用于将来自误差生成电路的误差分配值暂存到误差分配寄存器中,以及为误差行存储器控制电路和灰度生成电路提供计算所需要的误差分配值;灰度生成电路用于产生各像素点的最终灰度值;误差生成电路用于将由灰度生成电路所产生的最终灰度值通过计算而产生当前处理点的误差分配值,并提供给误差分配寄存器控制电路。
8.根据权利要求6所述的图像处理装置,其特征在于,还包括寄存器、寄存器控制电路、灰度生成电路和误差生成电路;所述寄存器用于暂存每个像素点的误差扩散到其周围点的误差分配值以及从误差行存储器中读出的用于计算最终误差累积值的中间误差累积值;所述存储控制器中的端口2读控制电路从误差行存储器中读出由最终误差累积值和中间误差累积值组成的数据包,并将最终误差累积值提供给灰度生成电路,将中间误差累积值缓存到寄存器中,同时所述端口1写控制电路利用寄存器中的误差分配值和中间误差累积值计算出最终误差累积完成点的最终误差累积值和中间误差累积完成点的中间误差累积值并组成数据包写入误差行存储器;寄存器控制电路用于将来自误差生成电路的误差分配值暂存到误差分配寄存器中,将来自误差行存储器中的中间误差累积值暂存到误差累积寄存器中,以及为存储控制器和灰度生成电路提供计算所需要的误差分配值;灰度生成电路用于产生各像素点的最终灰度值;误差生成电路用于将由灰度生成电路所产生的灰度通过计算而产生当前像素的误差分配值,并提供给误差分配寄存器堆控制电路。
9.根据权利要求7或8所述的图像处理装置,其特征在于还包括阈值比较电路,用于将灰度生成电路所产生的最终灰度值与阈值进行比较产生网点。
10.根据权利要求7或8所述的图像处理装置,其特征在于所述寄存器控制电路为多路选择器。
11.根据权利要求7或8所述的图像处理装置,其特征在于所述灰度生成电路由加法器组成。
12.根据权利要求4或5所述的图像处理装置,其特征在于所述误差行存储器为静态随机存取存储器。
13.一种利用误差扩散装置执行误差扩散的图像处理方法,该图像由多行像素点构成,该装置包括误差行存储器,用于存储当前处理行每个位置点的误差累积值;寄存器堆,用于寄存当前处理行各点对其周围点的误差分配值;该方法包括,以行为单位依次处理各个点,处理过程为首先,初始化误差行存储器的值为0;步骤1,初始化寄存器堆的值为0;读取当前处理行中第1个要处理点的灰度值,并从误差行存储器中读取属于该点的误差累积值;步骤2,利用上个步骤读入的点的灰度值和该点的误差累积值以及寄存器堆中相应位置的误差分配值计算该点的最终灰度值以及该点对周围点的误差分配值并更新寄存器堆,同时,读取当前行中下一个要处理点的灰度值,并从误差行存储器中读取属于该点的误差累积值;步骤3,根据寄存器堆中相应位置的误差分配值计算误差累积完成点的误差累积值并将其写入到误差行存储器的相应位置;利用上个步骤读入的点的灰度值和该点的误差累积值以及寄存器堆中相应位置的误差分配值计算该点的最终灰度值以及该点对周围点的误差分配值并更新寄存器堆,同时,读取当前行中下一个要处理点的灰度值,并从误差行存储器中读取属于该点的误差累积值;步骤4,重复步骤3,直到下一行点的误差累积值全部计算并写入到误差行存储器的相应位置;步骤5,重复步骤1-4,依次处理下一行,直到全部行处理完,结束。
14.一种利用误差扩散装置执行误差扩散的图像处理方法,该图像由多行像素点构成,该装置包括误差行存储器,用于存储当前要处理行每个位置点的误差累积值以及下一行中与其同列各点的中间误差累积值;寄存器堆,用于寄存当前处理行各点对其周围点的误差分配值和从误差行存储器中读出的中间误差累积值;该方法包括,以行为单位依次处理各个点,处理的过程为首先,初始化误差行存储器的值为0;步骤1,初始化寄存器堆的值为0;读取当前处理行中第1个要处理点的灰度值,并从误差行存储器中读取属于该点的误差累积值和中间误差累积完成点的中间误差累积值,并将中间误差累积值缓存到寄存器堆中;步骤2,利用上个步骤读入的点的灰度值和该点的最终误差累积值以及寄存器堆中相应位置的误差分配值计算该点的最终灰度值以及该点对周围点的误差分配值并更新寄存器堆,同时,读取当前行中下一个要处理点的灰度值,并从误差行存储器中读取属于该点的误差累积值和中间误差累积完成点的中间误差累积值,并将中间误差累积值缓存到寄存器堆中;步骤3,根据寄存器堆中相应位置的误差分配值和中间误差累积值计算最终误差累积完成点的误差累积值和中间误差累积完成点的中间误差累积值,并将其写入到误差行存储器的相应位置;利用上个步骤读入的点的灰度值和该点的最终误差累积值以及寄存器堆中相应位置的误差分配值计算该点的最终灰度值以及该点对周围点的误差分配值并更新寄存器堆,同时,读取当前行中下一个要处理点的灰度值,并从误差行存储器中读取属于该点的误差累积值和中间误差累积完成点的中间误差累积值,并将中间误差累积值缓存到寄存器堆中;步骤4,重复步骤3,直到下面行所有点的最终误差累积值和中间误差累积值全部计算并写入到误差行存储器的相应位置;步骤5,重复步骤1-4,依次处理下一行,直到全部行处理完,结束。
15.根据权利要求14所述的方法,其特征在于所述中间误差累积值的个数为误差向下扩散的行数-1。
全文摘要
本发明涉及一种能够同时读写数据的图像处理装置及处理方法,该装置包括双端口存储器、存储控制器,其中所述双端口存储器包括端口A和端口B,其特征在于,所述存储控制器包括端口A写控制电路,端口B读控制电路;所述端口A写控制电路连接至所述端口A,用于对端口A进行写操作,所述端口B读控制电路连接至所述端口B用于对端口B进行读操作。本发明的装置及方法能够在一个周期内对存储器中的数据同时读写,实现了快速处理图像,且该装置及方法可以应用于执行误差扩散,使得误差扩散快速执行。
文档编号H04N1/405GK1937701SQ20061008907
公开日2007年3月28日 申请日期2006年8月2日 优先权日2006年8月2日
发明者刘志红, 陈 峰, 黄建梅 申请人:北京北大方正电子有限公司, 北京大学