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

15

我正在尝试使用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()
但是这样会产生严重的图片错位问题:

enter image description here

enter image description here

enter image description here

你可以看到,我尝试了三种不同类型的场景 - 近距离拍摄、室内场景和室外场景。我尝试了更多的户外场景,结果几乎每一个场景都是一样的。

我预计最坏情况下只会有轻微的错位,但没有如此完全的错位。出了什么问题?

我没有将图像的方向传递给 Vision 框架,但这对于对齐图像来说不应该是问题。只有在像面部检测这样的事情上,旋转的面孔才不能被检测为面孔。无论如何,输出图像具有正确的方向,因此方向不是问题。

我的合成代码是正确的。只有 Vision 框架出了问题。如果我删除对 Vision 框架的调用,把手机放在三脚架上,合成就完美无缺。没有错位。所以问题是 Vision 框架。

这是在 iPhone X 上。

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


我很想看看程序如何将图片的子集/部分与整张图片对齐。这些对齐是否随机(即使输入相同,输出是否会有所不同)?对齐程序通常会进行近似/简化,以减少计算时间。随机编程是一种补偿方式。 - Ghoti
@Kartick,你是怎么做到这个的? - user16930239
@Jabbar 我放弃了。 - Kartick Vaddadi
2个回答

0

你应该将secondImage设置为targetImage,并使用firstImage执行handler。

我使用了你的合成方式。


0

看看这个来自MLBoy的例子:

let request = VNTranslationalImageRegistrationRequest(targetedCIImage: image2, options: [:])

let handler = VNImageRequestHandler(ciImage: image1, options: [:])
do {
try handler.perform([request])
} catch let error {
print(error)
}

guard let observation = request.results?.first as? VNImageTranslationAlignmentObservation else { return }
let alignmentTransform = observation.alignmentTransform

image2 = image2.transformed(by: alignmentTransform)
let compositedImage = image1.applyingFilter("CIAdditionCompositing", parameters: ["inputBackgroundImage": image2])

Example


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接