Как использовать матрицу проекции ARCamera для удаления перекоса изображения? - PullRequest
0 голосов
/ 03 сентября 2018

Я хотел исказить изображение ( снимок ARSCNView ), используя значения, которые мы получаем в projectionMatrix или eulerAngles , или преобразовать свойства ARCamera. Или есть какой-либо другой способ искажать изображение, используя значения, которые мы получаем из ARKit? Я предполагаю, что projectionMatrix дает нам значения искажения перспективы. Можем ли мы исказить это без выделения четырех точек? Любые указатели в правильном направлении будут очень полезны.

Вот одна из моих попыток с использованием значений projectionMatrix и eulerAngles:

func deskewImage(camera: ARCamera) {
     let rotationZ = CGFloat(camera.eulerAngles.z)

     var transform = CATransform3DIdentity
     transform.m34 = CGFloat(camera.projectionMatrix.columns.2.z)
     transform = CATransform3DRotate(transform, rotationZ, 0, 0, 1)

     self.imageView.layer.transform = transform
}

Мне удалось отменить перекос изображения, используя CIPerspeciveCorrection , используя обнаружение прямоугольника (так же, как приложения CamScanner), но он отодвинул только обнаруженный прямоугольник и обрезал его. Я хочу, чтобы полное изображение было искажено, как показано в в этом примере без выбора четырех точек.

Я ищу подход с использованием ARKit, так как значения уже есть.

...