專(zhuān)利名稱(chēng):一種能夠高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種數(shù)字圖像半色調(diào)領(lǐng)域的網(wǎng)點(diǎn)生成方法和裝置,具體涉及一種能夠高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的方法和裝置。
背景技術(shù):
數(shù)字圖像半色調(diào)技術(shù)分為兩種,分別是調(diào)幅掛網(wǎng)和調(diào)頻掛網(wǎng),而在通常的調(diào)頻掛網(wǎng)方法中,誤差擴(kuò)散方法是最常用的方法,誤差擴(kuò)散方法是把原圖像的每個(gè)像點(diǎn)的灰度值與閾值相比較產(chǎn)生半色調(diào)點(diǎn)的同時(shí),把像點(diǎn)的灰度值與閾值之間的誤差擴(kuò)散到該像點(diǎn)周?chē)南顸c(diǎn)上,例如對(duì)于一個(gè)256級(jí)灰度的圖像,閾值為127,有一個(gè)像點(diǎn)的灰度值為150,經(jīng)比較可知,該像點(diǎn)應(yīng)記為白色,但實(shí)際上該像點(diǎn)并不是真正的白色,與白色之間存在的灰度差為23,將2 3這個(gè)誤差按一定的方法分散到該像點(diǎn)的周?chē)南顸c(diǎn)上。
誤差擴(kuò)散到周?chē)c(diǎn)的方法有多種,其中最著名及常見(jiàn)的是Floyd-Steinberg算法。該算法首先比較當(dāng)前像素點(diǎn)的灰度值與閾值,將該像點(diǎn)記為1或0,即白色或黑色,然后與閾值進(jìn)行比較,計(jì)算誤差,分配誤差到周?chē)南顸c(diǎn),修改周?chē)顸c(diǎn)的灰度值,具體而言,F(xiàn)loyd-Steinberg算法中是將誤差的7/16加到當(dāng)前像點(diǎn)右邊第一個(gè)像點(diǎn)上,誤差的3/16加到下一行左邊第一個(gè)像點(diǎn)上,誤差的5/16加到下一行正對(duì)的像點(diǎn)上,誤差的1/16加到下一行右邊第一個(gè)像點(diǎn)上,這樣把當(dāng)前像點(diǎn)的誤差分散到周?chē)南顸c(diǎn)上,反復(fù)進(jìn)行該過(guò)程,對(duì)圖像中的每個(gè)像點(diǎn)進(jìn)行如此的半色調(diào)化和灰度值的修正即可。
在Floyd-Steinberg算法的基礎(chǔ)上,又出現(xiàn)了一些改進(jìn)的算法,如Stucki算法,該算法將當(dāng)前像素產(chǎn)生的誤差擴(kuò)散到當(dāng)前像素點(diǎn)的相鄰12個(gè)點(diǎn)上,由于涉及了更多的點(diǎn),輸出圖像效果好,同時(shí),在誤差擴(kuò)散時(shí),若總是從左到右一個(gè)掃描行一個(gè)掃描行的處理每個(gè)像點(diǎn),則會(huì)形成一個(gè)掃描行的誤差簡(jiǎn)單的加至下一行,從而引起誤差的堆積,表現(xiàn)在輸出圖形上是圖像有一種驅(qū)趕的趨勢(shì),所以在掃描時(shí),往往采用S形的掃描方式,即如果是奇數(shù)行則從左到右掃描,如果是偶數(shù)行則從右到左掃描,依次類(lèi)推,直至最后一行,這樣能取得更好的效果。
采用誤差擴(kuò)散的方法通常能產(chǎn)生較好的效果,但它的不足也是顯而易見(jiàn)的,即這種方法需要大量的計(jì)算及比較多的存儲(chǔ)器操作,產(chǎn)生網(wǎng)點(diǎn)的速度慢,以Stucki算法和采用S型掃描方式為例,具體實(shí)現(xiàn)時(shí)通常是采用一個(gè)存儲(chǔ)器來(lái)保存當(dāng)前處理行及下面兩行的誤差擴(kuò)散的結(jié)果,一般稱(chēng)它為誤差行,誤差行的每一個(gè)位置代表對(duì)應(yīng)位置上的誤差累積值,這樣每處理一位像素,需要讀出誤差行的當(dāng)前像素所對(duì)應(yīng)的原有誤差累積值及相鄰12個(gè)位置上的原誤差累積值,計(jì)算出當(dāng)前像素新產(chǎn)生的誤差值后,將該值分配到相鄰12個(gè)位置上并且與該位置上原誤差累積值相加,并將結(jié)果寫(xiě)入誤差行的這12個(gè)位置上。由此可見(jiàn),現(xiàn)有的方法需要大量的存儲(chǔ)器操作,而存儲(chǔ)器的讀寫(xiě)速度在計(jì)算機(jī)系統(tǒng)中往往是系統(tǒng)速度的瓶頸,因此雖然基于誤差擴(kuò)散的掛網(wǎng)方法能取得較好的效果,卻因?yàn)樗俣鹊脑颍瑧?yīng)用范圍受到限制,在通常的打印機(jī),復(fù)印機(jī)等設(shè)備中,雖然通常用專(zhuān)用硬件來(lái)提高基于誤差擴(kuò)散方法的網(wǎng)點(diǎn)產(chǎn)生速度,但因?yàn)楝F(xiàn)有技術(shù)含有大量存儲(chǔ)器操作,速度仍然受到影響,難以達(dá)到高速打印機(jī)和復(fù)印機(jī)的實(shí)時(shí)性要求,使基于誤差擴(kuò)散的掛網(wǎng)方法難以在現(xiàn)代的高速打印機(jī)和復(fù)印機(jī)中得到充分應(yīng)用。
發(fā)明內(nèi)容
針對(duì)現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的是提供一種能夠高速產(chǎn)生基于誤差擴(kuò)散方法的調(diào)頻網(wǎng)點(diǎn)的方法和裝置,采用該方法的裝置每處理一位像素對(duì)誤差行存儲(chǔ)器只需要進(jìn)行一次讀和一次寫(xiě)的操作,大大提高調(diào)頻網(wǎng)點(diǎn)的產(chǎn)生速度。
為達(dá)到以上目的,本發(fā)明采用的技術(shù)方案是一種能夠高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的方法,該方法具體包括以下步驟a)按列組織并初始化誤差行存儲(chǔ)器;b)設(shè)定誤差緩沖寄存器堆;c)獲取源像素;d)依據(jù)當(dāng)前源像素及誤差行和誤差緩沖寄存器堆的內(nèi)容產(chǎn)生網(wǎng)點(diǎn);e)更新誤差行及誤差緩沖寄存器堆;f)重復(fù)步驟c,d,e直到一行結(jié)束;g)重復(fù)步驟b,c,d,e,f直到圖像結(jié)束。
更進(jìn)一步,為使本發(fā)明具有更好的發(fā)明效果,步驟a中按列組織并初始化誤差行存儲(chǔ)器時(shí)采用如下方法,包括如下步驟1)誤差行的行數(shù)為2的n次方,并且誤差行存儲(chǔ)器的總線寬度能夠保證一次可以從誤差行存儲(chǔ)器中讀寫(xiě)2的n次方個(gè)單元,同時(shí)誤差行的行數(shù)大于等于一個(gè)像素的誤差所能夠擴(kuò)散到的行數(shù),誤差行循環(huán)重復(fù)使用,上述的n為正整數(shù);2)列號(hào)相同的每2的n次方列誤差位置相鄰排列;3)誤差行內(nèi)容被初始化為0。
更進(jìn)一步,為使本發(fā)明具有更好的發(fā)明效果,步驟b中設(shè)定誤差緩沖寄存器堆時(shí)采用如下方法,包括如下步驟1)誤差緩沖寄存器堆包括誤差分配緩沖寄存器堆和誤差累積緩沖寄存器堆兩部分,其中誤差分配緩沖寄存器堆大小能夠保存誤差行某一位置的所有相關(guān)像素所有誤差分配值,其中當(dāng)前相關(guān)像素為當(dāng)前處理行內(nèi)誤差值能擴(kuò)散到這一誤差行位置所有像素,誤差累積緩沖寄存器堆大小為足夠保存讀出的當(dāng)前處理行的下面行的原誤差行中的所有相關(guān)誤差累積值,其中相關(guān)誤差累積值為從讀出誤差行某一位置上原誤差累積值到該位置新的誤差累積值被寫(xiě)入過(guò)程中所有讀出的誤差行中的原誤差累積值;2)初始化誤差緩沖寄存器堆即每行處理開(kāi)始時(shí)誤差緩沖寄存器堆內(nèi)容被初始化為0。
更進(jìn)一步,為使本發(fā)明具有更好的發(fā)明效果,步驟d中依據(jù)當(dāng)前源像素及誤差行和誤差緩沖寄存器堆的內(nèi)容產(chǎn)生網(wǎng)點(diǎn)時(shí)采用如下方法,包括如下步驟1)從誤差行存儲(chǔ)器中一次讀出對(duì)應(yīng)當(dāng)前源像素位置及下面行同一列位置上的誤差累積值;2)由誤差緩沖寄存器堆的內(nèi)容計(jì)算出當(dāng)前源像素的同一行的所有以前的像素處理所產(chǎn)生的誤差分配到當(dāng)前源像素的誤差值的和S;3)將當(dāng)前像素對(duì)應(yīng)位置上的原誤差累積值加上S,再和當(dāng)前源像素值相加得出最終像素值,將該值和閾值比較產(chǎn)生最終網(wǎng)點(diǎn)。
更進(jìn)一步,為使本發(fā)明具有更好的發(fā)明效果,步驟e中更新誤差行及誤差緩沖寄存器堆時(shí)采用如下方法,包括如下步驟1)根據(jù)最終像素值和閾值得出當(dāng)前像素產(chǎn)生的誤差分配到所有相鄰像素的值Dj;2)誤差分配緩沖寄存器堆中每一像素的誤差分配值更新為后一像素的對(duì)應(yīng)值,而最后一個(gè)像素的誤差分配值更新為Dj;3)誤差累積緩沖寄存器堆中每一像素的誤差累積值更新為后一像素的對(duì)應(yīng)值,而最后一個(gè)像素的誤差累積值更新為當(dāng)前像素對(duì)應(yīng)位置下面行上的原誤差累積值;4)根據(jù)誤差緩沖寄存器堆內(nèi)容得出誤差行的一列的所有寫(xiě)入數(shù)據(jù)值并一次寫(xiě)入誤差行存儲(chǔ)器中,其中誤差行一列中某一點(diǎn)的寫(xiě)入數(shù)據(jù)為存放在誤差緩沖寄存器堆中的擴(kuò)散到該點(diǎn)的所有誤差分配值和該點(diǎn)原誤差累積值之和。
為買(mǎi)現(xiàn)上述方法,本發(fā)明還提出了一個(gè)采用硬件電路來(lái)實(shí)現(xiàn)該方法的裝置,該裝置1包括誤差行存儲(chǔ)器2,誤差緩沖寄存器堆3,閾值比較電路4,誤差生成電路5,誤差緩沖寄存器堆控制電路6,灰度生成電路7,誤差行控制電路8七部分;進(jìn)一步,誤差行存儲(chǔ)器2用來(lái)保存處理過(guò)程中的誤差擴(kuò)散結(jié)果;誤差緩沖寄存器堆3用來(lái)緩沖中間誤差值;灰度生成電路7連接到源像素、誤差行存儲(chǔ)器2和誤差緩沖寄存器堆3,用來(lái)產(chǎn)生源像素經(jīng)過(guò)誤差擴(kuò)散后的最終灰度;閾值比較電路4連接到灰度生成電路7將閾值和最終灰度比較產(chǎn)生最終網(wǎng)點(diǎn);誤差生成電路5連接到灰度生成電路7由閾值和最終灰度計(jì)算出當(dāng)前誤差分配值;誤差緩沖寄存器堆控制電路6來(lái)控制誤差緩沖寄存器堆的更新及輸出,它的輸入來(lái)自誤差生成電路5和誤差行控制電路8和誤差緩沖寄存器堆3的內(nèi)容反饋;誤差行控制電路8連接到誤差行存儲(chǔ)器2用來(lái)產(chǎn)生誤差行存儲(chǔ)器的讀寫(xiě)地址及讀寫(xiě)控制信號(hào)及讀寫(xiě)數(shù)據(jù),它的輸入來(lái)自包括當(dāng)前處理象素的坐標(biāo)及誤差緩沖寄存器堆控制電路6及誤差生成電路5;該裝置工作時(shí),灰度生成電路7根據(jù)當(dāng)前處理像素和誤差行存儲(chǔ)器2及誤差緩沖寄存器堆3的內(nèi)容得出最終的像素灰度,然后通過(guò)閾值比較電路4產(chǎn)生網(wǎng)點(diǎn),同時(shí)最終的像素灰度還通過(guò)誤差生成電路5得出對(duì)應(yīng)該像素的誤差分配值,然后通過(guò)誤差緩沖寄存器堆控制電路6和誤差行控制電路8來(lái)分別完成誤差緩沖寄存器堆3和誤差行存儲(chǔ)器2的一次更新。
更進(jìn)一步,為使本發(fā)明具有更好的效果,上述裝置中誤差緩沖寄存器堆采用采用由觸發(fā)器組成的寄存器堆實(shí)現(xiàn),它包括誤差分配緩沖寄存器堆和誤差累積緩沖寄存器堆兩部分,其中誤差分配緩沖寄存器堆大小為足夠保存誤差行某一位置的所有相關(guān)像素所有誤差分配值,其中當(dāng)前相關(guān)像素為當(dāng)前處理行內(nèi)誤差值能擴(kuò)散到這一誤差行位置所有像素;誤差累積緩沖寄存器堆大小為足夠保存讀出的當(dāng)前處理行的下面行的原誤差行中的所有相關(guān)誤差累積值,其中相關(guān)誤差累積值為從讀出誤差行某一位置上原誤差累積值到該位置新的誤差累積值被寫(xiě)入過(guò)程中所有讀出的誤差行中的原誤差累積值。
更進(jìn)一步,為使本發(fā)明具有更好的效果,上述裝置中灰度生成電路由一個(gè)加法器組成,加法器的輸入來(lái)自源像素,誤差行中讀出的當(dāng)前誤差值和誤差緩沖寄存器堆中的當(dāng)前誤差緩沖值;它將當(dāng)前源像素的值及誤差行中讀出的對(duì)應(yīng)該位置的誤差值及誤差緩沖寄存器堆中緩沖的當(dāng)前像素同一行的以前像素對(duì)當(dāng)前像素的誤差緩沖值相加而得出最終的當(dāng)前像素灰度值。
更進(jìn)一步,為使本發(fā)明具有更好的效果,上述裝置中誤差緩沖寄存器堆控制電路主要由n個(gè)多路器組成,其中n為誤差緩沖寄存器堆中的寄存器個(gè)數(shù),它用來(lái)產(chǎn)生誤差緩沖寄存器堆的輸入及控制信號(hào)從而完成在每一像素處理周期內(nèi)誤差緩沖寄存器堆的一次更新及每一行開(kāi)始時(shí)的初始化清零,多路器的輸入包括當(dāng)前誤差分配值,當(dāng)前誤差累積值及誤差緩沖寄存器堆中的原值,多路器的輸出為誤差緩沖寄存器堆中寄存器的更新值。
更進(jìn)一步,為使本發(fā)明具有更好的效果,上述裝置中誤差行控制電路由讀地址寄存器,寫(xiě)地址寄存器,讀寫(xiě)控制電路及寫(xiě)入數(shù)據(jù)生成電路組成,其中讀地址寄存器和寫(xiě)地址寄存器由當(dāng)前像素的列號(hào)產(chǎn)生,寫(xiě)入數(shù)據(jù)生成電路則由加法器組成,其中加法器的輸入來(lái)自于原誤差累積值,當(dāng)前誤差分配值及相關(guān)誤差緩沖值。
本發(fā)明的效果在于在數(shù)字圖像半色調(diào)領(lǐng)域,利用基于誤差擴(kuò)散的方法產(chǎn)生調(diào)頻網(wǎng)點(diǎn)時(shí),本方法和裝置每處理一個(gè)像素只需進(jìn)行一次存儲(chǔ)器的讀和一次存儲(chǔ)器的寫(xiě)操作,并且能夠采用專(zhuān)用硬件電路來(lái)實(shí)現(xiàn),大大提高了調(diào)頻網(wǎng)點(diǎn)的產(chǎn)生速度。
圖1是基于Floyd-Steinberg算法的誤差擴(kuò)散原理示意圖;圖2是一個(gè)基于Stucki算法的誤差擴(kuò)散原理示意圖;圖3是通常基于Stucki算法的一個(gè)圖像寬度為7個(gè)像素的誤差行存儲(chǔ)器示意圖;圖4是采用本發(fā)明所述方法處理一個(gè)圖像的流程框圖;圖5是本發(fā)明所述方法中基于Stucki算法的一個(gè)圖像寬度為7個(gè)像素的誤差行存儲(chǔ)器示意圖;圖6是本發(fā)明所述方法中基于Stucki算法的誤差緩沖寄存器堆示意圖;圖7是本發(fā)明所述的高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的裝置的框圖;圖8是本發(fā)明所述的高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的裝置中灰度生成電路的框圖;圖9是本發(fā)明所述的高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的裝置中誤差行控制電路的框圖;圖10是本發(fā)明所述的高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的裝置中誤差緩沖寄存器堆控制電路中多路器的框圖;圖11是本發(fā)明所述的方法在處理一個(gè)像素時(shí)誤差行存儲(chǔ)器的讀寫(xiě)過(guò)程示意圖。
具體實(shí)施例方式
下面結(jié)合說(shuō)明書(shū)附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步地描述。
附圖1是基于Floyd-Steinberg算法的誤差擴(kuò)散原理示意圖,當(dāng)前像素*的誤差按附圖1所示的比例被分配到附圖1所示的4個(gè)相鄰像素上去。
附圖2是基于Stucki算法的誤差擴(kuò)散原理示意圖,當(dāng)前像素*的誤差被分配到附圖2所示的12個(gè)相鄰像素上去,通常這12個(gè)位置上的某些位置的誤差分配比例是一樣的,附圖2所示的算法只需要5個(gè)不同的誤差分配比例,其中可取D1=1/44,D2=2/44,D3=5/44,D4=4/44,D5=8/44的比例來(lái)分配當(dāng)前像素*的誤差。通常采用這種算法并且采用S型的掃描處理時(shí)需要有誤差行來(lái)保存當(dāng)前處理像素對(duì)下面2行的誤差分配累加值,這樣誤差行通常為3行,寬度為源圖像寬度。容易得知,通常處理一個(gè)像素需要大量的誤差行讀寫(xiě)操作來(lái)更新誤差行存儲(chǔ)器中12個(gè)位置上的誤差累積值。
附圖3是通?;赟tucki算法的一個(gè)圖像寬度為7個(gè)像素的誤差行存儲(chǔ)器示意圖,其中(i,j)表示第i行,第j列的像素對(duì)應(yīng)的誤差行位置,容易得知基于Stucki算法的誤差行可以循環(huán)使用,只需要3行誤差行即可,其中第i+3行和第i行的像素使用同一誤差行。
如圖4所示,本發(fā)明所述一種能夠高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的方法用于處理一個(gè)圖像的具體實(shí)現(xiàn)方法,包括如下步驟(1)按列組織并初始化誤差行存儲(chǔ)器;(2)設(shè)定誤差緩沖寄存器堆;(3)獲取源像素;(4)依據(jù)當(dāng)前源像素及誤差行和誤差緩沖寄存器堆的內(nèi)容產(chǎn)生網(wǎng)點(diǎn);(5)更新誤差行及誤差緩沖寄存器堆;(6)判斷是否一行處理結(jié)束,如否,則轉(zhuǎn)入步驟3,如是則轉(zhuǎn)入步驟7;(7)判斷是否圖像處理結(jié)束,如否,則轉(zhuǎn)入步驟2,如是處理結(jié)束。
如圖5所示,該圖是上述方法步驟(1)中按列組織并初始化誤差行存儲(chǔ)器時(shí)基于Stucki算法的一個(gè)誤差行存儲(chǔ)器示意圖,其中圖像寬度為7個(gè)像素,(i,j)表示第i行,第j列的像素對(duì)應(yīng)的誤差行位置,在通常的計(jì)算機(jī)系統(tǒng)中存儲(chǔ)器的數(shù)據(jù)總線寬度往往是16,32或64等2的整數(shù)次方,因此,本發(fā)明采用的誤差行的行數(shù)同樣定義為2的整數(shù)次方,具體到基于Stucki算法的方法,本實(shí)施例中誤差行為4行,循環(huán)使用,即其中第i+4行和第i行的像素使用同一誤差行。同時(shí),如附圖5所示,本發(fā)明所述方法和現(xiàn)有技術(shù)不同的是,本發(fā)明所述方法中,誤差行是按列排列的,即列號(hào)相同4列誤差行單元相鄰排列,這樣,誤差行存儲(chǔ)器采用32位的總線寬度,就一次可以讀寫(xiě)誤差行中同一列位置上的所有誤差累積值。
如圖6所示,該圖是上述方法步驟(2)中初始化誤差緩沖寄存器堆時(shí)基于Stucki算法的誤差緩沖寄存器堆示意圖,它包含有當(dāng)前處理像素和當(dāng)前處理像素的同一行中之前若干個(gè)相關(guān)像素的所有誤差分配值及讀出的當(dāng)前處理行的下面行的若干個(gè)原誤差行的值,以附圖2所示的Stucki算法為例,因?yàn)檎`差行的一個(gè)位置上的誤差可能來(lái)自當(dāng)前行的最多5個(gè)像素,所以,誤差緩沖寄存器堆需要保存同一行5個(gè)相鄰像素的所有誤差分配值,同時(shí)因?yàn)楫?dāng)前處理像素的誤差最多只能往下一行及下兩行的前2個(gè)像素?cái)U(kuò)散,并且容易得知只有當(dāng)前行的下一行的最終誤差值與誤差行存儲(chǔ)器中的原值有關(guān),當(dāng)前行的下面第二行的誤差值在當(dāng)前行開(kāi)始處理前為0,而當(dāng)前行的下一行的誤差行中某一位置的最終誤差累積值的寫(xiě)入是在它后2個(gè)像素對(duì)應(yīng)的誤差行讀出之后才進(jìn)行的,這個(gè)過(guò)程中,讀出的誤差行中原誤差累積值為3個(gè),所以誤差緩沖寄存器堆中只需保存3個(gè)當(dāng)前行的下一行的原誤差行的值即可。如圖6所示,本實(shí)施例中,誤差緩沖寄存器堆為能夠緩沖相鄰5個(gè)像素的所有誤差分配值及當(dāng)前處理行的下一行的3個(gè)原誤差行值的寄存器堆,其中設(shè)P5為當(dāng)前處理像素,PiDj(i,j=1...5)表示P5及它的4個(gè)同一行前面相鄰像素的所有誤差值,PiL1(i=3,4,5)則表示讀出的Pi位置上下一行的誤差行存儲(chǔ)器中的原誤差累積值。
本發(fā)明所述的方法中步驟(4)中依據(jù)當(dāng)前源像素及誤差行和誤差緩沖寄存器堆的內(nèi)容產(chǎn)生網(wǎng)點(diǎn)時(shí)采用如下方法,包括如下步驟1)從誤差行存儲(chǔ)器中一次讀出對(duì)應(yīng)當(dāng)前源像素位置及下面行同一列位置上的誤差累積值,因?yàn)檎`差行是按列組織的并且誤差行的行數(shù)與誤差行存儲(chǔ)器的總線寬度存在匹配關(guān)系,因此讀地址寄存器和寫(xiě)地址寄存器由當(dāng)前處理像素的列號(hào)得出,以實(shí)現(xiàn)附圖2所示的Stucki算法為例,如當(dāng)前處理像素列號(hào)為j,則讀地址寄存器=4*j,因?yàn)檎`差行是以4行為周期循環(huán)使用的,所以當(dāng)讀出誤差行內(nèi)容后,根據(jù)當(dāng)前處理像素的行號(hào)的最低2位則可得出當(dāng)前處理像素所對(duì)應(yīng)的誤差行的原誤差累積值,設(shè)為L(zhǎng)0,當(dāng)前處理像素下方一行所對(duì)應(yīng)的誤差行的原誤差累積值,設(shè)為L(zhǎng)1;2)由誤差緩沖寄存器堆的內(nèi)容計(jì)算出當(dāng)前源像素的同一行的所有以前的像素處理所產(chǎn)生的誤差分配到當(dāng)前源像素的誤差值的和S,以附圖2所示的Stucki算法為例,S等于P5D5+P4D3;
3)將當(dāng)前像素對(duì)應(yīng)位置上的原誤差累積值L0加上S,再和當(dāng)前源像素值相加得出最終像素值,將該值和閾值比較即可產(chǎn)生最終網(wǎng)點(diǎn)。
本發(fā)明所述的方法中步驟(5)中更新誤差行及誤差緩沖寄存器堆時(shí)采用如下方法,包括如下步驟1)根據(jù)最終像素值和閾值得出當(dāng)前像素產(chǎn)生的誤差分配到所有相鄰像素的值Dj,以附圖2所示的Stucki算法為例,分配比例為D1=1/44,D2=2/44,D3=5/44,D4=4/44,D5=8/44;2)誤差分配緩沖寄存器堆中每一像素的誤差分配值更新為后一像素的對(duì)應(yīng)值,而最后一個(gè)像素的誤差分配值更新為Dj,以附圖2所示的Stucki算法為例,即PiDj賦值為Pi+1Dj,P5Dj賦值為Dj,(i=1..4,j=1..5);3)誤差累積緩沖寄存器堆中每一像素的誤差累積值更新為后一像素的對(duì)應(yīng)值,而最后一個(gè)像素的誤差累積值更新為當(dāng)前像素對(duì)應(yīng)位置下面行上的原誤差累積值,以附圖2所示的Stucki算法為例,即PiL1賦值為Pi+1L1,(i=3,4),P5L1賦值為L(zhǎng)1;4)根據(jù)誤差緩沖寄存器堆內(nèi)容得出誤差行的一列的所有寫(xiě)入數(shù)據(jù)值并一次寫(xiě)入誤差行存儲(chǔ)器中,其中誤差行一列中某一點(diǎn)的寫(xiě)入數(shù)據(jù)為存放在誤差緩沖寄存器堆中的擴(kuò)散到該點(diǎn)的所有誤差分配值和該點(diǎn)原誤差累積值之和,以實(shí)現(xiàn)附圖2所示的Stucki算法為例,當(dāng)前處理像素為P5時(shí),則可得出在P5前第2個(gè)像素位置的所在列的最終寫(xiě)入數(shù)據(jù)PL1和PL2,其中PL1=P3L1+P1D2+P2D4+P3D5+P4D4+P5D2,PL2=P1D1+P2D2+P3D3+P4D2+P5D1。
一種能夠高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的裝置1,如圖7所示,該裝置包括誤差行存儲(chǔ)器2,誤差緩沖寄存器堆3,閾值比較電路4,誤差生成電路5,誤差緩沖寄存器堆控制電路6,灰度生成電路7,誤差行控制電路8共七部分。
在上述裝置中,灰度生成電路7根據(jù)當(dāng)前處理像素和誤差行存儲(chǔ)器2及誤差緩沖寄存器堆3的內(nèi)容得出最終的像素灰度,然后通過(guò)閾值比較電路4產(chǎn)生網(wǎng)點(diǎn),同時(shí)最終的像素灰度還通過(guò)誤差生成電路5得出對(duì)應(yīng)該像素的誤差分配值,然后通過(guò)誤差緩沖寄存器堆控制電路6和誤差行控制電路8來(lái)分別完成誤差緩沖寄存器堆3和誤差行存儲(chǔ)器2的一次更新。
在上述裝置中,誤差行存儲(chǔ)器2是按列組織的存儲(chǔ)器,用來(lái)存儲(chǔ)誤差累積值,它連接到誤差行控制電路8并由誤差行控制電路8控制;誤差緩沖寄存器堆3由硬件觸發(fā)器組成,用來(lái)緩沖中間誤差分配值,它連接到誤差緩沖寄存器堆控制電路6并由誤差緩沖寄存器堆控制電路6來(lái)控制;
灰度生成電路7用來(lái)產(chǎn)生源像素的最終灰度,它的輸入連接到源像素和誤差緩沖寄存器堆控制電路6,它的輸出則提供給閾值比較電路4和誤差生成電路5;附圖8是本發(fā)明所述的一種能夠高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的裝置中灰度生成電路的框圖,它由一個(gè)加法器產(chǎn)生最終像素的灰度值,其中最終像素的灰度值等于源像素的值加上從誤差行中讀出的對(duì)應(yīng)該位置的當(dāng)前誤差值再加上誤差緩沖寄存器堆中緩沖的當(dāng)前像素同一行的以前像素對(duì)當(dāng)前像素的當(dāng)前誤差緩沖值,以實(shí)現(xiàn)附圖2所示的Stucki算法為例,該電路的邏輯表達(dá)式為最終像素灰度=源像素值+L0+(P5D5+P4D3)。
閾值比較電路4用來(lái)將灰度生成電路7所產(chǎn)生的灰度與閾值進(jìn)行比較產(chǎn)生網(wǎng)點(diǎn),它的輸入連接到灰度生成電路7,輸出即是最終網(wǎng)點(diǎn);誤差生成電路5用來(lái)將由灰度生成電路7所產(chǎn)生的灰度通過(guò)計(jì)算或查表而產(chǎn)生當(dāng)前像素的誤差分配值,它的輸入連接到灰度生成電路7,輸出將提供給誤差緩沖寄存器堆控制電路6和誤差行控制電路8;誤差緩沖寄存器堆控制電路6用來(lái)控制誤差緩沖寄存器堆的更新,它的輸入連接到誤差生成電路5和誤差行控制電路8及誤差緩沖寄存器堆3,它的輸出連接到誤差行控制電路8及誤差緩沖寄存器堆3和灰度生成電路7;附圖10是本發(fā)明所述的一種能夠高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的裝置中誤差緩沖寄存器堆控制電路中多路器的框圖,誤差緩沖寄存器堆控制電路通過(guò)n個(gè)多路器(multiplexer)來(lái)完成在每一像素處理周期內(nèi)誤差緩沖寄存器堆的一次更新及每一行開(kāi)始時(shí)的初始化清零,其中n為誤差緩沖寄存器堆中的寄存器個(gè)數(shù),即對(duì)應(yīng)誤差緩沖寄存器堆中的每一個(gè)寄存器都包含有結(jié)構(gòu)相同的一個(gè)多路器,其中多路器的輸入包括當(dāng)前處理像素的所有誤差分配值即當(dāng)前誤差分配值,從誤差行中讀出當(dāng)前處理像素對(duì)應(yīng)的下一行當(dāng)前誤差累積值及誤差緩沖寄存器堆中的原值,多路器的輸出即誤差緩沖寄存器堆中寄存器的更新值,以實(shí)現(xiàn)附圖2所示的Stucki算法為例,當(dāng)?shù)贸霎?dāng)前誤差分配值Dj及當(dāng)前誤差累積值L1后,該多路器的輸出可以表示為對(duì)應(yīng)于PiDj,多路器輸出為Pi+1Dj,對(duì)應(yīng)于P5Dj多路器輸出為Dj,(i=1..4,j=1..5),對(duì)應(yīng)于PiL1,多路器輸出為Pi+1L1,(i=3,4),對(duì)應(yīng)于P5L1,多路器輸出為L(zhǎng)1。
誤差行控制電路8用來(lái)控制誤差行存儲(chǔ)器2的讀寫(xiě),它的輸入來(lái)自誤差生成電路5和誤差緩沖寄存器堆控制電路6,它的輸出連接到灰度生成電路7,同時(shí)它還和誤差行存儲(chǔ)器2相連。附圖9是本發(fā)明所述的一種能夠高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的裝置中誤差行控制電路的框圖,它由讀地址寄存器,寫(xiě)地址寄存器,讀寫(xiě)控制電路及寫(xiě)入數(shù)據(jù)生成電路器組成,其中讀地址寄存器,寫(xiě)地址寄存器由當(dāng)前處理像素坐標(biāo)生成,寫(xiě)入數(shù)據(jù)生成電路則由加法器組成,它由原誤累積差值,當(dāng)前誤差分配值及相關(guān)誤差緩沖值得出一列誤差行寫(xiě)入數(shù)據(jù),讀寫(xiě)控制電路則產(chǎn)生誤差行存儲(chǔ)器的讀寫(xiě)控制信號(hào),以實(shí)現(xiàn)附圖2所示的Stucki算法為例,如當(dāng)前處理像素列號(hào)為j,則讀地址寄存器=4*j,寫(xiě)地址寄存器則為4*(j-2),誤差行寫(xiě)入數(shù)據(jù)生成電路產(chǎn)生一列寫(xiě)入數(shù)據(jù)PL1和PL2,其中PL1可表示為PL1=P3L1+P1D2+P2D4+P3D5+P4D4+P5D2,PL2可表示為PL2=P1D1+P2D2+P3D3+P4D2十P5D1。
附圖11是本發(fā)明所述的方法在處理一個(gè)像素時(shí)誤差行存儲(chǔ)器的讀寫(xiě)過(guò)程示意圖。以實(shí)現(xiàn)附圖2所示的Stucki算法為例,設(shè)*所示為當(dāng)前處理像素,如采用現(xiàn)有技術(shù),處理當(dāng)前處理像素*時(shí)需要讀出附圖11所示誤差行中PL2和PL1,L0和L1及所有標(biāo)記為X的位置的原內(nèi)容,當(dāng)前像素處理完畢后,還需要更新當(dāng)前像素相鄰的12個(gè)位置上的累積值,而采用本發(fā)明所述的方法和裝置,當(dāng)處理當(dāng)前像素*時(shí),先從誤差行存儲(chǔ)器中讀出L0和L1,其中L0用來(lái)產(chǎn)生最終灰度,而L1被緩沖,在以后用來(lái)產(chǎn)生PL1,當(dāng)當(dāng)前處理像素的誤差分配值Dj產(chǎn)生后,可以得知誤差行存儲(chǔ)器中PL2和PL1的值可以被確定并寫(xiě)入,在該行以后的像素處理中誤差行中該位置的內(nèi)容不會(huì)改變,同時(shí)因?yàn)橛绊慞L2和PL1最終累積值的所有相關(guān)誤差值被緩沖在誤差緩沖寄存器堆中,所以不需要再次讀取存儲(chǔ)器即可完成PL2和PL1的寫(xiě)入,而且因?yàn)楸景l(fā)明中誤差行是按列組織的,因此讀L0和L1只需一次存儲(chǔ)器讀操作而寫(xiě)PL2和PL1也只需一次存儲(chǔ)器寫(xiě)操作,可見(jiàn)采用本發(fā)明所述方法,每處理一個(gè)像素時(shí),只需要一次存儲(chǔ)器讀來(lái)讀出L1和L0及一次存儲(chǔ)器寫(xiě)操作寫(xiě)入PL2和PL1即可。從而網(wǎng)點(diǎn)嚴(yán)生的速度得以大幅提高。
以上所述僅為本發(fā)明的其中一個(gè)實(shí)施例而已,并不用以限制本發(fā)明,如以上用將誤差擴(kuò)散到12個(gè)相鄰位置的Stucki算法來(lái)描述本發(fā)明實(shí)施例,但本發(fā)明同樣適用于基于誤差擴(kuò)散原理的,將誤差擴(kuò)散到更多的點(diǎn)的網(wǎng)點(diǎn)生成方法,因而凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改,等同替換,改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種能夠高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的方法,包括以下步驟a)按列組織并初始化誤差行存儲(chǔ)器;b)設(shè)定誤差緩沖寄存器堆;c)獲取源像素;d)依據(jù)當(dāng)前源像素及誤差行和誤差緩沖寄存器堆的內(nèi)容產(chǎn)生網(wǎng)點(diǎn);e)更新誤差行及誤差緩沖寄存器堆;f)重復(fù)步驟c,d,e直到一行結(jié)束;g)重復(fù)步驟b,c,d,e,f直到圖像結(jié)束。
2.根據(jù)權(quán)利要求1所述的一種能夠高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的方法,其特征在于步驟a中按列組織并初始化誤差行存儲(chǔ)器時(shí)采用如下方法,具體包括如下步驟1)誤差行的行數(shù)為2的n次方,并且誤差行存儲(chǔ)器的總線寬度能夠保證一次可以從誤差行存儲(chǔ)器中讀寫(xiě)2的n次方個(gè)單元,同時(shí)誤差行的行數(shù)大于等于一個(gè)像素的誤差所能夠擴(kuò)散到的行數(shù),誤差行循環(huán)重復(fù)使用,上述的n為正整數(shù);2)列號(hào)相同的每2的n次方列誤差位置相鄰排列;3)誤差行內(nèi)容被初始化為0。
3.根據(jù)權(quán)利要求1所述的一種能夠高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的方法,其特征在于步驟b中設(shè)定誤差緩沖寄存器堆時(shí)采用如下方法,具體包括如下步驟1)誤差緩沖寄存器堆包括誤差分配緩沖寄存器堆和誤差累積緩沖寄存器堆兩部分,其中誤差分配緩沖寄存器堆的大小能夠保存誤差行某一位置的所有相關(guān)像素所有誤差分配值,其中當(dāng)前相關(guān)像素為當(dāng)前處理行內(nèi)誤差值能擴(kuò)散到這一誤差行位置所有像素,誤差累積緩沖寄存器堆的大小為足夠保存讀出的當(dāng)前處理行的下面行的原誤差行中的所有相關(guān)誤差累積值,其中相關(guān)誤差累積值為從讀出誤差行某一位置上原誤差累積值到該位置新的誤差累積值被寫(xiě)入過(guò)程中所有讀出的誤差行中的原誤差累積值;2)初始化誤差緩沖寄存器堆即每行處理開(kāi)始時(shí)誤差緩沖寄存器堆內(nèi)容被初始化為0。
4.根據(jù)權(quán)利要求1所述的一種能夠高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的方法,其特征在于步驟d中采用依據(jù)當(dāng)前源像素及誤差行和誤差緩沖寄存器堆的內(nèi)容產(chǎn)生網(wǎng)點(diǎn)時(shí)采用如下方法,包括如下步驟1)從誤差行存儲(chǔ)器中一次讀出對(duì)應(yīng)當(dāng)前源像素位置及下面行同一列位置上的誤差累積值;2)由誤差緩沖寄存器堆的內(nèi)容計(jì)算出當(dāng)前源像素的同一行的所有以前的像素處理所產(chǎn)生的誤差分配到當(dāng)前源像素的誤差值的和S;3)將當(dāng)前像素對(duì)應(yīng)位置上的原誤差累積值加上S,再和當(dāng)前源像素值相加得出最終像素值,將該值和閾值比較產(chǎn)生最終網(wǎng)點(diǎn)。
5.根據(jù)權(quán)利要求1所述的一種能夠高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的方法,其特征在于步驟e中更新誤差行及誤差緩沖寄存器堆時(shí)采用如下方法,包括如下步驟1)根據(jù)最終像素值和閾值得出當(dāng)前像素產(chǎn)生的誤差分配到所有相鄰像素的值Dj;2)誤差分配緩沖寄存器堆中每一像素的誤差分配值更新為后一像素的對(duì)應(yīng)值,而最后一個(gè)像素的誤差分配值更新為Dj;3)誤差累積緩沖寄存器堆中每一像素的誤差累積值更新為后一像素的對(duì)應(yīng)值,而最后一個(gè)像素的誤差累積值更新為當(dāng)前像素對(duì)應(yīng)位置下面行上的原誤差累積值;4)根據(jù)誤差緩沖寄存器堆內(nèi)容得出誤差行的一列的所有寫(xiě)入數(shù)據(jù)值并一次寫(xiě)入誤差行存儲(chǔ)器中,其中誤差行一列中某一點(diǎn)的寫(xiě)入數(shù)據(jù)為存放在誤差緩沖寄存器堆中的擴(kuò)散到該點(diǎn)的所有誤差分配值和該點(diǎn)原誤差累積值之和。
6.一種實(shí)現(xiàn)如權(quán)利要求1所述方法的能夠高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的裝置,該裝置(1)包括閾值比較電路(4),誤差生成電路(5),其特征在于還包括誤差行存儲(chǔ)器(2),誤差緩沖寄存器堆(3),誤差緩沖寄存器堆控制電路(6),灰度生成電路(7),誤差行控制電路(8);所述誤差行存儲(chǔ)器(2)用來(lái)保存處理過(guò)程中的誤差擴(kuò)散結(jié)果;誤差緩沖寄存器堆(3)用來(lái)緩沖中間誤差值;灰度生成電路(7)連接到源像素、誤差行存儲(chǔ)器(2)和誤差緩沖寄存器堆(3),用來(lái)產(chǎn)生源像素經(jīng)過(guò)誤差擴(kuò)散后的最終灰度;所述閾值比較電路(4)連接到灰度生成電路(7)將閾值和最終灰度比較產(chǎn)生最終網(wǎng)點(diǎn);誤差生成電路(5)連接到灰度生成電路(7)由閾值和最終灰度計(jì)算出當(dāng)前誤差分配值;誤差緩沖寄存器堆控制電路(6)來(lái)控制誤差緩沖寄存器堆的更新及輸出,它的輸入來(lái)自誤差生成電路(5)和誤差行控制電路(8)和誤差緩沖寄存器堆(3)的內(nèi)容反饋;誤差行控制電路(8)連接到誤差行存儲(chǔ)器(2)用來(lái)產(chǎn)生誤差行存儲(chǔ)器的讀寫(xiě)地址及讀寫(xiě)控制信號(hào)及讀寫(xiě)數(shù)據(jù),它的輸入來(lái)自包括當(dāng)前處理象素的坐標(biāo)及誤差緩沖寄存器堆控制電路(6)及誤差生成電路(5)。
7.根據(jù)權(quán)利要求6所述的一種能夠高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的裝置,其特征在于誤差緩沖寄存器堆(3)采用由觸發(fā)器組成的寄存器堆實(shí)現(xiàn),它包括誤差分配緩沖寄存器堆和誤差累積緩沖寄存器堆兩部分,其中誤差分配緩沖寄存器堆大小能夠保存誤差行某一位置的所有相關(guān)像素所有誤差分配值,其中當(dāng)前相關(guān)像素為當(dāng)前處理行內(nèi)誤差值能擴(kuò)散到這一誤差行位置所有像素;誤差累積緩沖寄存器堆大小為足夠保存讀出的當(dāng)前處理行的下面行的原誤差行中的所有相關(guān)誤差累積值,其中相關(guān)誤差累積值為從讀出誤差行某一位置上原誤差累積值到該位置新的誤差累積值被寫(xiě)入過(guò)程中所有讀出的誤差行中的原誤差累積值。
8.根據(jù)權(quán)利要求6所述的一種能夠高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的裝置,其特征在于灰度生成電路(7)由一個(gè)加法器組成,加法器的輸入來(lái)自源像素、誤差行中讀出的當(dāng)前誤差值和誤差緩沖寄存器堆中的當(dāng)前誤差緩沖值。
9.根據(jù)權(quán)利要求6所述的一種能夠高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的裝置,其特征在于誤差緩沖寄存器堆控制電路(6)由n個(gè)多路器組成,其中n為誤差緩沖寄存器堆中的寄存器個(gè)數(shù),多路器的輸入包括當(dāng)前誤差分配值,當(dāng)前誤差累積值及誤差緩沖寄存器堆中的原值,多路器的輸出為誤差緩沖寄存器堆中寄存器的更新值。
10.根據(jù)權(quán)利要求6所述的一種能夠高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的裝置,其特征在于誤差行控制電路(8)由讀地址寄存器,寫(xiě)地址寄存器,讀寫(xiě)控制電路及寫(xiě)入數(shù)據(jù)生成電路組成,其中讀地址寄存器和寫(xiě)地址寄存器由當(dāng)前像素的列號(hào)產(chǎn)生,寫(xiě)入數(shù)據(jù)生成電路則由加法器組成,其中加法器的輸入來(lái)自于原誤差累積值、當(dāng)前誤差分配值及相關(guān)誤差緩沖值。
全文摘要
本發(fā)明涉及一種能夠高速產(chǎn)生調(diào)頻網(wǎng)點(diǎn)的方法和裝置,屬于數(shù)字圖像半色調(diào)領(lǐng)域?,F(xiàn)有技術(shù)中,每處理一個(gè)像素通常需要對(duì)誤差行進(jìn)行多次讀寫(xiě)操作,網(wǎng)點(diǎn)產(chǎn)生速度較慢。本發(fā)明所述的方法,將當(dāng)前像素所產(chǎn)生的誤差緩沖在寄存器堆中,只有當(dāng)相關(guān)像素都處理完畢時(shí)才將最終的誤差累積值寫(xiě)入誤差行中,因此,每處理一個(gè)像素只需對(duì)誤差行進(jìn)行一次讀寫(xiě)操作。本發(fā)明還給出了一種實(shí)現(xiàn)該方法的裝置,該裝置由誤差行存儲(chǔ)器,誤差緩沖寄存器堆,灰度生成電路,閾值比較電路,誤差生成電路,誤差緩沖寄存器堆控制電路,誤差行控制電路共七部分組成。采用本發(fā)明所述的方法和裝置,減少了操作步驟,大大提高了調(diào)頻網(wǎng)點(diǎn)的產(chǎn)生速度。
文檔編號(hào)H04N1/405GK1668062SQ20051006325
公開(kāi)日2005年9月14日 申請(qǐng)日期2005年4月7日 優(yōu)先權(quán)日2005年4月7日
發(fā)明者劉志紅, 陳 峰, 楊斌 申請(qǐng)人:北京北大方正電子有限公司, 北京大學(xué)