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