我正在尝试使用相机拍摄两张图像,并使用 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 框架正常工作?我可以告诉它使用陀螺仪、加速度计和指南针数据来改善对准吗?