﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-DavidLew-随笔分类-Compositing</title><link>http://www.cnitblog.com/DavidLew/category/3667.html</link><description>VFX,MAYA,RENDERMAN etc...</description><language>zh-cn</language><lastBuildDate>Thu, 29 Sep 2011 03:20:10 GMT</lastBuildDate><pubDate>Thu, 29 Sep 2011 03:20:10 GMT</pubDate><ttl>60</ttl><item><title>几种抠象技术理论试验－1 (Luma-Key,Chroma-Key)</title><link>http://www.cnitblog.com/DavidLew/archive/2006/08/27/16052.html</link><dc:creator>DavidLew</dc:creator><author>DavidLew</author><pubDate>Sun, 27 Aug 2006 12:02:00 GMT</pubDate><guid>http://www.cnitblog.com/DavidLew/archive/2006/08/27/16052.html</guid><wfw:comment>http://www.cnitblog.com/DavidLew/comments/16052.html</wfw:comment><comments>http://www.cnitblog.com/DavidLew/archive/2006/08/27/16052.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/DavidLew/comments/commentRss/16052.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/DavidLew/services/trackbacks/16052.html</trackback:ping><description><![CDATA[
		<br />
		<b>Key </b>
		<br />
		<br />
		<b>
		</b>
		<b>  </b>
		<br />
		<b>  </b>
		<br />
		<b>  </b>
		<br />
		<b>  </b>
		<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?>
		<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke join=""></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path></v:shapetype>
		<v:shape id="_x0000_i1025">
				<v:imagedata src="file:///D:\temp\msohtml1\10\clip_image001.jpg" o:title="PhotoshopScreenSnapz001">
				</v:imagedata>
		</v:shape>
		<br />
		<b>  </b>
		<br />
		<b>  </b>
		<br />
		<b>  </b>
		<br />符号以及数值约定 <br />一．          Key 的基础概念 <br />二．          Luma-Key <br />三．          Chroma-Key <br />四．          Channel Key 使用颜色通道进行抠像 <br />五．          Color Difference Mattes <br />六．          DV key <br />七．          参考资料 <br />  <br />  <br />  <br />  <br />  <br />  <br />  <br />  <br />  <br />  <br />  <br />  <br />  <br />  <br />  <br />  <br />  <br />  <br />  <br />  <br />在开始之前先确定数值以及符号约定 <br />默认的图像空间是：RGB空间 <br />使用和Shake一样的float表示颜色数值，颜色范围从 [0-1] 0：表示纯白 1：表示纯黑，0.5表示50%灰。 <br />红色使用  (1,0,0) 符号表示。 <br />R 表示 红通道 <br />G 表示 绿通道 <br />B 表示 蓝通道 <br />使用Apple Shake作为试验软件。 <br />  <br />一．          Key 的基础概念 <br />  <br />什么是Mattes: <br />Mattes 控制其他图像透明与不透明的图像。Mattes通常是只包含一个通道，是一幅黑白图像，通常黑色的区域代表完全透明，而白色区域代表完全不透明，而灰色区域表示着半透明。 <br />数字合成中的一个重要的操作就是从一幅图像中提取所要的前景，让它与背景分离起来，这个过程就叫做提取Mattes,也叫做Keying，也就是我们所说的抠像。 <br />抠像的方法有很多种，实际上每种合成软件中都提供了很多商业插件，而我们这里要描述的不是这些商业的插件的使用方法，而且数字合成中的一些基本基础知识和基本抠像手段，以及这些抠像手段的原理及应用。 <br />选择那种抠像手段要取决于你的素材，而且拍的摄素材对前期的拍摄有一些要求，所以在抠像之前先要对素材进行分析。分析它的亮度范围，分析它的色彩，分析它的遮挡关系，分析它的拍摄设备(电影胶片摄影机器，广播Dv摄影机等)，分析要提取的范围以及背景等，通常一种抠像手段是很难达到要求的，这时候就需要多种手段并用，达到最终目的，但是在应用之前首先要了解这些基本手段的原理，这样才能够灵活的使用它们，这也是本文所要达到的目的。 <br />如果使用技术手段无法达到要求的时候，可以使用手绘Mask的方式进行手工提取，如果对于动态的序列帧，那么就要对每一帧进行Mask动画，但是这些工作量是非常大的，可以使用软件抠像得到“大约”Matte，结合手绘Mask，就能减轻工作量。 <br />为了更好的进行后期的抠像，在前期拍摄的时候，为了更好的提取所要的区域，通常使用蓝屏或者绿屏做为背景，为什么选用蓝屏或者绿屏呢？这有很多的解释，大家可以看使用通道操作进行抠像的部分可以有所了解。 <br />下面我们讲介绍几种抠像基础方法： <br />二．          Luma-Key （亮度抠像） <br />亮度抠像主要是基于图像的暗部和亮部来创建Matte的。 <br />工作原理： <br />首先把一幅含有RGB通道的图像转换为单通道的黑白图像，这幅黑白图像就代表着这幅图像的亮部和暗部区域。下面将设置两个数值lowValue,hightValue，只要黑白图像的数值大于hightValue，那么将会把这个数值设置为纯白色，如果小于lowValue就设置为纯黑色。下图形象化的展示了上面文字。 <br /><img height="437" alt="1.jpg" src="http://www.cnitblog.com/images/cnitblog_com/davidlew/cgimage/1.jpg" width="579" border="0" /><br />三维的山峰表示了黑白图像的亮度分布范围，山峰高出的区域代表图像像素的亮度越高。 <br />使用2图的一个切割刀，可以对原来的图像的亮度区域进行修改。 <br />通过对黑白图像亮度区域进行操作，可以得到Matte,通常这个不会那么的完美，然后对这个使用图像亮度得到的Matte进行二次处理，或者和其他方法生成的Matte进行合成，就能够生成想要的Matte. <br />1.     使一幅RGB图像转换为单通道的BW（黑白）图像。 <br />亮度方程 <br />L （亮度）= 0.29*R+0.59*G+0.12*B <br />使用Shake ColorX节点，实现公式。 <br /><v:shape id="_x0000_i1036"><v:imagedata src="file:///D:\temp\msohtml1\07\clip_image002.jpg" o:title="rgb-m"></v:imagedata></v:shape><img height="413" alt="2.jpg" src="http://www.cnitblog.com/images/cnitblog_com/davidlew/cgimage/2.jpg" width="526" border="0" /><br />解释：使用ColorX节点可以对RGBAZ通道进行表达式控制。 <br />表示使用29%的红加上59%的绿加上12%的蓝构成一幅黑白图像， <br />因为眼睛对绿色比较敏感，所以绿色所占的比重要高于其他色成分。 <br />    2 ．对这幅黑白图像进行处理 <br />       现在已经把图像的亮度信息提出出来了，现在对这个黑白的亮度图像进行处理，就   得到想要的Matte. <br />       Shake 已经提供的LumaKey 不过在这里我们使用shake其他节点 <br />       来实现和完善一个MyLumakey。 <br />       下图是Shake节点网及解释 <br /><v:shape id="_x0000_i1025"><v:imagedata src="file:///D:\temp\msohtml1\07\clip_image004.jpg" o:title="Sna5"></v:imagedata></v:shape><img height="539" alt="3.jpg" src="http://www.cnitblog.com/images/cnitblog_com/davidlew/cgimage/3.jpg" width="704" border="0" /><br />大家可以把这幅图片和Shake的LumaKey节点连接比较一下，你会发现最终效果是一样的。 <br />提示：如果想对亮度黑白图像进行更加多的控制，可以使用Shake-〉Color-〉Lookup节点，可以用曲线调节整幅图像，如果想实现Expand的效果必须同时对RGB曲线同时进行调节。 <br />  <br />  总结：Lumakey 的原理流程如下。 <br /><v:shape id="_x0000_i1026"><v:imagedata src="file:///D:\temp\msohtml1\07\clip_image006.jpg" o:title="Snap9"></v:imagedata></v:shape><img height="103" alt="4.jpg" src="http://www.cnitblog.com/images/cnitblog_com/davidlew/cgimage/4.jpg" width="645" border="0" /><br />  <br />三．          Chroma-Key （色度抠像） <br />理解RGB三维空间： <br />大家在初中时候刚学习初等几何时候，接触过坐标系的概念，方便的把代数问题可视化，方便分析问题，普通的立体空间坐标系，一般用xyz来表示，横，竖，纵三个方向，如果使用像素的RGB数值来表示三个向量方向，就可以组成一个新的坐标系，这个坐标系通常称为RGB空间，因为RGB数值可以在显示器上表示颜色，这样把整个RGB空间使用颜色像素完全填充，下图就是显示结果。可以看到一个立方体，实际上还有很多颜色空间。比如大家比较熟悉的hsv。 <br /><v:shape id="_x0000_i1028"><v:imagedata src="file:///D:\temp\msohtml1\07\clip_image008.jpg" o:title="RGB_Space"></v:imagedata></v:shape><img height="400" alt="RGB_Space.jpg" src="http://www.cnitblog.com/images/cnitblog_com/davidlew/cgimage/RGB_Space.jpg" width="432" border="0" /><br />下图就是hsv空间，可以看到一个类似锥体的立体模型，不同形状说明他们轴向实现的方程是不一样的。 <br /><v:shape id="_x0000_i1027"><v:imagedata src="file:///D:\temp\msohtml1\07\clip_image010.jpg" o:title="HSV"></v:imagedata></v:shape><img height="216" alt="HSV.jpg" src="http://www.cnitblog.com/images/cnitblog_com/davidlew/cgimage/HSV.jpg" width="291" border="0" /><br />如果把一幅使用RGB表示的图像放入这个空间中，就可以通过这个坐标系来观察和分析整幅图像的红绿蓝颜色分布了，因为引入了立体坐标系，所以可以使用研究立体几何的方法来研究和处理图像了。这里将介绍Chroma-Key的一些原理，其中很多的概念和思路，大家可以借鉴一下，或者说发展一下，特别是对以后学习3D抠象有一个更加好的基础。 <br />  <img height="240" alt="picinrgb.jpg" src="http://www.cnitblog.com/images/cnitblog_com/davidlew/cgimage/picinrgb.jpg" width="320" border="0" /><br /><v:shape id="_x0000_i1029"><v:imagedata src="file:///D:\temp\msohtml1\07\clip_image011.jpg" o:title="picinrgb"></v:imagedata></v:shape><br />一幅图像在rgb空间的分布 <br />点距离公式： <br />在高中时候肯定都学过两点在2d和３d坐标系中的距离公式，我们把它应用在我们的RGB空间中。 <br />    假设在xyz坐标系中有两点p1(r1,g1,b1),p2(r2,g2,b2),距离为D. <br />RGB 空间中两点之间距离公式： <br /><v:shape id="_x0000_i1030"><v:imagedata src="file:///D:\temp\msohtml1\07\clip_image013.jpg" o:title="dist-rgb"></v:imagedata></v:shape><img height="500" alt="dist-rgb.jpg" src="http://www.cnitblog.com/images/cnitblog_com/davidlew/cgimage/dist-rgb.jpg" width="640" border="0" /><br />考虑一下P1,P2这两个像素点，如果这两个像素颜色接近，也就是他们的RGB数值接近，那么D就会接近零，反映在颜色上就是接近黑色，如果两个像素点的颜色差异很大，也就是 <br />RGB 数值之间差比较大，那么D就会很大，因为我们实现约定了，RGB范围在0-1之间，所以，最大距离如果大于1，那么就显示为白色，如果小于0，将显示为黑色。 <br />我们在拍摄时候蓝屏，或者绿屏目的就是为了使前景和背景差异很大，所以上面的这个公式就能够帮助我们生成一张距离图。因为距离是单一浮点数，所以产生的这张图是单通道黑白的。 <br /><v:shape id="_x0000_i1031"><v:imagedata src="file:///D:\temp\msohtml1\07\clip_image015.jpg" o:title="ShakeScreenSnapz002"></v:imagedata></v:shape><img height="477" alt="ShakeScreenSnapz002.jpg" src="http://www.cnitblog.com/images/cnitblog_com/davidlew/cgimage/ShakeScreenSnapz002.jpg" width="630" border="0" /><br />一张Distance map. <br />这张图片假设公式中，P1点在前景，P2点是背景蓝色的一张单一颜色图像，对这两张图片求距离得到的。女孩后面的黑色说明蓝布与我们要提出的颜色相近，所以距离接近黑色，女孩身上很少的蓝色，所以距离就接近白色，我们可以惊奇的发现，可以使用任何一种颜色作为比较色来提取这样的距离图。 <br />有这样一个“大约“Matte,我们可以对这个图像进行调色处理，比如增加对比度，可以绘制遮罩等进行处理。 <br />理解了上面的一些以后，关于Chroma-Key的一些解释就很好理解了。 <br />Chroma-Key 　顾名思义就是通过色调来提取Matte,上面我们说过，如果我们预先对我们的图像进行调色处理，对于想要的像素，加大他与不想要的像素颜色之间的距离，对于不想要的像素，减小与不想要像素的颜色之间的距离，就可以达到提取matte的目的。 <br />Chroma-Key 是首先把图像转换到HSV空间，然后对整幅图像进行调节，调节它的色调的偏移，范围，饱和度偏移，范围等，来达到上述目的。在Shake  中有一个很好的hsv调节工具，就是HueCurves,可以使用hue曲线对图像进行精细调节。 <br />下图就是HueCurves节点的参数区。 <br /><v:shape id="_x0000_i1032"><v:imagedata src="file:///D:\temp\msohtml1\07\clip_image017.jpg" o:title="ShakeScreenSnapz003"></v:imagedata></v:shape><img height="379" alt="ShakeScreenSnapz003.jpg" src="http://www.cnitblog.com/images/cnitblog_com/davidlew/cgimage/ShakeScreenSnapz003.jpg" width="601" border="0" /><br />下面我们把上面的理论总结一下，在shake中实现我们调节功能更加强大的MyChroma-Key。 <br />  <img height="694" alt="MyChromaKey.jpg" src="http://www.cnitblog.com/images/cnitblog_com/davidlew/cgimage/MyChromaKey.jpg" width="775" border="0" /><br /><v:shape id="_x0000_i1033"><v:imagedata src="file:///D:\temp\msohtml1\07\clip_image019.jpg" o:title="MyChromaKey"></v:imagedata></v:shape><br />这里的ContrastLum是对图像进行对比度处理，可以在此段区域内，对Distance Map进行调色处理，使用HueCurves进行调节时候，比如可以降低bHue的红色范围数值，因为前景女孩穿的是含红量高的衣服，比如可以增加rHue的红色范围数值，让女孩前景的颜色更加远离背景。 <br />  <br />这也是很多商业抠象软件的基本原理，因为抠象实际是把分布在RGB空间中的一些部分给剔除掉的过程，比如Infeno中就使用三维来显示一幅图像分布，中间的三维物体表示剔出的区域，这样对这个三维物体进行参数调节或者“建模“处理，就可以得到想要的matte。 <br />大家可以按照这个思路，使用立体几何的公式或者概念，加上Shake提供的方便的表达式节点，可以试验出更加有意思的抠象或者调色技术。 <br /><v:shape id="_x0000_i1034"><v:imagedata src="file:///D:\temp\msohtml1\07\clip_image021.jpg" o:title="预览ScreenSnapz001"></v:imagedata></v:shape><br />  <br /> <img src ="http://www.cnitblog.com/DavidLew/aggbug/16052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/DavidLew/" target="_blank">DavidLew</a> 2006-08-27 20:02 <a href="http://www.cnitblog.com/DavidLew/archive/2006/08/27/16052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>