国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

影視后期個性化摳像插件的開發(fā)

2015-07-02 00:19
關(guān)鍵詞:像素點(diǎn)插件高斯

王 楠

(安徽電子信息職業(yè)技術(shù)學(xué)院 軟件學(xué)院,安徽 蚌埠 233030)

影視后期個性化摳像插件的開發(fā)

王 楠

(安徽電子信息職業(yè)技術(shù)學(xué)院 軟件學(xué)院,安徽 蚌埠 233030)

在分析影視后期摳像插件系統(tǒng)設(shè)計及工作原理的基礎(chǔ)上,設(shè)計了影視后期的個性化摳像定制插件“Basic Key”,給出了此摳像插件的實(shí)現(xiàn)方法及此插件的藍(lán)屏摳像方法、插件各選項的實(shí)現(xiàn)算法,并介紹了此摳像插件的應(yīng)用平臺及使用方法。

影視制作;摳像插件;色度鍵;個性化

摳像[1]是影視后期制作中的一種常用技術(shù),簡言之就是將畫面中一種或多種顏色變成透明,從而去除畫面中不需要的部分,保留用戶需要的部分。在影視后期制作中,摳像技術(shù)是重點(diǎn)之一,這里所討論的軟件是Adobe After Effects CS4。After Effects是使用范圍最廣的合成軟件之一,并且深受專業(yè)人士、業(yè)余愛好者、學(xué)生的喜愛[2]。但是,After Effects中的內(nèi)置摳像特效設(shè)置過于專業(yè),不適于初級制作。由于影視后期領(lǐng)域在國內(nèi)起步晚,After Effects目前在國內(nèi)主要處于應(yīng)用階段,其插件的開發(fā)處于起步階段。因此,對軟件功能進(jìn)行優(yōu)化、開發(fā)適合國內(nèi)影視后期教學(xué)及應(yīng)用的插件很有必要。故本文以擴(kuò)展After Effects摳像特效、方便使用為出發(fā)點(diǎn),定制了一款個性化摳像插件,以改善After Effects摳像特效,使其更利于普及推廣。

1 影視后期摳像插件系統(tǒng)設(shè)計及工作原理

1.1 教學(xué)摳像插件工作原理

在After Effects中,對需要摳像的圖層(Layer)添加了此摳像插件后,就同時啟動了插件,通過After Effects SDK調(diào)用和啟動After Effects的內(nèi)部參數(shù),掌握了系統(tǒng)操作權(quán),同時為用戶和After Effects各個模塊之間提供信息傳遞和響應(yīng),實(shí)現(xiàn)摳像插件和用戶之間的交互。摳像插件與After Effects內(nèi)部的通信通過After Effects SDK實(shí)現(xiàn),SDK將系統(tǒng)控制模塊的信息與命令傳遞給After Effects內(nèi)對應(yīng)的模塊,以便模塊的控制與調(diào)用[3],摳像系統(tǒng)工作原理如圖1所示[4]。

1.2 插件選項設(shè)計

將After Effects摳像特效的特點(diǎn)進(jìn)行分析、比較,結(jié)合豐富的摳像教學(xué)與實(shí)踐經(jīng)驗(yàn),設(shè)計摳像插件的屬性選項,如圖2所示。

1.3 界面設(shè)計

本課題開發(fā)的插件命名為“基礎(chǔ)摳像”(Basic Key),按照前文對插件原理、插件選項的設(shè)計與描述,插件在After Effects中的參數(shù)控制界面位于特效控制(Effect Controls)面板中。用戶對圖層添加了此插件后,After Effects就會自動啟動此插件,并打開Effect Controls面板,展示其參數(shù)控制界面。此插件的參數(shù)控制界面設(shè)計如圖3所示。

1.4 工作流程

根據(jù)After Effects插件的工作原理,結(jié)合此插件的功能模型,分析得出此摳像插件的工作流程如圖4所示。

2 系統(tǒng)開發(fā)工具

本課題所研究的摳像插件適用于After Effects CS4軟件。此摳像插件以工作站或配置比較高的個人計算機(jī)為硬件開發(fā)平臺,操作系統(tǒng)采用Windows XP / Windows 7系列,開發(fā)工具采用面向?qū)ο蟮目梢暬幊誊浖﨧icrosoft Visual C++6.0及Adobe After Effects CS4 SDK。

3 摳像插件主功能具體實(shí)現(xiàn)

結(jié)合After Effects CS4 SDK工具,在Visual C++6.0中編寫程序,制作“基礎(chǔ)摳像”(Basic Key)插件。摳像插件系統(tǒng)中主要功能的實(shí)現(xiàn)算法和代碼如下所示。

3.1 提取顏色

使用吸管工具在背景提取顏色,是使用“基礎(chǔ)摳像”(Basic Key)插件進(jìn)行摳像的第一步,即讀取畫面中某一點(diǎn)(x,y)的像素值,返回BYTE*。對于計算機(jī)圖像而言,顏色表示方法通常有兩種:RGB(R:紅色,G:綠色,B:藍(lán)色,取值范圍均為0~255)和HSB(H:色相,取值范圍是0°~360°;S:飽和度,取值范圍是0~100%;B:亮度,取值范圍是0~100%),所以分別編寫了兩種顏色模型下的取色部分代碼。此功能對應(yīng)的VC++編程代碼:

//讀取(x,y)點(diǎn)的RGB像素值,返回BYTE*,順序是R,G,B

BYTE*BasicKeyDoc::cvGetpixel(IplImage* img, int x, int y)

{BYTE cvpixel[3];

cvpixel[2]=BYTE((img->imageData + img->widthStep*y)[x*3]);

cvpixel[1]=BYTE((img->imageData + img->widthStep*y)[x*3+1]);

cvpixel[0]=BYTE((img->imageData + img->widthStep*y)[x*3+2]);

return cvpixel;

}

//讀取(x,y)點(diǎn)的HSB像素值,返回BYTE* 順序是H,S,B(設(shè)為8 bit位深度時)

uchar* BasicKeyDoc::

cvGetpixelHSV(IplImage* img,int x,int y)

{

return &((uchar*)(img->imageData + img->widthStep*y))[x*3];

BYTE cvpixel[3];

cvpixel[0]=BYTE((img->imageData + img->widthStep*y)[x*3]);

cvpixel[1]=BYTE((img->imageData + img->widthStep*y)[x*3+1]);

cvpixel[2]=BYTE((img->imageData + img->widthStep*y)[x*3+2]);

return cvpixel;

}

//寫入(x,y)點(diǎn)的RGB像素值,返回BOOL,對應(yīng)代碼為

BOOL BasicKeyDoc::cvSetPixel(

IplImage* img, int x, int y, int R, int G, int B)

{

(img->imageData + img->widthStep*y)[x*3]=B;

(img->imageData + img->widthStep*y)[x*3+1]=G;

(img->imageData + img->widthStep*y)[x*3+2]=R;

return true;

}

//寫入(x,y)點(diǎn)的HSB像素值,返回BOOL 順序是H,S,B(設(shè)為8 bit位深度時)

BOOL BasicKeyDoc::

cvSetPixelHSB(IplImage* img, int x, int y, int H, int S, int B)

{

(img->imageData + img->widthStep*y)[x*3]=int(H/2);

(img->imageData + img->widthStep*y)[x*3+1]=S;

(img->imageData + img->widthStep*y)[x*3+2]=B;

return true;

}

3.2 藍(lán)屏摳像過程

本摳像系統(tǒng)采用顏色摳像的方法,利用背景與前景的顏色差別,把單色的背景去除,原理類似于通常所說的色度鍵(Chroma Keying)。由于摳像背景大多數(shù)選擇藍(lán)色,所以色度鍵通常也稱為藍(lán)屏摳像(Blue Screen)?!盎A(chǔ)摳像”(Basic Key)插件主要運(yùn)用的就是藍(lán)屏摳像技術(shù)。

藍(lán)屏摳像編程原理:設(shè)畫面中取色點(diǎn)像素的RGB顏色值用sRGB表示,周圍其他像素的RGB顏色值用bRGB表示;設(shè)不透明度Alpha用A表示,取值范圍為[0,1];設(shè)置一個取色的容差值,以T表示。取色點(diǎn)與其他像素之間的顏色距離用|sRGB-bRGB|表示。

藍(lán)屏摳像過程,即選擇吸管工具在畫面中某一點(diǎn)像素拾取顏色后,將該像素的A值設(shè)置為0;計算畫面中其他像素與該點(diǎn)的顏色距離,若|sRGB-bRGB|∈[0,T],則相應(yīng)像素的A值也設(shè)為0;若顏色距離不屬于此范圍,則將其作為混合像素,區(qū)分其前景顏色和背景顏色(吸取顏色)的混合比例,計算該像素的A值。

3.3 Alpha通道調(diào)整

前文已描述,高級摳像功能是此摳像插件的核心模塊,也是優(yōu)于After Effects內(nèi)置摳像特效的關(guān)鍵部分。在“基礎(chǔ)摳像”(Basic Key)插件中,高級摳像功能對應(yīng)的選項包括:“屏幕蒙版”(Screen Matte)選項組中的“修剪黑場”(Clip Black),“修剪白場”(Clip White),“屏幕柔化”(Screen Softness)及“屏幕增益”(Screen Gain)等,其中又以“修剪黑場”、“修剪白場”、“屏幕柔化”最為關(guān)鍵,因?yàn)閷τ谟脩舳?,要通過摳像插件得到一個比較完美的Alpha通道,進(jìn)而獲得干凈、準(zhǔn)確的摳像效果,這3個參數(shù)通常都要涉及[6]。下面就對其算法設(shè)計和編程代碼進(jìn)行詳細(xì)描述。

3.3.1 “修剪黑場”和“修剪白場”

修剪黑場(Clip Black),調(diào)整Alpha通道中的暗部區(qū)域,其初始值為0,取值范圍在0~100。增大此選項值可以去除更多背景,但參數(shù)過大可能會導(dǎo)致前景也一起消失。

修剪白場(Clip White),調(diào)整Alpha通道中的亮部區(qū)域,其初始值為100,取值范圍在0~100。減小此選項值可以使前景盡量完整,但參數(shù)過小則可能導(dǎo)致部分背景無法去除。

選項功能實(shí)現(xiàn)的算法設(shè)計及代碼編寫如下:

(1)讀取圖像,獲取所有像素點(diǎn)的位置(坐標(biāo))值和顏色(RGB)值。在程序中,將RGB保存在二維數(shù)組pixel_RGB[sum][3]中,sum表示像素的個數(shù),同時像素按照先行后列的順序存儲,通過行數(shù)、列數(shù)可以映射到對應(yīng)的坐標(biāo),顏色的保存順序?yàn)镽,G,B。

(2)用戶通過使用“屏幕顏色”選項的吸管指定一點(diǎn)顏色,獲取該點(diǎn)的RGB值。此步驟的實(shí)現(xiàn)代碼在前文已描述。

(3)遍歷2維數(shù)組,計算各個像素點(diǎn)顏色值與所選點(diǎn)RGB值的差距color_distance。這里采用的是歐氏距離[7]計算方法。

//這里以歐式距離計算方法為例,因?yàn)镽,G,B值的范圍均為[0.0,255.0],則max_color_distance 參數(shù)取計算得到的最大顏色間距值。

//clip black 和clip white取值范圍為[0.0,100.0]

float dist_RGB(float r0, float g0, float b0, float r1, float g1, float b1)

{

float color_distance;

color_distance=sqrt(pow(r1-r0, 2) + pow(g1-g0, 2) + pow(b1-b0, 2));

return color_distance;

}

(4)將用戶輸入的“輸入黑場”(Clip Black)和“輸入白場”(Clip White)數(shù)值轉(zhuǎn)化為對應(yīng)的距離值。

float clip_to_distance(float clip, float max_color_distance, int t)

//將Clip值轉(zhuǎn)化為對應(yīng)的距離值

{ float ClipValue = 0.0;

if (t == 0) //t = 0 時,計算將Clip Black轉(zhuǎn)化為距離值

{ float originClipBlack=

0.2*max_color_distance;

ClipValue = ( (max_color_distance - originClipBlack)*clip )/100.0 +

originClipBlack;

}

else if (t == 1)

//t = 1時, 計算將Clip White轉(zhuǎn)化為距離值

{

float originClipWhite=

0.8*max_color_distance;

ClipValue = ( originClipWhite*clip ) / 100.0;

}

return ClipValue;

}

此為舉例說明,如將clip_black=0.0轉(zhuǎn)化為對應(yīng)的backClipValue=0.2*max_color_distance(表示color_distance的最大顏色差距值);

clip_white=100.0轉(zhuǎn)化為frontClipValue=0.8*max_color_distance。

(5)通過backClipValue和frontClipValue以及color_distance計算各個像素點(diǎn)的不透明度值opacity,代碼如下:

bool pixel_opacity(float r, float g, float b, float *pixelOpacity, float clip_black, float clip_white)

{

float color_distance[sum];

//sum指總像素點(diǎn),像素按先行后列

float max_color_distance = 0.0;

for (int i = 0; i < sum; ++ i)

{

float r1 = pixel_RGB[i][0];

float g1 = pixel_RGB[i][1];

float b1 = pixel_RGB[i][2];

color_distance[i] = dist_RGB(r, g, b, r1, g1, b1);

if (max_color_distance < color_distance)

{ max_color_distance = color_distance; }

}

float backClipValue=clip_to_distance

(clip_black, max_color_distance, 0);

//將clip back 轉(zhuǎn)化為顏色的距離判定點(diǎn)

float frontClipValue=clip_to_distance

(clip_whilte, max_color_distance,1);

//將clip white 轉(zhuǎn)化為顏色的距離判定點(diǎn)

for (int i = 0; i < sum; ++ i)

{ if (color_distance <= backClipValue)

//小于等于backClipValue值,取完全透明

{ pixelOpacity[i] = 0.0; }

else if(color_distance>backClip

Value&&color_distance

//在backClipValue與frontClipValue之間,取半透明

{

pixelOpacity[i]=(color_distance-

backClipValue)/(frontClipValue-

backClipValue);

}

else //大于等于frontClipValue值,取完全不透明

{

pixelOpacity[i] = 1.0;

}

}

return true;

}

通過增加backClipValue與frontClipValue的值,得到Color_distance與Opacity的關(guān)系如圖5所示。

(6)依據(jù)各像素點(diǎn)的不透明度生成摳像結(jié)果。

3.3.2 屏幕柔化

屏幕柔化(Screen Softness),用于對初步摳像得到的Alpha通道進(jìn)行柔化處理[8]。該選項默認(rèn)值為0,最大值由摳像的具體畫面大小決定?!捌聊蝗峄边x項的原理是通過調(diào)整Alpha通道的模糊度,進(jìn)而調(diào)整整個畫面,可以去除摳像可能產(chǎn)生的雜點(diǎn)、生成邊緣羽化等效果。本文中,對此功能的實(shí)現(xiàn)采用高斯模糊算法。

從數(shù)學(xué)的角度來看,圖像的高斯模糊過程就是圖像與正態(tài)分布做卷積。由于正態(tài)分布又叫作高斯分布,所以這項技術(shù)就叫作高斯模糊。高斯模糊是一種圖像模糊濾波器,它用正態(tài)分布計算圖像中每個像素的變換。在2維空間定義為

(1)高斯模糊矩陣計算:

//計算高斯模糊矩陣,n表示n×n矩陣,rho表示標(biāo)準(zhǔn)方差

bool Gaussian_matrix(float *matrix_n, int n, float rho)

{ for (int i = 0; i < n; ++ i)

{

for (int j = 0; j < n; ++ j)

{

matrix_n[i*n+j] = 1 / (2 * pi * rho * rho);

matrix_n[i*n+j] *= exp((- (pow(i - 2, 2) + pow(j - 2, 2))) / (2 * rho * rho));

}

}

return true;

}

(2)模糊處理后的顏色計算:

//對于Alpha通道,計算該像素點(diǎn)經(jīng)過高斯模糊后的顏色值

float Gausssian_compute(float *pixel_Alpha, float *matrix_n, int n, int m);

{

float changeAlpha = 0.0;

int t = floor(n/2);

m = m - width - t;

for (int i = 0; i < n; ++ i)

{

for (int j = 0; j < n; ++ j)

{

changeAlpha += pixel_Alpha[m] * matrix_n[i*n+j];

m ++;

}

m = m + width - n + 1;

}

return changeAlpha;

}

(3)進(jìn)行高斯模糊處理:

//對Alpha通道進(jìn)行高斯模糊處理

bool Gaussian_Blur(float *pixel_Alpha, float softness, int n)

{ if (0 == softness)

{ return false; }

float rho = softness/100.0 + 0.5;

if (rho > 10.0)

{ rho = 10.0; }

float *matrix_n = (float*)malloc(n*n*sizeof(float));

bool find = Gaussian_matrix(matrix_n, n, rho);

for (int i = 0; i < width; ++ i)

{

for (int j = 0; j < height; ++ j)

{

if (2*(i +1) < n || 2*i + n > 2 * width || 2*(j +1) < n || 2*j + n > 2 * width)

{

continue;

}

int m = i * width + j;

pixel_Alpha[m] = Gausssian_compute(pixel_Alpha, matrix_n, n, m);

}

}

return true;

}

3.3.3 邊緣收縮/擴(kuò)展

此選項功能的實(shí)現(xiàn)算法:以邊緣擴(kuò)展為例,在摳像前景的邊緣上取一點(diǎn),作為圓心,以邊緣擴(kuò)展值為半徑(單位為像素),以邊緣上某一點(diǎn)為起點(diǎn),圓心沿著邊緣移動,當(dāng)用戶輸入值為正值時,將圓移動經(jīng)過的背景像素區(qū)域重新賦予原背景顏色值;當(dāng)用戶輸入值為負(fù)值時,將圓移動覆蓋的前景像素區(qū)域的不透明度設(shè)置為0,在視覺效果上體現(xiàn)為像素不可見,即邊緣向內(nèi)收縮。

圖6 邊緣收縮/擴(kuò)展算法

4 結(jié)束語

研究開發(fā)的個性化摳像插件雖然取得了良好的應(yīng)用成效,但對于After Effects功能的研究和插件的開發(fā)還需要更進(jìn)一步深入系統(tǒng)研究,逐步完善。本文為影視后期制作中的摳像應(yīng)用提出了一種新的思路并實(shí)現(xiàn)了其解決的方法。在后續(xù)研究中,可以將此Basic Key插件進(jìn)行升級,使其能適用于After Effects CS5、CS6……;還可以將Basic Key插件的功能進(jìn)行進(jìn)一步的擴(kuò)展,使其功能更加強(qiáng)大,如增加一些專業(yè)摳像插件中特有的屬性選項,讓使用者能了解到專業(yè)摳像插件的功能;還可以優(yōu)化算法,編寫效率更高的代碼,使摳像系統(tǒng)在容量上更精簡、盡量少占用計算機(jī)資源,以提高運(yùn)行速率。

[1]Adobe公司. Adobe After Effects CS4經(jīng)典教程[M]. 北京: 人民郵電出版社,2009: 202.

[2] Lee Lanier. 專業(yè)數(shù)字合成:必備的工具和技術(shù)[M]. 北京: 人民郵電出版社,2012: 1.

[3] 胡垂立. 基于After Effects SDK的粒子系統(tǒng)在高職教學(xué)中的應(yīng)用[D]. 上海: 華東師范大學(xué),2011.

[4] 趙剛,唐慧佳. Adobe After Effects插件原理及其實(shí)現(xiàn)[J]. 計算機(jī)應(yīng)用研究,2000,17(11): 99-100,103.

[5] 求是科技. Visual C++數(shù)字圖像處理典型算法及實(shí)現(xiàn)[M]. 北京: 人民郵電出版社,2006: 6.

[6] L.Lanier. 專業(yè)數(shù)字合成:必備的工具和技術(shù)[M]. 北京: 人民郵電出版社,2012: 86.

[7] 約翰遜. 近代歐式幾何學(xué)[M]. 哈爾濱: 哈爾濱工業(yè)大學(xué)出版社,2012: 56

[8] M.Christiansen. After Effects CS4完全剖析[M]. 北京: 人民郵電出版社,2009: 72

Development of Movie Keying Individuational Plug-in

WANG Nan

( School of Software, Anhui Vocational College of Electronics and Information Technology, Bengbu 233030, China)

We analyze the system design, working principle of movie keying plug-in and customizes, and developes a individuational keying plug-in, “Basic Key”. We discuss the realization method of this keying plug-in, and introduce the algorithm of blue-key method of it, the algorithm of all options. It introduces the application platform and usage method of this keying plug-in.

film and television production, keying plug-in, chroma keying, individuation

2015-05-14

王楠,女,安徽蚌埠人,碩士,安徽電子信息職業(yè)技術(shù)學(xué)院講師,研究方向?yàn)橛耙暫笃谥谱?、平面設(shè)計、三維設(shè)計等。

時間:2016-1-5 13:01 網(wǎng)絡(luò)出版地址:http://www.cnki.net/kcms/detail/34.1150.N.20160105.1301.013.html

TP311

A

1007-4260(2015)04-0052-06

10.13757/j.cnki.cn34-1150/n.2015.04.013

猜你喜歡
像素點(diǎn)插件高斯
圖像二值化處理硬件加速引擎的設(shè)計
基于CTK插件框架的太赫茲人體安檢系統(tǒng)軟件設(shè)計
基于局部相似性的特征匹配篩選算法
自編插件完善App Inventor與樂高機(jī)器人通信
數(shù)學(xué)王子高斯
天才數(shù)學(xué)家——高斯
基于OSGi的軍用指揮軟件插件機(jī)制研究
一種X射線圖像白點(diǎn)噪聲去除算法
基于canvas的前端數(shù)據(jù)加密
基于jQUerY的自定義插件開發(fā)
宕昌县| 长春市| 滁州市| 滕州市| 长岭县| 武定县| 洛阳市| 肇州县| 独山县| 桦甸市| 柳江县| 霸州市| 嘉兴市| 津市市| 太白县| 同心县| 建水县| 中宁县| 黄陵县| 阳原县| 光山县| 芜湖县| 珲春市| 武川县| 馆陶县| 镇康县| 汝州市| 洞头县| 无极县| 大方县| 宣汉县| 周宁县| 静乐县| 乐至县| 读书| 广东省| 灵寿县| 漳州市| 河南省| 宁阳县| 武邑县|