我正在尝试使用 swift 高效地计算 macOS/iOS 上图像的香农熵(-sum(pi * log pi) 公式)。我找到了 Accelerate 框架和 vImage 函数,它们看起来像我正在寻找的,但是文档很少,我迷失了方向。
我正在像这样创建 vImage 缓冲区
var format = vImage_CGImageFormat(
bitsPerComponent: 8,
bitsPerPixel: 8 * 4,
colorSpace: CGColorSpace(name: CGColorSpace.displayP3)!,
bitmapInfo: .init(rawValue: CGImageAlphaInfo.noneSkipFirst.rawValue))!
let buf = try vImage.PixelBuffer(
cgImage: cg,
cgImageFormat: &format,
pixelFormat: vImage.Interleaved8x4.self)
我的想法是,根据此页面,通过 将其转换为 1 通道灰度缓冲区 ( vImage.PixelBuffer<vImage.Planar8>
) :https: //developer.apple.com/documentation/accelerate/converting_color_images_to_grayscale。然后从中创建直方图,然后手动迭代其 256 个值并计算总和。但是,似乎根本没有方法……while有。buf.multiply()
vImage.PixelBuffer<vImage.Planar8>
histogram()
vImage.PixelBuffer<vImage.Interleaved8x4>
你能指导我正确的做法吗?
从我的经验来看,我觉得你的想法是正确的,但我们可以进一步简化这一点。这些是我以前遵循的一些常见步骤,也从 GPT 获得了一些见解。
步骤
例子
笔记
这是一种比较初级的方法,您可以添加一些其他内容,使其更加自定义。但此解决方案将为所选自定义信息中的用例提供必要的步骤和输出。
如果您有任何疑问,请随时联系我们。