[0044] 圖2是JPEG2000實時解碼技術(shù)典型應(yīng)用場景的示意圖。
[0045] 圖3是本發(fā)明提供的JPEG2000的的解碼流程示意圖。
[0046] 圖4是本發(fā)明提供的CPU與GPU協(xié)同解碼的流程示意圖。
[0047] 圖5是本發(fā)明提供的CPU與GPU解碼并行運行時通信機制示意圖。
[0048] 圖6是本發(fā)明提供的多載荷數(shù)據(jù)的多通道解碼方案示意圖。
[0049] 圖7是本發(fā)明提供的使用GPU優(yōu)化tier-Ι解碼的線程映射關(guān)系示意圖。
[0050] 圖8是本發(fā)明提供在執(zhí)行小波逆變換之前需要對小波變換的四個成分LL、HL、LH、 HH進行交織處理的示意圖。
[0051] 圖9是本發(fā)明提供的使用GPU優(yōu)化小波逆變換解碼的線程映射關(guān)系示意圖。
[0052] 圖10是本發(fā)明提供的GPU上傳、下載、執(zhí)行時間的重疊方式示意圖。
[0053] 圖11是本發(fā)明提供的一種基于CPU和GPU的圖像協(xié)同解碼裝置的結(jié)構(gòu)示意圖。
【具體實施方式】
[0054] 為更進一步闡述本發(fā)明為達成預(yù)定發(fā)明目的所采取的技術(shù)手段及功效,以下結(jié) 合附圖及較佳實施例,對依據(jù)本發(fā)明提出的(名稱)其【具體實施方式】、步驟、結(jié)構(gòu)、特征及其 功效詳細(xì)說明。
[0055] 目前,針對遠(yuǎn)程圖像采集設(shè)備采集到的圖像,該圖像從被采集到在遠(yuǎn)端設(shè)備上輸 出展示通常經(jīng)歷以下過程:圖像的采集、圖像的壓縮、圖像壓縮碼流的傳輸、圖像壓縮碼流 的解碼(解壓縮)、解碼結(jié)果的輸出顯示,其中,圖像的壓縮過程中采用何種壓縮算法直接 影響著最終的圖像畫面的輸出顯示質(zhì)量,圖像壓縮碼流的解碼過程是圖像的壓縮過程的逆 過程。
[0056] 隨著圖像采集技術(shù)的迅速發(fā)展,人們對采集到的圖像的質(zhì)量要求也越來越高,傳 統(tǒng)的JPEG壓縮標(biāo)準(zhǔn)已經(jīng)逐漸無法滿足上述需求,主要表現(xiàn)在:傳統(tǒng)的JPEG壓縮標(biāo)準(zhǔn)中的壓 縮算法采用了有損壓縮,當(dāng)圖像中存在大面積的近似顏色區(qū)域時,采用上述壓縮算法就會 出現(xiàn)"馬賽克"現(xiàn)象,影響圖片觀感。為了解決上述問題,圖像畫面質(zhì)量較高、壓縮比較高的 靜態(tài)圖像壓縮標(biāo)準(zhǔn)JPEG2000應(yīng)運而生。
[0057] 相比于傳統(tǒng)的JPEG壓縮標(biāo)準(zhǔn),JPEG2000可以支持有損壓縮和無損壓縮,在無損壓 縮的情況下,JPEG2000的壓縮比高于傳統(tǒng)的JPEG ;在有損壓縮,特別是壓縮比較高的情況 下,使用JPEG2000壓縮算法不會出現(xiàn)傳統(tǒng)JPEG中的"馬賽克"現(xiàn)象,此外,對圖像壓縮碼流 進行解碼后得到的圖像的畫面質(zhì)量相對清晰?;谏鲜鲂阅芴匦?,JPEG2000在圖像畫面質(zhì) 量、壓縮比要求較高的領(lǐng)域如遙感、醫(yī)學(xué)影像分析等領(lǐng)域,有著廣泛的應(yīng)用。
[0058] 在對經(jīng)過JPEG2000壓縮編碼的圖像編碼碼流進行解碼時,通常碼流需要經(jīng)歷以 下操作處理:JPEG2000標(biāo)準(zhǔn)中定義的頭信息解析、tier-2算法處理、tier-Ι算法處理、反量 化、小波逆變化及DC電平變換?,F(xiàn)有技術(shù)中也存在基于CPU和GPU的圖像解碼方法,在該 方法中CPU負(fù)責(zé)對碼流進行頭信息解析、tier-2算法及tier-Ι算法處理,GPU負(fù)責(zé)對CPU 的處理結(jié)果進行反量化、小波逆變化及DC電平變換處理。
[0059] 然而,由于一方面tier-Ι算法的計算量較大,會占用較多的CPU資源,影響其他類 型操作的執(zhí)行速度;另一方面反量化、小波逆變化及DC電平變換占用的GPU資源較少,造成 了 GPU空閑的狀況,因此,導(dǎo)致CPU和GPU的資源利用不合理。
[0060] 為了解決上述問題,本發(fā)明提供了一種基于CPU和GPU的圖像協(xié)同解碼方法及裝 置。
[0061] 下面首先對本發(fā)明提供的一種基于CPU和GPU的圖像協(xié)同解碼方法進行介紹。
[0062] 需要說明的是,本發(fā)明提供的方法適用于配置有CPU和GPU的電子設(shè)備,在實際 應(yīng)用中,本發(fā)明提供的方法可用于圖像實時傳輸顯示領(lǐng)域,例如無人機操控、遙感、掃描、傳 真、測繪、醫(yī)學(xué)圖像、軍事偵察等;也可用于圖像存儲領(lǐng)域的快速回放、內(nèi)容檢索、增強處理 等領(lǐng)域。
[0063] 如圖1所示,本發(fā)明提供的一種基于CPU和GPU的圖像協(xié)同解碼方法,應(yīng)用于配置 有中央處理器CPU和圖形處理器GPU的電子設(shè)備,所述方法可以包括:
[0064] S101,接收圖像編碼碼流,其中所述圖像編碼碼流為經(jīng)過JPEG2000編碼后的圖像 碼流。
[0065] 為了便于理解,結(jié)合圖2對本發(fā)明方法在圖像處理過程中的的具體應(yīng)用環(huán)節(jié)進行 說明。如圖2所示的"實時解碼"步驟,即為本發(fā)明方法的應(yīng)用環(huán)節(jié)。
[0066] S102,調(diào)用電子設(shè)備的CPU對所述圖像編碼碼流順序進行頭信息解析及JPEG2000 標(biāo)準(zhǔn)中定義的tier-2算法處理,得到第一處理結(jié)果。
[0067] 為了便于直觀理解,結(jié)合圖3對本發(fā)明方法的執(zhí)行流程進行說明,如圖3所示,CPU 對JPEG2000壓縮碼流先進行頭信息解析,得到解析結(jié)果;再對解析結(jié)果進行tier-2算法解 碼處理。需要說明的說,本發(fā)明前述的頭信息解析與tier-2算法解碼可以使用現(xiàn)有技術(shù)中 的任意一種頭信息解析與tier-2算法解碼方法,本發(fā)明實施例對此不作限定。
[0068] 較佳的,在由GPU負(fù)責(zé)執(zhí)行對第一處理結(jié)果的后續(xù)處理的情況下,CPU可以將第一 處理結(jié)果發(fā)送至顯存,以便GPU快速獲取數(shù)據(jù)進行處理。
[0069] 需要說明的是,針對于配置有多核CPU的電子設(shè)備,本發(fā)明可以同時接收多路圖 像編碼碼流,并根據(jù)解碼并行度和系統(tǒng)硬件性能為接收到的各路圖像編碼碼流分配CPU內(nèi) 核,以使得CPU等硬件資源得到充分利用,避免出現(xiàn)過分空閑的情況,提高整體數(shù)據(jù)吞吐 率;此外,本發(fā)明可以構(gòu)建多通道圖像并行解碼框架,同時處理多路壓縮圖像,更符合實際 應(yīng)用的場景。
[0070] S103,提取所述圖像編碼碼流的圖像分辨率值,判斷所述分辨率值是否高于預(yù)設(shè) 的分辨率閾值。
[0071] 需要說明的是,由于在并行規(guī)模小的低分辨率圖像解碼中,tier-ι環(huán)節(jié)的GPU解 碼并不快于串行的CPU算法,但是在高分辨率圖像的解碼中將tier-Ι環(huán)節(jié)的GPU解碼速度 與CPU接近,將解碼任務(wù)分配到GPU,因此,可以根據(jù)圖像的分辨率值,在不影響解碼速度的 前提下,決定將tier-1環(huán)節(jié)調(diào)度到CPU或者GPU上。
[0072] S104,調(diào)用所述電子設(shè)備的GPU對所述第一處理結(jié)果進行JPEG2000標(biāo)準(zhǔn)中定義的 tier-Ι算法處理,得到第二處理結(jié)果。
[0073] 在所述分辨率值高于預(yù)設(shè)的分辨率閾值的情況下,調(diào)用所述電子設(shè)備的GPU對所 述第一處理結(jié)果進行JPEG2000標(biāo)準(zhǔn)中定義的tier-Ι算法處理,得到第二處理結(jié)果。
[0074] 較佳的,在本發(fā)明的一個實施例中,GPU可以使用一個專門的守護線程,負(fù)責(zé)顯 存-內(nèi)存數(shù)據(jù)的傳輸以及與其他線程的通信,以便獲知讀取和寫入目的緩沖的是否可用。 具體情況參見圖4,其中展示了壓縮數(shù)據(jù)從輸入到輸出經(jīng)過的步驟和中間結(jié)果,也展示了 GHJ作為從計算設(shè)備在解碼系統(tǒng)中的位置。前述專門的守護線程負(fù)責(zé)從CPU-GPU中間數(shù)據(jù) 隊列取數(shù)據(jù),上傳到顯存,執(zhí)行GPU解碼階段,將解碼結(jié)果下傳到輸出緩沖數(shù)組的對應(yīng)位置 中,同時負(fù)責(zé)與其他環(huán)節(jié)的CPU線程通信。CPU掃描線程得到GPU守護線程的隊列非空信號 后,掃描一次輸出緩沖隊列,將索引最小的數(shù)據(jù)輸出。
[0075] 本發(fā)明實施例的優(yōu)勢在于,一方面計算使用的計算線程可以根據(jù)需要擴充,使用 的GPU的個數(shù)也可以設(shè)置為兩個以上,緩沖長度也可以根據(jù)內(nèi)存任意調(diào)整,這樣擴充同時 計算能力以增加吞吐率十分簡單,還可以自定義對CPU、GPU、內(nèi)存等硬件的適應(yīng)性的調(diào)優(yōu); 另一方面實現(xiàn)了內(nèi)部高效的亂序并發(fā)解碼,而從程序外部看,輸出的序列順序與輸入序列 相同,輸出保持原有的順序。
[0076] 較佳的,在本發(fā)明的一個實施例中,所述電子設(shè)備的CPU與GPU之間的數(shù)據(jù)傳遞方 式可以為:CPU將數(shù)據(jù)發(fā)送至預(yù)先建立的緩沖隊列,GPU從所述預(yù)先建立的緩沖隊列異步獲 取數(shù)據(jù)?;谇笆鰯?shù)據(jù)傳遞方式,CPU、GPU各個步驟可以完全異步執(zhí)行,而且耦合很低,使 得擴展通過GPU個數(shù)、CPU核心數(shù)、緩沖隊列長度來提高計算能力簡單易行,具體情況參見 圖5。
[0077] 較佳的,在本發(fā)明的一個實施例中,可以根據(jù)tire-Ι解碼在粗粒度上并行度高 (codeblock之間),在細(xì)粒度上完全串行(codeblock自身)的特征,以及GPU -個Warp線 程組內(nèi)部一次只能執(zhí)行一種指令的特點,制訂GPU線程和計算數(shù)據(jù)之間的映射關(guān)系,如圖 6所示;相應(yīng)的,上述S104,可以包括:
[0078] 調(diào)用所述電子設(shè)備的GPU為所述第一處理結(jié)果中的每個圖像編碼碼塊分配一個 線程束Warp,其中不同圖像編碼碼塊對應(yīng)不同的線程束Warp ;
[0079] 以Warp為處理單位對所述第一處理結(jié)果中的每個圖像編碼碼塊進行JPEG2000標(biāo) 準(zhǔn)中定義的tier-Ι算法處理,得到第二處理結(jié)果。
[0080] 具體的,以碼塊為單位進行,碼塊之間獨立解碼。碼塊內(nèi)部,位平面和算數(shù)解碼具 有強迭代性和相關(guān)性,難于并行。圖像越大碼塊總量越多。存在大量無需解碼的空碼塊,壓 縮倍率越高,圖像越簡單,空碼塊越多。因此并行方式為:1、碼塊間并發(fā),每個碼塊對應(yīng)一個 線程;2、Cuda