过滤后保留负值

时间:2016-08-10 23:13:21

标签: ios swift opengl-es core-image

考虑真正简单的差异内核

kernel vec4 diffKernel(__sample image1, __sample image2)
    {
       return vec4(image1.rgb - image2.rgb, 1.0);
    }

当用作CIColorKernel时,会产生两个图像之间的差异。但是,image1.rgb < image2.rgb(逐点)由于&#34;钳位&#34;而被强制为零的任何价值。 CIKernel中内核输出的性质。

对于许多图像处理算法,例如那些涉及图像金字塔的算法(参见关于如何在Core Image中实现这一点的另一个问题),保留这些负值以供以后使用(例如,重建金字塔)非常重要。如果在他们的位置使用0,您实际上会得到错误的输出。

我已经看到过这样一种方式就是只存储abs(image1.rgb - image2.rgb)制作一个新图像,RGB值是否存储0或1是否有负号附加到该值,然后执行使用-1加倍混合加权到正确的位置。

还有哪些其他可以存储像素值符号的方法?也许我们可以使用alpha通道,如果它未被使用?

1 个答案:

答案 0 :(得分:0)

我实际上最终搞清楚了 - 您可以在CIContext中使用一个选项来确保使用kCIFormatAf键计算内容。这意味着在该上下文上完成的任何计算都将以浮点精度完成,因此超出[0,1]范围的值将从一个过滤器保留到下一个过滤器!