亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2015-07-02 00:19:19
        關(guān)鍵詞:功能

        王 楠

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

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

        王 楠

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

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

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

        摳像[1]是影視后期制作中的一種常用技術(shù),簡言之就是將畫面中一種或多種顏色變成透明,從而去除畫面中不需要的部分,保留用戶需要的部分。在影視后期制作中,摳像技術(shù)是重點之一,這里所討論的軟件是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ā)處于起步階段。因此,對軟件功能進行優(yōu)化、開發(fā)適合國內(nèi)影視后期教學(xué)及應(yīng)用的插件很有必要。故本文以擴展After Effects摳像特效、方便使用為出發(fā)點,定制了一款個性化摳像插件,以改善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),實現(xiàn)摳像插件和用戶之間的交互。摳像插件與After Effects內(nèi)部的通信通過After Effects SDK實現(xiàn),SDK將系統(tǒng)控制模塊的信息與命令傳遞給After Effects內(nèi)對應(yīng)的模塊,以便模塊的控制與調(diào)用[3],摳像系統(tǒng)工作原理如圖1所示[4]。

        1.2 插件選項設(shè)計

        將After Effects摳像特效的特點進行分析、比較,結(jié)合豐富的摳像教學(xué)與實踐經(jīng)驗,設(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軟件。此摳像插件以工作站或配置比較高的個人計算機為硬件開發(fā)平臺,操作系統(tǒng)采用Windows XP / Windows 7系列,開發(fā)工具采用面向?qū)ο蟮目梢暬幊誊浖﨧icrosoft Visual C++6.0及Adobe After Effects CS4 SDK。

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

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

        3.1 提取顏色

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

        //讀取(x,y)點的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)點的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)點的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)點的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 藍屏摳像過程

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

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

        藍屏摳像過程,即選擇吸管工具在畫面中某一點像素拾取顏色后,將該像素的A值設(shè)置為0;計算畫面中其他像素與該點的顏色距離,若|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)鍵,因為對于用戶而言,要通過摳像插件得到一個比較完美的Alpha通道,進而獲得干凈、準確的摳像效果,這3個參數(shù)通常都要涉及[6]。下面就對其算法設(shè)計和編程代碼進行詳細描述。

        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)致部分背景無法去除。

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

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

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

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

        //這里以歐式距離計算方法為例,因為R,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計算各個像素點的不透明度值opacity,代碼如下:

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

        {

        float color_distance[sum];

        //sum指總像素點,像素按先行后列

        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)化為顏色的距離判定點

        float frontClipValue=clip_to_distance

        (clip_whilte, max_color_distance,1);

        //將clip white 轉(zhuǎ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ù)各像素點的不透明度生成摳像結(jié)果。

        3.3.2 屏幕柔化

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

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

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

        //計算高斯模糊矩陣,n表示n×n矩陣,rho表示標準方差

        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通道,計算該像素點經(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)進行高斯模糊處理:

        //對Alpha通道進行高斯模糊處理

        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 邊緣收縮/擴展

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

        圖6 邊緣收縮/擴展算法

        4 結(jié)束語

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

        [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插件原理及其實現(xiàn)[J]. 計算機應(yīng)用研究,2000,17(11): 99-100,103.

        [5] 求是科技. Visual C++數(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é)院講師,研究方向為影視后期制作、平面設(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

        猜你喜歡
        功能
        拆解復(fù)雜功能
        鐘表(2023年5期)2023-10-27 04:20:44
        也談詩的“功能”
        中華詩詞(2022年6期)2022-12-31 06:41:24
        基層弄虛作假的“新功能取向”
        當代陜西(2021年21期)2022-01-19 02:00:26
        深刻理解功能關(guān)系
        鉗把功能創(chuàng)新實踐應(yīng)用
        關(guān)于非首都功能疏解的幾點思考
        基于PMC窗口功能實現(xiàn)設(shè)備同步刷刀功能
        懷孕了,凝血功能怎么變?
        媽媽寶寶(2017年2期)2017-02-21 01:21:24
        “簡直”和“幾乎”的表達功能
        中西醫(yī)結(jié)合治療甲狀腺功能亢進癥31例
        日本一区二区三区光视频| 亚洲精品国产国语| 中文字幕乱码亚洲无线| 国产黄色一区二区在线看| 97人人模人人爽人人喊网| 国产在线精品一区二区| 999精品免费视频观看| 国产精品女同二区五区九区| 欧美a级毛欧美1级a大片| 777午夜精品免费观看| 精品国产91天堂嫩模在线观看| 蜜桃臀无码内射一区二区三区| 亚洲一区二区高清精品| 亚洲一区免费视频看看| 亚洲一区二区三区偷拍厕所| 米奇欧美777四色影视在线| 人妻少妇精品无码专区二区| 图图国产亚洲综合网站| 国产少妇一区二区三区| 一区二区三区四区国产99| 国产精品无码久久久久久久久久| 亚洲AV秘 无码一区二区三区1| 久久天堂精品一区专区av| 亚洲中文字幕高清av| 无码人妻精品一区二区三区9厂| 人妻熟妇乱又伦精品视频app | 少妇被粗大猛进进出出| 男女调情视频在线观看| 久久精品中文字幕大胸 | 偷拍区亚洲区一区二区| 91精品国产九色综合久久香蕉| 欧美xxxxx高潮喷水| 亚洲欧美在线观看| 国产特级全黄一级毛片不卡| 国产日产免费在线视频| 国产精品一区二区久久国产| 国产真实伦在线观看| 久久精品中文字幕久久| 国产交换精品一区二区三区| 久久久久亚洲精品无码网址蜜桃 | 欧美情侣性视频|