2016-08-16 78 views
12

是否可以通过Core Image处理(过滤)HDR图像?我找不到太多的文档,所以我想知道是否有人可能有答案。我知道在初始化CIContext时可以使用RGBAh进行工作空间计算,所以我认为如果我们可以使用浮点图像格式进行计算,那么应该有可能。通过核心图像的HDR图像?

什么,if这是不可能的,如果你想在iOS上产生HDR效果,是否是替代方案?

编辑:我想我会尽量做得更简洁。根据我的理解,可以通过钳位像素值来将HDR图像钳位并保存为.jpg,.png和其他图像格式。不过,我更感兴趣的是通过Core Image在尚未转换的HDR图像上进行色调映射。这个问题是用一个HDR图像编码一个CIImage,据推测是扩展名为.hdr。

编辑2:也许这将是有用的使用CGImageCreate,以及CGDataProviderCreateWithFilename

回答

3

我希望你对HDR的工作原理有基本的了解。 HDR文件是通过在不同曝光条件下拍摄2张或更多图像并将其组合来生成的。所以即使有像.HDR文件这样的东西,它也会是一个包含多个jpg的容器格式。从技术上讲,您不能一次将两个图像文件作为通用CIFilter的输入。

在iOS中,我记得,不可能访问HDR的原始照片集,但是处理过的最终输出结果。即使可以,您仍然需要手动进行HDR处理,然后生成一个HDR png/jpg文件,然后再将其提供给CIFilter。

+0

虽然结合起来,但生成的文件不能以任何方式用于提供像素信息?也许我们在外部有这样的文件,因此我见过的.hdr扩展名在示例MATLAB代码中用于色调映射,不能简单地提供此文件并将生成的图像编码为CIImage?也许这不是Core Image在HDR图像上进行色调映射的目的吗?尽管在技术上是可行的,但使用他们的自定义过滤器。 –

+0

@DavidSacco的第一个问题是,在iOS中,无法访问原始捕获的具有不同曝光的图像阵列。一旦处理完最终的HDR,它不保存源文件的像素信息,因为在技术上不可能将这些数据存储在3个RGB通道中。在iOS中,“HDR”标记的图像只是JPEG,已经使用不同曝光的多张照片进行处理。 – sleepwalkerfx

+0

谢谢,是的,来自我自己的google-fu,这也是我所学到的。我想知道是否有任何新的iOS 10与.RAW图像有关的东西可能有所帮助。我其实也了解到HDR图像可以保存在浮点中。TIFF文件,其中可以保留高强度,只是如果用户想要使用色调映射,用户将不得不提供所述图像。通过选项'kCIContextWorkingFormat'还可以确保您的上下文是以浮点精度计算的。 –

1

由于有人要求CI HDR算法,我决定在github上分享我的代码。请参阅:

https://github.com/schulz0r/CoreImage-HDR

这是罗伯逊HDR算法,所以你不能使用RAW图像。如果您想知道如何获取相机响应并获取hdr图像,请参阅单元测试。 CoreImage将像素值饱和到[0.0 ... 1.0]之外,因此HDR被缩放到所述间隔中。 用金属编码总是会导致我的代码乱七八糟,所以我决定使用MetalKitPlus,它必须包含在你的项目中。你可以在这里找到它:

https://github.com/LRH539/MetalKitPlus

我认为你必须检查出的开发/ V2.0.0分支。我将来会把它合并到主人手中。