为什么Vision框架无法对齐两个图像?

Vad*_*ick 10 image-processing computer-vision cgaffinetransform ios sequence-alignment

我正在尝试使用相机拍摄两张图像,并使用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()
Run Code Online (Sandbox Code Playgroud)

但这会产生严重错位的图像:

在此输入图像描述

在此输入图像描述

在此输入图像描述

您可以看到我尝试了三种不同类型的场景 - 特写主题,室内场景和室外场景.我尝试了更多的室外场景,几乎每一个场景的结果都是一样的.

在最坏的情况下,我期待轻微的错位,但不是完全错位.出了什么问题?

我没有将图像的方向传递到Vision框架中,但这不应该是对齐图像的问题.这仅仅是面部检测等问题,在这种情况下,旋转的面部不会被检测为面部.在任何情况下,输出图像都具有正确的方向,因此方向不是问题.

我的合成代码工作正常.这只是Vision框架的一个问题.如果我删除了对Vision框架的调用,放上三脚架的手机,组合就能完美运行.没有错位.所以问题是Vision框架.

这是在iPhone X上.

如何让Vision框架正常工作?我可以告诉它使用陀螺仪,加速度计和罗盘数据来改善对齐吗?

use*_*155 0

您应该将 secondaryImage 设置为 targetImage,并使用firstImage 执行处理程序。

我用的是你的复合方式。