專利名稱:圖像處理裝置及其處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種圖像處理裝置及其處理方法,尤其涉及一種利用雙端口存儲器實現(xiàn)數(shù)據(jù)讀寫并行的圖像處理裝置及處理方法。
背景技術(shù):
在圖像處理領(lǐng)域中,數(shù)字半色調(diào)是一種將連續(xù)色調(diào)的圖像轉(zhuǎn)換成二值色調(diào)圖像的技術(shù),這一技術(shù)常用于打印機、計算機顯示器及其它二值的電子顯示設(shè)備上再現(xiàn)彩色或灰度的圖像,著重解決的問題是如何使得半色調(diào)圖像達到一種連續(xù)調(diào)圖像的視覺效果。有許多實現(xiàn)方法,主要分為三類規(guī)則抖動法、誤差擴散法和最佳化的方法。其中誤差擴散方法是近些年來被廣泛采用的數(shù)字半色調(diào)技術(shù)。
在通常的調(diào)頻掛網(wǎng)方法中,誤差擴散方法是最常用的方法。誤差擴散方法是把原圖像的每個像素點的灰度值與閾值相比較產(chǎn)生網(wǎng)點的同時,把像素點的灰度值與閾值之間的誤差擴散到該像素點周圍的像素點上,例如對于一個256級灰度的圖像,閾值為127,有一個像素點的灰度值為150,經(jīng)比較可知,該像素點應(yīng)記為白色網(wǎng)點(其灰度值為255),但實際上該像點并不是真正的白色,與白色之間存在的灰度差為105,于是將105這個誤差按一定的方法分散到該像素點周圍的像素點上。
將誤差擴散到周圍像素點的方法有很多種,其中Floyd-Steinberg誤差擴散算法是一種最通用的誤差擴散方法,該算法是將一個像素的誤差分配到周圍的四個點上。該算法首先比較當(dāng)前像素點的灰度值與閾值,將該像素點記為1或0,即白色或黑色網(wǎng)點,然后計算誤差,分配誤差到周圍的像素點,修改周圍像素點的灰度值。圖1A是基于Floyd-Steinberg算法的誤差擴散分配示意圖,如圖所示,按Floyd-Steinberg誤差擴散算法,當(dāng)前像素*的誤差將按圖中所示的比例被分配到它所相鄰的四個像素上去。即將誤差的7/16加到當(dāng)前像素點右邊第一個像素點上,誤差的3/16加到下一行左邊第一個像點上,誤差的5/16加到下一行正對的像點上,誤差的1/16加到下一行右邊第一個像點上,這樣把當(dāng)前像點的誤差分散到周圍的像點上,反復(fù)進行該過程,對圖像中的每個像點進行同樣的半色調(diào)化和灰度值的修正即可。
從理論上說,誤差擴散方法能很好的反映原圖的層次關(guān)系和顏色,如果我們進行誤差擴散的點越多,效果會越好,故在此基礎(chǔ)上又提出能涉及很多點的算法。例如,Stucki算法進一步改善了Floyd-Steinberg算法。圖2A是基于Stucki算法的誤差擴散分配示意圖,如圖所示,按Stucki誤差擴散算法,當(dāng)前像素*的誤差被分配到如圖所示的12個相鄰像素上去,這12個位置上的某些位置的誤差分配比例相同,只需要5個不同的誤差分配比例,其中D1=1/44,D2=2/44,D3=5/44,D4=4/44,D5=8/44。由于Stucki算法涉及了更多的點,因此輸出圖像的效果更好。
在圖像處理過程中,誤差擴散的點越多,需要進行的運算量越大,處理數(shù)據(jù)的速度也越慢。對于利用硬件電路實現(xiàn)高速產(chǎn)生調(diào)頻網(wǎng)點的裝置而言,誤差擴散的點越多,電路規(guī)模越大,影響調(diào)頻網(wǎng)點產(chǎn)生速度的因素也越多,其中存儲器的讀寫操作一直是影響調(diào)頻網(wǎng)點產(chǎn)生速度的一個重要因素。在傳統(tǒng)的誤差擴散實現(xiàn)方法中,需要用到大量的存儲器讀寫操作,存儲器的存取速度在基于誤差擴散算法的系統(tǒng)中,往往成為速度的瓶頸,而這一缺陷也一直制約著誤差擴散方法的廣泛應(yīng)用。
雖然現(xiàn)有技術(shù)對高速生成調(diào)頻網(wǎng)點的方法進行了多種探索,但是在誤差擴散時,仍然要對存儲器進行至少一次讀和一次寫的操作,且讀和寫分別進行,大大影響了網(wǎng)點產(chǎn)生的速度。
發(fā)明內(nèi)容
針對上述問題,本發(fā)明提供了一種能夠同時讀寫數(shù)據(jù)的圖像處理裝置,包括雙端口存儲器、存儲控制器,其中所述雙端口存儲器包括端口1和端口2,其中,
所述存儲控制器包括端口1寫控制電路,端口2讀控制電路;所述端口1寫控制電路連接至所述端口1,用于對端口1進行寫操作,所述端口2讀控制電路連接至所述端口2用于對端口2進行讀操作;其中,所述圖像由多行像素點構(gòu)成,所述圖像處理裝置還包括誤差擴散裝置,用于對各像素點執(zhí)行依次對其周圍的像素點誤差擴散,且誤差擴散到其下面1行;其中,所述圖像由多行像素點構(gòu)成,圖像處理裝置還包括誤差擴散裝裝置,用于對各像素點執(zhí)行依次對其周圍的像素點誤差擴散,且誤差擴散到其下面多行;其中,所述存儲器為誤差行存儲器,用于存儲前一行對當(dāng)前處理行各點的誤差累積值;其中,所述存儲器為誤差行存儲器,用于存儲前一行對當(dāng)前處理行最終誤差累積完成點的最終誤差累積值以及同時產(chǎn)生的當(dāng)前處理行下1行、下兩行...下n-1行中間誤差累積完成點的n-1個中間誤差累積值。
其中,同時產(chǎn)生的最終誤差累積值和n個中間誤差累積值存儲以數(shù)據(jù)包的形式存儲。
其中,還包括寄存器、寄存器控制電路、灰度生成電路和誤差生成電路;所述寄存器用于暫存當(dāng)前處理像素點的誤差擴散到周圍點的誤差分配值;所述存儲控制器中的端口2讀控制電路從誤差行存儲器中讀出當(dāng)前處理點的誤差累積值,提供給灰度生成電路,同時存儲控制其中的端口1寫控制電路利用寄存器中的誤差分配值計算出累積完成點的誤差累積值并寫入誤差行存儲器;
寄存器控制電路用于將來自誤差生成電路的誤差分配值暫存到誤差分配寄存器中,以及為誤差行存儲器控制電路和灰度生成電路提供計算所需要的誤差分配值;灰度生成電路用于產(chǎn)生各像素點的最終灰度值;誤差生成電路用于將由灰度生成電路所產(chǎn)生的最終灰度值通過計算而產(chǎn)生當(dāng)前處理點的誤差分配值,并提供給誤差分配寄存器控制電路。
其中,還包括寄存器、寄存器控制電路、灰度生成電路和誤差生成電路;所述寄存器用于暫存每個像素點的誤差擴散到其周圍點的誤差分配值以及從誤差行存儲器中讀出的用于計算最終誤差累積值的中間誤差累積值;所述存儲控制器中的端口2讀控制電路從誤差行存儲器中讀出由最終誤差累積值和中間誤差累積值組成的數(shù)據(jù)包,并將最終誤差累積值提供給灰度生成電路,將中間誤差累積值緩存到寄存器中,同時所述端口1寫控制電路利用寄存器中的誤差分配值和中間誤差累積值計算出最終誤差累積完成點的最終誤差累積值和中間誤差累積完成點的中間誤差累積值并寫入誤差行存儲器;寄存器控制電路用于將來自誤差生成電路的誤差分配值暫存到誤差分配寄存器中,以及為存儲控制器和灰度生成電路提供計算所需要的誤差分配值;灰度生成電路用于產(chǎn)生各像素點的最終灰度值;誤差生成電路用于將由灰度生成電路所產(chǎn)生的灰度通過計算而產(chǎn)生當(dāng)前像素的誤差分配值,并提供給誤差分配寄存器堆控制電路。
其中,還包括閾值比較電路,用于將灰度生成電路所產(chǎn)生的最終灰度值與閾值進行比較產(chǎn)生網(wǎng)點。
其中,所述寄存器控制電路為多路選擇器。
其中,
所述灰度生成電路由加法器組成。
其中,所述誤差行存儲器為靜態(tài)隨機存取存儲器。
本發(fā)明進一步提供了一種利用誤差擴散裝置執(zhí)行誤差擴散的圖像處理方法,該圖像由多行像素點構(gòu)成,該裝置包括誤差行存儲器,用于存儲當(dāng)前處理行每個位置點的誤差累積值;寄存器堆,用于寄存當(dāng)前處理行各點對其周圍點的誤差分配值;該方法包括,以行為單位依次處理各個點,處理過程為首先,初始化誤差行存儲器的值為0;步驟1,初始化寄存器堆的值為0;讀取當(dāng)前處理行中第1個要處理點的灰度值,并從誤差行存儲器中讀取屬于該點的誤差累積值;步驟2,利用上個周期讀入的點的灰度值和該點的誤差累積值以及寄存器堆中相應(yīng)位置的誤差分配值計算該點的最終灰度值以及該點對周圍點的誤差分配值并更新寄存器堆,同時,讀取當(dāng)前行中下一個要處理點的灰度值,并從誤差行存儲器中讀取屬于該點的誤差累積值;步驟3,根據(jù)寄存器堆中相應(yīng)位置的誤差分配值計算誤差累積完成點的誤差累積值并將其寫入到誤差行存儲器的相應(yīng)位置;利用上個步驟讀入的點的灰度值和該點的誤差累積值以及寄存器堆中相應(yīng)位置的誤差分配值計算該點的最終灰度值以及該點對周圍點的誤差分配值并更新寄存器堆,同時,讀取當(dāng)前行中下一個要處理點的灰度值,并從誤差行存儲器中讀取屬于該點的誤差累積值;
步驟4,重復(fù)步驟3,直到下一行點的誤差累積值全部計算并寫入到誤差行存儲器的相應(yīng)位置;步驟5,重復(fù)步驟1-4,依次處理下一行,直到全部行處理完,結(jié)束。
本發(fā)明提供了一種利用誤差擴散裝置執(zhí)行誤差擴散的圖像處理方法,該圖像由多行像素點構(gòu)成,該裝置包括誤差行存儲器,用于存儲當(dāng)前要處理行每個位置點的誤差累積值以及下一行中與其同列各點的中間誤差累積值;寄存器堆,用于寄存當(dāng)前處理行各點對其周圍點的誤差分配值;該方法包括,以行為單位依次處理各個點,處理的過程為首先,初始化誤差行存儲器的值為0;步驟1,初始化寄存器堆的值為0;讀取當(dāng)前處理行中第1個要處理點的灰度值,并從誤差行存儲器中讀取屬于該點的誤差累積值和中間誤差累積完成點的中間誤差累積值,并將中間誤差累積值緩存到寄存器堆中;步驟2,利用上個步驟讀入的點的灰度值和該點的最終誤差累積值以及寄存器堆中相應(yīng)位置的誤差分配值計算該點的最終灰度值以及該點對周圍點的誤差分配值并更新寄存器堆,同時,讀取當(dāng)前行中下一個要處理點的灰度值,并從誤差行存儲器中讀取屬于該點的誤差累積值和中間誤差累積完成點的中間誤差累積值,并將中間誤差累積值緩存到寄存器堆中;步驟3,根據(jù)寄存器堆中相應(yīng)位置的誤差分配值和中間誤差累積值計算最終誤差累積完成點的誤差累積值和中間誤差累積完成點的中間誤差累積值,并將其寫入到誤差行存儲器的相應(yīng)位置;
利用上個步驟讀入的點的灰度值和該點的最終誤差累積值以及寄存器堆中相應(yīng)位置的誤差分配值計算該點的最終灰度值以及該點對周圍點的誤差分配值并更新寄存器堆,同時,讀取當(dāng)前行中下一個要處理點的灰度值,并從誤差行存儲器中讀取屬于該點的誤差累積值和中間誤差累積完成點的中間誤差累積值,并將中間誤差累積值緩存到寄存器堆中;步驟4,重復(fù)步驟3,直到下面行所有點的最終誤差累積值和中間誤差累積值全部計算并寫入到誤差行存儲器的相應(yīng)位置;步驟5,重復(fù)步驟1-4,依次處理下一行,直到全部行處理完,結(jié)束。16、根據(jù)權(quán)利要求15所述的方法,其特征在于所述中間誤差累積值的個數(shù)為誤差擴散的行數(shù)-1。本發(fā)明的圖像處理裝置及圖像處理裝置簡單地采用雙端口存儲器進行數(shù)據(jù)讀寫并行操作,大大地提高了處理速度。
圖1A和圖1B所示為現(xiàn)有技術(shù)中基于Floyd-Steinberg算法的誤差擴散分配示意圖;圖2A、圖2B和圖2C所示為現(xiàn)有技術(shù)中基于Stucki算法的誤差擴散分配示意圖;圖3所示為現(xiàn)有技術(shù)中Floyd-Steinberg算法的誤差擴散裝置組成圖;圖4所示為誤差分配寄存器堆控制電路由多路選擇器構(gòu)成的框圖;圖5所示為圖3中的誤差分配寄存器結(jié)構(gòu)圖;圖6所示為圖3的誤差擴散裝置對存儲器讀寫操作周期示意圖;圖7所示為現(xiàn)有技術(shù)中的雙端口存儲器的用法連接圖;圖8所示為本發(fā)明第一實施例的誤差擴散裝置組成圖;
圖9所示為圖8所示裝置的誤差行存儲器控制電路結(jié)構(gòu)圖;圖10所示為本發(fā)明的誤差擴散裝置對存儲器讀寫操作周期示意圖;圖11所示為現(xiàn)有技術(shù)中Stucki算法的誤差擴散裝置組成圖;圖12所示為圖10所示裝置中的誤差分配/累積寄存器堆結(jié)構(gòu)圖;圖13所示為本發(fā)明第二實施例的誤差擴散裝置組成圖;圖14所示為誤差擴散n行示意圖;圖15所示為最終誤差累積值和中間誤差累積值組成的數(shù)據(jù)包。
具體實施例方式
下面結(jié)合說明書附圖來說明本發(fā)明的具體實施方式
。
我們先簡要介紹本發(fā)明在進行調(diào)頻網(wǎng)點產(chǎn)生的處理過程中利用到的幾個基本電路。
在誤差擴散中,每個點對其周圍的點都有誤差擴散,相應(yīng)地,對于當(dāng)前處理點來說,也會被周圍的點的誤差擴散所影響,因此需要處理完影響到當(dāng)前像素點的所有點,才能處理當(dāng)前像素點。
以Floyd-Steinberg算法為例,由于一個像素點的誤差擴散到其周圍四個點,因此我們?nèi)菀椎玫揭粋€規(guī)律,即,任意一個像素點僅被其周圍的4個點的誤差擴散所影響,如圖1B所示。也就是說,假設(shè)一個圖像由n行m列個像素點組成,i為行數(shù),j為列數(shù)(以后均表示相同意義),則在處理完第i-1行的點Pi-1,j+1時,第i-1行的所有像素點匯聚到像素點Pi,j上的誤差擴散就已經(jīng)可以計算出來了。因此在第i-1行的其余的點還沒有全部處理完之前,我們需要一個存儲器來保存第i-1行中的點對像素點Pi,j的誤差累積值,以便在處理第i行的點時可以將其取出并用于計算Pi,j的網(wǎng)點值和它對周圍的像素的誤差擴散。由于圖像由多行像素點組成,而這樣的存儲器通常按行來存儲各點的誤差累積值,因此,我們將這樣一個存儲器稱為誤差行存儲器,我們優(yōu)選地采用SRAM(靜態(tài)隨機存取存儲器)作為誤差行存儲器。
這樣,我們計算某個像素點的網(wǎng)點值和誤差擴散時,在獲取當(dāng)前像素的灰度值后,就可以利用從誤差行存儲器中讀出的上一行的像素點在該點的誤差累積值,再加上當(dāng)前像素的左邊的點對該點的誤差擴散,得到該點的最終灰度值,再和閾值比較便可生成當(dāng)前像素的網(wǎng)點,同時可以得到其分配給周圍點的誤差值,我們將每個像素根據(jù)誤差擴散算法分配給相鄰像素的誤差值,也就是前面所說的誤差擴散,稱為誤差分配值。
接著,在得到一個像素點對其周圍點的誤差分配值后,還需要將這些誤差分配值暫存一段時間以用于處理該像素的誤差擴散所影響到的像素點。我們利用寄存器組來暫存這些誤差分配值。容易理解,寄存器組的個數(shù)取決于算法的種類,如對于Floyd-Steinberg算法,需要3個寄存器組來暫存每個像素點的誤差分配值(以后說明)。我們稱這些寄存器組為一個寄存器堆。
上面介紹了誤差擴散電路中需要用到的幾個基本電路單元。下面參照圖3說明現(xiàn)有技術(shù)中利用Floyd-Steinberg算法進行誤差擴散的誤差擴散裝置組成。
如圖所示,該裝置1包括誤差行存儲器2,誤差行存儲器控制電路誤差行存儲器控制電路3,誤差分配寄存器堆4,誤差分配寄存器堆控制電路5,灰度生成電路6,閾值比較電路7,誤差生成電路8,共七部分。
誤差行存儲器2和誤差分配寄存器堆4的功能已經(jīng)在上文中詳細地進行了說明,這里不再贅述。
其中,誤差行存儲器控制電路3負責(zé)完成誤差行存儲器2的讀和寫操作,其從誤差行存儲器2中讀出當(dāng)前處理點Pij的誤差累積值提供給灰度生成電路6用于計算當(dāng)前點的最終灰度值,以及利用誤差分配寄存器堆控制電路5輸出的誤差分配值計算出Pi+1,j-1誤差累積值并寫入誤差行存儲器2;其中,誤差分配寄存器堆控制電路5用于控制誤差分配寄存器堆4的移位更新、清零等操作,即將來自誤差生成電路8的誤差分配值暫存到誤差分配寄存器堆4中,以及為誤差行存儲器控制電路誤差行存儲器控制電路3和灰度生成電路提供計算所需要的誤差分配值。誤差分配寄存器堆控制電路5可以由多路選擇器來實現(xiàn)。其與誤差分配寄存器的連接關(guān)系如圖4所示。
誤差分配寄存器堆的結(jié)構(gòu)如圖5所示。假設(shè)Pij為第i行的當(dāng)前處理點,Pj-1和Pj-2點為其前面處理過的點,圖中E1-E4代表誤差分配系數(shù),其中E1=1/16,E2=3/16,E3=5/16,E4=7/16(由于E4是當(dāng)前點對左邊點的誤差分配值,計算下一行點的誤差累積值時并不使用,因此僅需要存儲當(dāng)前點的誤差分配值PjE4)。陰影部分為用于計算圖1B所示點*的誤差累積值所用到的三個點的誤差分配值,其被提供給誤差行存儲器控制電路3進行加法計算。
灰度生成電路6用來產(chǎn)生源像素的最終灰度,而最終像素的灰度值等于源像素的值加上從誤差行存儲器中讀出的對應(yīng)該位置的誤差累積值再加上誤差分配寄存器堆中緩沖的同一行的以前像素對當(dāng)前像素的誤差分配值。因此,灰度生成電路6由一個加法器組成,它的輸入連接到點的源像素和誤差分配寄存器堆控制電路5以及誤差行存儲器控制電路誤差行存儲器控制電路3,它的輸出則提供給閾值比較電路7和誤差生成電路8;其根據(jù)當(dāng)前處理像素的灰度值和誤差行存儲器控制電路誤差行存儲器控制電路3的輸出值及誤差分配寄存器堆控制電路5的輸出值得出最終的像素灰度,提供給閾值比較電路7產(chǎn)生網(wǎng)點和誤差生成電路8得出該像素的誤差分配值。
閾值比較電路7用來將灰度生成電路6所產(chǎn)生的最終灰度值與閾值進行比較產(chǎn)生網(wǎng)點。
誤差生成電路8用來將由灰度生成電路6所產(chǎn)生的最終灰度值通過與閾值進行比較計算而產(chǎn)生當(dāng)前像素的誤差分配值,它的輸入與灰度生成電路6相連,輸出提供給誤差分配寄存器堆控制電路5。
下面結(jié)合圖3參照圖6,說明現(xiàn)有技術(shù)中對誤差行存儲器2的讀寫操作過程。
首先,初始化誤差行存儲器和誤差分配寄存器堆使其清零,然后從第1行第1列開始點開始依次處理每個像素點,由于已經(jīng)對初始化誤差行存儲器和誤差分配寄存器堆已經(jīng)初始化為0,因此計算出第1行1列的點的最終灰度值即為讀入的像素灰度值,其最終灰度值計算完之后就可以對其周圍點的誤差分配值進行計算了,而這時第2行第0列點P2,0的誤差累積就已經(jīng)完成了,應(yīng)該將其寫入到誤差行存儲器中,但該值沒有意義(不在圖像內(nèi)的點),因此不保存;可以理解,由于第0行(沒有圖像)對第1行的點均沒有誤差擴散,因此從誤差行存儲器中讀出的第1行的所有點的誤差累積值均為初始化了的值即為0,不再贅述;當(dāng)處理到第i行第j列像素點Pij時,第一個周期內(nèi),誤差行存儲器控制電路誤差行存儲器控制電路3讀出(圖5中為R)誤差行存儲器2中第i-1行對該點的誤差累積值e1;在第二個周期內(nèi),誤差分配寄存器堆控制電路5根據(jù)誤差分配寄存器堆4中第i行j-1列點對該點的誤差分配值e2計算(圖5中為M)出Pij+e1+e2=Pij’,以及其對于周圍點的誤差分配值進行計算并寄存到寄存器堆中,這時,由于第Pi+1,j-1點已經(jīng)可以計算出來,因此將Pij與Pi,j-1、Pi,j-2的分配值按照圖4陰影部分進行相加得到Pi+1,j-1點的誤差累積值;在第三個周期內(nèi),將其對第Pi+1,j-1點的誤差累積值寫入(圖5中為W)到誤差行存儲器中。
不難看出,對于每一個像素操作時,存儲器的讀寫訪問是分開進行的。因此,當(dāng)處理4個像素時,每4個操作周期能夠完成2個像素點的處理,完成4個像素點總共需要8個周期,平均2個操作周期處理一個像素點。
以上詳細地介紹了本發(fā)明所利用到的基本的誤差擴散裝置。
下面簡單介紹本發(fā)明所應(yīng)用到的雙端口存儲器的結(jié)構(gòu),如圖7所示。
現(xiàn)有的雙端口存儲器具有兩組地址、數(shù)據(jù)讀寫端口,主要用于兩個器件(器件A和器件B)之間進行數(shù)據(jù)交換,其中兩個器件各自獨占一個端口。在現(xiàn)有技術(shù)的雙端口的應(yīng)用中,對于每個器件而言,其與普通存儲器沒有區(qū)別。
本發(fā)明充分利用到雙端口存儲器具有兩組地址、數(shù)據(jù)讀寫端口的特性,將其應(yīng)用到圖像處理中,可以并行存取不同地址的數(shù)據(jù),使得采用雙端口存儲器作為誤差行存儲器的圖像處理裝置實現(xiàn)了讀寫操作的并行性。
實施例一參照圖8,詳細描述本發(fā)明第一個實施例,即利用Floyd-Steinberg算法的誤差擴散裝置。本發(fā)明的誤差擴散裝置與現(xiàn)有技術(shù)的裝置不同之處在于,本發(fā)明利用雙端口存儲器作為誤差行存儲器。
如圖所示,本發(fā)明的誤差擴散裝置1’包括雙端口誤差行存儲器2’,誤差行存儲器控制電路誤差行存儲器控制電路3’,誤差分配寄存器堆4,誤差分配寄存器堆控制電路5,灰度生成電路6,閾值比較電路7,誤差生成電路8,共七部分。其中附圖標(biāo)記相同的部件與現(xiàn)有技術(shù)的裝置完全相同,不再一一贅述。
如圖9所示,與現(xiàn)有技術(shù)不同的是,誤差行存儲器控制電路誤差行存儲器控制電路3’的兩組數(shù)據(jù)線和地址線分別連接至雙端口誤差行存儲器2’的端口(PORT)A和端口B,用于控制雙端口存儲器2’兩個端口的同時讀寫操作,為了簡化設(shè)計,我們可以對特定的端口只進行讀或者寫操作。誤差行存儲器控制電路3’中包括兩個端口的控制電路,其中端口A寫控制電路用于向雙端口誤差行存儲器2’的端口A中寫入數(shù)據(jù),端口B讀控制電路用于從雙端口誤差行存儲器2’的端口B中讀出數(shù)據(jù)。從而實現(xiàn)了寫入和讀出數(shù)據(jù)操作的并行,避免了讀寫操作的沖突對處理速度的影響。
附圖10直觀地示出了本發(fā)明的誤差擴散裝置對存儲器讀寫操作的示意圖。由圖中看出,在讀第3個像素的誤差累積值的同時可以向誤差行中寫入第1個像素對應(yīng)的下一行的像素點的誤差累積值,對存儲器的讀寫在一個操作周期內(nèi)就可以完成。整個處理過程如下首先,初始化雙端口誤差行存儲器的值為0;步驟1,初始化寄存器堆的值為0;讀取當(dāng)前處理行中第1個要處理點P1,1的灰度值,并從誤差行存儲器中讀取屬于該點的誤差累積值(因為初始化存儲器,因此讀出的值為0);步驟2,
利用上個步驟讀入的點P1,1的灰度值和該點的誤差累積值以及寄存器堆中相應(yīng)位置的誤差分配值(初始化的值為0)計算該點的最終灰度值以及該點對周圍點的誤差分配值并更新寄存器堆,同時,讀取當(dāng)前行中下一個要處理點P1,2的灰度值,并從誤差行存儲器中讀取屬于該點的誤差累積值;步驟3,根據(jù)寄存器堆中相應(yīng)位置的誤差分配值計算誤差累積完成點P2,0的誤差累積值并將其寫入到誤差行存儲器的相應(yīng)位置(該值沒有意義,也可以不寫入);利用上個步驟讀入的點P1,2的灰度值和該點的誤差累積值以及寄存器堆中相應(yīng)位置的誤差分配值計算該點的最終灰度值以及該點對周圍點的誤差分配值并更新寄存器堆,同時,讀取當(dāng)前行中下一個要處理點P1,3的灰度值,并從誤差行存儲器中讀取屬于該點的誤差累積值;這樣,到步驟3時,讀(R)、寫(W)、計算(M)都是在一個周期內(nèi)就可以完成。
這樣,再依次處理下面的點,當(dāng)讀取Pi,j點的誤差累積值時,同時計算Pi,j-1點的誤差分配值,同時將已經(jīng)計算完成的Pi+1,j-3點的誤差累積值寫入到存儲器中的相應(yīng)位置;這樣依次處理每個點,直到下一行點的誤差累積值全部計算并寫入到誤差行存儲器的相應(yīng)位置,再將寄存器清零,處理下一行的各點,直到全部行處理完,結(jié)束。
可以看出,同樣是對4個像素點進行處理,采用本發(fā)明所述的方法,只需要最多6個操作周期就可以完成圖像處理。
由此推出,使用分開讀寫的存儲器,處理N個像素需要2×N個周期,使用并行讀寫的存儲器,處理N個像素只需N+2個周期,后者的網(wǎng)點產(chǎn)生速度有大幅度的提高。
實施例二其次我們再闡述本發(fā)明基于Stucki算法的誤差擴散裝置。
由于Stucki算法在當(dāng)前處理行時,會對下面的兩行的12個點產(chǎn)生誤差擴散,因此需要保存該行對下面兩行的誤差擴散,換個角度,對于任意一點來說,其會受到上面兩行及當(dāng)前行的12個點的影響,如圖2B所示。可以理解,這些影響不能一次計算出來,而是隨著每行數(shù)據(jù)的處理分批產(chǎn)生的,因此需要將各批產(chǎn)生的誤差累積值保存起來用于生成最后的灰度值。
也就是說,對于任意點Pij來說,首先在處理第i-2行的點Pi-2,j+2時就產(chǎn)生了第i-2行在該點的一個誤差累積值,我們將其稱為中間誤差累積值,我們需要在處理下一行(i-1)數(shù)據(jù)之前將其保存在誤差行存儲器中,然后在處理第i-1行的點Pi-1,j+2時就產(chǎn)生了第i-1行在該點的一個誤差累積值,我們需要將以前已經(jīng)保存在誤差行存儲器中的中間誤差累積值讀出并加上第i-1行在該點產(chǎn)生的誤差累積值得到上兩行的一個總的誤差累積值,我們可以將其稱為最終誤差累積值。
如圖2C所示,在處理完P(guān)ij點*時,第i-1行和第i行對第Pi+1,j-2點@最終誤差累積值和Pi+2,j-2點@’的中間誤差累積值就同時產(chǎn)生出來了。為了方便起見,我們可以將其作為一個數(shù)據(jù)包同時保存在誤差行存儲器中。這樣在計算點Pi+1,j-2(圖中為@)的最終誤差累積值時,需要從存儲器中讀入最終誤差累積值,同時Pi+2,j-2(圖中為@’)的中間誤差累積值也在同一個數(shù)據(jù)包中被從存儲器中讀出,但是,中間誤差累積值只有在處理完P(guān)i+2,j-2(圖中為@’)的誤差分配值后才能用于計算最終誤差累積值,因此我們需要將其在寄存器中暫存起來。
為了暫存隨著最終誤差累積值同時被讀入的中間誤差累積值,用以參加生成新的最終誤差累積值的計算,還需要設(shè)置新的寄存器堆以保存讀入的中間誤差累積值,我們這里稱其為誤差累積值寄存器堆。圖11示出了利用Stucki算法的現(xiàn)有技術(shù)的誤差擴散裝置圖,可以看出,其與利用Floyd-Steinberg算法的誤差擴散裝置的不同之處在于,誤差行存儲器12同時存儲Pij點的最終誤差累積值和Pi+1,j點的中間誤差累積值數(shù)據(jù)包;增加了誤差累積寄存器堆用于保存中間誤差累積值,它和原來的誤差分配寄存器堆一起構(gòu)成了誤差分配/累積寄存器堆14,以及誤差分配/累積控制電路15用于控制誤差分配/累積寄存器堆14。
處理任意Pij點的操作過程為,誤差行控制器從誤差行存儲器中讀出Pij點的最終誤差累積值和Pi+1,j點的中間誤差累積值數(shù)據(jù)包,將Pi+1,j點的中間誤差累積值提取出來緩存到中間誤差累積值寄存器中(等處理到Pi,j+2點時用于計算Pi+1,j點的最終誤差累積值),并將Pij點的最終誤差累積值提供給灰度生成電路,計算出Pij點的誤差分配值,同時誤差行控制器負責(zé)計算Pi+1,j-2點的最終誤差累積值及Pi+2,j-2點的中間誤差累積值并將它們作為一個數(shù)據(jù)包一次寫入誤差行存儲器中。
誤差分配/累積寄存器堆14的結(jié)構(gòu)如圖12所示。假設(shè)當(dāng)前處理點為Pij,圖中Pj代表第i行當(dāng)前處理點的誤差值,Pj-1至Pj-4點依次為其前面處理過的點,D1-D5代表誤差分配系數(shù),Lj至Lj-2代表從誤差行存儲器中讀出的Pi+1,j至Pi+1,j-2點的誤差累積值,誤差分配/累積寄存器堆控制電路5根據(jù)需要將以上數(shù)據(jù)提供給誤差行存儲器控制電路13,誤差行存儲器控制電路13產(chǎn)生一個寫入數(shù)據(jù)包,其包括最終誤差累積值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。陰影部分直觀地表示出計算兩部分值所用到的數(shù)據(jù)。
本發(fā)明同樣在Stucki算法的現(xiàn)有技術(shù)的誤差擴散裝置基礎(chǔ)上采用雙端口存儲器作為誤差行存儲器,其原理和構(gòu)成與本發(fā)明第一實施例的Floyd-Steinberg算法的誤差擴散裝置完全相同,如圖13所示,雙端口誤差行存儲器22由誤差行存儲器控制電路23控制同時讀和寫操作,使得讀寫并行得到實現(xiàn)。采用雙端口存儲器大大提高了誤差擴散裝置的處理速度。
本發(fā)明的第二實施例整個處理過程如下
首先,初始化誤差行存儲器的值為0;步驟1,初始化寄存器堆的值為0;讀取當(dāng)前處理行中第1個要處理點P1,1的灰度值,并從誤差行存儲器中讀取屬于該點的誤差累積值和中間誤差累積完成點P2,1的中間誤差累積值,并將中間誤差累積值緩存到寄存器堆中;步驟2,利用上個步驟讀入的點P1,1的灰度值和該點的最終誤差累積值以及寄存器堆中相應(yīng)位置的誤差分配值計算該點的最終灰度值以及該點對周圍點的誤差分配值并更新寄存器堆,同時,讀取當(dāng)前行中下一個要處理點P1,2的灰度值,并從誤差行存儲器中讀取屬于該點的誤差累積值和中間誤差累積完成點P2,2的中間誤差累積值,并將中間誤差累積值緩存到寄存器堆中;步驟3,根據(jù)寄存器堆中相應(yīng)位置的誤差分配值(來自P1,1點)和中間誤差累積值(初始化為0)計算最終誤差累積完成點P2,-1的最終誤差累積值和中間誤差累積完成點P3,-1的中間誤差累積值,并將其寫入到誤差行存儲器的相應(yīng)位置;利用上個步驟讀入的點P1,2的灰度值和該點的最終誤差累積值以及寄存器堆中相應(yīng)位置的誤差分配值計算該點的最終灰度值以及該點對周圍點的誤差分配值并更新寄存器堆;同時,讀取當(dāng)前行中下一個要處理點P1,3的灰度值,并從誤差行存儲器中讀取屬于該點的誤差累積值和中間誤差累積完成點P2,3的中間誤差累積值,并將中間誤差累積值緩存到寄存器堆中。
步驟3中的讀(R)、寫(W)、計算(M)都是在一個周期內(nèi)就可以完成。
這樣,在一次處理下面的點,讀取Pi,j點的最終誤差累積值和Pi+1,j點的中間誤差累積值時,計算Pi,j-1點的誤差分配值,同時將Pi+1,j-4點的最終誤差累積值和Pi+2,j-4點的中間誤差累積值寫入到誤差行存儲器中;
這樣依次處理每個點,直到下一行點的誤差累積值和中間誤差累積值全部計算并寫入到誤差行存儲器的相應(yīng)位置,再將寄存器清零,處理下一行的各點,直到全部行處理完,結(jié)束。
通過如上所述的技術(shù)方案,可以理解采用雙端口存儲器可以應(yīng)用到于基于誤差擴散原理的,將誤差擴散到更多行的點的圖像處理方法中。例如圖14所示的誤差擴散方法,一個點的誤差擴散到它下面的n(n≥1)行,可以采用本發(fā)明的圖像處理裝置,其中采用雙端口存儲器作為誤差行存儲器,用于存儲最終誤差累積完成在某個點上的最終誤差累積值以及下面的中間誤差累積完成的共n-1個點的中間誤差累積值所組成的數(shù)據(jù)包,圖15示出了數(shù)據(jù)包的組成,數(shù)據(jù)包包括最終誤差累積完成點的最終誤差累積值、以及該點下面緊鄰的中間誤差累積完成的n-1個點的中間誤差累積值,標(biāo)記為中間誤差累積值1至中間誤差累積值n-1。誤差累積/分配寄存器堆用于暫存從誤差行存儲器中讀出的上述中間誤差累積值,同理,寄存器的個數(shù)也應(yīng)隨算法作相應(yīng)地調(diào)整。
通過對本發(fā)明的幾個實施例的詳細描述,本領(lǐng)域技術(shù)人員可以理解,本發(fā)明的技術(shù)方案除了運用在以上所舉實施例的裝置中,還能夠用于其它任何需要對存儲器進行同時讀寫操作的圖像處理裝置中。例如在任何現(xiàn)有的誤差擴散裝置中,只要是上一行的點對下面的行有誤差擴散的圖像處理方法,都需要使用存儲器存儲已處理完的點的信息以用于處理下一個點,所述的信息可以包括誤差累積值、誤差分配值(例如美國專利文件US2002/0003632A1)或者已處理完點的最終灰度值、最終灰度值與閾值之間的差值等等,為了加快處理速度,可以使用雙端口存儲器進行存儲,其所包括的兩個端口均與存儲控制器相連接,只要對其中的一個端口進行讀操作,對另一個端口進行寫操作就能夠完成同時讀寫功能。
以上所述僅為本發(fā)明的其中幾個實施例而已,并不用以限制本發(fā)明,因而凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改,等同替換,改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1.一種能夠同時讀寫數(shù)據(jù)的圖像處理裝置,包括雙端口存儲器、存儲控制器,其中所述雙端口存儲器包括端口A和端口B,其特征在于所述存儲控制器包括端口A寫控制電路和端口B讀控制電路;所述端口A寫控制電路連接至所述端口A,用于對端口A進行寫操作,所述端口B讀控制電路連接至所述端口B,用于對端口B進行讀操作。
2.根據(jù)權(quán)利要求1所述的圖像處理裝置,其特征在于所述圖像由多行像素點構(gòu)成,所述圖像處理裝置對各像素點依次執(zhí)行對其周圍的像素點誤差擴散,且誤差擴散到其下面1行。
3.根據(jù)權(quán)利要求1所述的圖像處理裝置,其特征在于所述圖像由多行像素點構(gòu)成,所述圖像處理裝置對各像素點依次執(zhí)行對其周圍的像素點誤差擴散,且誤差擴散到其下面多行。
4.根據(jù)權(quán)利要求2所述的圖像處理裝置,其特征在于所述存儲器為誤差行存儲器,用于存儲前一行對當(dāng)前處理行各點的誤差累積值。
5.根據(jù)權(quán)利要求3所述的圖像處理裝置,其特征在于所述存儲器為誤差行存儲器,用于存儲前一行對當(dāng)前處理行最終誤差累積完成點的最終誤差累積值以及同時產(chǎn)生的當(dāng)前處理行下1行、下2行...下n-1行中間誤差累積完成點的n-1個中間誤差累積值。
6.根據(jù)權(quán)利要求5所述的圖像處理裝置,其特征在于同時產(chǎn)生的最終誤差累積值和n-1個中間誤差累積值存儲以數(shù)據(jù)包的形式存儲。
7.根據(jù)權(quán)利要求4所述的圖像處理裝置,其特征在于,還包括寄存器、寄存器控制電路、灰度生成電路和誤差生成電路;所述寄存器用于暫存當(dāng)前處理像素點的誤差擴散到周圍點的誤差分配值;所述存儲控制器中的端口B讀控制電路從誤差行存儲器中讀出當(dāng)前處理點的誤差累積值,提供給灰度生成電路,同時存儲控制其中的端口A寫控制電路利用寄存器中的誤差分配值計算出累積完成點的誤差累積值并寫入誤差行存儲器;寄存器控制電路用于將來自誤差生成電路的誤差分配值暫存到誤差分配寄存器中,以及為誤差行存儲器控制電路和灰度生成電路提供計算所需要的誤差分配值;灰度生成電路用于產(chǎn)生各像素點的最終灰度值;誤差生成電路用于將由灰度生成電路所產(chǎn)生的最終灰度值通過計算而產(chǎn)生當(dāng)前處理點的誤差分配值,并提供給誤差分配寄存器控制電路。
8.根據(jù)權(quán)利要求6所述的圖像處理裝置,其特征在于,還包括寄存器、寄存器控制電路、灰度生成電路和誤差生成電路;所述寄存器用于暫存每個像素點的誤差擴散到其周圍點的誤差分配值以及從誤差行存儲器中讀出的用于計算最終誤差累積值的中間誤差累積值;所述存儲控制器中的端口2讀控制電路從誤差行存儲器中讀出由最終誤差累積值和中間誤差累積值組成的數(shù)據(jù)包,并將最終誤差累積值提供給灰度生成電路,將中間誤差累積值緩存到寄存器中,同時所述端口1寫控制電路利用寄存器中的誤差分配值和中間誤差累積值計算出最終誤差累積完成點的最終誤差累積值和中間誤差累積完成點的中間誤差累積值并組成數(shù)據(jù)包寫入誤差行存儲器;寄存器控制電路用于將來自誤差生成電路的誤差分配值暫存到誤差分配寄存器中,將來自誤差行存儲器中的中間誤差累積值暫存到誤差累積寄存器中,以及為存儲控制器和灰度生成電路提供計算所需要的誤差分配值;灰度生成電路用于產(chǎn)生各像素點的最終灰度值;誤差生成電路用于將由灰度生成電路所產(chǎn)生的灰度通過計算而產(chǎn)生當(dāng)前像素的誤差分配值,并提供給誤差分配寄存器堆控制電路。
9.根據(jù)權(quán)利要求7或8所述的圖像處理裝置,其特征在于還包括閾值比較電路,用于將灰度生成電路所產(chǎn)生的最終灰度值與閾值進行比較產(chǎn)生網(wǎng)點。
10.根據(jù)權(quán)利要求7或8所述的圖像處理裝置,其特征在于所述寄存器控制電路為多路選擇器。
11.根據(jù)權(quán)利要求7或8所述的圖像處理裝置,其特征在于所述灰度生成電路由加法器組成。
12.根據(jù)權(quán)利要求4或5所述的圖像處理裝置,其特征在于所述誤差行存儲器為靜態(tài)隨機存取存儲器。
13.一種利用誤差擴散裝置執(zhí)行誤差擴散的圖像處理方法,該圖像由多行像素點構(gòu)成,該裝置包括誤差行存儲器,用于存儲當(dāng)前處理行每個位置點的誤差累積值;寄存器堆,用于寄存當(dāng)前處理行各點對其周圍點的誤差分配值;該方法包括,以行為單位依次處理各個點,處理過程為首先,初始化誤差行存儲器的值為0;步驟1,初始化寄存器堆的值為0;讀取當(dāng)前處理行中第1個要處理點的灰度值,并從誤差行存儲器中讀取屬于該點的誤差累積值;步驟2,利用上個步驟讀入的點的灰度值和該點的誤差累積值以及寄存器堆中相應(yīng)位置的誤差分配值計算該點的最終灰度值以及該點對周圍點的誤差分配值并更新寄存器堆,同時,讀取當(dāng)前行中下一個要處理點的灰度值,并從誤差行存儲器中讀取屬于該點的誤差累積值;步驟3,根據(jù)寄存器堆中相應(yīng)位置的誤差分配值計算誤差累積完成點的誤差累積值并將其寫入到誤差行存儲器的相應(yīng)位置;利用上個步驟讀入的點的灰度值和該點的誤差累積值以及寄存器堆中相應(yīng)位置的誤差分配值計算該點的最終灰度值以及該點對周圍點的誤差分配值并更新寄存器堆,同時,讀取當(dāng)前行中下一個要處理點的灰度值,并從誤差行存儲器中讀取屬于該點的誤差累積值;步驟4,重復(fù)步驟3,直到下一行點的誤差累積值全部計算并寫入到誤差行存儲器的相應(yīng)位置;步驟5,重復(fù)步驟1-4,依次處理下一行,直到全部行處理完,結(jié)束。
14.一種利用誤差擴散裝置執(zhí)行誤差擴散的圖像處理方法,該圖像由多行像素點構(gòu)成,該裝置包括誤差行存儲器,用于存儲當(dāng)前要處理行每個位置點的誤差累積值以及下一行中與其同列各點的中間誤差累積值;寄存器堆,用于寄存當(dāng)前處理行各點對其周圍點的誤差分配值和從誤差行存儲器中讀出的中間誤差累積值;該方法包括,以行為單位依次處理各個點,處理的過程為首先,初始化誤差行存儲器的值為0;步驟1,初始化寄存器堆的值為0;讀取當(dāng)前處理行中第1個要處理點的灰度值,并從誤差行存儲器中讀取屬于該點的誤差累積值和中間誤差累積完成點的中間誤差累積值,并將中間誤差累積值緩存到寄存器堆中;步驟2,利用上個步驟讀入的點的灰度值和該點的最終誤差累積值以及寄存器堆中相應(yīng)位置的誤差分配值計算該點的最終灰度值以及該點對周圍點的誤差分配值并更新寄存器堆,同時,讀取當(dāng)前行中下一個要處理點的灰度值,并從誤差行存儲器中讀取屬于該點的誤差累積值和中間誤差累積完成點的中間誤差累積值,并將中間誤差累積值緩存到寄存器堆中;步驟3,根據(jù)寄存器堆中相應(yīng)位置的誤差分配值和中間誤差累積值計算最終誤差累積完成點的誤差累積值和中間誤差累積完成點的中間誤差累積值,并將其寫入到誤差行存儲器的相應(yīng)位置;利用上個步驟讀入的點的灰度值和該點的最終誤差累積值以及寄存器堆中相應(yīng)位置的誤差分配值計算該點的最終灰度值以及該點對周圍點的誤差分配值并更新寄存器堆,同時,讀取當(dāng)前行中下一個要處理點的灰度值,并從誤差行存儲器中讀取屬于該點的誤差累積值和中間誤差累積完成點的中間誤差累積值,并將中間誤差累積值緩存到寄存器堆中;步驟4,重復(fù)步驟3,直到下面行所有點的最終誤差累積值和中間誤差累積值全部計算并寫入到誤差行存儲器的相應(yīng)位置;步驟5,重復(fù)步驟1-4,依次處理下一行,直到全部行處理完,結(jié)束。
15.根據(jù)權(quán)利要求14所述的方法,其特征在于所述中間誤差累積值的個數(shù)為誤差向下擴散的行數(shù)-1。
全文摘要
本發(fā)明涉及一種能夠同時讀寫數(shù)據(jù)的圖像處理裝置及處理方法,該裝置包括雙端口存儲器、存儲控制器,其中所述雙端口存儲器包括端口A和端口B,其特征在于,所述存儲控制器包括端口A寫控制電路,端口B讀控制電路;所述端口A寫控制電路連接至所述端口A,用于對端口A進行寫操作,所述端口B讀控制電路連接至所述端口B用于對端口B進行讀操作。本發(fā)明的裝置及方法能夠在一個周期內(nèi)對存儲器中的數(shù)據(jù)同時讀寫,實現(xiàn)了快速處理圖像,且該裝置及方法可以應(yīng)用于執(zhí)行誤差擴散,使得誤差擴散快速執(zhí)行。
文檔編號H04N1/405GK1937701SQ20061008907
公開日2007年3月28日 申請日期2006年8月2日 優(yōu)先權(quán)日2006年8月2日
發(fā)明者劉志紅, 陳 峰, 黃建梅 申請人:北京北大方正電子有限公司, 北京大學(xué)