面向H.264編解碼系統(tǒng)的圖像預(yù)處理技術(shù)
摘要 在圖像采集過程中,難免會(huì)引入噪聲,這對(duì)視頻圖像的質(zhì)量產(chǎn)生了一定影響。為了避免噪聲圖像傳入編解碼系統(tǒng)中,對(duì)采集到的視頻圖像進(jìn)行預(yù)處理,以FPGA為核心處理器件,采用中值濾波技術(shù),并用Modelsim仿真工具進(jìn)行驗(yàn)證。對(duì)仿真結(jié)果進(jìn)行分析表明,通過對(duì)圖像的預(yù)處理,濾波效果良好,達(dá)到了對(duì)視頻圖像降噪的目的,避免了噪聲逐級(jí)傳遞,從而保證了視頻圖像的顯示效果。
近年來,隨著多媒體技術(shù)的不斷發(fā)展,視頻圖像的傳輸應(yīng)用越來越廣泛,在視頻圖像的采集和傳輸過程中,由于溫度、光照、電信號(hào)等因素的影響,很容易在視頻圖像采集的過程中引入噪聲,這對(duì)圖像的顯示和欣賞效果造成了一定影響。因此,在視頻圖像的采集和傳輸過程中,對(duì)圖像進(jìn)行一定的降噪處理是有必要的。為了降低圖像噪聲,可對(duì)編解碼系統(tǒng)中采集到的圖像進(jìn)行預(yù)處理,將濾波預(yù)處理之后的圖像再存入編解碼系統(tǒng)中。由于圖像的實(shí)時(shí)性,對(duì)圖像預(yù)處理的處理速度提出了較高的要求,普通軟件處理速度達(dá)不到要求,而FPGA具有較快的處理速度,成為實(shí)時(shí)圖像處理的首選。
本文基于面向H.264視頻編解碼系統(tǒng),在充分考慮系統(tǒng)實(shí)時(shí)性的基礎(chǔ)上,以FPGA為核心的處理部件,設(shè)計(jì)了具有較高處理能力的中值濾波器對(duì)視頻圖像進(jìn)行預(yù)處理,有效消除了圖像中的噪聲,避免了噪聲的逐級(jí)傳遞,達(dá)到了較高視頻圖像質(zhì)量和較好視覺效果的目的。
1 圖像預(yù)處理算法
1.1 BT656和YUV420格式轉(zhuǎn)換
本文設(shè)計(jì)的視頻圖像預(yù)處理系統(tǒng),主要是基于面向H.264視頻編解碼系統(tǒng)上的。如圖1所示,是編解碼系統(tǒng)的部分架構(gòu),包括了視頻圖像采集、A/D轉(zhuǎn)換和預(yù)處理,SAA7113芯片將攝像頭采集到的模擬信號(hào)轉(zhuǎn)化為BT656格式的數(shù)字信號(hào)。
BT656格式,即YCrCb422(YUV422)格式,YUV422格式在每行像素中,亮度信號(hào)Y數(shù)據(jù)和色度信號(hào)U、V數(shù)據(jù)的比例都是2:1,為了節(jié)省數(shù)據(jù)量,本文中采用YUV420的格式,因此需要將BT656格式和YUV420格式進(jìn)行格式轉(zhuǎn)換。YUV420格式的每行和每列,Y數(shù)據(jù)和U、V數(shù)據(jù)的比例都是2:1,即4個(gè)Y值共用一個(gè)U和V,這樣就在垂直方向數(shù)據(jù)量比YUV422格式數(shù)據(jù)量減少了1/2。
本文采用的轉(zhuǎn)換方法是丟棄偶數(shù)行像素點(diǎn)的色度信號(hào)Cr和色度信號(hào)Cb,從而使得每?jī)尚械?個(gè)像素點(diǎn)公用一個(gè)色度信號(hào)Cr和一個(gè)色度信號(hào)Cb,使得存儲(chǔ)的視頻圖像數(shù)據(jù)能進(jìn)一步減少,而不影響圖像的質(zhì)量。假設(shè)Yxy表示亮度信號(hào)在(x,y)位置處的值;Crxy、Cbxy表示了色度信號(hào)在(x,y)位置處的值,則BT656格式和YUV420有如下的對(duì)應(yīng)關(guān)系
1.2 中值濾波原理
中值濾波器就是用該像素相鄰像素的像素值的中值來代替原中心像素點(diǎn)的值
中值濾波器的應(yīng)用較廣,對(duì)于由隨機(jī)信號(hào)引起的噪聲如脈沖噪聲等等,中值濾波不僅具有良好的去噪能力,且在相同尺寸下相比線性平滑濾波器能夠更好地保護(hù)圖像的細(xì)節(jié)部分。由于中值濾波器的這些特性,使其在圖像濾波領(lǐng)域應(yīng)用廣泛。
針對(duì)YCrCb420格式的特點(diǎn),需采用合適的中值濾波設(shè)計(jì)對(duì)視頻圖像的噪點(diǎn)進(jìn)行處理。由于YCrCb420數(shù)據(jù)的存儲(chǔ)是按照Y、Cr、Cb的順序。因此,可通過流水的方式依次對(duì)存儲(chǔ)在DDR II存儲(chǔ)器中的Y、Cr、Cb數(shù)據(jù)進(jìn)行處理。以亮度信號(hào)Y為例,本設(shè)計(jì)中,中值濾波的計(jì)算步驟如下:(1)將窗口的中心與圖像中的某個(gè)像素點(diǎn)的位置重合,然后讓濾波窗口在圖像中滾動(dòng),每次只移動(dòng)一個(gè)像素點(diǎn)。(2)讀取窗口內(nèi)包含像素點(diǎn)的亮度值。(3)將這些亮度值按照從小到大的順序排列,確定排序位于中間值。(4)用中間值來代替濾波窗口中心的亮度值。(5)由于濾波窗口的中心不可能位于圖像邊緣,需要對(duì)圖像的邊界進(jìn)行單獨(dú)處理。
對(duì)于分辨率為640×480的視頻圖像而言,YCrCb420數(shù)據(jù)亮度信號(hào)的大小為640×480×8,而色度信號(hào)Cr和Cb分別為320×240×8。以亮度信號(hào)為例,中值濾波原理如圖2所示。
2 中值濾波器設(shè)計(jì)
在實(shí)際去噪的過程中,濾波窗口的大小對(duì)濾波效果的影響比較大,若窗口選取較小,雖可有效地保護(hù)圖像的細(xì)節(jié)信息,但去噪的效果會(huì)相對(duì)較弱;若窗口選取較大,去噪效果會(huì)加強(qiáng),但會(huì)使濾波后的圖像更加模糊,丟失了細(xì)節(jié)信息,且濾波窗口越大會(huì)相應(yīng)的消耗更多的資源。因此,從資源和效率方面綜合考慮,本設(shè)計(jì)中,中值濾波的窗口采用3×3的方形濾波窗口。根據(jù)上述中值濾波原理及窗口選取,本系統(tǒng)中YCrCb420視頻圖像的中值濾波的設(shè)計(jì)如圖3所示。
如圖3所示,首先要從DDR II存儲(chǔ)器中讀取YCrCb420數(shù)據(jù),對(duì)Y、Cr、Cb數(shù)據(jù)分別進(jìn)行中值濾波來去除像素值中的噪點(diǎn)。將讀取的數(shù)據(jù)送入3×3的窗口生成模塊,然后將窗口中的9個(gè)數(shù)據(jù)送入中值比較模塊得出中值。由于邊緣數(shù)據(jù)無法位于3×3窗口的中心,即無法用求中值的方式來更新邊緣數(shù)據(jù)。因此,要通過邊緣檢測(cè)模塊將邊緣的數(shù)據(jù)單獨(dú)進(jìn)行處理。最終,將得到的中值和邊緣數(shù)據(jù)重組,得出所需數(shù)據(jù)并送入DDR II存儲(chǔ)器中。
(1)視頻圖像數(shù)據(jù)讀取模塊。系統(tǒng)采用Altera公司的QYSY平臺(tái),總線協(xié)議為Avalon協(xié)議,設(shè)計(jì)中從DDR II存儲(chǔ)器中讀數(shù)據(jù)要滿足Avalon總線的協(xié)議要求。為了提高數(shù)據(jù)的讀取速度,圖像數(shù)據(jù)的讀取過程采用Avalon master read(主端口讀)的模式。此外,為了加快數(shù)據(jù)的讀取速度,實(shí)際的設(shè)計(jì)中還采用了帶突發(fā)傳輸屬性的模型進(jìn)行數(shù)據(jù)讀取。
(2)3×3的窗口生成模塊。3×3窗口通過使用3個(gè)FIFO來實(shí)現(xiàn),每一個(gè)FIFO存儲(chǔ)一行的數(shù)據(jù),待準(zhǔn)備好后,每個(gè)FIFO連續(xù)出3個(gè)數(shù)據(jù),形成一個(gè)3×3數(shù)據(jù)的窗口,具體實(shí)現(xiàn)如圖4所示。
由于采用3×3的窗口模式,所以要保證每次進(jìn)入窗口中的數(shù)據(jù)是來自3個(gè)不同的像素行。因此在開始將數(shù)據(jù)送到3×3的窗口之前,要對(duì)兩行像素?cái)?shù)據(jù)進(jìn)行存儲(chǔ),等到第三行數(shù)據(jù)到來時(shí),才將數(shù)據(jù)一起送入3×3的濾波窗。設(shè)計(jì)采用同步FIFO進(jìn)行數(shù)據(jù)存儲(chǔ),同時(shí)通過FIFO的usedw信號(hào)進(jìn)行數(shù)據(jù)的填充記錄。這里兩個(gè)同步FIFO用于進(jìn)行前兩行數(shù)據(jù)的存儲(chǔ),第三行數(shù)據(jù)則是通過前面的異步FIFO的輸出來提取。在兩行數(shù)據(jù)都在FIFO中準(zhǔn)備好時(shí)(其中第一行數(shù)據(jù)存入line_3中,第二行數(shù)據(jù)存入line_2中),一旦line_3的FIFO讀信號(hào)開始有效時(shí),便將3行數(shù)據(jù)送入3×3中(第3行數(shù)據(jù)由line_1的輸出實(shí)時(shí)的送入)
(3)中值生成模塊。對(duì)于3×3窗口中的9個(gè)待處理數(shù)據(jù),中值濾波的基本思想是通過比較得出這9個(gè)數(shù)的中值。中值濾波的輸出值由領(lǐng)域數(shù)據(jù)的中間值決定。具體的比較過程如圖5所示。
為加快處理速度,設(shè)計(jì)采用流水線技術(shù)。由于前一個(gè)步驟的輸出是下一個(gè)步驟的輸入,可考慮采用流水線技術(shù),以提高系統(tǒng)的工作頻率。由于前后操作使用相同的比較操作,前后級(jí)處理的時(shí)間相等,均是一個(gè)時(shí)鐘周期,可直接將前級(jí)的結(jié)果送入下一級(jí)。
通過7次比較,便能得出一個(gè)處理過的中值來代替原本窗口中間的值。由仿真波形可知,從數(shù)據(jù)準(zhǔn)備好開始,到得出一個(gè)中值,只需4個(gè)周期的時(shí)間。數(shù)據(jù)連續(xù)輸入,中值也可連續(xù)的輸出,除了上述提到的在每3行的結(jié)尾處需要等待兩個(gè)周期。這里比較器的作用是通過比較找出3個(gè)數(shù)據(jù)中最大值、最小值和中值。
(4)邊緣數(shù)據(jù)檢測(cè)及處理。如圖3所示,在窗口移動(dòng)過程中,只能處理窗口中間的數(shù)據(jù),由于邊緣的數(shù)據(jù)不可能作為窗口中間值,對(duì)于邊緣的數(shù)據(jù)必須要進(jìn)行單獨(dú)處理。由于數(shù)據(jù)按行讀出的,邊緣數(shù)據(jù)包括第一列和最后一列的數(shù)據(jù)以及每一行的第一個(gè)數(shù)據(jù)和最后一個(gè)數(shù)據(jù)。邊緣檢測(cè)的實(shí)現(xiàn)如圖6所示。
設(shè)計(jì)采用不對(duì)邊緣數(shù)據(jù)進(jìn)行處理的方式,僅將邊緣數(shù)據(jù)保留原值。邊緣數(shù)據(jù)通過line_2的FIFO的輸出來檢測(cè),設(shè)置行和列計(jì)數(shù)器。必須保證第一個(gè)處理完的中值必須在第二行的第一個(gè)數(shù)據(jù)之后和第二行的最后一個(gè)數(shù)據(jù)之前到來。這種方式有利于數(shù)據(jù)的恢復(fù)。最后將經(jīng)過中值濾波的數(shù)據(jù)和邊緣數(shù)據(jù)進(jìn)行重組后寫回到DDR II存儲(chǔ)器中,然后送入到H.264視頻編碼器中用于視頻編碼。
3 仿真驗(yàn)證
實(shí)驗(yàn)中,通過FIFO2來控制每行數(shù)據(jù)的邊緣檢測(cè),保證利用最短的周期重組數(shù)據(jù),當(dāng)遇到邊緣數(shù)據(jù)時(shí),經(jīng)過5個(gè)寄存器進(jìn)行暫存;當(dāng)遇到中值數(shù)據(jù)時(shí),直接使用。然后將邊緣數(shù)據(jù)和中值數(shù)據(jù)重組并經(jīng)過異步FIFO后,生成一個(gè)32位數(shù)據(jù),圖7中data即為最終重組數(shù)據(jù)。
對(duì)于圖像預(yù)處理的濾波效果,本文將帶有椒鹽噪聲的圖像數(shù)據(jù)輸入到圖像預(yù)處理系統(tǒng)中,對(duì)濾波效果進(jìn)行比較,如圖8所示,經(jīng)過圖像預(yù)處理后直觀濾波效果良好,有效降低了噪聲。
4 結(jié)束語(yǔ)
本文主要描述了在將視頻圖像數(shù)據(jù)存儲(chǔ)于DDRII中之前,對(duì)視頻圖像進(jìn)行預(yù)處理,去除相應(yīng)的噪聲過程,從而保證了送入H.264視頻編碼的視頻圖像的質(zhì)量,避免了噪聲的傳遞。通過仿真驗(yàn)證和圖像直觀比較,實(shí)驗(yàn)效果良好,具有較高的實(shí)用價(jià)值,為以硬件為基礎(chǔ)的實(shí)時(shí)圖像預(yù)處理提供了技術(shù)支持。雖然效果良好,卻仍有可改進(jìn)的空間,例如濾波窗口可改為自適應(yīng)大小的窗口,濾波類型也可以是自適應(yīng)的,這就需要更深入地研究和實(shí)驗(yàn),從而保證更好的視頻圖像效果。