PixelBender開發(fā)人員指南_第1頁
PixelBender開發(fā)人員指南_第2頁
PixelBender開發(fā)人員指南_第3頁
PixelBender開發(fā)人員指南_第4頁
PixelBender開發(fā)人員指南_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Pixel Bender工具包概述開始編寫Pixxel Bennderr濾鏡本章討論PPixeel BBendder語語言編寫寫的特殊殊功能。一個內(nèi)核部部分在Pixeel BBendder圖圖像處理理的基本本單位是是內(nèi)核。每個像素機核心語言程序定義了一個內(nèi)核,由一個單一的字符串,包含語言版本的內(nèi)核語句中指定的元素。所需需要的語語言版本本的元素素kerneel nnameekerneel mmembberss變量和和函數(shù)包包括在這這對花括括號內(nèi)內(nèi)核語句包包含一個個名字,一一組元數(shù)數(shù)據(jù)的方方括號中中,描述述了內(nèi)核核,和一一組成員員的花括括號括起起來的定定義的過過濾操作作內(nèi)核的數(shù)據(jù)據(jù)元素每一個內(nèi)核核

2、定義之之前需要要的語言言版本的的元素。這個聲明和元數(shù)據(jù)部分(可以修改)被提供時自動創(chuàng)建在Pixel Bender工具包IDE的一個新的過濾器。元數(shù)據(jù)部分分提供命命名空間間,內(nèi)核核版本,和和其他的的識別和和描述信信息。這這是特別別重要的的是當(dāng)你你收集的的幾個內(nèi)內(nèi)核的圖圖形來執(zhí)執(zhí)行更復(fù)復(fù)雜的操操作。比比如說呢呢。命名空間,供供應(yīng)商,和和版本值值是必需需的;說說明是可可選的。1.供應(yīng)商商的公司司或個人人誰寫的的篩選器器名稱。2他是一一個版本本的整數(shù)數(shù)版本號號應(yīng)該開開始在11增加了了新的內(nèi)內(nèi)核版本本。這允允許你產(chǎn)產(chǎn)生一個個錯誤修修正或改改進性能能的濾波波器的新新版本,但但仍讓老老版本3.命名空空間是一

3、一個公司司或作者者進一步步分離過過濾器。例例如,AAdobbe可能能對PSS圖象處處理軟件件高斯模模糊濾鏡鏡不同版版本和之之后的效效果,和和使用的的命名空空間中的的領(lǐng)域產(chǎn)產(chǎn)品的名名稱來區(qū)區(qū)分它們們。kerneel GGausssiaanBllur / . 高高斯模糊糊濾鏡所所使用的的PS圖象象處理軟軟件kerneel GGausssiaanBllur / . 高高斯模糊糊濾鏡所所使用的的后效應(yīng)應(yīng)命名空間中中的值與與其他過過濾標(biāo)識識符的組組合來確確定實際際的命名名空間,因因此不需需要全局局唯一的的。在這一章簡簡短,只只有內(nèi)核核名稱和和構(gòu)件截截面顯示示;嘗試試的例子子,你可可以粘貼貼到內(nèi)核核內(nèi)核構(gòu)

4、構(gòu)件截面面定義包包含一個個語言版版本的聲聲明和元元數(shù)據(jù)段段。核心成員一個內(nèi)核定定義像CC+中中的類的的成員變變量和成成員函數(shù)數(shù),與核核心成員員的部分分包含一一系列的的聲明,和和一組函函數(shù)定義義。每一一個內(nèi)核核必須提提供至少少evaaluaateppixeel()功能和和類型的的像素的的至少一一個輸出出參數(shù)。最簡單的PPixeel BBendder程序由由一個內(nèi)內(nèi)核,返返回一個個堅實的的色彩無無處不在在:kerneel FFilllWitthBllackkoutpuut ppixeel4 dstt;regioon ggeneeratted()returrn eeverrywhheree();vo

5、id evaaluaatePPixeel()dst = piixell4(00,0,1,00);這個內(nèi)核產(chǎn)產(chǎn)生一個個輸出圖圖像的四四通道(紅紅,綠,藍藍,),如如通過申申報輸出出pixxel44 dsst的定定義。因因為一個個內(nèi)核的的所有像像素的圖圖像的每每個像素素執(zhí)行輸輸出,輸輸出參數(shù)數(shù)定義了了一個完完整的圖圖。Pixell Beendeer是強強類型語語言。除除了標(biāo)準(zhǔn)準(zhǔn)的數(shù)字字(標(biāo)量量)類型型,它定定義了一一組用于于像素,1,2,3的圖像向量類型,或4的成員,或通道。作為一個完整的清單和Pixel Bender數(shù)據(jù)類型的描述,看看Pixel Bender參考。參數(shù)和變量量在申明定義義函數(shù)前

6、前,你可可以指定定參數(shù),這是通過內(nèi)核程序和固定的值,依賴變量,使用evaluateDependents()函數(shù),它們?nèi)匀皇侵蛔x,見本教程36頁一個核可以以采取任任意數(shù)量量的任意意類型的的參數(shù)。參參數(shù)被傳傳遞到PPixeel BBendder運運行系統(tǒng)統(tǒng),和它它們的值值在所有有像素的的常數(shù),就就象“均勻”用在三三維著色色語言變變量。應(yīng)用程序的的內(nèi)核運運行提供供一個用用戶界面面中,用用戶可以以設(shè)置的的參數(shù)值值。例如如,它可可以顯示示一個對對話框,當(dāng)當(dāng)過濾器器被調(diào)用用。在開開發(fā)過程程中,PPixeel BBendder工工具包提提供這個個用戶界界面。此示例將一一個參數(shù)數(shù)的fiillwwithhbla

7、ack內(nèi)內(nèi)核,它它定義了了一個用用來填充充黑色以以外的其其他顏色色:kerneel FFilllWitthCoolorrparammeteer ppixeel4 collor;outpuut ppixeel4 dstt;regioon ggeneeratted()returrn eeverrywhheree();void evaaluaatePPixeel()dst = coolorr;記住,所有有Pixxel Bennderr程序必必須指定定Pixxel Bennderr核心語語言的版版本他們所寫的的,使用用lannguaagevverssionn聲明。試試試這個個代碼,粘粘貼到一一個內(nèi)核核

8、程序包含必必要的基基礎(chǔ)設(shè)施施。參數(shù)的數(shù)據(jù)據(jù)類型提提供了一一個線索索,什么么樣的控控制主機機的應(yīng)用用,適當(dāng)?shù)牡膮?shù)設(shè)設(shè)置值。你你通常添添加約束束,有助助于參數(shù)數(shù)值甚至至更多。例例如,這這個參數(shù)數(shù)定義允允許用戶戶界面顯顯示的最最小值和和最大值值允許的值,以以及初始始默認值值parammeteer ppixeel4 collor ;Pixell Beendeer坐標(biāo)標(biāo)系統(tǒng)Pixell Beendeer有一一個單一一的世界界坐標(biāo)系系統(tǒng)(有有時被稱稱為世界界空間)。世世界坐標(biāo)標(biāo)系是方方形的,均均勻的(各各向同性性,笛卡卡爾,和和正交),和和無限的的。X軸增加加向右,Y軸向下增加輸入和輸出出圖像的的起源是

9、是對齊到到世界坐坐標(biāo)系的的原點。在Pixeel BBendder模模型,圖圖像沒有有大小。相反,每個圖像被認為是定義,在離散的像素?zé)o限平面坐標(biāo)。Pixel Bender運行時引擎執(zhí)行內(nèi)核決定需要存儲和操作上的像素緩沖區(qū)大小。只有個別Pixel Bender有一個尺寸。這Pixeel BBendder坐坐標(biāo)模型型對濾波波器設(shè)計計的影響響。例如如,它是是不可能能寫的一一個反映映在其“中心圖圖像像素素機內(nèi)核核,“因為中中心是未未定義的的。而不不是,該該中心的的坐標(biāo)必必須明確確表示通通過它們們作為內(nèi)內(nèi)核參數(shù)數(shù)(參見見“通過在在坐標(biāo)”在30頁)。沒有坐標(biāo)轉(zhuǎn)轉(zhuǎn)換是可可能的;一個是是Traansfformm

10、edbybeiing明明確形象象ressamppleddto thee輸出網(wǎng)網(wǎng)格這可可能很嚴嚴厲的限限制,但但它怎樣樣到原子圖圖像處理理在實踐踐操作必必須執(zhí)行行更復(fù)雜雜的推理理關(guān)于坐坐標(biāo)系統(tǒng)統(tǒng),如連連接和重重新排序序順序執(zhí)執(zhí)行的轉(zhuǎn)轉(zhuǎn)換-musst bbeofat ahiggherrlevvel,befforee內(nèi)核執(zhí)執(zhí)行訪問的像素素坐標(biāo)一個核心是是并行執(zhí)執(zhí)行的所所有像素素的輸出出圖像,具具有完全全相同的的參數(shù)值值或每個個像素。在在每一像像素的變變化是當(dāng)當(dāng)前輸出出像素坐坐標(biāo)唯一一。訪問當(dāng)前坐坐標(biāo)值,使使用內(nèi)置置的功能能outtcooord()。這這個函數(shù)數(shù)返回一一個值ffloaat2型型(兩個個

11、浮動向向量),給給出了(x,y)的輸出像素的中心坐標(biāo)被evaluatepixel()功能的當(dāng)前調(diào)用評估。輸出電流協(xié)調(diào)各不相同的圖像的像素,但不變的任何一個打電話的壽命期間evaluatepixel()。如果我們假假設(shè)像素素的平方方(它們們不一定定;看到到“非正方方形像素素”在33頁)的的outtcooord()函數(shù)數(shù)返回這這些值為為433像素的的圖像輸輸出:下面的示例例是如何演示示outtcooord()函數(shù)數(shù),用它它來產(chǎn)生生輸出圖圖像中的的圖案。它它也說明明了矢量量型flloatt2使用用和向量量函數(shù)llenggth()。Pixxel Bennderr核心語語言包括括一組豐豐富的載載體的類類

12、型和操操作的詳詳細信息息,參見見;Piixell Beendeer參考考。這個內(nèi)核提提供一個個(非抗抗鋸齒)以以原點為為中心的的實心圓圓,使用用顏色和和半徑比比參數(shù):kerneel tt1 paarammeteer ffloaat rradiius; pparaametter pixxel44 coolorr ; iinpuut iimagge4 srcc; ooutpput pixxel44 dsst; vvoidd evvaluuateePixxel() flooat22 cooordd_foor_tthiss_piixell = outtCooord(); flooat curr_raa

13、diuus = leengtth(ccoorrd_ffor_thiis_ppixeel); if (cuur_rradiius rradiius) dsst = coolorr; elsse dsst = saamplleNeeareest(srcc, ccoorrd_ffor_thiis_ppixeel); 通過在坐標(biāo)標(biāo)這個內(nèi)核呈呈現(xiàn)圓一一個指定定的大小小和顏色色,而是是圍繞圈圈在原點點,你通通過一個個水平和和垂直的的圓的圓圓心坐標(biāo)標(biāo)。kerneel tt1 pparaametter flooat22 ceenteer ; pparaametter flooat raddiuss ; ppa

14、raametter pixxel44 coolorr ; iinpuut iimagge4 srcc; ooutpput pixxel44 dsst; vvoidd evvaluuateePixxel() / wheere aree wee reelattivee too thhe ccentter of thee ciirclle flooat22 cooordd_foor_tthiss_piixell = outtCooord() - ceenteer; flooat curr_raadiuus = leengtth(ccoorrd_ffor_thiis_ppixeel); if (cuu

15、r_rradiius rradiius) dsst = coolorr; elsse dsst = saamplleNeeareest(srcc, ccoorrd_ffor_thiis_ppixeel + ceenteer); 輸入圖像和和采樣一個沒有圖圖像輸入入的內(nèi)核核被稱為為源或發(fā)發(fā)電機。一一個實際際的例子子是一個個程序紋紋理的常常規(guī)發(fā)電電機。然然而,大大多數(shù)內(nèi)內(nèi)核需要要一個或或多個圖圖像輸入入。你可以聲明明一個或或多個輸輸入圖像像到一個個內(nèi)核訪訪問,然然后通過過圖像像像素值和和像素坐坐標(biāo)的內(nèi)內(nèi)置采樣樣功能:samplleNeeareest()返回該像素素的中點點為最近近的給定定的坐標(biāo)標(biāo)值

16、samplleLiineaar()雙線性插值值四像素素相鄰的的給定的的協(xié)調(diào)執(zhí)執(zhí)行簡單的可能能的內(nèi)核核采樣葉葉片圖像像不變:kerneel IIdenntittyinputt immagee4 ssourrce;outpuut ppixeel4 dstt;void evaaluaatePPixeel()dst = saamplleNeeareest( soourcce, outtCooord() );你能提供任任何坐標(biāo)標(biāo)采樣功功能;然然而,如如果你的的樣本圖圖像定義義的區(qū)域域外的一一點,該該函數(shù)返返回透明明黑(00,0,0,0)。所所有的采采樣函數(shù)數(shù)返回完完全相同同的信道道數(shù)的像像素值為為通過圖

17、圖像。非正方形像像素當(dāng)你認為像像素廣場場,一個個圖像的的像素網(wǎng)網(wǎng)格總線線與潛在在的世界界坐標(biāo)空空間:然而,事實實上,像像素不總總是廣場場。例如如,作用用通常涉涉及視頻頻圖像具具有非正正方形像像素后。如如果是11.1x 11像素高高,像素素網(wǎng)格不不與世界界線空間間:盡管該像素素的大小小已更改改,所有有的坐標(biāo)標(biāo)都仍然然在世界界坐標(biāo)系系統(tǒng)。例例如,返返回的值值為43像素素的圖像像outtcooord()現(xiàn)在在的這個個樣子:在內(nèi)核中,所所有的坐坐標(biāo)都在在世界坐坐標(biāo)空間間。這包包括:outcooordd()函函數(shù)的返返回值坐標(biāo)傳遞到到采樣功功能該地區(qū)通過過從區(qū)域域功能,還還包括nneedded(),ch

18、aangeed(),genneraatedd(),和和dodd()任何參數(shù)傳傳遞給內(nèi)內(nèi)核,測測量距離離或區(qū)域域(如一一個模糊糊半徑)也也應(yīng)該被被指定在在世界坐坐標(biāo)系。一個核可以以假設(shè),輸輸出圖像像的像素素大小將將作為第第一輸入入圖像的的像素尺尺寸相同同。除此此之外,然然而,它它不能選選擇或制制作的像像素大小小的假設(shè)設(shè)任何輸輸入或輸輸出圖像像。所有有的輸入入圖像和和輸出圖圖像的像像素大小小可以不不同。發(fā)發(fā)現(xiàn)任何何輸入或或輸出圖圖像的像像素大小小,使用用pixxelssizee()和和pixxelaaspeectrratiio()功能。1、內(nèi)置函函數(shù)piixellsizze()返回像像素的大大小對

19、于于一個給給定的輸輸入或輸輸出圖像像。結(jié)果果是測量世界的的像素坐坐標(biāo)大小小。2、內(nèi)置函函數(shù)piixellasppecttrattio()獲取取像素寬寬度除以以像素高高度為一一個給定定的圖像pixellAsppecttRattio( i ) = ppixeelSiize( i ).xx / pixxelSSizee( ii ).y一個正方形形的像素素具有11的縱橫橫比??煊崳涸趐pixeelsiize()和pixxelaaspeectrratiio()功能的的Flaash Plaayerr可用;然而Flashh播放器器都采用用111像素。如果有可能能,在你你的圖像像的像素素不是正正方形的的,你必

20、必須以像像素大小小為帳戶來保證證精確的的采樣結(jié)結(jié)果。要要選擇相相鄰的像像素,例例如,得得到的像像素大小小輸入圖像和和用它來來修改你你的坐標(biāo)標(biāo),通過過采樣函函數(shù)。例如,該核核平均每每個像素素與它的的直接的的左和右右的鄰居居,產(chǎn)生生一個輕輕微的水平模糊:kerneel HHoriizonntallAveeraggeinputt immagee4 ssourrce;outpuut ppixeel4 ressultt;void evaaluaatePPixeel()floatt2 ccoorrd = ouutCooordd();floatt2 hhOfffsett = flooat22(piixell

21、Sizze(ssourrce).x, 0.0);pixell4 lleftt = saamplleNeeareest(souurcee, ccoorrd - hOOffsset);pixell4 ccentter= saamplleNeeareest(souurcee, ccoorrd);pixell4 rrighht = saamplleNeeareest(souurcee, ccoorrd + hOOffsset);resullt = (lleftt + cennterr + riightt)/33.0;這個例子使使用evvaluuateedeppenddentts()變半徑徑,已經(jīng)經(jīng)提供

22、了了世界坐坐標(biāo)轉(zhuǎn)換換為半徑徑測量在在適當(dāng)大大小的像像素:kerneel tt1 iinpuut iimagge4 srcc; ooutpput pixxel44 dsst; pparaametter flooat raddiuss ; ddepeendeent intt inntRaadiuus; ddepeendeent flooat weiightts 1000 ; vvoidd evvaluuateeDeppenddentts() flooat w = 1.0 / flloatt( rradiius ); flooat s = w / ffloaat( raddiuss ); inttR

23、addiuss = intt( cceill( rradiius / ppixeelSiize(srcc).xx ) ); weiightts 0 = w; foor( intt i = 11; ii = inntRaadiuus; +ii ) w -= ss; weiightts i = w; vvoidd evvaluuateePixxel() dstt = sammpleeNeaaresst( srcc, ooutCCoorrd() ) * wweigghtss 00 ; forr( iint i = 1; i = inttRaddiuss; +i ) flloatt x = ffloa

24、at( i ) * pixxelSSizee( ssrc ).xx; dsst += ssamppleNNearrestt( ssrc, ouutCooordd() + ffloaat2( x, 0 ) ) * weiightts i ; dsst += ssamppleNNearrestt( ssrc, ouutCooordd() + ffloaat2( -xx, 00 ) ) * weeighhts i ; 多輸入圖像像一個核可以以采取任任何數(shù)量量的輸入入圖像,每每一個都都可以有有不同的的通道數(shù)數(shù)。的下面的內(nèi)核核乘以一一個單通通道磨砂砂一四圖圖像通道道kerneel MMattteRGGB

25、Ainputt immagee4 ssourrce;inputt immagee1 mmattte;outpuut ppixeel4 ressultt;void evaaluaatePPixeel()pixell4 iin_ppixeel = saamplleNeeareest( soourcce, outtCooord() );pixell1 mmattte_vvaluue = saamplleNeeareest( maattee, ooutCCoorrd() );resullt = inn_piixell * mattte_vallue;使用相關(guān)的的值快訊:依賴賴值不可可用時,像像素被用用

26、Flaash播播放器??伎紤]一個個程序生生成的查查找表的的像素的的權(quán)重的的卷積運運算kerneel tt1 iinpuut iimagge4 souurcee; ooutpput pixxel44 reesullt; vvoidd evvaluuateePixxel() connst flooat siggma = 22.0; flooat c = 1.0 / ( sqrrt(22.0 * 33.1441599265535 ) * siigmaa ); flooat ec = 22.0 * ssigmma * siigmaa; flooat weiightt0 = exxp( -( 0.00

27、* 0.00 ) / eec ) * c; flooat weiightt1 = exxp( -( 1.00 * 1.00 ) / eec ) * c; flooat weiightt2 = exxp( -( 2.00 * 2.00 ) / eec ) * c; flooat weiightt3 = exxp( -( 3.00 * 3.00 ) / eec ) * c; flooat weiightt4 = exxp( -( 4.00 * 4.00 ) / eec ) * c; flooat44 accc = flloatt4( 0.00 ); accc += saamplleNeearees

28、t( soourcce, outtCooord() ) * weiightt0; accc += saamplleNeeareest( soourcce, outtCooord() + flloatt2( 1.00, 00.0 ) ) * weiightt1; accc += saamplleNeeareest( soourcce, outtCooord() + flloatt2( -1.0, 0.00 ) ) * weeighht1; accc += saamplleNeeareest( soourcce, outtCooord() + flloatt2( 2.00, 00.0 ) ) *

29、weiightt2; accc += saamplleNeeareest( soourcce, outtCooord() + flloatt2( -2.0, 0.00 ) ) * weeighht2; accc += saamplleNeeareest( soourcce, outtCooord() + flloatt2( 3.00, 00.0 ) ) * weiightt3; accc += saamplleNeeareest( soourcce, outtCooord() + flloatt2( -3.0, 0.00 ) ) * weeighht3; accc += saamplleNee

30、areest( soourcce, outtCooord() + flloatt2( 4.00, 00.0 ) ) * weiightt4; accc += saamplleNeeareest( soourcce, outtCooord() + flloatt2( -4.0, 0.00 ) ) * weeighht4; ressultt = accc; 這個代碼的的工作但但有一個個問題:查找表表的每一一個像素素的再生生,失敗敗一個查查找表的的目的。我我們要預(yù)預(yù)先計算算這些值值一次,然然后運用用他們所所有的像像素。你你可以使使用內(nèi)核核參數(shù)值值傳遞,但但你需要要外部的的代碼來來計算的的值。為了保持

31、計計算內(nèi)核核中執(zhí)行行,但只只有一次次,你可可以聲明明表一組組相關(guān)的的成員變變量。然然后使用用evaaluaateddepeendeentss()函函數(shù)來計計算變量量的值。為為初始化化值依賴賴于身體體內(nèi)的evaluuateedeppenddentts(),這是是運行一一次,在在任何像像素的處處理。然然后這些些值只讀讀,并且且為evvaluuateepixxel()執(zhí)行行在所有有像素常常數(shù)。這這里有完完整的高高斯模糊糊內(nèi)核,改改為使用用相關(guān)的的變量提示和技巧巧這里有一些些事情要要注意您您的內(nèi)核核代碼設(shè)設(shè)計未定義的結(jié)結(jié)果一些內(nèi)置操操作符和和函數(shù)產(chǎn)產(chǎn)生不確確定的結(jié)結(jié)果,在在某些條條件下,如如除數(shù)為為零

32、,或或一個負負數(shù)的平平方根。未未定義的的結(jié)果會會導(dǎo)致不不可預(yù)知知的行為為。內(nèi)核核完全可可能停止止運行,這這可能生生成黑色色或白色色像素的的像素。它它可能會會產(chǎn)生不不同的運運行不同同的結(jié)果果,也可可能產(chǎn)生生不同的的結(jié)果在在運行時時的CPPU,GPUU或Flaash播播放器。它它可能出出現(xiàn)在一一個工作作版本,然然后在下下一個版版本失敗敗。你不不能讓你你的內(nèi)核核在一個個不確定定的方式式使用運運算符或或函數(shù)。例例如,如如果你有有一個內(nèi)內(nèi)核,并并分,你你必須考考慮到除除數(shù)為零零的可能能性。確確保你的的代碼的的檢測條條件和采采取適當(dāng)當(dāng)?shù)男袆觿硬痪_的浮浮點運算算浮點運算的的CPUU執(zhí)行可可能會略略有不同同

33、的結(jié)果果來進行行在GPPU,或或在Fllashh Pllayeer中,由由于不同同的優(yōu)化化和舍入入。這可可能會導(dǎo)導(dǎo)致問題題當(dāng)比較較平等或或不平等等的浮點點值。你你可以避避免這些些問題更換這樣的的代碼:if( ff1 = ff2 ) / Doo soometthinng with codde llikee thhis:if( aabs( f11 - f2 ) eppsillon )/ Doo soometthinng 超出范圍的的輸出像像素值像素值通常常被認為為是在范范圍0到1。然而,它它是可能能的,以以一套價價值輸出像素是是在此范范圍之外外。在GPU運運行時,所有的輸出像素值的0至1的范圍內(nèi)夾

34、。在CPU運運行時,輸輸出像素素值不夾夾建議你寫的的內(nèi)核,同同樣在所所有的執(zhí)執(zhí)行環(huán)境境工作。為為了確保保這一,如如果你的的內(nèi)核可可能產(chǎn)生生超出范范圍的值值,你應(yīng)應(yīng)該夾他他們期望望的范圍圍內(nèi),在在你的自自己的代代碼。數(shù)組的大小小有些老年人人對數(shù)組組大小的的限制,他他們可以以處理。注注意,如如果你寫寫一個內(nèi)內(nèi)核使用用數(shù)組,它可可能無法法運行在在所有的的GPUU。支持功能快訊:支持持的功能能是不可可用時,使使用Fllashh PllayeerPixxel Bennderr。1、一個核核可以包包含區(qū)域域函數(shù)的的定義,其其中有預(yù)預(yù)定義的的名字和和簽名,并并提供像像素機運運行時引引擎有多多少空間間的幫助助

35、信息從從這一核核心計算算輸出圖圖像的像像素分配配建筑。有有關(guān)詳細細信息,參參見4章,“工作區(qū)區(qū)”2、內(nèi)核也也可以定定義附加加任意的的支持功功能,它它可以被被稱為只只有從eevalluattepiixell()或或evaaluaateddepeendeentss()。區(qū)域功能的的例子kerneel RRotaateAAndCCompposiite pparaametter flooat theeta; / 旋轉(zhuǎn)轉(zhuǎn)角度 pparaametter flooat22 ceenteer / 旋旋轉(zhuǎn)中心心 ; ddepeendeent flooat33x3 bacck_xxforrm; / rottati

36、ion mattrixx (ffromm ddepeendeent flooat33x3 fwdd_xfformm; / aand invversse iinpuut iimagge4 forregrrounnd; iinpuut iimagge4 bacckgrrounnd; ooutpput pixxel44 reesullt; /計算算變換矩矩陣及其其逆矩陣陣(innverrse) vvoidd evvaluuateeDeppenddentts() / traansllatee ceenteer tto ooriggin flooat33x3 traansllatee = flooat3

37、3x3( 1, 0, 0, 0, 1, 0, -ceenteer.xx, -cennterr.y, 1 ); / 旋轉(zhuǎn) flooat33x3 rottatee = flooat33x3( coss(thhetaa), sinn(thhetaa), 0, -siin(tthetta), coos(tthetta), 0, 0, 0, 1 ); / 合成得得到完整整的FWWD變換換 fwdd_xfformm = -trransslatte*rrotaate*traansllatee; / 得到逆逆矩陣 rottatee01 = -rootatte0011; rottatee10 = -rootat

38、te1100; / 合成得得到完整整的反變變換 bacck_xxforrm = trransslatte*rrotaate*-trransslatte; / 主主要職能能的轉(zhuǎn)變變outtcooord找找到前景景像素 vvoidd evvaluuateePixxel() / 背景坐坐標(biāo)是目目的地的的坐標(biāo) flooat22 bgg_cooordd = outtCooord(); / 坐標(biāo)轉(zhuǎn)轉(zhuǎn)換ouutcooordd前景 / 注意轉(zhuǎn)轉(zhuǎn)換至ffloaat3,然然后滴WW與調(diào)酒酒 flooat22 fgg_cooordd = (baack_xfoorm*flooat33(bgg_cooordd.x, b

39、gg_cooordd.y, 1).xxy; / Alppha混混合前景景從背景景 pixxel44 bgg_piixell = sammpleeNeaaresst(bbackkgrooundd, bbg_ccoorrd); pixxel44 fgg_piixell = sammpleeLinnearr(fooreggrouund, fgg_cooordd); ressultt = mixx(bgg_piixell, ffg_ppixeel, fg_pixxel.a); / 需需要的功功能是不不同的取取決于輸輸入 rregiion neeededd(reegioon ooutpput_reggi

40、onn,immageeReff innputt_inndexx ) reggionn reesullt; if( innputt_inndexx = baackggrouund ) / 背景景是未轉(zhuǎn)轉(zhuǎn)化的,所所以只是是路過 reesullt = ouutpuut_rregiion; elsse / 變換換輸出區(qū)區(qū)為前景景空間 reesullt = trranssforrm( bacck_xxforrm, outtputt_reegioon ); retturnn reesullt; / 改改變的功功能是需需要的功功能而不不同 / ttrannsfoorm sennse rregiion cha

41、angeed(rregiion inpput_reggionn, iimaggeReef iinpuut_iindeex ) reggionn reesullt; if( innputt_inndexx = baackggrouund ) reesullt = innputt_reegioon; elsse reesullt = trranssforrm( fwdd_xfformm, iinpuut_rregiion ); retturnn reesullt; 一個支持函函數(shù)的例例子你可以定義義附加支支持的功功能在一一個內(nèi)核核減少代代碼重復(fù)復(fù)。在這這示例代代碼來計計算高斯斯模糊濾濾鏡高斯斯重量

42、轉(zhuǎn)轉(zhuǎn)移到一一個支持持功能kerneel GGausssiaanBllur ddepeendeent flooat weiightt0; ddepeendeent flooat weiightt1; ddepeendeent flooat weiightt2; ddepeendeent flooat weiightt3; ddepeendeent flooat weiightt4; iinpuut iimagge4 souurcee; ooutpput pixxel44 reesullt; ffloaat ccalcculaateWWeigght( flloatt r, flloatt siig

43、maa ) flooat c = 1.0 / ( sqrrt( 2.00 * 3.11415592665355 ) * ssigmma ); flooat ec = 22.0 * ssigmma * siigmaa; retturnn exxp( -( r * r ) / ecc ) * cc; vvoidd evvaluuateeDeppenddentts() connst flooat siggma = 22.0; weiightt0 = caalcuulatteWeeighht( 0.00, ssigmma ); weiightt1 = caalcuulatteWeeighht( 1.0

44、0, ssigmma ); weiightt2 = caalcuulatteWeeighht( 2.00, ssigmma ); weiightt3 = caalcuulatteWeeighht( 3.00, ssigmma ); weiightt4 = caalcuulatteWeeighht( 4.00, ssigmma ); vvoidd evvaluuateePixxel() flooat44 accc = flloatt4( 0.00 ); accc += saamplleNeeareest( soourcce, outtCooord() ) * weiightt0; aacc +=

45、 sammpleeNeaaresst( souurcee, ooutCCoorrd() + flooat22( 11.0, 0.0 ) ) * wweigght11; accc += saamplleNeeareest( soourcce, outtCooord() + flloatt2( -1.0, 0.00 ) ) * weeighht1; accc += saamplleNeeareest( soourcce, outtCooord() + flloatt2( 2.00, 00.0 ) ) * weiightt2; accc += saamplleNeeareest( soourcce,

46、 outtCooord() + flloatt2( -2.0, 0.00 ) ) * weeighht2; accc += saamplleNeeareest( soourcce, outtCooord() + flloatt2( 3.00, 00.0 ) ) * weiightt3; accc += saamplleNeeareest( soourcce, outtCooord() + flloatt2( -3.0, 0.00 ) ) * weeighht3; accc += saamplleNeeareest( soourcce, outtCooord() + flloatt2( 4.00

47、, 00.0 ) ) * weiightt4; accc += saamplleNeeareest( soourcce, outtCooord() + flloatt2( -4.0, 0.00 ) ) * weeighht4; ressultt = accc; Pixell Beendee工作區(qū)域域Pixell Beendeer圖形形語言標(biāo)記數(shù)據(jù)元元素開發(fā)后期效效果本章介紹了了更多的的技術(shù),對對Pixxel Bennderr程序的的使用效效果的一一個焦點點后的影響。所所有的例例子使用用4通道的的輸入和和輸出,所所支持的的后效應(yīng)應(yīng)。添加核心數(shù)數(shù)據(jù)元素素后的效效果定義了兩個個額外的的核心元元數(shù)據(jù)屬

48、屬性對效效果造成成的影響響,這兩兩者都是是可選的的:displlaynnamee效果名稱顯顯示在效效果和預(yù)預(yù)置面板板中。如果果沒有指指定,該該內(nèi)核使使用這個個名字。categgoryy效果的類別別。默認認是“PPixeel BBendder類例如,下面面是簡單單的身份份內(nèi)核,改改編后的的影響通通過包括括額外的的元數(shù)據(jù)據(jù)的值,只只使用44通道的的輸入和和輸出的的圖像: kerneel IIdenntitty iinpuut iimagge4 souurcee; ooutpput pixxel44 reesullt; vvoidd evvaluuateePixxel() ressultt = sa

49、mmpleeNeaaresst(ssourrce, ouutCooordd(); 訪問通道的的值只允許4通通道的輸輸入和輸輸出的圖圖像的效效果。我我們的第第一運動動,我們們將修改改evaaluaateppixeel()功能調(diào)調(diào)節(jié)的輸輸入圖像像的不同同通道的的值。 vvoidd evvaluuateePixxel() flooat44 teemp = ssamppleNNearrestt(soourcce, outtCooord(); ressultt.r = 00.5 * ttempp.r; ressultt.g = 00.6 * ttempp.g; ressultt.b = 00.7 * t

50、tempp.b; ressultt.a = ttempp.a; 這表明你如如何訪問問不同的的通道后后點使用用的信道道的名稱稱的第一一個字母母算子。這這個例子子是顏色色通道,且且不改變變不透明明度(aalphha通道道)。這這是另一一種方式式來訪問問不同的的渠道,對對所有的的顏色在在一個單單一的操操作:void evaaluaatePPixeel() floatt4 ttempp = sammpleeNeaaresst(ssourrce, ouutCooordd(); floatt3 ffacttor = ffloaat3(0.55, 00.6, 0.7); resullt.rrgb = ffa

51、cttor * ttempp.rggb; resullt.aa = temmp.aa; 一個更緊湊湊的代碼碼版本是是:void evaaluaatePPixeel() ffloaat4 temmp = saamplleNeeareest(souurcee, ooutCCoorrd(); rresuult = ffloaat4( 0.5, 0.66, 00.7, 1.0) * ttempp;在這種情況況下,渠渠道不明明確,所所以溫度度和結(jié)果果的所有有通道都都使用。卷積的一個個例子卷積是一種種常見的的圖像處處理操作作,濾波波器的圖圖像計算算的總和和源圖像像和一個個較小的的圖像之之間的產(chǎn)產(chǎn)品,稱稱為

52、卷積積過濾或或卷積面面膜。根根據(jù)價值值選擇中中的卷積積口罩,一一個卷積積運算可可以執(zhí)行行平滑,銳化化,邊緣緣檢測,和和其他有有用的成成像操作作。在這這一章中中,我們們將建立立在這個個例子演演示了一一些Piixell Beendeer特征征具體的的影響后后。這個個例子開開始利用用卷積平平滑圖像像。圖像像可以被被簡單地地掩碼中中包含的的像素平平均。平平滑濾波波模板是是一個半半徑為11的333的面具具:1, 11, 11 1, 11, 11 1, 11, 11內(nèi)核定義了了這個面面具作為為33不變,ssmoooth_massk:constt flloatt3x33 smmootth_mmaskk =

53、flooat33x3( 1.0, 1.00, 11.0, 1.0, 1.00, 11.0, 1.0, 1.00, 11.0);用戶定義的的函數(shù),convolve(),實現(xiàn)了其核心算法。它存儲的smooth_mask陣列在整個輸入入圖像。然然后,歸歸一化的的結(jié)果除除以9(的系系數(shù)的總總和面具具)。floatt4 cconvvolvve(ffloaat3xx3 iin_kkernnel, flloatt diivissor) flooat44 coonv_ressultt = flooat44(0.0, 0.00, 00.0, 0.0); flooat22 ouut_ccoorrd = ouutC

54、ooordd(); forr(innt ii = -1; i = 1; +ii) foor(iint j = -11; jj = 1; +j) cconvv_reesullt += ssamppleNNearrestt(soourcce, oout_cooord + ffloaat2(i, j) * pixxelSSizee(srrc) * iin_kkernneli + 1j + 11; connv_rresuult /= divvisoor; retturnn coonv_ressultt; 最后,該eevalluattepiixell()函函數(shù)調(diào)用用的coonvoolvee()功功能,并

55、并返回在在內(nèi)核中中的結(jié)果果輸出圖像: voiid eevalluattePiixell() flooat44 coonv_ressultt = connvollve(smooothh_maask, smmootth_ddiviisorr); ressultt = connv_rresuult; 這里是卷積積濾波器器掩模與與輸入圖圖像的完完整的內(nèi)內(nèi)核 kerneel CConvvKerrnell iinpuut iimagge4 souurcee; ooutpput pixxel44 reesullt; cconsst ffloaat3xx3 ssmoooth_massk = flloatt3x

56、33( 11.0, 1.0, 1.00, 11.0, 1.0, 1.00, 11.0, 1.0, 1.00); cconsst ffloaat ssmoooth_divvisoor = 9.0; ffloaat4 connvollve(flooat33x3 in_kerrnell, ffloaat ddiviisorr) flooat44 coonv_ressultt = flooat44(0.0, 0.00, 00.0, 0.0); flooat22 ouut_ccoorrd = ouutCooordd(); forr(innt ii = -1; i = 1; +ii) foor(iint

57、j = -11; jj = 1; +j) cconvv_reesullt += ssamppleNNearrestt(soourcce, oout_cooord + ffloaat2(i, j) * in_kerrnelli + 11jj + 1; connv_rresuult /= divvisoor; retturnn coonv_ressultt; vvoidd evvaluuateePixxel() flooat44 coonv_ressultt = connvollve(smooothh_maask, smmootth_ddiviisorr); ressultt = connv_rr

58、esuult; rregiion neeededd( rregiion outtputt_reegioon, imaageRRef inpput_inddex ) reggionn reesullt = ouutpuut_rregiion; ressultt = outtsett( rresuult, flloatt2( 1.00, 11.0 ) ); retturnn reesullt; rregiion chaangeed( reggionn innputt_reegioon, imaageRRef inpput_inddex ) reggionn reesullt = innputt_r

59、eegioon; ressultt = outtsett( rresuult, flloatt2( 1.00, 11.0 ) ); retturnn reesullt; 核參數(shù)的影影響后后效應(yīng)的定定義可選選參數(shù)的的元數(shù)據(jù)據(jù)效仿它它自己的的一套參參數(shù):aeDissplaayNaame一一個內(nèi)核核參數(shù)的的默認顯顯示名稱稱參數(shù)名名稱。因因為Piixell Beendeer參數(shù)名稱不不能包含含空格或或其他保保留字符符,您可可以使用用此元數(shù)數(shù)據(jù)值指定一個用用戶友好好的字符符串的影影響后,用用于引用用該參數(shù)數(shù)的任何何地方出出現(xiàn)在UI。比比如說呢呢。parammeteer ffloaat mmyKeerne

60、elPaaramm ;aeUICConttroll此元數(shù)數(shù)據(jù)值告告訴的影影響后,什什么樣的的UI控件件使用允允許用戶戶輸入?yún)?shù)。允許許的值依依賴于參參數(shù)的數(shù)數(shù)據(jù)類型型:數(shù)據(jù)類型允許控制的的值intaeUICConttroll:aaePoopupp需要要一個額額外的元元數(shù)據(jù)值值以指定定的彈出出菜單值值,作為為一個個個人項目目的管道道分隔的的字符串串特征:aePoppupSStriing:Ittem 1|IItemm 2|Iteem 33floattaeUICConttroll:aaeAnngleeaeUICConttroll:aaePeerceentSSlidderaeUICConttroll:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論