本文转载自:http://blog.sina.com.cn/s/blog_5cebe9cf0100nfea.html

在开始之前先确定数值以及符号约定
默认的图像空间是:RGB空间
使用和Shake一样的float表示颜色数值,颜色范围从 [0-1] 0:表示纯白 1:表示纯黑,0.5表示50%灰。
红色使用  (1,0,0) 符号表示。
R 表示 红通道
G 表示 绿通道
B 表示 蓝通道
使用Apple Shake作为试验软件。
一.          Key 的基础概念
什么是Mattes:
Mattes 控制其他图像透明与不透明的图像。Mattes通常是只包含一个通道,是一幅黑白图像,通常黑色的区域代表完全透明,而白色区域代表完全不透明,而灰色区域表示着半透明。
数字合成中的一个重要的操作就是从一幅图像中提取所要的前景,让它与背景分离起来,这个过程就叫做提取Mattes,也叫做Keying,也就是我们所说的抠像。
抠像的方法有很多种,实际上每种合成软件中都提供了很多商业插件,而我们这里要描述的不是这些商业的插件的使用方法,而且数字合成中的一些基本基础知识和基本抠像手段,以及这些抠像手段的原理及应用。
选择那种抠像手段要取决于你的素材,而且拍的摄素材对前期的拍摄有一些要求,所以在抠像之前先要对素材进行分析。分析它的亮度范围,分析它的色彩,分析它的遮挡关系,分析它的拍摄设备(电影胶片摄影机器,广播Dv摄影机等),分析要提取的范围以及背景等,通常一种抠像手段是很难达到要求的,这时候就需要多种手段并用,达到最终目的,但是在应用之前首先要了解这些基本手段的原理,这样才能够灵活的使用它们,这也是本文所要达到的目的。
如果使用技术手段无法达到要求的时候,可以使用手绘Mask的方式进行手工提取,如果对于动态的序列帧,那么就要对每一帧进行Mask动画,但是这些工作量是非常大的,可以使用软件抠像得到“大约”Matte,结合手绘Mask,就能减轻工作量。
为了更好的进行后期的抠像,在前期拍摄的时候,为了更好的提取所要的区域,通常使用蓝屏或者绿屏做为背景,为什么选用蓝屏或者绿屏呢?这有很多的解释,大家可以看使用通道操作进行抠像的部分可以有所了解。
下面我们讲介绍几种抠像基础方法:
二.          Luma-Key (亮度抠像)
亮度抠像主要是基于图像的暗部和亮部来创建Matte的。
工作原理:
首先把一幅含有RGB通道的图像转换为单通道的黑白图像,这幅黑白图像就代表着这幅图像的亮部和暗部区域。下面将设置两个数值lowValue,hightValue,只要黑白图像的数值大于hightValue,那么将会把这个数值设置为纯白色,如果小于lowValue就设置为纯黑色。下图形象化的展示了上面文字。

三维的山峰表示了黑白图像的亮度分布范围,山峰高出的区域代表图像像素的亮度越高。
使用2图的一个切割刀,可以对原来的图像的亮度区域进行修改。
通过对黑白图像亮度区域进行操作,可以得到Matte,通常这个不会那么的完美,然后对这个使用图像亮度得到的Matte进行二次处理,或者和其他方法生成的Matte进行合成,就能够生成想要的Matte.
1.     使一幅RGB图像转换为单通道的BW(黑白)图像。
亮度方程
L (亮度)= 0.29*R+0.59*G+0.12*B
使用Shake ColorX节点,实现公式。

解释:使用ColorX节点可以对RGBAZ通道进行表达式控制。
表示使用29%的红加上59%的绿加上12%的蓝构成一幅黑白图像,
因为眼睛对绿色比较敏感,所以绿色所占的比重要高于其他色成分。
    2 .对这幅黑白图像进行处理
       现在已经把图像的亮度信息提出出来了,现在对这个黑白的亮度图像进行处理,就   得到想要的Matte.
       Shake 已经提供的LumaKey 不过在这里我们使用shake其他节点
       来实现和完善一个MyLumakey。
       下图是Shake节点网及解释

提示:如果想对亮度黑白图像进行更加多的控制,可以使用Shake-〉Color-〉Lookup节点,可以用曲线调节整幅图像,如果想实现Expand的效果必须同时对RGB曲线同时进行调节。
  总结:Lumakey 的原理流程如下。

三.          Chroma-Key (色度抠像)
理解RGB三维空间:
大家在初中时候刚学习初等几何时候,接触过坐标系的概念,方便的把代数问题可视化,方便分析问题,普通的立体空间坐标系,一般用xyz来表示,横,竖,纵三个方向,如果使用像素的RGB数值来表示三个向量方向,就可以组成一个新的坐标系,这个坐标系通常称为RGB空间,因为RGB数值可以在显示器上表示颜色,这样把整个RGB空间使用颜色像素完全填充,下图就是显示结果。可以看到一个立方体,实际上还有很多颜色空间。比如大家比较熟悉的hsv。

下图就是hsv空间,可以看到一个类似锥体的立体模型,不同形状说明他们轴向实现的方程是不一样的。

如果把一幅使用RGB表示的图像放入这个空间中,就可以通过这个坐标系来观察和分析整幅图像的红绿蓝颜色分布了,因为引入了立体坐标系,所以可以使用研究立体几何的方法来研究和处理图像了。这里将介绍Chroma-Key的一些原理,其中很多的概念和思路,大家可以借鉴一下,或者说发展一下,特别是对以后学习3D抠象有一个更加好的基础。

一幅图像在rgb空间的分布
点距离公式:
在高中时候肯定都学过两点在2d和3d坐标系中的距离公式,我们把它应用在我们的RGB空间中。
    假设在xyz坐标系中有两点p1(r1,g1,b1),p2(r2,g2,b2),距离为D.
RGB 空间中两点之间距离公式:

考虑一下P1,P2这两个像素点,如果这两个像素颜色接近,也就是他们的RGB数值接近,那么D就会接近零,反映在颜色上就是接近黑色,如果两个像素点的颜色差异很大,也就是
RGB 数值之间差比较大,那么D就会很大,因为我们实现约定了,RGB范围在0-1之间,所以,最大距离如果大于1,那么就显示为白色,如果小于0,将显示为黑色。
我们在拍摄时候蓝屏,或者绿屏目的就是为了使前景和背景差异很大,所以上面的这个公式就能够帮助我们生成一张距离图。因为距离是单一浮点数,所以产生的这张图是单通道黑白的。

一张Distance map.
这张图片假设公式中,P1点在前景,P2点是背景蓝色的一张单一颜色图像,对这两张图片求距离得到的。女孩后面的黑色说明蓝布与我们要提出的颜色相近,所以距离接近黑色,女孩身上很少的蓝色,所以距离就接近白色,我们可以惊奇的发现,可以使用任何一种颜色作为比较色来提取这样的距离图。
有这样一个“大约“Matte,我们可以对这个图像进行调色处理,比如增加对比度,可以绘制遮罩等进行处理。
理解了上面的一些以后,关于Chroma-Key的一些解释就很好理解了。
Chroma-Key  顾名思义就是通过色调来提取Matte,上面我们说过,如果我们预先对我们的图像进行调色处理,对于想要的像素,加大他与不想要的像素颜色之间的距离,对于不想要的像素,减小与不想要像素的颜色之间的距离,就可以达到提取matte的目的。
Chroma-Key 是首先把图像转换到HSV空间,然后对整幅图像进行调节,调节它的色调的偏移,范围,饱和度偏移,范围等,来达到上述目的。在Shake  中有一个很好的hsv调节工具,就是HueCurves,可以使用hue曲线对图像进行精细调节。
下图就是HueCurves节点的参数区。

下面我们把上面的理论总结一下,在shake中实现我们调节功能更加强大的MyChroma-Key。

这里的ContrastLum是对图像进行对比度处理,可以在此段区域内,对Distance Map进行调色处理,使用HueCurves进行调节时候,比如可以降低bHue的红色范围数值,因为前景女孩穿的是含红量高的衣服,比如可以增加rHue的红色范围数值,让女孩前景的颜色更加远离背景。
这也是很多商业抠象软件的基本原理,因为抠象实际是把分布在RGB空间中的一些部分给剔除掉的过程,比如Infeno中就使用三维来显示一幅图像分布,中间的三维物体表示剔出的区域,这样对这个三维物体进行参数调节或者“建模“处理,就可以得到想要的matte。
大家可以按照这个思路,使用立体几何的公式或者概念,加上Shake提供的方便的表达式节点,可以试验出更加有意思的抠象或者调色技术.

图像算法研究---Luma-Key,Chroma-Key抠图相关推荐

  1. python 学习笔记 - for循环: 字典遍历, 分别打印key, value, key:value

    #遍历字典, 分别打印key, value, key:value emp = {'name':'Tom', 'age':20, 'salary' : 8800.00}for k in emp.keys ...

  2. 出圈问题(java)-----n个人围成一圈,数到key或者key的倍数,出圈,问剩下的最后一个人原来的位置是多少?

    出圈问题---n个人围成一圈,数到key或者key的倍数,出圈,问剩下的最后一个人原来的位置是多少? java版 1.n个人围成一圈,说明它是重复循环的,头就是尾. 2.每次数key或者key的倍数, ...

  3. candidate key, primary key, superkey的区别

    理解前觉得很复杂 理解后觉得很简单 简单的东西简单记录 他们的共同点是:都能确定一个relation里每个tuple的唯一性 关系: superkey包括candidate key, candidat ...

  4. #{key}和${key} 取值的区别

    mybatis中 #{key}和${key} 取值的区别 mapper映射文件 <select id="selectUser" resultType="com.rp ...

  5. can not load key value key was removed or redis-server went away 关于spring 整合redis 以及保存到redis

    spring 整合redis 1. 引用依赖 <!--Redis--> <dependency><groupId>org.springframework.boot& ...

  6. H.266/VVC、VTM、YUV中的各种参数(函数):slice、sps、pps、ss、vps、luma、chroma等

    视频编码方向的小白,本篇是个人看VTM代码时的部分参数笔记,会逐步更新,若有错误请指正 slice 片,一帧可以分为多个片 sps sequence parameter set 序列参数集,解码相关信 ...

  7. 使用FFmpeg实现抠图合并功能(chroma key)

    http://bbs.chinaffmpeg.com/forum.php?mod=viewthread&tid=265&fromuid=3%20(%E5%87%BA%E5%A4%84: ...

  8. 【原创】浅析密码学在互联网支付中的应用|RSA,Hash,AES,DES,3DES,SHA1,SHA256,MD5,SSL,Private Key,Public Key...

    一)概述 什么是互联网支付? 当支付遇到互联网,一场革命自然不可避免.成为现实的是传统的现金支付已经"退居二线",各种在线支付方式成为人们日常消费的主要支付方式.银行推出的网银以及 ...

  9. 图像算法研究---背景虚化算法

    背景虚化算法研究 一,背景虚化特点研究 玩单反的人经常会使用背景虚化来拍摄一些很漂亮的照片,但是,单反毕竟不是每个人都可以玩的,因此,出现了很多软件算法来实现的背景虚化效果. 我们要实现背景虚化,首先 ...

最新文章

  1. 在Mac上写汇编!(一)helloworld nasm on macos
  2. 【文本描述增强】标准屏幕字段文本描述更改增强
  3. select2搜索动态加载
  4. 带你了解APP开发的具体流程
  5. 通达信标记符号_通达信在股票名称后自动标记
  6. linux中孚软件,中孚主机监控与审计系统
  7. Ds1302 时钟芯片的使用
  8. 关于Iphone的手势识别
  9. 专访李果:初生牛犊不怕虎的移动创业者
  10. 致远项目管理SPM系统资源管理之资源台班工时管理
  11. 如何解决个人信息泄露问题
  12. 7-29 修理牧场 (25分)(PTA实验题)
  13. oracle与甲骨文
  14. 海伦公式的计算机表达,海伦公式之算法与程序框图
  15. 浅显理解Java泛型的super和extends
  16. 【CSS】你真的了解font-weight吗?
  17. win32com设置excel打印格式
  18. python多媒体应用:使用python和win32gui一步步教你按需截图和图片文字识别
  19. 《从0到1》读书笔记第11章“顾客不会自动上门”: 当幸福来敲门(完)
  20. 【贪心算法】活动安排问题

热门文章

  1. Windows 程序的生与死----FROM 侯俊杰
  2. Django的DetailView的使用
  3. 精读《素书》精彩语录及感悟篇(一)
  4. 公交车大巴车联网监控管理解决方案
  5. SQL Server 2019的安装与使用
  6. 面试java试岗,面试java开发,让去试岗一般机会大吗?
  7. 云计算带给综合布线基础设施的启示
  8. pix2pix解析以及pytorch实现
  9. xlnx qemu 参数记录 (机器自动生成)
  10. 二阶可导的充要条件_二元函数可微的充要条件