Что такое ошибка 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, но это тоже не сработало.