我正在尝试使用iOS Vision框架拍摄两张照片并对齐它们:
func align(firstImage: CIImage, secondImage: CIImage) {
let request = VNTranslationalImageRegistrationRequest(
targetedCIImage: firstImage) {
request, error in
if error != nil {
fatalError()
}
let observation = request.results!.first
as! VNImageTranslationAlignmentObservation
secondImage = secondImage.transformed(
by: observation.alignmentTransform)
let compositedImage = firstImage!.applyingFilter(
"CIAdditionCompositing",
parameters: ["inputBackgroundImage": secondImage])
// Save the compositedImage to the photo library.
}
try! visionHandler.perform([request], on: secondImage)
}
let visionHandler = VNSequenceRequestHandler()
但是这样会产生严重的图片错位问题:
你可以看到,我尝试了三种不同类型的场景 - 近距离拍摄、室内场景和室外场景。我尝试了更多的户外场景,结果几乎每一个场景都是一样的。
我预计最坏情况下只会有轻微的错位,但没有如此完全的错位。出了什么问题?
我没有将图像的方向传递给 Vision 框架,但这对于对齐图像来说不应该是问题。只有在像面部检测这样的事情上,旋转的面孔才不能被检测为面孔。无论如何,输出图像具有正确的方向,因此方向不是问题。
我的合成代码是正确的。只有 Vision 框架出了问题。如果我删除对 Vision 框架的调用,把手机放在三脚架上,合成就完美无缺。没有错位。所以问题是 Vision 框架。
这是在 iPhone X 上。
如何使 Vision 框架正常工作?我可以告诉它使用陀螺仪、加速度计和罗盘数据来改善对齐吗?