Что такое ошибка com.apple.vis 11 при попытке выровнять два изображения с помощью Vision?

Я пытаюсь выровнять два изображения, используя VNImageHomographicAlignmentObservation, как показано ниже:

let request = VNHomographicImageRegistrationRequest(targetedCIImage: targetImage!) {
  request, error in
  verifyNoError(error)

  let observation = request.results!.first as! VNImageHomographicAlignmentObservation
  let (col0, col1, col2) = observation.warpTransform.columns
  let values: [CGFloat] = [CGFloat(col0.x), CGFloat(col1.x), CGFloat(col2.x),
                           CGFloat(col0.y), CGFloat(col1.y), CGFloat(col2.y),
                           CGFloat(col0.z), CGFloat(col1.z), CGFloat(col2.z)]
  let vector = CIVector(values: values, count: values.count)
  currentImage = warpKernel.apply(
    extent: targetImage!.extent,
    roiCallback: { _, rect in
      return rect.insetBy(dx: -100, dy: -100)
    },
    image: currentImage,
    arguments: [vector])!

  targetImage = targetImage!.applyingFilter("CIAdditionCompositing",
                                      parameters: ["inputBackgroundImage": currentImage,
                                                   "homographyMatrix": vector])
}

do {
  try visionHandler.perform([request], on: currentImage)
} catch {
  verifyNoError(error)
}



fileprivate let warpKernel = CIWarpKernel(source: """
  kernel vec2 warp(mat3 homographyMatrix) {
  vec3 homogeneousDestCoord = vec3(destCoord(), 1.0);
  vec3 homogeneousSrcCoord = homographyMatrix * homogeneousDestCoord;
  return homogeneousSrcCoord.xy / max(homogeneousSrcCoord.z, 0.000001);
  }
  """)!

verifyNoError () - это простая вспомогательная функция, которая останавливает выполнение в случае возникновения ошибки.

Но это дает мне:

Error Domain=com.apple.vis Code=11 "encountered unknown exception"

Кто-нибудь знает, почему это происходит, и что я могу сделать, чтобы это исправить?

Я попробовал еще раз, и это тоже не сработало. Я изменил обратный вызов ROI, чтобы вернуть весь исходный прямоугольник, вставив значение -4000, но это не сработало.

Это на iPhone X под управлением iOS 11.3.


PS: есть также VNTranslationalImageRegistrationRequest, но это тоже не сработало.

0 ответов

Другие вопросы по тегам