【发布时间】:2019-09-12 13:09:06
【问题描述】:
我正在使用CIImage,我需要通过减去 128 然后将每个像素除以 128 来对其进行归一化。我怎么可能用CIFilter来做到这一点
【问题讨论】:
-
这可能会导致负值。您确定这是您想要实现的目标吗?
-
@FrankSchlegel 是的
标签: swift core-image cifilter ciimage
我正在使用CIImage,我需要通过减去 128 然后将每个像素除以 128 来对其进行归一化。我怎么可能用CIFilter来做到这一点
【问题讨论】:
标签: swift core-image cifilter ciimage
不确定这是否有效,但也许您可以应用两个具有静态颜色的混合通道,如下所示:
let gray = CIImage(color: .gray) // this should be 50% white, or 128/255
let subtracted = CIBlendKernel.subtract.apply(foreground: gray, background: inputImage)!
let normalized = CIBlendKernel.divide.apply(foreground: gray, background: subtracted)
请记住,您需要将 CIContext 的工作格式设置为支持负值的格式。
【讨论】:
您可以在 vImage 中实现这一点(假设您的源像素是 UInt8 而目标像素是 Float),而是使用数学从 0...255 转换为 -1...1,使用查找表:
ramp 创建一个包含从-1 到+1 的256 个Float 值的查找表。vImageLookupTable_Planar8toPlanarF 将UInt8 像素转换为-1...+1 单精度值填充目标。您可以将所有代码封装在 CIImageProcessorKernel 中,以将其集成到您的 CI 工作流程中。请参阅:Reading From and Writing to Core Video Pixel Buffers。
【讨论】: