摘 要:運(yùn)動模糊圖像的重構(gòu)是圖像處理中很重要的一個部分,他在照相機(jī)防抖、拍攝高清晰圖像及運(yùn)動物體的檢測方面都有很重要的作用。介紹運(yùn)動模糊圖像的成因,并推導(dǎo)出運(yùn)動模糊圖像的數(shù)學(xué)模型及頻譜特征,針對水平模糊圖像的頻譜特征提出一種自動判斷運(yùn)動幅度的算法,并針對多核處理器,采用OpenMP多線程技術(shù)進(jìn)行并行化處理,極大地提高了算法的執(zhí)行效率。
關(guān)鍵詞:圖像重構(gòu);運(yùn)動模糊;并行計算;OpenMP
中圖分類號:TP391.14 文獻(xiàn)標(biāo)識碼:A
文章編號:1004-373X(2008)10-145-03
Research on Motion Blurred Image Restoration and Its Parallel Algorithm
ZHANG Lei,WANG Guangsheng
(College of Electronic Information and Control Engineering,Beijing University of Technology,Beijing,100022,China)
Abstract:Restoration of motion blurred images is an important part in image processing,which has many important applications in image stabilization on cameras and capturing high definition pictures.This paper introduces the causing of motion blurred images and deduces the math model and characteristic spectrum of the motion blurred images.This paper proposes a new algorithm on automatic motion range judgment,and does paralleling the restoration algorithm on multi-core processor using OpenMP multi-threading technology,efficiency of the algorithm is increased greatly.
Keywords:image restoration;motion blur;parallel computation;OpenMP
運(yùn)動模糊圖像的重構(gòu)是圖像處理中很重要的一個部分,他在照相機(jī)防抖、拍攝高清晰圖像及運(yùn)動物體的檢測方面都有很重要的作用。運(yùn)動模糊,即采集圖像時由于采集設(shè)備與目標(biāo)發(fā)生相對運(yùn)動而產(chǎn)生的圖像模糊,導(dǎo)致圖像質(zhì)量的降低,即退化。因此,要想在運(yùn)動過程中采集到清晰度高的圖像,就必須要對模糊圖像進(jìn)行處理,即運(yùn)動模糊圖像的重構(gòu)。
目前,對運(yùn)動模糊圖像重構(gòu)的關(guān)鍵之一是測量出運(yùn)動模糊幅度,這主要是靠測量運(yùn)動模糊圖像的頻譜中“條紋”,即能量譜的間距。本文提出一種自動提取運(yùn)動幅度的方法,他帶有預(yù)處理運(yùn)動圖像頻譜的能力,這樣可以避免Hough識別直線中出現(xiàn)識別集中的現(xiàn)象。
最后,本文將運(yùn)動模糊圖像的整個算法進(jìn)行并行化處理,使之能在多核處理器上獲得最大的執(zhí)行效率。本文主要針對水平模糊圖像進(jìn)行重構(gòu),并行化處理也只針對水平方向,但由于水平與豎直方向的處理幾乎一致,故豎直方向的并行化處理也類似。
1 運(yùn)動模糊圖像重構(gòu)算法
1.1 運(yùn)動模糊圖像的數(shù)學(xué)模型
運(yùn)動模糊圖像復(fù)原的基本思路:先建立退化的數(shù)學(xué)模型,然后根據(jù)該模型對退化圖像進(jìn)行擬合。圖像復(fù)原模型可以用離散數(shù)學(xué)處理,處理項(xiàng)的實(shí)現(xiàn)可在空間域卷積,或在頻域相乘。膠片上的總曝光量是在快門開閉期間的積分,即運(yùn)動模糊成像表示為:
成像系統(tǒng)與物體間相對運(yùn)動造成的像模糊,如圖1所示。
圖1 去模糊前的圖像
設(shè)只有像函數(shù)f(x,y)相對系統(tǒng)的移動,設(shè):Δx(t)為x方向的移動分量;Δy(t)為y方向的移動分量。
在不考慮噪聲的情況下,原始圖像的退化模型表示為:
g(x,y)=∫T0f[x-Δx(t),y-Δy(t)]dt(1)
再簡化一次,讓物體僅在x方向做直線勻速運(yùn)動,且在曝光時間T內(nèi)的總位移量為a,物體沿x方向的變換分量為:
Δx(t)=aTt (2)
g(x,y)=∫T0f(x-aTt)dt=g(x)[WB](3)
let: t1=aTt(4)
則:
g(x,y)=g(x)=∫a0f(x-t1)Tadt1=f(x)*h(x)[WB](5)
where:h(x)=ta,0≤x≤a(6)
為沿x方向造成運(yùn)動模糊的點(diǎn)擴(kuò)散函數(shù):
i.e. h(x)=Ta[] 0≤x≤a
0[]其他(7)
為運(yùn)動物體沿x方向移動時的圖像退化模型。
對運(yùn)動模糊圖像進(jìn)行重構(gòu),首先要確定運(yùn)動模糊圖像的運(yùn)動幅度。由上面的分析可知,運(yùn)動模糊圖像的運(yùn)動幅度是以在頻域中的條紋,即能量譜數(shù)目來表現(xiàn)。因此,要確定運(yùn)動幅度,只需確定圖像在頻域中的條紋數(shù)目。而由于各個條紋間的距離是固定的,只需要確定圖像最中間的兩條直線間的間距即可。一般的方法是依靠霍夫變換檢測直線的方法,對圖像反復(fù)霍夫變換去檢測條紋,最終識別出中間的兩條直線,并計算出他們之間的距離。
1.2 含預(yù)處理的自動識別頻譜條紋算法
雖然Hough變換可以識別直線,但是如果不對原始圖像先進(jìn)行一次檢測,就可能會出現(xiàn)識別直線在“波谷”處過于集中的情況。對此,設(shè)計了一種預(yù)處理的方法,檢測條紋間的“波谷”,這種算法可以寫為:
設(shè)定一個參數(shù) vlong, 代表“下降次數(shù)”
設(shè)定一個標(biāo)記 downflag=1,代表是否正在處于“下降”位置
設(shè)定一個vBuffer[j],存儲第j列的波谷數(shù)量
對每一行進(jìn)行掃描
{
If <前一個(左邊)像素點(diǎn)的值大于后一個(右邊)像素點(diǎn)的值>
{
downflag=true;//標(biāo)記當(dāng)前狀態(tài):正在下降
Vlong -- ;
}
Else//前一個(左邊)像素點(diǎn)的值小于后一個(右邊)像素點(diǎn)的值
//此時狀態(tài)正在處于上升
{
If(downflag==true Vlong<0)
//已經(jīng)連續(xù)下降了Vlong次,并且后面開始爬升
{
vBuffer[j]++;//確定當(dāng)前是“波谷”,波谷存儲器中該列的“波谷”的數(shù)量加一
}
Downflag=1;//修改標(biāo)記
將Vlong置回初始狀態(tài)
}
}
If(downflag==true Vlong<0)
//已經(jīng)連續(xù)下降了Vlong次,并且后面開始爬升
{
vBuffer[j]++;//確定當(dāng)前是“波谷”,波谷存儲器中該列的“波谷”的數(shù)量加一
}
Downflag=1;//修改標(biāo)記將Vlong置回初始狀態(tài)
} }
最后,逐行掃描每一個像素,如果該像素所在列的波谷數(shù)量超過某一個值,并且該點(diǎn)的亮度值小于一定范圍(不能是亮點(diǎn)),那么判定該點(diǎn)為“可能波谷點(diǎn)”,經(jīng)過上面的一步篩選之后,再用Hough變換來識別這些“可能波谷點(diǎn)”的點(diǎn)所構(gòu)成的直線,如圖2所示。再經(jīng)過計算,可得到圖像的運(yùn)動幅度。
由于運(yùn)動幅度已經(jīng)確定,逆濾波處理相對簡單。這里設(shè)定逆濾波的h(x,y)為:
h(0,0)=1/N
h(1,0)=1/N
h(2,0)=1/N
…
h(N-1,0)=1/N
h(N,0)=0
h(N+1,0)=0
…
其中,N為運(yùn)動幅度。再經(jīng)過FFT(將零點(diǎn)與高頻部分設(shè)為0.5),做相除運(yùn)算最后經(jīng)IFFT把圖像復(fù)原,如圖3所示。
[XC<11t5.tif>]
圖2 運(yùn)動檢測模糊圖像頻譜
[XC<11t6.tif>;%95%95;]
圖3 去模糊后得圖像
1.3 程序算法流程圖
程序的算法主要包括幾個部分:對圖像的快速傅里葉變換,將圖像由空間域轉(zhuǎn)換為頻域,為以后做頻域處理打基礎(chǔ);對圖像的頻域做運(yùn)動幅度檢測,利用霍夫變換檢測直線深谷,最后檢測出中間兩條直線間的距離,進(jìn)而判斷出運(yùn)動幅度;在運(yùn)動幅度以及方向都確定的情況下,采用逆濾波處理進(jìn)行圖像重建,最終將圖像重建。算法流程圖如圖4所示。
2 運(yùn)動模糊圖像重構(gòu)算法的并行化處理
當(dāng)今的處理器時代已經(jīng)由單核向多核發(fā)展,應(yīng)用程序及算法向多核處理器上進(jìn)行移植,并獲取最大執(zhí)行效率是當(dāng)前所有研究學(xué)者需要考慮的工作之一。算法在多核處理器進(jìn)行優(yōu)化,主要依靠多線程技術(shù)將算法進(jìn)行單個任務(wù)拆分為多個認(rèn)為,使得操作系統(tǒng)可以平均分配多核CPU的工做負(fù)載。
圖4 運(yùn)動模糊圖像重構(gòu)的算法流程圖
由上面對運(yùn)動模糊圖像重構(gòu)的算法分析不難發(fā)現(xiàn),此算法的各個環(huán)節(jié)都包含著大量的重復(fù)并獨(dú)立的工作,比如快速傅里葉變換,逆濾波處理,可以直接進(jìn)行算法上的并行化處理;而采用霍夫變換做直線識別,由于識別次數(shù)較多,可以進(jìn)行功能并行。本文中的并行化處理采用OpenMP編譯制導(dǎo)語言自動完成。采用OpenMP簡單而高效,他可以自動分析當(dāng)前線程并創(chuàng)建用于執(zhí)行程序的并行化多線程。
2.1 快速傅里葉變換的并行化處理
由于圖像是二維空間的,其傅里葉變換需要橫豎2次才能完成。由于行與行之間,列與列之間是獨(dú)立的,因此采用對行列的并行化處理。這里沒[GK!3]有采用碟型網(wǎng)格等高級的并行算法,這主要是考慮到算法執(zhí)行完畢后需要直接對其結(jié)果進(jìn)行處理,采用碟型網(wǎng)格會帶來一些不便,需要額外的處理工作。同時采用行列之間的簡單并行已經(jīng)可以很好的提升并行化效率。
圖像快速傅里葉變換的程序流程圖如圖5所示:[HK]
圖5 并行程序流程
程序首先讀入圖像數(shù)據(jù)至緩沖區(qū),并將其以二維數(shù)組的形式存儲。然后首先對水平方向進(jìn)行FFT處理,由于快速傅立葉變換的可并行特點(diǎn),因此對每行的FFT的處理可以全部并行化。對豎直方向每列的并行化也如此。未并行與并行之后的CPU使用記錄及程序執(zhí)行時間如表1所示。
2.2 運(yùn)動檢測過程的并行化處理
由于需要采用霍夫變換來進(jìn)行10次直線,那么對霍夫變換的并行化處理就顯得非常重要。雖然霍夫變換具有一定的可并行性,但由于重復(fù)次數(shù)較多,功能并行對于加速比的提升要高于對霍夫變換算法本身的并行。未并行與并行之后的CPU使用記錄及程序執(zhí)行時間如表2所示。
[WTHZ]表1 FFT過程的CPU占用率統(tǒng)計及執(zhí)行時間[WTBZ]
未并行之前的CPU使用記錄并行處理之后CPU使用記錄
CPU0占用率 16%CPU1占用率 79%CPU0 占用率 52%CPU1 占用率 69%
總共用時:1 728 ms總共用時:938 ms
加速比系數(shù):tstp=1 728938=1.84
[WTHZ]表2 運(yùn)動檢測過程的CPU使用情況及運(yùn)行時間[WTBZ]
未并行之前的CPU使用記錄并行處理之后CPU使用記錄
CPU0:25%CPU1:75%CPU0:90%CPU1:90%
總共用時:3 469 ms總共用時:2 203 ms
加速比系數(shù):[SX(]ts[]tp[SX)]=[SX(]3 469[]2 203[SX)]=1.57
2.3 逆濾波處理的并行化處理
逆濾波處理過程是整個程序中最費(fèi)時間的部分,他包括快速傅里葉變換,頻域運(yùn)算和快速傅里葉反變換3部分。幸運(yùn)的是,這些環(huán)節(jié)內(nèi)部均是可獨(dú)立并行的,因此可對整個逆濾波處理做局部的并行化處理。并行化流程圖如圖6所示:
圖6 并行化流程圖
程序首先對圖像進(jìn)行快速傅里葉變換,這部分的并行化處理前面已經(jīng)提到了。接著進(jìn)行逆濾波處理的相關(guān)運(yùn)算,由于這部分算法的迭代次數(shù)較多,運(yùn)算量較大,所以適合進(jìn)行對迭代部分的并行化處理。最后對快速傅里葉逆變換的并行,可按照傅里葉變換的并行化處理方法。
2.4 整個程序的CPU運(yùn)行狀態(tài)和運(yùn)行時間
[JP3]通過用OpenMP將傅里葉變換并行化,運(yùn)動檢測并行化以及逆濾波處理并行化,程序的執(zhí)行速度大大提升。整個算法并行化前后的CPU使用記錄及程序執(zhí)行時間如表3所示。
3 結(jié) 語
隨著現(xiàn)代社會數(shù)字化技術(shù)的普及,數(shù)字圖像在人們的生活中不可或缺。因此,數(shù)字圖像處理技術(shù)在社會中的應(yīng)用將越來越廣泛。他不僅要求處理的精確性,還要求快速性。精確性主要依靠算法的設(shè)計理論,而快速性不僅依靠算法效率,與對其優(yōu)化的結(jié)果也有很大關(guān)系。
表3 程序最終的并行化前后結(jié)果對比
本文提出一種新的運(yùn)動幅度檢測的方法,在運(yùn)動模糊圖像重構(gòu)上有一定應(yīng)用價值。同時,本文對現(xiàn)有的運(yùn)動模糊圖像重構(gòu)算法進(jìn)行了并行化處理,使之能夠借助多核處理器的強(qiáng)大處理能力,提升算法執(zhí)行速度。
參 考 文 獻(xiàn)
[1]阮秋琦.數(shù)字圖像處理學(xué)[M].北京:電子工業(yè)出版社,2001.
[2][美]Rafael C Gonzalez.數(shù)字圖像處理[M].北京:電子工業(yè)出版社,2007.
[3]向世明.Visual C++ 數(shù)字圖像與圖形處理[M].北京:電子工業(yè)出版社,2006.
[4][美]Michael J Quinn.MPI與OpenMP 并行程序設(shè)計[M].北京:清華大學(xué)出版社,2004.
[5]毋立芳.二值運(yùn)動模糊圖像參數(shù)提取[J].北京工業(yè)大學(xué)學(xué)報,1996,12(22),4-6.
[6]賀建峰.運(yùn)動模糊圖像的參數(shù)估計[J].昆明理工大學(xué)學(xué)報,1998,12(23):6-7.
作者簡介 張 磊 男,1983年出生,北京朝陽人,碩士研究生。主要從事視頻處理及圖像處理的研究工作。
王廣生 男,高級工程師。
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。