一種基于gpu的模塊化實(shí)時(shí)視頻與圖像處理方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及圖像處理,尤其涉及一種基于GPU的模塊化實(shí)時(shí)視頻與圖像處理方法。
【背景技術(shù)】
[0002]目前的手機(jī)、平板電腦等移動(dòng)設(shè)備已經(jīng)可以支持1SOp甚至4k視頻的錄制。移動(dòng)設(shè)備通常使用ISP,CPU或GPU對(duì)視頻進(jìn)行處理。由于GPU擁有較強(qiáng)的計(jì)算吞吐量和可編程性,很多主流圖像處理庫如GPHmage,CoreImage等都使用GPU進(jìn)行圖像處理。這些圖像處理庫的處理以濾鏡為主,缺少視頻HDR,防抖,實(shí)時(shí)美容等高級(jí)功能,不能滿足移動(dòng)設(shè)備上視頻錄制的功能需求。如果要調(diào)用多個(gè)濾鏡,需要順序地調(diào)用多個(gè)shader渲染程序。一方面,濾鏡之間不能共享一些公共的計(jì)算,增加了計(jì)算量;另一方面,GPU在每次調(diào)用shader時(shí)都至少需要分別讀和寫一次紋理,這顯著增加了對(duì)顯存的訪問。移動(dòng)設(shè)備受體積,功耗和成本限制,GPU性能和存儲(chǔ)器帶寬都較弱。采用現(xiàn)有圖像處理不能滿足對(duì)視頻同時(shí)開啟多個(gè)實(shí)時(shí)濾鏡,或者開啟計(jì)算量較大濾鏡的需求。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的就在于提供一種基于GPU的模塊化實(shí)時(shí)視頻與圖像處理方法,將基于GPU的圖像處理分為前處理和主要處理,采用了模塊化架構(gòu)組裝主要處理shader實(shí)現(xiàn)多種濾鏡和功能組合,能有效解決上述現(xiàn)有技術(shù)中的不足。
[0004]本發(fā)明針對(duì)現(xiàn)有技術(shù)的不足,提供了以下技術(shù)方案:
本發(fā)明所述一種基于GPU的模塊化實(shí)時(shí)視頻與圖像處理方法,其特征在于,具體步驟如下:
101、獲取待處理視頻幀、圖像幀;
102、輸入濾鏡和功能變量,選定要處理的參數(shù);
103、根據(jù)參數(shù)對(duì)待處理視頻幀、圖像幀進(jìn)行圖像渲染前處理,輸出中間結(jié)果;根據(jù)參數(shù)與濾鏡和功能對(duì)前處理的依賴動(dòng)態(tài)選擇高斯模糊前處理shader、圖像分割前處理shader和視頻穩(wěn)像前處理shader對(duì)視頻幀、圖像幀進(jìn)行前處理,輸出中間結(jié)果;
104、根據(jù)參數(shù)對(duì)中間結(jié)果進(jìn)行圖像渲染主要處理,輸出已處理視頻幀、圖像幀;根據(jù)參數(shù)選擇主要處理shader通用參數(shù)字符串、主要處理shader通用頭部字符串、主要處理shader通用尾部字符串、處理模塊參數(shù)字符串和處理模塊計(jì)算字符串組裝成主要渲染處理shader對(duì)中間結(jié)果進(jìn)行主要處理,輸出已處理視頻幀、圖像幀。
[0005]進(jìn)一步地,所述步驟103根據(jù)參數(shù)和濾鏡對(duì)前處理的依賴動(dòng)態(tài)決定是否需要開啟某個(gè)或某幾個(gè)前處理shader。
[0006]又進(jìn)一步地,所述步驟104處理模塊參數(shù)字符串和處理模塊計(jì)算字符串為某個(gè)或某幾個(gè)濾鏡和功能變量對(duì)應(yīng)的處理模塊參數(shù)字符串和處理模塊計(jì)算字符串。
[0007]再進(jìn)一步地,所述步驟104主要處理shader內(nèi)通過寄存器傳遞參數(shù),只對(duì)每幀內(nèi)容讀寫一次。
[0008]更近一步地,所述處理基于GPU,使用包括但不限于OpenGL,DirectX,DirectCompute, CUDA, Cg, Mantle, metal, renderscript 的圖形學(xué)或 GPU 通用計(jì)算 API。
[0009]與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于:
本發(fā)明將基于GPU的圖像處理分為前處理和主要處理,采用了模塊化架構(gòu)組裝主要處理shader,實(shí)現(xiàn)視頻實(shí)時(shí)美容,HDR,防抖,顏色濾鏡,鏡頭濾鏡,藝術(shù)濾鏡,藍(lán)幕,顏色替換,保留單色等功能,及多種不同的濾鏡和功能組合;同時(shí)開啟多個(gè)功能時(shí)盡可能共用中間處理結(jié)果,不增加額外計(jì)算開銷;通過寄存器傳遞參數(shù),只需對(duì)每幀內(nèi)容讀寫一次,不增加額外存儲(chǔ)器訪問,提高處理速度。
[0010]本發(fā)明的其它特征和優(yōu)點(diǎn)將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實(shí)施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點(diǎn)可通過在所寫的說明書、權(quán)利要求書、以及附圖中所特別指出的結(jié)構(gòu)來實(shí)現(xiàn)和獲得。
[0011]下面通過附圖和實(shí)施例,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。
【附圖說明】
[0012]附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,并且構(gòu)成說明書的一部分,與本發(fā)明的實(shí)施例一起用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的限制。在附圖中:
圖1是本發(fā)明所述一種基于GPU的模塊化實(shí)時(shí)視頻與圖像處理方法的流程圖;
圖2是本發(fā)明所述一種基于GPU的模塊化實(shí)時(shí)視頻與圖像處理方法的步驟103的流程圖;
圖3是本發(fā)明所述一種基于GPU的模塊化實(shí)時(shí)視頻與圖像處理方法的步驟104的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0013]下面將結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步說明。
[0014]實(shí)施例:
以下結(jié)合附圖對(duì)本發(fā)明的優(yōu)選實(shí)施例進(jìn)行說明,應(yīng)當(dāng)理解,此處所描述的優(yōu)選實(shí)施例僅用于說明和解釋本發(fā)明,并不用于限定本發(fā)明。
[0015]參見圖1、圖2、圖3所示。
[0016]本發(fā)明所述一種基于GPU的模塊化實(shí)時(shí)視頻與圖像處理方法的系統(tǒng),包括處理管理器和主要處理shader組裝器,處理管理器用于高斯模糊前處理shader、圖像分割前處理shader和視頻穩(wěn)像前處理shader,主要處理shader組裝器用于進(jìn)行主要處理,主要處理shader組裝器包括主要處理shader通用參數(shù)字符串、主要處理shader通用頭部字符串、主要處理shader通用尾部字符串、多個(gè)處理模塊參數(shù)字符串和多個(gè)處理模塊計(jì)算字符串。
[0017]本發(fā)明所述一種基于GPU的模塊化實(shí)時(shí)視頻與圖像處理方法,具體步驟如下: 步驟101、獲取待處理視頻幀、圖像幀;
步驟102、輸入濾鏡和功能變量,選定要處理的參數(shù);
輸入包括顏色濾鏡ID,特效濾鏡ID,穩(wěn)像功能開關(guān),HDR功能開關(guān),美顏功能開關(guān)等濾鏡和功能變量,在架構(gòu)初始化或輸入變量發(fā)生變化時(shí),處理管理器判斷需要進(jìn)行處理并將參數(shù)傳遞給主要處理shader組裝器,否則直接輸出。
[0018]步驟103、根據(jù)參數(shù)對(duì)待處理視頻幀、圖像幀進(jìn)行圖像渲染前處理,輸出中間結(jié)果;根據(jù)參數(shù)與濾鏡和功能對(duì)前處理的依賴動(dòng)態(tài)選擇高斯模糊前處理shader、圖像分割前處理shader和視頻穩(wěn)像前處理shader對(duì)視頻幀、圖像幀進(jìn)行前處理,輸出中間結(jié)果;
處理管理器進(jìn)行的前處理包括高斯模糊前處理shader、圖像分割前處理shader和視頻穩(wěn)像前處理shader,處理管理器根據(jù)參數(shù)與濾鏡和功能對(duì)前處理依賴表決定是否要使用某個(gè)或者某幾個(gè)前處理shader程序?qū)Ξ?dāng)前幀內(nèi)容進(jìn)行處理,并輸出中間結(jié)果。
[0019]步驟104、根據(jù)參數(shù)對(duì)中間結(jié)果進(jìn)行圖像渲染主要處理,輸出已處理視頻幀、圖