ios - 过滤后保留负值

标签 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 的任何值由于 CIKernel 中内核输出的“钳制”性质,(逐点)将被强制为零。

对于许多图像处理算法,例如那些涉及图像金字塔的算法(请参阅我关于如何在 Core Image 中实现这一点的其他问题),重要的是保留这些负值以备后用(例如重建金字塔) .如果0在它们的位置重新使用 ,您实际上会得到不正确的输出。

我已经看到这样一种方法是只存储 abs(image1.rgb - image2.rgb)制作一个新图像,无论负号是否附加到该值,其 RGB 值存储 0 或 1,然后使用 -1 进行乘法混合加权到正确的地方。

还有哪些其他方法可以存储像素值的符号?也许我们可以使用未使用的 alpha channel ?

最佳答案

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

关于ios - 过滤后保留负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38884982/

相关文章:

iphone - 单击按钮时停止dispatch_time_t

ios - 如何在用户快速在textField中输入键时显示键的值

ios - 如何在 coredata/NSManagedObject 模型数据更改与应用程序用户界面之间进行紧密耦合?

ios - Unity3D 4.1 导致 Everyplay 损坏 - "iPhone_GlesSupport.h"丢失

c++ - OpenGL ES 将位图字形渲染为纹理定位问题

android - 基于自定义图 block 的 map 很慢

ios - 向数据库添加信息 Parse.com 错误 PFObject

IOS - 如何应用恒定速度 - Swift 3

ios - 从 NSMutableStrings 循环填充 NSMutableArray 时应用程序崩溃

Swift 计时器方法提前终止应用程序并出现 SIGABRT 错误