基于gpu的混疊采樣的光譜視頻快速重構(gòu)方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于圖像處理技術(shù)領(lǐng)域,特別涉及一種混疊采樣的光譜視頻的快速重構(gòu)方 法,可用于資源勘探、地質(zhì)災(zāi)害檢測和醫(yī)療診斷中的光譜視頻獲取。
【背景技術(shù)】
[0002] 近年發(fā)展起來的光譜重構(gòu)理論,尤其是基于壓縮感知的光譜重構(gòu)技術(shù),為光譜成 像模式提供了新方法,但重構(gòu)過程是求解優(yōu)化問題,計算復(fù)雜度高,時間代價大,尤其在光 譜視頻重構(gòu)時,時間代價巨大,如何有效的減少光譜視頻的重構(gòu)時間是一個亟待解決的問 題。
[0003] 2006年,英偉達(dá)公司推出通用并行計算架構(gòu)Compute Unified Device Architecture,簡稱為CUDA,其采用圖形處理器GPU作為計算引擎架構(gòu)能有效的實(shí)現(xiàn)并行 處理任務(wù),是一種結(jié)合了 CPU和GPU的統(tǒng)一計算架構(gòu)。相比普通的CPU串行計算,GPU能夠 在計算速度上取得極大的提升。
[0004] 現(xiàn)有的光譜重構(gòu)算法有多種,比如迭代收縮閾值算法Iterative Shrinkage/ Thresholding Algorithms,簡稱1ST算法,基于三維字典學(xué)習(xí)的重構(gòu)算法,兩步收縮迭代算 法 Two-Step Iterative Shrinkage/Thresholding Algorithms,簡稱 TwIST 算法等,其中:
[0005] 1ST算法,是通過對觀測圖像多次迭代濾波得到最終重構(gòu)圖像,但當(dāng)觀測圖像質(zhì)量 較差時不能得到較好的重構(gòu)結(jié)果,成像質(zhì)量得不到保證;
[0006] 基于三維字典學(xué)習(xí)的重構(gòu)算法,是利用光譜維的信息對光譜圖像進(jìn)行重構(gòu),能夠 得到較好的成像質(zhì)量,但是在每次重構(gòu)時需要重新學(xué)習(xí)字典,以至于重構(gòu)時間過長;
[0007] TwIST算法,是利用了光譜場景的空間信息和先驗(yàn)信息對光譜圖像進(jìn)行重構(gòu),同時 兼顧了成像效率和成像質(zhì)量,但是在視頻重構(gòu)時仍然滿足不了快速重構(gòu)的需求。
【發(fā)明內(nèi)容】
[0008] 本發(fā)明的目的在于針對上述TwIST算法在光譜視頻重構(gòu)時重構(gòu)效率低的問題,提 出了一種基于GPU的混疊采樣的光譜視頻快速重構(gòu)方法,以減少光譜視頻重構(gòu)過程中的時 間代價,提高重構(gòu)效率。
[0009] 本發(fā)明的技術(shù)方案是這樣完成的:
[0010] 本發(fā)明借鑒Μ. E. Gehm,R. Johm等人在2006年提出的基于壓縮感知理論的CASSI 系統(tǒng),利用加速重構(gòu)算法對一段時間內(nèi)的混疊采樣的光譜視頻進(jìn)行加速重構(gòu)。其實(shí)現(xiàn)內(nèi)容 包括光譜視頻觀測和光譜視頻反演兩部分:
[0011] 所述光譜視頻觀測,包括如下步驟:
[0012] (1)初始化原始光譜視頻信息,設(shè)原始光譜視頻信息矩陣f。的大小為 MX NXLX T,設(shè)任意一點(diǎn)的光譜視頻信息為fjm,n,k,t),其中M,N分別表示光譜空間的行 數(shù)和列數(shù),MXN為光譜視頻信息的空間分辨率,(M-l),(N-I)是光譜視頻信息空間的行和 列的最大索引,L為光譜視頻信息的光譜分辨率,即光譜視頻信息的譜段個數(shù)為L,L-I為光 譜視頻信息譜段的最大索引,T為光譜視頻的觀測時間;m和η表示空間維坐標(biāo),k表示光譜 維坐標(biāo),t表示光譜觀測時刻,其中O彡m彡M-1,0彡η彡N-1,0彡k彡L-l,t彡O ;
[0013] (2)設(shè)編碼模板函數(shù)矩陣為C(m,η),用該編碼模板函數(shù)矩陣對光譜視頻信息 fQ(m, n, k, t)進(jìn)行編碼,得出經(jīng)過編碼之后的光譜視頻信息A (m, n, k, t) = f(j(m,n, k, t) C(m,n),其中,C(m,n)隨機(jī)地取0或I ;
[0014] (3)將編碼后的光譜視頻信息中每一時刻的第k個譜段的信息平移k個像素,即 將每一時刻的第k個譜段第η列的信息平移到第n+k列,得出色散之后的光譜視頻信息 f2 (m, n, k, t)為:
[0015] f2 (m, n, k, t) = T1 (m, n+k, k, t) = f〇 (m, n+k, k, t) C (m, n+k);
[0016] (4)分別對平移后的光譜視頻信息f2(m,n,k,t)各個譜段的光譜視頻信息進(jìn)列累 加,得出光譜視頻的觀測結(jié)果y(m,n,t):
[0017]
[0018] 所述光譜視頻反演,包括如下步驟:
[0019] (5)針對不同需求設(shè)置300X300,600X600,1200X1200三種不同的光譜視頻重構(gòu)空 間分辨率;
[0020] (6)使用malloc函數(shù)申請主機(jī)中的內(nèi)存空間,將光譜視頻重構(gòu)所需要的數(shù)據(jù)讀入 到申請的主機(jī)內(nèi)存中;
[0021] (7)設(shè)置GPU中每個線程塊中的線程和線程格中線程塊;
[0022] (8)使用CUdaMalloc函數(shù)在GPU中申請光譜視頻重構(gòu)所需要的顯存空間,并使用 cudaMemcpy函數(shù)將主機(jī)內(nèi)存中與光譜視頻重構(gòu)有關(guān)的數(shù)據(jù)拷貝到GPU顯存中;
[0023] (9)利用兩步收縮迭代并行算法TwIST對顯存中的光譜視頻數(shù)據(jù)按照設(shè)置的空 間分辨率進(jìn)行反演,得到對應(yīng)空間分辨率的重構(gòu)光譜視頻數(shù)據(jù),再使用cudaMemcpy函數(shù)把 GPU顯存中重構(gòu)的光譜視頻數(shù)據(jù)拷貝到主機(jī)內(nèi)存中;
[0024] (10)在主機(jī)中將重構(gòu)得到的光譜視頻數(shù)據(jù)按照30幀每秒的幀率合成光譜視頻。
[0025] 本發(fā)明與現(xiàn)有技術(shù)相比具有以下優(yōu)點(diǎn)
[0026] 第一:本發(fā)明不改變原有的CASSI光譜觀測系統(tǒng)結(jié)構(gòu),通過增加時間維直接獲取 光譜觀測視頻信息,簡化了結(jié)構(gòu);
[0027] 第二:本發(fā)明利用了基于GPU的快速重構(gòu)算法,使得重構(gòu)速度得到大幅提升,實(shí)現(xiàn) 了光譜視頻的快速獲取;
[0028] 第三:本發(fā)明將可重構(gòu)的光譜視頻空間分辨率設(shè)為可選的三種,滿足了對不同重 構(gòu)時間的需求,擴(kuò)展了應(yīng)用范圍。
【附圖說明】
[0029] 圖1是本發(fā)明的實(shí)現(xiàn)總流程圖;
[0030] 圖2是本發(fā)明中的光譜視頻觀測子流程圖;
[0031] 圖3是本發(fā)明中的光譜視頻反演子流程圖;
[0032] 圖4是本發(fā)明中GPU線程格線程塊設(shè)置結(jié)構(gòu)圖;
[0033] 圖5是用本發(fā)明方法和現(xiàn)有基于CPU光譜視頻重構(gòu)方法對單幀balloons光譜圖 像進(jìn)行觀測的仿真重構(gòu)結(jié)果圖;
[0034] 圖6是用本發(fā)明方法和現(xiàn)有基于CPU光譜視頻重構(gòu)方法對單幀egyptian_statue 光譜圖像進(jìn)行觀測的仿真重構(gòu)結(jié)果圖;
[0035] 圖7是用本發(fā)明方法和現(xiàn)有基于CPU光譜視頻重構(gòu)方法對蠟燭火焰視頻進(jìn)行觀測 的重構(gòu)結(jié)果圖;
[0036] 圖8是用本發(fā)明方法和現(xiàn)有基于CPU光譜視頻重構(gòu)方法對白玉蘭視頻進(jìn)行觀測的 重構(gòu)結(jié)果圖。
【具體實(shí)施方式】
[0037] 下面結(jié)合附圖和實(shí)例對本發(fā)明進(jìn)行詳細(xì)說明:
[0038] 參照圖1,本發(fā)明的實(shí)現(xiàn)包括光譜視頻觀測和光譜視頻反演兩大部分,通過光譜視 頻觀測得到待重構(gòu)的光譜觀測視頻,對光譜觀測視頻進(jìn)行反演得到光譜視頻。
[0039] 參照圖2,本發(fā)明的光譜視頻觀測包括如下步驟:
[0040] 步驟1,初始化原始光譜視頻信息。
[0041] 設(shè)原始光譜視頻信息矩陣f。的大小為MX NX LX T,其中M,N表示光譜空間的行數(shù) 和列數(shù),MXN為光譜視頻信息的空間分辨率,(M-I),(N-I)是光譜視頻信息空間的行和列 的最大索引;
[0042] 設(shè)任意一點(diǎn)的光譜視頻信息為f。(m,n,k,t),其中m和η表示空間維坐標(biāo),k表示 光譜維坐標(biāo),t表示光譜觀測時刻,其中0彡m彡M-1,0彡η彡N-1,0彡k彡L-l,t彡0 ;
[0043] 設(shè)L為光譜視頻信息的光譜分辨率,即光譜視頻信息的譜段個數(shù)為L,L-I為光譜 視頻信息譜段的最大索引;
[0044] 設(shè)T為光譜視頻的觀測時間;
[0045] 步驟2,對光譜視頻信息進(jìn)行編碼。
[0046] 設(shè)編碼模板函數(shù)矩陣為C(m,η),用該編碼模板函數(shù)矩陣對光譜視頻信息 fD(m,n,k,t)進(jìn)行編碼,得出經(jīng)過編碼之后的光譜視頻信息:
[0047] f! (m, n, k, t) = f〇 (m, n, k, t) C (m, η),
[0048] 其中,C (m,η)隨機(jī)地取0或1。
[0049] 步驟3,對編碼后的光譜視頻信息進(jìn)行色散。
[0050] 將編碼后的光譜視頻信息中的每一時刻的第k個譜段的信息平移k個像素,即將 每一時刻的第k個譜段第η列的信息平移到第n+k列,得出編碼色散之后的光譜視頻信息 f 2 (m, n, k, t)為:
[0051] f2 (m, n, k, t) = A (m, n+k, k, t) = f0 (m, n+k, k, t) C (m, n+k)。
[0052] 步驟4,對編碼色散后的光譜視頻信息進(jìn)行列累加。
[0053] 分別對平移后的光譜視頻信息f2(m,n,k,t)各個譜段的光譜視頻信息進(jìn)列累加, 得出光譜視頻的觀測結(jié)果y (m,n,t):
[0054]
[0055] 參照圖3,本發(fā)明的光譜視頻反演包括以下步驟:
[0056] 步驟5,設(shè)置光譜重構(gòu)空間分辨率。
[0057] 針對不同需求設(shè)置300X300,600X600,1200X1200三種不同的光譜視頻重構(gòu)空間 分辨率F。
[0058] 步驟6,申請主機(jī)內(nèi)存空間并讀入數(shù)據(jù)。
[0059] 使用malloc函數(shù)申請主機(jī)中的內(nèi)存空間,將三種不同的光譜視頻重構(gòu)空間分辨 率F及光譜觀測視頻y (m,n,t)、編碼模板函數(shù)矩陣C(m,η)、步長s、最大迭代次數(shù)D讀入內(nèi) 存空間中。
[0060] 步驟7,設(shè)置GPU中每個線程塊中的線程和線程格中線程塊。
[0061] 參照圖4,本發(fā)明的線程塊和線程格設(shè)置包括如下步驟:
[0062] (7a)在GPU的每個線程塊中設(shè)置1024個線程,即在GPU中設(shè)置大小為(32, 32)的 二維線程網(wǎng)格矩陣;
[0063] (7b)依據(jù)光譜視頻空間分辨率和線程,在線程格中設(shè)置B個線程塊,B = (MXN+1024-1)/1024,即在 GPU 中設(shè)置大小為((M+32-l)/32,(N+32-l)/32)的二維線程塊 網(wǎng)格矩陣,其中B為整數(shù)。
[0064] 步驟8,申請顯存空間并拷貝數(shù)據(jù)。
[0065] 使用cudaMalloc函數(shù)申請GPU顯存空間,并使用cudaMemcpy函數(shù)把主機(jī)內(nèi)存 中三種不同的光譜視頻重構(gòu)空間分辨率F及光譜觀測視頻y(m,n,t)、編碼模板函數(shù)矩陣 C (m,η)、步長s、最大迭代次數(shù)D拷貝到GPU顯存中。
[0066] 步驟9,利用兩步收縮迭代并行算法TwIST反演光譜視頻。
[0067] 兩步收縮迭代算法TwIST是2007由J. Bioucas-Dias和Μ. Figueiredo在文章 《Two-Step Iterative Shrinkage/Thresholding Algorithms for Image Restoration》中 提出的,其實(shí)現(xiàn)過程包括三部分,迭代收縮閾值算法1ST,迭代加權(quán)收縮算法IRS和目標(biāo)函 數(shù)計算,其具體步驟如下:
[0068] (9a)輸入光譜觀測視頻y,編碼模板函數(shù)矩陣C ;
[0069] (9b)初始化光譜觀測視頻目標(biāo)函數(shù)r = 0,循環(huán)迭代次數(shù)t = 1,步長s,最大迭代 次數(shù)D,光譜觀測視頻y,光譜重構(gòu)視頻f,光譜視頻重構(gòu)空間分辨率F ;
[0070] (9c)循環(huán)執(zhí)行以下步驟:
[0071] (9cl)使用迭代收縮閾值并行算法1ST更新光譜重構(gòu)視頻f,并更新當(dāng)前目標(biāo)函數(shù) 值;
[0072] (9c2)對比當(dāng)前目標(biāo)函數(shù)值和前