【发布时间】:2021-05-11 20:24:06
【问题描述】:
我有一个 Int16 或 Int32 数值数据数组,它们是来自具有 RGGB 像素布局 (CFA) 的 11MP 相机芯片的原始图像数据。数据由相机驱动程序导出为 FITS 数据,在我的例子中,它基本上是一个向量或长字节串或 16 位/像素数据。
我喜欢在 Swift 中将这些数据转换为原始图像格式,以便使用 iOS/Swift 中强大的去拜耳和去马赛克功能和算法。我不打算自己去马赛克,因为 iOS 已经为此提供了一个很棒的库(参见 WWDC2016 主题演讲使用核心图像进行原始处理)。
我需要让 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 视图也是如此...
【问题讨论】:
-
你看到这个问题了吗?可能会有所帮助stackoverflow.com/q/51372245/10595176
-
谢谢。我去看看!
-
我检查了...这很接近,但并不完全相同。在这种情况下,图像已经作为 RGBA 可用,即去马赛克。我希望 iOS 对我的原始图像数据 (RGGB-CFA) 进行去马赛克处理。
标签: ios swift image-processing dng demosaicing