我有一个 Int16 或 Int32 数值的数据数组,它们是来自具有 RGGB 像素布局 (CFA) 的 11MP 相机芯片的原始图像数据。数据由相机驱动程序导出为 FITS 数据,在我的例子中,它基本上是一个向量或长字节串或 16 位/像素数据。
我喜欢在 Swift 中将这些数据转换为原始图像格式,以便使用 iOS/Swift 中强大的去拜耳和去马赛克功能和算法。我不打算自己去马赛克,因为 iOS 已经为此提供了一个很棒的库(请参阅 WWDC2016 主题演讲关于使用 Core Image 进行原始处理)。
我需要让 iOS “相信”我的数据是实际的原始图像数据。
我尝试在 Swift 中使用 CreatePixelBufferWithBytes,然后从像素缓冲区使用 CIImage,但无济于事。CIImage.cgimage 不是 RGB 彩色图像。
有没有一种简单的方法可以从原始数值数据在 Swift 中创建原始或 DNG 图像?
这是我尝试使用 CVPixelBuffer 方法的方法,但我没有从中得到任何彩色图像:
imgRawData 是一个 [Int32] 或 [Float32] 数组,其元素个数为 width*height。
var pixelBuffer: CVPixelBuffer?
let attrs = [kCVPixelBufferCGImageCompatibilityKey: kCFBooleanTrue,
kCVPixelBufferCGBitmapContextCompatibilityKey: kCFBooleanTrue ]
CVPixelBufferCreateWithBytes(kCFAllocatorDefault, width, height, kCVPixelFormatType_14Bayer_RGGB, &imgRawData, 2*width, nil, nil, attrs as CFDictionary, &pixelBuffer)
let dummyImg = UIImage(systemName: "star.fill")?.cgImage
let ciiraw = CIImage(cvPixelBuffer: pixelBuffer!)
let cif = CIFilter.lanczosScaleTransform()
cif.scale = 0.25
cif.inputImage = ciiraw
let cii = cif.outputImage
let context: CIContext = CIContext.init(options: nil)
guard let cgi = context.createCGImage(cii!, from: cii!.extent) else { return dummyImg! }
Xcode 的 Quickview 只显示黑白或灰度图像。CGImage 的 SwiftUI 视图也是如此...