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