当使用iPhone 12系列以自定义曝光时间和ISO拍摄照片时,与iPhone 11和X系列相比,结果会包含大量噪点。
可以通过以下方式之一设置自定义曝光时间和ISO:
- 使用括号设置进行捕获:
AVCapturePhotoOutput *photoOutput;
// ...
NSArray *bracketedSettings = @[[AVCaptureManualExposureBracketedStillImageSettings manualExposureSettingsWithExposureDuration:CMTimeMake(1, 7000) ISO:50]];
AVCapturePhotoBracketSettings *photoSettings = [AVCapturePhotoBracketSettings photoBracketSettingsWithRawPixelFormatType:0 processedFormat:nil bracketedSettings:bracketedSettings];
[photoOutput capturePhotoWithSettings:photoSettings delegate:self];
- 设置捕捉设备的曝光和ISO:
AVCaptureDevice *captureDevice;
// ...
[captureDevice setExposureModeCustomWithDuration:CMTimeMake(1, 7000) ISO:50 completionHandler:^(CMTime syncTime) {
// capture photo
}];
这些方法中的任何一种都会导致 iPhone 12 系列的照片噪点更多。使用超广角镜头将会得到最差的结果。
此示例项目 使用不同曝光时间(1/7200、1/1600、1/400、1/100、1/24、1/12、1/6、1/3、1/2)和 ISO 设置为 50 拍摄了 9 张照片,其中 1/100 和 1/24 的噪音最多:
我迄今为止尝试过的事情:
- 以RAW格式、压缩格式(JPEG/HEIC)和3种不压缩支持格式(875704422、875704438、1111970369)捕获。
- 将照片设置质量为
AVCapturePhotoQualityPrioritizationSpeed
、AVCapturePhotoQualityPrioritizationBalanced
和AVCapturePhotoQualityPrioritizationQuality
(当在捕获设备上设置曝光时间和ISO时,始终设置为速度,否则设置的快门速度和ISO可能会被忽略,如documentation所述 - 在线文档没有指定这一点,但XCode文档有)。 - 应用噪声减少
CIFilter
,但它几乎没有改善结果。 - 在设置捕获设备的曝光模式和ISO时延迟捕获0.5-1秒,因为我注意到在完成处理程序被调用后立即开始捕获会导致图像似乎不尊重设置的参数。
- 以以下任何一种方式将图像写入磁盘:
NSData writeToFile:atomically:
用于photo.fileDataRepresentation- 从photo.fileDataRepresentation创建
UIImage
,并使用UIImageJPEGRepresentation(UIImage *, CGFloat)
以不同的压缩级别进行写入 - 创建
CIImage
,并使用CIContext writeJPEGRepresentationOfImage:toURL:colorSpace:options:error:
以不同的压缩级别进行写入
噪音问题该如何解决?