版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Pixeel BBendder工工具包概概述开始编写Piixell Beendeer滤镜镜本章讨论论Pixxel Bennderr语言编编写的特特殊功能能。一个内核核部分在Pixxel Bennderr图像处处理的基基本单位位是内核核。每个个像素机机核心语语言程序序定义了了一个内内核,由由一个单单一的字字符串,包包含语言言版本的的内核语语句中指指定的元元素。所所需要的的语言版版本的元元素kernnel nammekernnel memmberrs变量量和函数数包括在在这对花花括号内内内核语句句包含一一个名字字,一组组元数据据的方括括号中,描描述了内内核,和和一组成成员的花花括号括括起来的的定义
2、的的过滤操操作内核的数数据元素素每一个内内核定义义之前需需要的语语言版本本的元素素。这个个声明和和元数据据部分(可可以修改改)被提提供时自自动创建建在Piixell Beendeer工具具包IDDE的一一个新的的过滤器器。元数据部部分提供供命名空空间,内内核版本本,和其其他的识识别和描描述信息息。这是是特别重重要的是是当你收收集的几几个内核核的图形形来执行行更复杂杂的操作作。比如如说呢。命名空间间,供应应商,和和版本值值是必需需的;说说明是可可选的。1.供应应商的公公司或个个人谁写写的筛选选器名称称。2他是是一个版版本的整整数版本本号应该该开始在在1增加了了新的内内核版本本。这允允许你产产生一
3、个个错误修修正或改改进性能能的滤波波器的新新版本,但但仍让老老版本3.命名名空间是是一个公公司或作作者进一一步分离离过滤器器。例如如,Addobee可能对对PS图象象处理软软件高斯斯模糊滤滤镜不同同版本和和之后的的效果,和和使用的的命名空空间中的的领域产产品的名名称来区区分它们们。kernnel GauussiianBBlurr / . 高斯模模糊滤镜镜所使用用的PSS图象处处理软件件kernnel GauussiianBBlurr / . 高斯模模糊滤镜镜所使用用的后效效应命名空间间中的值值与其他他过滤标标识符的的组合来来确定实实际的命命名空间间,因此此不需要要全局唯唯一的。在这一章章简短,
4、只只有内核核名称和和构件截截面显示示;尝试试的例子子,你可可以粘贴贴到内核核内核构构件截面面定义包包含一个个语言版版本的声声明和元元数据段段。核心成员员一个内核核定义像像C+中的类类的成员员变量和和成员函函数,与与核心成成员的部部分包含含一系列列的声明明,和一一组函数数定义。每一个个内核必必须提供供至少eevalluattepiixell()功功能和类类型的像像素的至至少一个个输出参参数。最简单的的Pixxel Bennderr程序序由一个个内核,返返回一个个坚实的的色彩无无处不在在:kernnel FilllWiithBBlacckoutpput pixxel44 dsst;regiion
5、genneraatedd()retuurn eveerywwherre();voidd evvaluuateePixxel()dst = ppixeel4(0,00,1,0);这个内核核产生一一个输出出图像的的四通道道(红,绿绿,蓝,),如通过申报输出pixel4 dst的定义。因为一个内核的所有像素的图像的每个像素执行输出,输出参数定义了一个完整的图。Pixeel BBendder是是强类型型语言。除了标标准的数数字(标标量)类类型,它它定义了了一组用用于像素素,1,2,3的图像像向量类类型,或或4的成员员,或通通道。作作为一个个完整的的清单和和Pixxel Bennderr数据类类型的描描
6、述,看看看Piixell Beendeer参考考。参数和变变量在申明定定义函数数前,你你可以指指定参数数,这是是通过内内核程序序和固定定的值,依赖变量,使用evaluateDependents()函数,它们仍然是只读,见本教程36页一个核可可以采取取任意数数量的任任意类型型的参数数。参数数被传递递到Piixell Beendeer运行行系统,和和它们的的值在所所有像素素的常数数,就象象“均匀”用在三三维着色色语言变变量。应用程序序的内核核运行提提供一个个用户界界面中,用用户可以以设置的的参数值值。例如如,它可可以显示示一个对对话框,当当过滤器器被调用用。在开开发过程程中,PPixeel BBe
7、ndder工工具包提提供这个个用户界界面。此示例将将一个参参数的ffilllwitthbllackk内核,它它定义了了一个用用来填充充黑色以以外的其其他颜色色:kernnel FilllWiithCColoorparaametter pixxel44 coolorr;outpput pixxel44 dsst;regiion genneraatedd()retuurn eveerywwherre();voidd evvaluuateePixxel()dst = ccoloor;记住,所所有Piixell Beendeer程序序必须指指定Piixell Beendeer核心心语言的的版本他们所写
8、写的,使使用laanguuageeverrsioon声明明。试试试这个代代码,粘粘贴到一一个内核核程序包含含必要的的基础设设施。参数的数数据类型型提供了了一个线线索,什什么样的的控制主主机的应应用,适当的的参数设设置值。你通常常添加约约束,有有助于参参数值甚甚至更多多。例如如,这个个参数定定义允许许用户界界面显示示的最小小值和最最大值允许的值值,以及及初始默默认值paraametter pixxel44 coolorr ;Pixeel BBendder坐坐标系统统Pixeel BBendder有有一个单单一的世世界坐标标系统(有有时被称称为世界界空间)。世界坐坐标系是是方形的的,均匀匀的(各各
9、向同性性,笛卡卡尔,和和正交),和和无限的的。X轴增加加向右,Y轴向下增加输入和输输出图像像的起源源是对齐齐到世界界坐标系系的原点点。在Pixxel Bennderr模型,图图像没有有大小。相反,每每个图像像被认为为是定义义,在离散散的像素素无限平平面坐标标。Piixell Beendeer运行行时引擎擎执行内内核决定定需要存存储和操操作上的的像素缓缓冲区大大小。只只有个别别Pixxel Bennderr有一个个尺寸。这Pixxel Bennderr坐标模模型对滤滤波器设设计的影影响。例例如,它它是不可可能写的的一个反反映在其其“中心图图像像素素机内核核,“因为中中心是未未定义的的。而不不是,
10、该该中心的的坐标必必须明确确表示通通过它们们作为内内核参数数(参见见“通过在在坐标”在30页)。没有坐标标转换是是可能的的;一个个是Trranssforrmeddbybeiing明明确形象象ressamppleddto thee输出网网格这可可能很严严厉的限限制,但但它怎样样到原子图图像处理理在实践践操作必必须执行行更复杂杂的推理理关于坐坐标系统统,如连连接和重重新排序序顺序执执行的转转换-musst bbeofat ahiggherrlevvel,befforee内核执执行访问的像像素坐标标一个核心心是并行行执行的的所有像像素的输输出图像像,具有有完全相相同的参参数值或或每个像像素。在在每一
11、像像素的变变化是当当前输出出像素坐坐标唯一一。访问当前前坐标值值,使用用内置的的功能ooutccoorrd()。这个个函数返返回一个个值flloatt2型(两两个浮动动向量),给给出了(x,y)的输出像素的中心坐标被evaluatepixel()功能的当前调用评估。输出电流协调各不相同的图像的像素,但不变的任何一个打电话的寿命期间evaluatepixel()。如果我们们假设像像素的平平方(它它们不一一定;看看到“非正方方形像素素”在33页)的的outtcooord()函数数返回这这些值为为433像素的的图像输输出:下面的示示例是如何演示示outtcooord()函数数,用它它来产生生输出图图
12、像中的的图案。它也说说明了矢矢量型ffloaat2使使用和向向量函数数lenngthh()。Pixxel Bennderr核心语语言包括括一组丰丰富的载载体的类类型和操操作的详详细信息息,参见见;Piixell Beendeer参考考。这个内核核提供一一个(非非抗锯齿齿)以原原点为中中心的实实心圆,使使用颜色色和半径径比参数数:kernnel t1 pparaametter flooat raddiuss; parrameeterr piixell4 ccoloor ; inpput imaage44 srrc; outtputt piixell4 ddst; voiid eevalluatt
13、ePiixell() flloatt2 ccoorrd_ffor_thiis_ppixeel = ouutCooordd(); flloatt cuur_rradiius = llenggth(cooord_forr_thhis_pixxel); iff (ccur_raddiuss raddiuss) ddst = ccoloor; ellse ddst = ssamppleNNearrestt(srrc, cooord_forr_thhis_pixxel); 通过在坐坐标这个内核核呈现圆圆一个指指定的大大小和颜颜色,而而是围绕绕圈在原原点,你你通过一一个水平平和垂直直的圆的的圆心坐坐标。k
14、ernnel t1 parrameeterr flloatt2 ccentter ; parrameeterr flloatt raadiuus ; parrameeterr piixell4 ccoloor ; inpput imaage44 srrc; outtputt piixell4 ddst; voiid eevalluattePiixell() / whheree arre wwe rrelaativve tto tthe cennterr off thhe ccirccle flloatt2 ccoorrd_ffor_thiis_ppixeel = ouutCooordd() -
15、 ccentter; flloatt cuur_rradiius = llenggth(cooord_forr_thhis_pixxel); iff (ccur_raddiuss raddiuss) ddst = ccoloor; ellse ddst = ssamppleNNearrestt(srrc, cooord_forr_thhis_pixxel + ccentter); 输入图像像和采样样一个没有有图像输输入的内内核被称称为源或或发电机机。一个个实际的的例子是是一个程程序纹理理的常规规发电机机。然而而,大多多数内核核需要一一个或多多个图像像输入。你可以声声明一个个或多个个输入图图像到
16、一一个内核核访问,然然后通过过图像像像素值和和像素坐坐标的内内置采样样功能:samppleNNearrestt()返回该像像素的中中点为最最近的给给定的坐坐标值samppleLLineear()双线性插插值四像像素相邻邻的给定定的协调调执行简单的可可能的内内核采样样叶片图图像不变变:kernnel Ideentiityinpuut iimagge4 souurcee;outpput pixxel44 dsst;voidd evvaluuateePixxel()dst = ssamppleNNearrestt( ssourrce, ouutCooordd() );你能提供供任何坐坐标采样样功能;
17、然而,如如果你的的样本图图像定义义的区域域外的一一点,该该函数返返回透明明黑(00,0,0,0)。所所有的采采样函数数返回完完全相同同的信道道数的像像素值为为通过图图像。非正方形形像素当你认为为像素广广场,一一个图像像的像素素网格总总线与潜潜在的世世界坐标标空间:然而,事事实上,像像素不总总是广场场。例如如,作用用通常涉涉及视频频图像具具有非正正方形像像素后。如果是是1.11x 11像素高高,像素素网格不不与世界界线空间间:尽管该像像素的大大小已更更改,所所有的坐坐标都仍仍然在世世界坐标标系统。例如,返返回的值值为43像素素的图像像outtcooord()现在在的这个个样子:在内核中中,所有有
18、的坐标标都在世世界坐标标空间。这包括括:outccoorrd()函数的的返回值值坐标传递递到采样样功能该地区通通过从区区域功能能,还包包括neeedeed(),chaangeed(),genneraatedd(),和和dodd()任何参数数传递给给内核,测测量距离离或区域域(如一一个模糊糊半径)也也应该被被指定在在世界坐坐标系。一个核可可以假设设,输出出图像的的像素大大小将作作为第一一输入图图像的像像素尺寸寸相同。除此之之外,然然而,它它不能选选择或制制作的像像素大小小的假设设任何输输入或输输出图像像。所有有的输入入图像和和输出图图像的像像素大小小可以不不同。发发现任何何输入或或输出图图像的像
19、像素大小小,使用用pixxelssizee()和和pixxelaaspeectrratiio()功能。1、内置置函数ppixeelsiize()返回回像素的的大小对对于一个个给定的的输入或或输出图图像。结结果是测量世界界的像素素坐标大大小。2、内置置函数ppixeelasspecctraatioo()获获取像素素宽度除除以像素素高度为为一个给给定的图像pixeelAsspecctRaatioo( ii ) = pixxelSSizee( ii ).x / piixellSizze( i ).y一个正方方形的像像素具有有1的纵横横比。快讯:在在pixxelssizee()和和pixxelaasp
20、eectrratiio()功能的的Flaash Plaayerr可用;然而Flassh播放放器都采采用11像素素。如果有可可能,在在你的图图像的像像素不是是正方形形的,你你必须以以像素大大小为帐户来保保证精确确的采样样结果。要选择择相邻的的像素,例例如,得得到的像像素大小小输入图像像和用它它来修改改你的坐坐标,通通过采样样函数。例如,该该核平均均每个像像素与它它的直接接的左和和右的邻邻居,产产生一个个轻微的的水平模糊糊:kernnel HorrizoontaalAvveraageinpuut iimagge4 souurcee;outpput pixxel44 reesullt;voidd e
21、vvaluuateePixxel()floaat2 cooord = ooutCCoorrd();floaat2 hOfffseet = flloatt2(ppixeelSiize(souurcee).xx, 00.0);pixeel4 lefft = ssamppleNNearrestt(soourcce, cooord - hhOfffsett);pixeel4 cennterr= ssamppleNNearrestt(soourcce, cooord);pixeel4 rigght = ssamppleNNearrestt(soourcce, cooord + hhOfffsett);r
22、esuult = (lefft + ceenteer + rrighht)/3.00;这个例子子使用eevalluattedeepenndennts()变半半径,已已经提供供了世界界坐标转转换为半半径测量量在适当当大小的的像素:kernnel t1 inpput imaage44 srrc; outtputt piixell4 ddst; parrameeterr flloatt raadiuus ; deppenddentt innt iintRRadiius; deppenddentt flloatt weeighhts 1000 ; voiid eevalluatteDeepennden
23、nts() flloatt w = 11.0 / ffloaat( raddiuss ); flloatt s = ww / flooat( raadiuus ); inntRaadiuus = innt( ceiil( raddiuss / pixxelSSizee(srrc).x ) ); weeighhts 0 = w; ffor( innt ii = 1; i = iintRRadiius; +i ) w -= s; weeighhts i = w; voiid eevalluattePiixell() dsst = saamplleNeeareest( srrc, outtCooor
24、d() ) * weiightts 0 ; foor( intt i = 11; ii = inntRaadiuus; +ii ) ffloaat xx = flooat( i ) * piixellSizze( srcc ).x; ddst += sammpleeNeaaresst( srcc, ooutCCoorrd() + flooat22( xx, 00 ) ) * weeighhts i ; ddst += sammpleeNeaaresst( srcc, ooutCCoorrd() + flooat22( -x, 0 ) ) * wweigghtss ii ; 多输入图图像一个核可
25、可以采取取任何数数量的输输入图像像,每一一个都可可以有不不同的通通道数。的下面的内内核乘以以一个单单通道磨磨砂一四四图像通通道kernnel MattteRRGBAAinpuut iimagge4 souurcee;inpuut iimagge1 mattte;outpput pixxel44 reesullt;voidd evvaluuateePixxel()pixeel4 in_pixxel = ssamppleNNearrestt( ssourrce, ouutCooordd() );pixeel1 mattte_vallue = ssamppleNNearrestt( mmattte,
26、 outtCooord() );resuult = iin_ppixeel * maattee_vaaluee;使用相关关的值快讯:依依赖值不不可用时时,像素素被用FFlassh播放放器。考考虑一个个程序生生成的查查找表的的像素的的权重的的卷积运运算kernnel t1 inpput imaage44 soourcce; outtputt piixell4 rresuult; voiid eevalluattePiixell() coonstt flloatt siigmaa = 2.00; flloatt c = 11.0 / ( sqqrt(2.00 * 3.11415592665355
27、) * ssigmma ); flloatt ecc = 2.00 * siggma * ssigmma; flloatt weeighht0 = eexp( -( 0.0 * 0.0 ) / ec ) * c; flloatt weeighht1 = eexp( -( 1.0 * 1.0 ) / ec ) * c; flloatt weeighht2 = eexp( -( 2.0 * 2.0 ) / ec ) * c; flloatt weeighht3 = eexp( -( 3.0 * 3.0 ) / ec ) * c; flloatt weeighht4 = eexp( -( 4.0 *
28、 4.0 ) / ec ) * c; flloatt4 aacc = ffloaat4( 0.0 ); accc += ssamppleNNearrestt( ssourrce, ouutCooordd() ) * weeighht0; accc += ssamppleNNearrestt( ssourrce, ouutCooordd() + ffloaat2( 1.0, 0.00 ) ) * weeighht1; accc += ssamppleNNearrestt( ssourrce, ouutCooordd() + ffloaat2( -11.0, 0.0 ) ) * wweigght1
29、1; accc += ssamppleNNearrestt( ssourrce, ouutCooordd() + ffloaat2( 2.0, 0.00 ) ) * weeighht2; accc += ssamppleNNearrestt( ssourrce, ouutCooordd() + ffloaat2( -22.0, 0.0 ) ) * wweigght22; accc += ssamppleNNearrestt( ssourrce, ouutCooordd() + ffloaat2( 3.0, 0.00 ) ) * weeighht3; accc += ssamppleNNearr
30、estt( ssourrce, ouutCooordd() + ffloaat2( -33.0, 0.0 ) ) * wweigght33; accc += ssamppleNNearrestt( ssourrce, ouutCooordd() + ffloaat2( 4.0, 0.00 ) ) * weeighht4; accc += ssamppleNNearrestt( ssourrce, ouutCooordd() + ffloaat2( -44.0, 0.0 ) ) * wweigght44; reesullt = accc; 这个代码码的工作作但有一一个问题题:查找找表的每每一个像
31、像素的再再生,失失败一个个查找表表的目的的。我们们要预先先计算这这些值一一次,然然后运用用他们所所有的像像素。你你可以使使用内核核参数值值传递,但但你需要要外部的的代码来来计算的的值。为了保持持计算内内核中执执行,但但只有一一次,你你可以声声明表一一组相关关的成员员变量。然后使使用evvaluuateedeppenddentts()函数来来计算变变量的值值。为初初始化值值依赖于于身体内内的evalluattedeepenndennts(),这这是运行行一次,在在任何像像素的处处理。然然后这些些值只读读,并且且为evvaluuateepixxel()执行行在所有有像素常常数。这这里有完完整的高高
32、斯模糊糊内核,改改为使用用相关的的变量提示和技技巧这里有一一些事情情要注意意您的内内核代码码设计未定义的的结果一些内置置操作符符和函数数产生不不确定的的结果,在在某些条条件下,如如除数为为零,或或一个负负数的平平方根。未定义义的结果果会导致致不可预预知的行行为。内内核完全全可能停停止运行行,这可可能生成成黑色或或白色像像素的像像素。它它可能会会产生不不同的运运行不同同的结果果,也可可能产生生不同的的结果在在运行时时的CPPU,GPUU或Flaash播播放器。它可能能出现在在一个工工作版本本,然后后在下一一个版本本失败。你不能能让你的的内核在在一个不不确定的的方式使使用运算算符或函函数。例例如,
33、如如果你有有一个内内核,并并分,你你必须考考虑到除除数为零零的可能能性。确确保你的的代码的的检测条条件和采采取适当当的行动动不精确的的浮点运运算浮点运算算的CPPU执行行可能会会略有不不同的结结果来进进行在GGPU,或或在Fllashh Pllayeer中,由由于不同同的优化化和舍入入。这可可能会导导致问题题当比较较平等或或不平等等的浮点点值。你你可以避避免这些些问题更换这样样的代码码:if( f1 = f2 ) / DDo ssomeethiing withh coode likke tthiss:if( abss( ff1 - f22 ) eepsiilonn )/ DDo ssomeet
34、hiing 超出范围围的输出出像素值值像素值通通常被认认为是在在范围00到1。然而,它它是可能能的,以以一套价价值输出像素素是在此此范围之之外。在GPUU运行时时,所有有的输出出像素值值的0至1的范围围内夹。在CPUU运行时时,输出出像素值值不夹建议你写写的内核核,同样样在所有有的执行行环境工工作。为为了确保保这一,如如果你的的内核可可能产生生超出范范围的值值,你应应该夹他他们期望望的范围围内,在在你的自自己的代代码。数组的大大小有些老年年人对数数组大小小的限制制,他们们可以处处理。注注意,如如果你写写一个内内核使用用数组,它它可能无无法运行行在所有有的GPPU。支持功能能快讯:支支持的功功能
35、是不不可用时时,使用用Flaash PlaayerrPixxel Bennderr。1、一个个核可以以包含区区域函数数的定义义,其中中有预定定义的名名字和签签名,并并提供像像素机运运行时引引擎有多多少空间间的帮助助信息从从这一核核心计算算输出图图像的像像素分配配建筑。有关详详细信息息,参见见4章,“工作区区”2、内核核也可以以定义附附加任意意的支持持功能,它它可以被被称为只只有从eevalluattepiixell()或或evaaluaateddepeendeentss()。区域功能能的例子子kernnel RottateeAnddCommpossitee parrameeterr flloa
36、tt thhetaa; / 旋旋转角度度 parrameeterr flloatt2 ccentter / 旋转中中心 ; deppenddentt flloatt3x33 baack_xfoorm; / rootattionn maatriix (froom deppenddentt flloatt3x33 fwwd_xxforrm; / andd innverrse inpput imaage44 fooreggrouund; inpput imaage44 baackggrouund; outtputt piixell4 rresuult; /计计算变换换矩阵及及其逆矩矩阵(iinvee
37、rsee) voiid eevalluatteDeepenndennts() / trransslatte ccentter to oriiginn flloatt3x33 trransslatte = flloatt3x33( 1, 0, 0, 0, 1, 0, -ccentter.x, -ceenteer.yy, 11 ); / 旋转转 flloatt3x33 rootatte = flloatt3x33( coos(tthetta), siin(tthetta), 0, -ssin(theeta), ccos(theeta), 00, 00, 00, 11 ); / 合成成得到完完整的F
38、FWD变变换 fwwd_xxforrm = -ttrannslaate*rottatee*trransslatte; / 得到到逆矩阵阵 rootatte0011 = -rrotaate01; rootatte1100 = -rrotaate10; / 合成成得到完完整的反反变换 baack_xfoorm = ttrannslaate*rottatee*-ttrannslaate; / 主要职职能的转转变ouutcooordd找到前前景像素素 voiid eevalluattePiixell() / 背景景坐标是是目的地地的坐标标 flloatt2 bbg_ccoorrd = ouutCooo
39、rdd(); / 坐标标转换ooutccoorrd前景景 / 注意意转换至至flooat33,然后后滴W与调酒酒 flloatt2 ffg_ccoorrd = (bbackk_xfformm*flloatt3(bbg_ccoorrd.xx, bbg_ccoorrd.yy, 11).xy; / Allphaa混合前前景从背背景 piixell4 bbg_ppixeel = saamplleNeeareest(bacckgrrounnd, bg_cooord); piixell4 ffg_ppixeel = saamplleLiineaar(fforeegrooundd, ffg_ccoorrd)
40、; reesullt = miix(bbg_ppixeel, fg_pixxel, fgg_piixell.a); / 需要的的功能是是不同的的取决于于输入 reggionn neeedeed(rregiion outtputt_reegioon,iimaggeReef iinpuut_iindeex ) reegioon rresuult; iff( iinpuut_iindeex = bbackkgrooundd ) / 背背景是未未转化的的,所以以只是路路过 rresuult = ooutpput_reggionn; ellse / 变变换输出出区为前前景空间间 rresuult = t
41、trannsfoorm( baack_xfoorm, ouutpuut_rregiion ); reeturrn rresuult; / 改变的的功能是是需要的的功能而而不同 / traansfformm seensee reggionn chhangged(reggionn innputt_reegioon, imaageRRef inpput_inddex ) reegioon rresuult; iff( iinpuut_iindeex = bbackkgrooundd ) rresuult = iinpuut_rregiion; ellse rresuult = ttrannsfoor
42、m( fwwd_xxforrm, inpput_reggionn ); reeturrn rresuult; 一个支持持函数的的例子你可以定定义附加加支持的的功能在在一个内内核减少少代码重重复。在在这示例例代码来来计算高高斯模糊糊滤镜高高斯重量量转移到到一个支支持功能能kernnel GauussiianBBlurr deppenddentt flloatt weeighht0; deppenddentt flloatt weeighht1; deppenddentt flloatt weeighht2; deppenddentt flloatt weeighht3; deppenddentt
43、 flloatt weeighht4; inpput imaage44 soourcce; outtputt piixell4 rresuult; flooat callcullateeWeiightt( ffloaat rr, ffloaat ssigmma ) flloatt c = 11.0 / ( sqqrt( 2.0 * 3.1411592265335 ) * siggma ); flloatt ecc = 2.00 * siggma * ssigmma; reeturrn eexp( -( r * rr ) / eec ) * c; voiid eevalluatteDeepenn
44、dennts() coonstt flloatt siigmaa = 2.00; weeighht0 = ccalcculaateWWeigght( 0.0, siggma ); weeighht1 = ccalcculaateWWeigght( 1.0, siggma ); weeighht2 = ccalcculaateWWeigght( 2.0, siggma ); weeighht3 = ccalcculaateWWeigght( 3.0, siggma ); weeighht4 = ccalcculaateWWeigght( 4.0, siggma ); voiid eevallua
45、ttePiixell() flloatt4 aacc = ffloaat4( 0.0 ); accc += ssamppleNNearrestt( ssourrce, ouutCooordd() ) * weeighht0; accc += saamplleNeeareest( soourcce, outtCooord() + flloatt2( 1.00, 00.0 ) ) * weiightt1; accc += ssamppleNNearrestt( ssourrce, ouutCooordd() + ffloaat2( -11.0, 0.0 ) ) * wweigght11; accc
46、 += ssamppleNNearrestt( ssourrce, ouutCooordd() + ffloaat2( 2.0, 0.00 ) ) * weeighht2; accc += ssamppleNNearrestt( ssourrce, ouutCooordd() + ffloaat2( -22.0, 0.0 ) ) * wweigght22; accc += ssamppleNNearrestt( ssourrce, ouutCooordd() + ffloaat2( 3.0, 0.00 ) ) * weeighht3; accc += ssamppleNNearrestt( s
47、sourrce, ouutCooordd() + ffloaat2( -33.0, 0.0 ) ) * wweigght33; accc += ssamppleNNearrestt( ssourrce, ouutCooordd() + ffloaat2( 4.0, 0.00 ) ) * weeighht4; accc += ssamppleNNearrestt( ssourrce, ouutCooordd() + ffloaat2( -44.0, 0.0 ) ) * wweigght44; reesullt = accc; Pixeel BBendde工作作区域Pixeel BBendder图
48、图形语言言标记数据据元素开发后期期效果本章介绍绍了更多多的技术术,对PPixeel BBendder程程序的使使用效果果的一个个焦点后的影响响。所有有的例子子使用44通道的的输入和和输出,所所支持的的后效应应。添加核心心数据元元素后的的效果定义了两两个额外外的核心心元数据据属性对对效果造造成的影影响,这这两者都都是可选选的:dispplayynamme效果名称称显示在在效果和和预置面面板中。如果果没有指指定,该该内核使使用这个个名字。cateegorry效果的类类别。默默认是“PPixeel BBendder类例如,下下面是简简单的身身份内核核,改编编后的影影响通过过包括额额外的元元数据的的值
49、,只只使用44通道的的输入和和输出的的图像: kernnel Ideentiity inpput imaage44 soourcce; outtputt piixell4 rresuult; voiid eevalluattePiixell() reesullt = saamplleNeeareest(souurcee, ooutCCoorrd(); 访问通道道的值只允许44通道的的输入和和输出的的图像的的效果。我们的的第一运运动,我我们将修修改evvaluuateepixxel()功能能调节的的输入图图像的不不同通道道的值。 voiid eevalluattePiixell() flloat
50、t4 ttempp = sammpleeNeaaresst(ssourrce, ouutCooordd(); reesullt.rr = 0.55 * temmp.rr; reesullt.gg = 0.66 * temmp.gg; reesullt.bb = 0.77 * temmp.bb; reesullt.aa = temmp.aa; 这表明你你如何访访问不同同的通道道后点使使用的信信道的名名称的第第一个字字母算子子。这个个例子是是颜色通通道,且且不改变变不透明明度(aalphha通道道)。这这是另一一种方式式来访问问不同的的渠道,对对所有的的颜色在在一个单单一的操操作:voidd ev
51、valuuateePixxel() floaat4 temmp = saamplleNeeareest(souurcee, ooutCCoorrd(); floaat3 facctorr = flooat33(0.5, 0.66, 00.7); resuult.rgbb = facctorr * temmp.rrgb; resuult.a = teemp.a; 一个更紧紧凑的代代码版本本是:voidd evvaluuateePixxel() flooat44 teemp = ssamppleNNearrestt(soourcce, outtCooord(); ressultt = flooat
52、44( 00.5, 0.6, 0.77, 11.0) * temmp;在这种情情况下,渠渠道不明明确,所所以温度度和结果果的所有有通道都都使用。卷积的一一个例子子卷积是一一种常见见的图像像处理操操作,滤滤波器的的图像计计算的总总和源图图像和一一个较小小的图像像之间的的产品,称称为卷积积过滤或或卷积面面膜。根根据价值值选择中中的卷积积口罩,一一个卷积积运算可可以执行行平滑,锐锐化,边边缘检测测,和其其他有用用的成像像操作。在这一一章中,我我们将建建立在这这个例子子演示了了一些PPixeel BBendder特特征具体体的影响响后。这这个例子子开始利利用卷积积平滑图图像。图图像可以以被简单单地掩码
53、码中包含含的像素素平均。平滑滤滤波模板板是一个个半径为为1的333的面具具:1, 1, 1 1, 1, 1 1, 1, 1内核定义义了这个个面具作作为33不变,ssmoooth_massk:consst ffloaat3xx3 ssmoooth_massk = flloatt3x33( 11.0, 1.0, 1.00, 11.0, 1.0, 1.00, 11.0, 1.0, 1.00);用户定义义的函数数,coonvoolvee(),实实现了其其核心算算法。它它存储的的smooothh_maask阵阵列在整个输输入图像像。然后后,归一一化的结结果除以以9(的系系数的总总和面具具)。floaat
54、4 connvollve(flooat33x3 in_kerrnell, ffloaat ddiviisorr) flloatt4 cconvv_reesullt = flloatt4(00.0, 0.0, 0.00, 00.0); flloatt2 oout_cooord = ooutCCoorrd(); foor(iint i = -11; ii = 1; +i) ffor(intt j = -1; j = 11; +j) connv_rresuult += sammpleeNeaaresst(ssourrce, outt_cooordd + flooat22(i, j) * piixel
55、lSizze(ssrc) * in_kerrnelli + 11jj + 1; coonv_ressultt /= diivissor; reeturrn cconvv_reesullt; 最后,该该evaaluaateppixeel()函数调调用的cconvvolvve()功能,并并返回在在内核中中的结果果输出图像像: vooid evaaluaatePPixeel() flloatt4 cconvv_reesullt = coonvoolvee(smmootth_mmaskk, ssmoooth_divvisoor); reesullt = coonv_ressultt; 这里是卷卷积滤波
56、波器掩模模与输入入图像的的完整的的内核 kernnel ConnvKeerneel inpput imaage44 soourcce; outtputt piixell4 rresuult; connst flooat33x3 smooothh_maask = ffloaat3xx3( 1.00, 11.0, 1.0, 1.00, 11.0, 1.0, 1.00, 11.0, 1.0); connst flooat smooothh_diivissor = 99.0; flooat44 coonvoolvee(flloatt3x33 inn_keerneel, flooat divvisoor
57、) flloatt4 cconvv_reesullt = flloatt4(00.0, 0.0, 0.00, 00.0); flloatt2 oout_cooord = ooutCCoorrd(); foor(iint i = -11; ii = 1; +i) ffor(intt j = -1; j = 11; +j) connv_rresuult += sammpleeNeaaresst(ssourrce, outt_cooordd + flooat22(i, j) * inn_keerneelii + 1j + 1; coonv_ressultt /= diivissor; reeturr
58、n cconvv_reesullt; voiid eevalluattePiixell() flloatt4 cconvv_reesullt = coonvoolvee(smmootth_mmaskk, ssmoooth_divvisoor); reesullt = coonv_ressultt; reggionn neeedeed( reggionn ouutpuut_rregiion, immageeReff innputt_inndexx ) reegioon rresuult = ooutpput_reggionn; reesullt = ouutseet( ressultt, ffl
59、oaat2( 1.0, 1.00 ) ); reeturrn rresuult; reggionn chhangged( reegioon iinpuut_rregiion, immageeReff innputt_inndexx ) reegioon rresuult = iinpuut_rregiion; reesullt = ouutseet( ressultt, ffloaat2( 1.0, 1.00 ) ); reeturrn rresuult; 核参数的的影响后后后效应的的定义可可选参数数的元数数据效仿仿它自己己的一套套参数:aeDiispllayNNamee一个内内核参数数的默认
60、认显示名名称参数数名称。因为PPixeel BBendder参数名称称不能包包含空格格或其他他保留字字符,您您可以使使用此元元数据值值指定一个个用户友友好的字字符串的的影响后后,用于于引用该该参数的的任何地地方出现现在UI。比如说说呢。paraametter flooat myKKernnelPParaam ;aeUIIConntrool此元元数据值值告诉的的影响后后,什么么样的UUI控件件使用允允许用户户输入参数。允允许的值值依赖于于参数的的数据类类型:数据类型型允许控制制的值intaeUIIConntrool:aePPopuup需需要一个个额外的的元数据据值以指指定的弹弹出菜单单值,作作为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度煤炭行业环保合规审查服务合同4篇
- 二零二五年度建筑工程施工材料设备采购承包合同3篇
- 二零二五年度冲击锤施工项目进度跟踪与协调合同3篇
- 2025年食品添加剂原料批发合同3篇
- 二零二五年度木工雕刻工艺合作合同4篇
- 2025年新型GRC装饰构件采购合同文本2篇
- 2025年度跨境电商贸易融资担保合同
- 2025版美缝施工工程风险管理与应急预案合同4篇
- 二零二四坯布绿色供应链采购合同规范3篇
- 二零二五年度农业科技聘用研发人员合同2篇
- 割接方案的要点、难点及采取的相应措施
- 2025年副护士长竞聘演讲稿(3篇)
- 2024年08月北京中信银行北京分行社会招考(826)笔试历年参考题库附带答案详解
- 原发性肾病综合征护理
- 2024年高考英语复习(新高考专用)完形填空之词汇复现
- 【京东物流配送模式探析及发展对策探究开题报告文献综述4100字】
- 施工现场工程令
- 药物经济学评价模型构建
- Daniel-Defoe-Robinson-Crusoe-笛福和鲁滨逊漂流记全英文PPT
- 第一章威尔逊公共行政管理理论
- 外科护理(高职护理专业)PPT完整全套教学课件
评论
0/150
提交评论