本發(fā)明屬于半色調(diào)圖像處理
技術(shù)領(lǐng)域:
,尤其涉及一種基于FPGA的改進(jìn)彩色矢量誤差擴(kuò)散方法。
背景技術(shù):
:一般印刷機(jī)、油墨打印機(jī)、激光打印機(jī)只有兩種色彩或非常有限的幾種色彩,還有一些老式的顯示器不能顯示真彩色圖像,它們不能完全顯示出一幅連續(xù)色調(diào)圖像所包含的全部色彩信息。而在3D打印領(lǐng)域,有個(gè)很重要的問題,那就是顏色。3D打印幾乎能做出任何形狀的物體,但它們的顏色卻僅僅是其原型的陰影。3D打印做出來的物件均通過融合粉末或鋪設(shè)擠壓塑料來一次性做成。這兩種打印方法對顏色的控制非常原始。因此人們需要像2D打印圖片那樣,一個(gè)像素一個(gè)像素低進(jìn)行打印。換句話說,這需要3D打印一個(gè)體素一個(gè)體素地進(jìn)行打印。因此半色調(diào)處理在3D打印領(lǐng)域同樣有相應(yīng)的應(yīng)用場景,通過半色調(diào)處理,將一些連續(xù)的陰影和顏色用一系列不同大小和間隔的小圓點(diǎn)代替。因此,必須對原始的灰度級圖像進(jìn)行變換,將灰度圖像轉(zhuǎn)化成二值圖像。利用半色調(diào)技術(shù)可以將一幅高分辨率的灰度級圖像轉(zhuǎn)換為低分辨率的二值圖像(0或1),由于人類視覺的低通濾波特性,在一定的距離外觀察轉(zhuǎn)換后的二值圖像,仍然覺得是一幅連續(xù)色調(diào)的圖像。傳統(tǒng)的半調(diào)方法按照改變半調(diào)圖像中點(diǎn)的大小或點(diǎn)之間的距離分為幅度調(diào)制半調(diào)和頻率調(diào)制半調(diào)。幅度調(diào)制(AM)是一種根據(jù)灰度級調(diào)整網(wǎng)點(diǎn)大小來得到視覺上的連續(xù)灰度變化的半調(diào)技術(shù);頻率調(diào)制(FM)半調(diào)技術(shù)保持網(wǎng)點(diǎn)面積固定不變,通過改變網(wǎng)點(diǎn)在二維空間中的分布密度來表現(xiàn)原始圖像的灰度變化?,F(xiàn)有的半色調(diào)算法有抖動法、誤差分散法、點(diǎn)擴(kuò)散法、模板法等,其中以閾值抖動法和誤差擴(kuò)散法比較常用,而誤差擴(kuò)散法的效果又明顯優(yōu)于閾值抖動法。然而,傳統(tǒng)的誤差擴(kuò)散算法對彩色圖像的處理是分別對圖像的R、G、B空間進(jìn)行誤差擴(kuò)散處理,然后對三個(gè)空間產(chǎn)生的誤差擴(kuò)散處理結(jié)果進(jìn)行簡單的疊加,形成相應(yīng)的半色調(diào)圖像。而彩色矢量誤差擴(kuò)散算法,通過選取恰當(dāng)?shù)木仃囋鲆婺P?,而?shí)現(xiàn)三個(gè)通道間誤差擴(kuò)散的擴(kuò)散,從而達(dá)到對彩色圖像影響較小的效果。彩色矢量誤差擴(kuò)散方法其中,輸入x(m)表示原始的連續(xù)色調(diào)的圖像,輸出b(m)表示半色調(diào)圖像,u(m)為量化輸入,H(m)為誤差擴(kuò)散系數(shù)矩陣,e(m)為誤差矢量,t(m)是按照一定比例擴(kuò)散到下一個(gè)像素點(diǎn)的誤差和矢量,Q[·]為閾值量化函數(shù),彩色矢量誤差擴(kuò)散的數(shù)學(xué)模型可用式(1),式(2),式(3),式(4),式(5)表示:u(m)=x(m)-[h*e](m)式(1)b(m)=Q(u(m))式(2)e(m)=b(m)-u(m)式(3)t(m)=∑H(k)e(m-k)式(4)其中,e(m-k)是k點(diǎn)的誤差矢量,H(k)是k點(diǎn)的矢量誤差擴(kuò)散系數(shù)矩陣。該系數(shù)矩陣即是由矩陣增益模型生產(chǎn)的過濾矩陣。根據(jù)增益模型的不同,得到不同的系數(shù)矩陣,從而達(dá)到控制誤差擴(kuò)散的方向和權(quán)值的效果。其中由于量化所造成的誤差e(m)將按H(m)矩陣所規(guī)定的比例傳遞給后面的像素點(diǎn),得到u(m)。彩色矢量誤差擴(kuò)散的基本原理是自上而下、從左到右的光柵掃描圖像上的像素點(diǎn),與固定閾值差分并量化,并把它們的差值作為誤差按照一定的比例分散地傳播給相鄰的、未經(jīng)半色調(diào)處理的像素點(diǎn)以及其他通道對應(yīng)的像素點(diǎn),從而達(dá)到對彩色圖像影響較小的效果。采用彩色矢量誤差擴(kuò)散法對源彩色圖像進(jìn)行半色調(diào)處理能夠產(chǎn)生較好的圖像再現(xiàn)效果,滿足系統(tǒng)半色調(diào)效果需求,但其有明顯的不足:彩色矢量誤差擴(kuò)散法是一個(gè)典型的串行算法,即要計(jì)算下一個(gè)像素的值就必須知道前面元素的誤差值,這也意味著程序在一個(gè)時(shí)刻只能處理一個(gè)像素,這種算法在普通處理器上需要串行處理、大量的計(jì)算以及存儲空間,難以滿足實(shí)時(shí)性的要求,大大限制了其適用范圍。對彩色矢量誤差算法的研究主要是集中于對其誤差過濾器及其矩陣增益模型的研究。綜上所述,彩色矢量誤差擴(kuò)散法在一個(gè)時(shí)刻只能處理一個(gè)像素,需要串行處理、大量的計(jì)算以及存儲空間,難以滿足實(shí)時(shí)性的要求,大大限制了其適用范圍。技術(shù)實(shí)現(xiàn)要素:本發(fā)明的目的在于提供一種基于FPGA的改進(jìn)彩色矢量誤差擴(kuò)散方法,旨在解決彩色矢量誤差擴(kuò)散法在一個(gè)時(shí)刻只能處理一個(gè)像素,需要串行處理、大量的計(jì)算以及存儲空間,難以滿足實(shí)時(shí)性的要求,大大限制了其適用范圍的問題。本發(fā)明是這樣實(shí)現(xiàn)的,一種基于FPGA的改進(jìn)彩色矢量誤差擴(kuò)散方法,所述基于FPGA的改進(jìn)彩色矢量誤差擴(kuò)散方法通過RGB三個(gè)通道實(shí)現(xiàn)誤差擴(kuò)散的并行處理,提升算法執(zhí)行速度;并采用矩陣增益模型使單通道的誤差擴(kuò)散值可以擴(kuò)散到其他兩個(gè)通道;提高算法的精確度;通過硬件實(shí)現(xiàn)半色調(diào)過程及誤差值生成,使用增益矩陣預(yù)存儲器替代算法中的乘法運(yùn)算;提升算法執(zhí)行速度;對每個(gè)通道,采用流水線的方式處理,使誤差擴(kuò)散的流程平均在一個(gè)時(shí)鐘周期內(nèi)可以計(jì)算出一個(gè)像素點(diǎn)的半色調(diào)結(jié)果。進(jìn)一步,所述通過RGB三個(gè)通道實(shí)現(xiàn)誤差擴(kuò)散的并行處理包括:對于彩色圖像,經(jīng)過程序進(jìn)行轉(zhuǎn)換,獲得R、G、B三個(gè)通道的像素值;然后將R、G、B三個(gè)通道像素值作為算法的輸入,同時(shí)對R、G、B三個(gè)通道進(jìn)行誤差擴(kuò)散處理,實(shí)現(xiàn)R、G、B三基色之間誤差擴(kuò)散的并行化。進(jìn)一步,所述半色調(diào)過程及誤差值生成包括:接收到通道的像素值后,根據(jù)上一個(gè)誤差值符號的正負(fù),將當(dāng)前像素值與當(dāng)前行的前一個(gè)像素點(diǎn)的誤差擴(kuò)散值、上一行鄰域像素的誤差擴(kuò)散值以及其他兩個(gè)通道的誤差擴(kuò)散值累加和做相應(yīng)的加減運(yùn)算,得出更新后的像素值;將更新像素值與半色調(diào)閾值相比較,得出像素點(diǎn)的半色調(diào)值;根據(jù)得到的半色調(diào)值和當(dāng)前像素值相減,得出誤差值,誤差值分正負(fù);將誤差值的符號位提出來作為下一個(gè)像素誤差擴(kuò)散的輸入,并將誤差值取絕對值后輸出。進(jìn)一步,所述通過不同的矩陣增益模型,實(shí)現(xiàn)使R、G、B不同通道之間的誤差擴(kuò)散值擴(kuò)散的相互擴(kuò)散,并通過控制各個(gè)通道之間擴(kuò)散的權(quán)值。進(jìn)一步,對于每個(gè)通道的誤差擴(kuò)散,構(gòu)建十二個(gè)相應(yīng)的增益矩陣預(yù)存儲器,分別存儲三個(gè)通道四個(gè)方向上的誤差擴(kuò)散值;從而替代算法中求取誤差值的乘法運(yùn)算,簡化FPGA實(shí)現(xiàn)過程。誤差值的范圍為-128~+128,對誤差值取絕對值,誤差值有128個(gè),那不同通道和方向上的每個(gè)誤差擴(kuò)散系數(shù)就對應(yīng)有128個(gè)誤差擴(kuò)散值。進(jìn)一步,將彩色矢量誤差擴(kuò)散算法過程劃分為:各通道原始圖像數(shù)據(jù)讀取、半色調(diào)值計(jì)算及誤差擴(kuò)散值查找、誤差擴(kuò)散值累加以及誤差擴(kuò)散值存儲進(jìn)行流水線作業(yè)。首先各通道原始圖像數(shù)據(jù)讀取模塊是讀取原始圖像的數(shù)據(jù),包括R、G、B三個(gè)通道的像素?cái)?shù)據(jù);半色調(diào)值計(jì)算及誤差擴(kuò)散值查找模塊接收到上個(gè)模塊的像素?cái)?shù)據(jù)后,進(jìn)行半色調(diào)處理,得到半色調(diào)值,并根據(jù)半色調(diào)值查找增益矩陣預(yù)存儲器,找到相應(yīng)的誤差擴(kuò)散值;誤差擴(kuò)散值累加模塊是對圖像中多個(gè)像素點(diǎn)誤差值的累加。因?yàn)橐粋€(gè)像素點(diǎn)誤差擴(kuò)散值的確定需要上一行前面兩個(gè)像素點(diǎn)的誤差擴(kuò)散值,因此這里要做一個(gè)誤差值的累加設(shè)計(jì);誤差擴(kuò)散值存儲模塊是通過雙口RAM存放產(chǎn)生的誤差擴(kuò)散值,并作為下一行像素進(jìn)行半色調(diào)處理是的誤差擴(kuò)散值。本發(fā)明的另一目的在于提供一種利用所述基于FPGA的改進(jìn)彩色矢量誤差擴(kuò)散方法的FPGA模塊。本發(fā)明的另一目的在于提供一種由所述FPGA模塊封裝的IP核,所述IP核對外接口包括:reset_n和clk是Avalon復(fù)位和時(shí)鐘接口;wr,address和writedata是Avalon內(nèi)存映射接口,半色調(diào)結(jié)果輸出接口為Avalon電路接口。本發(fā)明的另一目的在于提供一種利用所述基于FPGA的改進(jìn)彩色矢量誤差擴(kuò)散方法的打印機(jī)。本發(fā)明提供的基于FPGA的改進(jìn)彩色矢量誤差擴(kuò)散方法,以FPGA為運(yùn)行平臺,通過對半色調(diào)算法的彩色矢量誤差擴(kuò)散算法的改進(jìn),實(shí)現(xiàn)算法在嵌入式平臺上的快速高效執(zhí)行。實(shí)現(xiàn)了彩色矢量誤差擴(kuò)散不同通道之間的并行處理。將基色之間并行處理,提高處理效率。硬件優(yōu)化實(shí)現(xiàn)了半色調(diào)及誤差值生成。通過設(shè)計(jì)額外的寄存器空間作為符號位,對不同數(shù)值的符號位進(jìn)行復(fù)制及擴(kuò)展,將無符號數(shù)的運(yùn)算轉(zhuǎn)換為有符號數(shù)的運(yùn)算;硬件實(shí)現(xiàn)了矩陣增益模型,通過增益矩陣,來實(shí)現(xiàn)R、G、B不同通道之間的誤差擴(kuò)散值的相互擴(kuò)散和擴(kuò)散權(quán)值;在誤差擴(kuò)散中,以增益矩陣預(yù)存儲器代替算法中比較復(fù)雜的減法和乘法運(yùn)算,從而減少運(yùn)算的時(shí)間。FPGA流程的流水線設(shè)計(jì)應(yīng)用,優(yōu)化算法執(zhí)行速度。符合Avalon總線標(biāo)準(zhǔn)的IP核封裝設(shè)計(jì),利于功能的快速復(fù)用。附圖說明圖1是本發(fā)明實(shí)施例提供的基于FPGA的改進(jìn)彩色矢量誤差擴(kuò)散方法流程圖。圖2是本發(fā)明實(shí)施例提供的彩色矢量半色調(diào)并行處理過程示意圖。圖3是本發(fā)明實(shí)施例提供的半色調(diào)值及誤差值生成模塊框圖。圖4是本發(fā)明實(shí)施例提供的誤差擴(kuò)散過程FPGA設(shè)計(jì)流水線處理示意圖。圖5是本發(fā)明實(shí)施例提供的FPGA設(shè)計(jì)流水線處理時(shí)序示意圖。圖6是本發(fā)明實(shí)施例提供的FPGA設(shè)計(jì)流水線詳細(xì)框圖。圖7是本發(fā)明實(shí)施例提供的彩色矢量誤差擴(kuò)散模塊封裝示意圖。具體實(shí)施方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。下面結(jié)合附圖對本發(fā)明的應(yīng)用原理作詳細(xì)的描述。如圖1所示,本發(fā)明實(shí)施例提供的基于FPGA的改進(jìn)彩色矢量誤差擴(kuò)散方法包括以下步驟:S101:通過RGB三個(gè)通道實(shí)現(xiàn)誤差擴(kuò)散的并行處理,并采用矩陣增益模型使單通道的誤差擴(kuò)散值可以擴(kuò)散到其他兩個(gè)通道;S102:通過硬件實(shí)現(xiàn)半色調(diào)過程及誤差值生成,使用增益矩陣預(yù)存儲器替代算法中的乘法運(yùn)算;S103:對每個(gè)通道,采用流水線的方式處理,使誤差擴(kuò)散的流程平均在一個(gè)時(shí)鐘周期內(nèi)可以計(jì)算出一個(gè)像素點(diǎn)的半色調(diào)結(jié)果。下面結(jié)合附圖對本發(fā)明的應(yīng)用原理作進(jìn)一步的描述。1、彩色矢量半色調(diào)的并行處理。如圖2所示,彩色圖像經(jīng)過轉(zhuǎn)換以后可以由R、G、B表示作為打印設(shè)備的輸入,本發(fā)明中,將基色之間并行處理。相對于一般處理器之間的串行處理而言可以極大的縮短處理時(shí)間,提高處理效率。首先對于彩色圖像,經(jīng)過程序進(jìn)行轉(zhuǎn)換,獲得R、G、B三個(gè)通道的像素值,然后將R、G、B三個(gè)通道像素值作為算法的輸入,同時(shí)對R、G、B三個(gè)通道進(jìn)行誤差擴(kuò)散處理,實(shí)現(xiàn)R、G、B三基色之間誤差擴(kuò)散的并行化。2、有符號數(shù)的硬件處理。通過增加額外的寄存器空間,以及符號位復(fù)制及擴(kuò)展,變相將無符號數(shù)轉(zhuǎn)換為有符號數(shù)進(jìn)行運(yùn)算,從而完成了對誤差擴(kuò)散法的符號處理過程,包括對負(fù)數(shù)的處理和溢出數(shù)據(jù)的處理。如圖3所示,從存儲器中讀出的像素值R[7..0]進(jìn)入該模塊,接收到通道的像素值R后,根據(jù)上一個(gè)誤差值符號的正負(fù),將當(dāng)前像素值與當(dāng)前行的前一個(gè)像素點(diǎn)的誤差擴(kuò)散值LINE[7..0]、上一行鄰域像素的誤差擴(kuò)散值以及其他兩個(gè)通道的誤差擴(kuò)散值累加和ERR[7..0]做相應(yīng)的運(yùn)算,得出更新后的像素值accdata[8..0];將更新像素值與半色調(diào)閾值(+128)相比較,得出該像素點(diǎn)的半色調(diào)值。然后根據(jù)得到的半色調(diào)值和當(dāng)前像素值相減,得出誤差值err_data,誤差值分正負(fù)。將誤差值的符號位err_data_sig提出來作為下一個(gè)像素誤差擴(kuò)散的輸入,并將誤差值取絕對值后輸出到下一個(gè)模塊。3、矩陣增益模型。矩陣增益模型定義了一個(gè)通道像素在產(chǎn)生誤差值后的擴(kuò)散策略,根據(jù)增益矩陣的不同,誤差值向不同方向擴(kuò)散的不同。因此,通過優(yōu)化增益矩陣可以使彩色圖像半色調(diào)的結(jié)果不斷的優(yōu)化。常用的增益矩陣包括:Floyd-Steinberg矩陣、LinearizedCIELab、OpponentColorSpace、YUV等。通過設(shè)計(jì)不同的矩陣增益模型,來實(shí)現(xiàn)使R、G、B不同通道之間的誤差擴(kuò)散值可以擴(kuò)散的相互擴(kuò)散,并通過控制各個(gè)通道之間擴(kuò)散的權(quán)值,從而可以優(yōu)化增益矩陣的系數(shù)來保證半色調(diào)圖像的效果。4、增益矩陣預(yù)存儲器。誤差擴(kuò)散算法主要包括減法和乘法兩種運(yùn)算,以O(shè)pponentColorSpace增益矩陣為例,對每一個(gè)像素點(diǎn)的一種顏色要進(jìn)行一次減法和四次乘法運(yùn)算。經(jīng)研究,圖像的誤差值只有0~127共128種可能,本發(fā)明將128種誤差值對應(yīng)各方向誤差擴(kuò)散值提前計(jì)算出來,保存在增益矩陣預(yù)存儲器中,免除了復(fù)雜的乘法運(yùn)算,在需要使用時(shí),使用誤差值作為索引,在相應(yīng)的查找表中將各個(gè)方向上的誤差擴(kuò)散值查找出來使用即可,使誤差擴(kuò)散值的計(jì)算消耗的時(shí)間盡量小。一個(gè)增益矩陣預(yù)存儲器其內(nèi)部結(jié)構(gòu)圖如表1所示。表1增益矩陣預(yù)存儲器內(nèi)容誤差值對應(yīng)誤差擴(kuò)散值0右/左下/下/右下鄰域象素對應(yīng)誤差擴(kuò)散值e01/e02/e03/e04......i右/左下/下/右下鄰域象素對應(yīng)誤差擴(kuò)散值ei1/ei2/ei3/ei4通過誤差值即可查詢得到各個(gè)誤差擴(kuò)散系數(shù)相對應(yīng)的誤差擴(kuò)散值。誤差值至多有128個(gè),每個(gè)誤差擴(kuò)散系數(shù)對應(yīng)128個(gè)誤差擴(kuò)散值,每個(gè)誤差擴(kuò)散值8位,因此每個(gè)增益矩陣預(yù)存儲器內(nèi)容接口共占用系統(tǒng)128*4個(gè)字節(jié)的存儲器空間。通過此結(jié)構(gòu)的存儲器,可以將原始圖像對應(yīng)的RGB值對應(yīng)的各個(gè)誤差擴(kuò)散值在較短的一個(gè)時(shí)鐘周期內(nèi)計(jì)算出來。相對于直接使用乘法器,在提升運(yùn)算速度的同時(shí),可以節(jié)省大量邏輯資源而只需使用少量的存儲資源實(shí)現(xiàn)。3、流水線設(shè)計(jì)應(yīng)用,優(yōu)化算法執(zhí)行速度。本發(fā)明將誤差擴(kuò)散過程劃分為四個(gè)部分:各個(gè)通道原始數(shù)據(jù)讀取、半色調(diào)值計(jì)算及誤差擴(kuò)散值查找、誤差擴(kuò)散值累加以及誤差擴(kuò)散值存儲,如圖4所示。以O(shè)pponentColorSpace增益矩陣為例,設(shè)計(jì)其流水線處理時(shí)序圖如圖5所示,其中橫軸代表時(shí)間,縱軸代表各個(gè)功能模塊:各個(gè)通道原始數(shù)據(jù)讀取模塊,誤差擴(kuò)散值查找模塊、誤差擴(kuò)散值累加模塊以及誤差擴(kuò)散值存儲模塊。為了進(jìn)一步提高流水線效率,在誤差擴(kuò)散值累加部分采用寄存器結(jié)構(gòu)同時(shí)緩存多個(gè)誤差擴(kuò)散值,當(dāng)某個(gè)誤差擴(kuò)散值累加完成后,再寫入誤差擴(kuò)散值存儲模塊。只要各個(gè)模塊可以滿足圖中所示的各時(shí)序關(guān)系,系統(tǒng)就能實(shí)現(xiàn)高速流水線處理。按照以上設(shè)計(jì)分析,本文設(shè)計(jì)的流水線詳細(xì)框圖如圖6所示。其中FIFO對應(yīng)源圖像讀取模塊,增益矩陣預(yù)存儲器對應(yīng)誤差擴(kuò)散值查找模塊,累加/誤差擴(kuò)散值寄存器堆對應(yīng)誤差擴(kuò)散值累加模塊,而雙口RAM對應(yīng)誤差擴(kuò)散值存儲模塊。將彩色矢量誤差擴(kuò)散算法過程劃分為四個(gè)部分:各通道原始圖像數(shù)據(jù)讀取、半色調(diào)值計(jì)算及誤差擴(kuò)散值查找、誤差擴(kuò)散值累加以及誤差擴(kuò)散值存儲,四個(gè)部分進(jìn)行流水線作業(yè)。而在在誤差擴(kuò)散值累加部分,誤差擴(kuò)散值的累加需要前面三個(gè)像素點(diǎn)的誤差擴(kuò)散值,因此采用寄存器來緩存來前面像素點(diǎn)的誤差擴(kuò)散值,從而提高流水線效率。4、IP核封裝設(shè)計(jì)。本發(fā)明通過對Avalon主從端信號的分析,對已經(jīng)編寫好的彩色矢量半色調(diào)誤差擴(kuò)散算法模塊進(jìn)行封裝。其對外接口如圖7所示。其中reset_n和clk是Avalon復(fù)位和時(shí)鐘接口;wr、address和writedata是Avalon內(nèi)存映射接口,而半色調(diào)結(jié)果輸出接口為Avalon電路接口。完成IP核封裝之后,用戶通過SOPCBuilder工具將此功能IP快速集成進(jìn)系統(tǒng)中,進(jìn)一步加快系統(tǒng)開發(fā)速度。AM(AmplitudeModulatedScreen)幅度調(diào)制;FM(FrequencyModulatedScreen)頻率調(diào)制;E-D(Error—Diffusion)算法誤差擴(kuò)散算法。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。當(dāng)前第1頁1 2 3