Я работаю над проектом с ARKit
и пытаюсь сделать перспективную коррекцию ARFrame.capturedImage
, чтобы сориентировать лист бумаги, лежащий на обнаруженной плоскости, чтобы я мог передать это в модель CoreML
, которая ожидает, что изображения будут взяты напрямую. накладные расходы.
ARKit
дает мне ориентацию устройства относительно плоскости (ARCamera.transform
, ARCamera.eulerAngles
и ARCamera.projectionMatrix
выглядят многообещающе).
Итак, у меня есть ориентация камеры (и я знаю, что плоскость горизонтальна, так как это все, что ARKit
определяет прямо сейчас).. но я не могу понять, как создать GLKMatrix4
, который будет выполнять правильную коррекцию перспективы.
Первоначально я думал, что это будет так же просто, как преобразование, обратное ARCamera.projectionMatrix
, но, похоже, это вообще не работает; Я не совсем уверен, что описывает эта матрица. Кажется, она не сильно меняется в зависимости от ориентации устройства.
Я пытался создать свою собственную матрицу, используя GLKMatrix4Rotate
и крен/тангаж/рысканье, но это не сработало. Я даже не смог заставить ее работать с одной осью вращения.
Я нашел GLKMatrix4MakePerspective
, GLKMatrix4MakeOrtho
и GLKMatrix4MakeFrustum
, которые, похоже, выполняют преобразования перспективы, но я не могу понять, как взять имеющуюся у меня информацию и преобразовать ее во входные данные этих функций, чтобы выполнить правильное преобразование перспективы.
Редактировать В качестве примера, чтобы лучше объяснить, что я пытаюсь сделать, я использовал инструмент Perspective Warp
в Photoshop для преобразования примерного изображения; что я хочу знать, так это то, как придумать матрицу, которая будет выполнять подобное преобразование, учитывая информацию, которую я имею о сцене.