使用Blink Script进行镜头Cleanup

Blink Script是由Foundry公司研发的脚本语言。Blink Script与C++语言颇为相似却又比C++语言更为好玩。首先,Blink Script不仅可以运行GPU平台也可以运行于CPU平台;其次,由于Blink Script的编译平台为Nuke,因此显得更具有交互性和友好性。

在影视后期合成制作过程中,镜头画面的擦除是一个人力密集型的劳动,往往会占用艺术家大量的时间。现在我向大家介绍FrameMedian这个基于BlinkScripts的小工具。FrameMedian尤其适用于处理那些使用固定镜头拍摄的画面,例如擦除马路上的汽车或行人,擦除画面中飘动的雪花等等。相较于Nuke中的FrameBlend节点,FrameMedian避免了帧融合导致的托尾伪影问题。但是,需要注意的是,FrameMedian工具仅对固定镜头拍摄的画面有效,因此,对于含有摄像机运动的镜头,首先需要对镜头进行Stabilize稳定处理。


镜头画面Cleanup前后对比


下面,笔者将对FrameMedian工具中的Blink Script脚本语言作简单说明:
kernel CleanPlater : ImageComputationKernel<eComponentWise> 
//绝大多数的BlinkScripts开始于“kernel”,紧接其后的是该BlinkScripts的名称,例如我们将以下代码取名为“CleanPlater”。同时,我们也会在这一行指定kernel的类型,在本案中,“ImageComputationKernel”拥有“eComponentWise”类型。即,该类型将作用于图像的全部组成部分(RGB和Alpha通道)。//

{
  Image<eRead, eAccessPoint, eEdgeClamped> src1; 
  Image<eRead, eAccessPoint, eEdgeClamped> src2;
  Image<eRead, eAccessPoint, eEdgeClamped> src3;  
  Image<eRead, eAccessPoint, eEdgeClamped> src4;
  Image<eRead, eAccessPoint, eEdgeClamped> src5;
  Image<eRead, eAccessPoint, eEdgeClamped> src6;
  Image<eRead, eAccessPoint, eEdgeClamped> src7; 
  Image<eRead, eAccessPoint, eEdgeClamped> src8;
  Image<eRead, eAccessPoint, eEdgeClamped> src9; 
  Image<eRead, eAccessPoint, eEdgeClamped> src10;
  Image<eRead, eAccessPoint, eEdgeClamped> src11; 
  Image<eRead, eAccessPoint, eEdgeClamped> src12;
  Image<eRead, eAccessPoint, eEdgeClamped> src13;  
  Image<eRead, eAccessPoint, eEdgeClamped> src14;
  Image<eRead, eAccessPoint, eEdgeClamped> src15;
  Image<eRead, eAccessPoint, eEdgeClamped> src16;
  Image<eRead, eAccessPoint, eEdgeClamped> src17; 
  Image<eRead, eAccessPoint, eEdgeClamped> src18;
  Image<eRead, eAccessPoint, eEdgeClamped> src19; 
  Image<eRead, eAccessPoint, eEdgeClamped> src20;
  Image<eWrite> dst;
//现在,我们需要为图像创建输入和输出端口以用于图像数据的导入和输出。在图像的输入方面,我们使用“src”定义输入端,“eRead”定义可以进行图像读取操作,“eAccessPoint”定义可以调用图像中任意像素或任意位置的数值,“eEdgeClamped”定义一旦采样了图像BBox以外的像素则将被裁切掉并赋予于其最近像素数值;在图像的输出方面,我们使用“dst”定义输出端,“eWrite”定义可以图像输出操作。//

  param:
    int frames;
  void define() {
    defineParam(frames, "Frames", 1);
  }
//为BlinkScripts节点的Kernel Parameters属性添加Frames控件。//

  void process() {
    float values[] = {src1(),src2(),src3(),src4(),src5(),src6(),src7(),src8(),src9(),src10(),src11(),src12(),src13(),src14(),src15(),src16(),src17(),src18(),src19(),src20(),};
    float outputS = median(values,  frames);
void process()语句是指在迭代空间进行重复运算。在本案中是指对BlinkScripts节点中的20(或设置更多)个输入端在每一帧进行计算并输出为median变量;
(注:当使用void process(int2 pos)语句时则需要知道x(pos.x)和y(pos.y)的参数信息)//

    dst() = outputS;//输出outpuS的参数信息。
   }
};




FrameMedian工具的Nuke脚本文件

参考链接:

http://www.keller.io/superpose/

https://hagbarth.net/?p=1054



如需文中的BlinkScripts和Nuke Sample文件,请回复邮件地址。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值