Как применить iOS VNImageHomographicAlignmentObservation warpTransform? - PullRequest
0 голосов
/ 14 октября 2018

Я тестирую Apple Vision Alignment API и у меня есть вопросы, касающиеся VNHomographicImageRegistrationRequest.Кто-нибудь получил его на работу?Я могу извлечь из него warpTransform, но мне еще предстоит увидеть матрицу, которая имеет смысл, то есть я не могу получить результат, который деформирует изображение обратно на исходное изображение.Я использую OpenCV warpPerspective для обработки деформации.

Я вызываю это, чтобы получить преобразование:

class func homography(_ cgImage0 : CGImage!, _ cgImage1 : CGImage!, _ orientation : CGImagePropertyOrientation, completion:(matrix_float3x3?)-> ())
{
let registrationSequenceReqHandler = VNSequenceRequestHandler()
let requestHomography = VNHomographicImageRegistrationRequest(targetedCGImage: cgImage1, orientation: orientation)
let requestTranslation = VNTranslationalImageRegistrationRequest(targetedCGImage: cgImage1, orientation: orientation)

do
{
    try registrationSequenceReqHandler.perform([requestHomography, requestTranslation], on: cgImage0)  //reference

    if let resultH = requestHomography.results?.first as? VNImageHomographicAlignmentObservation
    {
        completion(resultH.warpTransform)
    }

    if let resultT = requestTranslation.results?.first as? VNImageTranslationAlignmentObservation
    {
        print ("translation : \(resultT.alignmentTransform.tx) : \(resultT.alignmentTransform.ty)")
    }
}
catch
{
    completion(nil)
    print("bad")
}

}

Это работает и выводит матрицу гомографии, но его результаты кардинально отличаются от того, что я получаю, когда делаю SIFT + Opencv findHomography (https://docs.opencv.org/3.0-beta/doc/tutorials/features2d/feature_homography/feature_homography.html)

Независимо от моих пар изображений, я не могу получить разумные гомографические результаты из набора данных Apple Vision.

Заранее спасибо,

1 Ответ

0 голосов
/ 17 октября 2018

Для дальнейшего использования я смог сопоставить матрицу гомографии Apple с матрицей Opencv.По сути, источником изображения Core Image является нижний левый угол изображения.Происхождение Opencv - верхний левый угол.Чтобы преобразовать матрицу гомографии Core Image в координаты Opencv, необходимо применить следующее преобразование:

H_opencv = Q * H_core_image * Q

where Q = [1 0 0; 0 -1 image.height; 0 0 1]
...