0

Я хочу проецировать точку в 3D пространстве в координаты 2D-изображения. У меня есть откалиброванная внутренность и внешность камеры, которую я использую. У меня есть матрица камеры K и коэффициенты искажения D. Однако я хочу, чтобы проецируемые координаты изображения были неискаженного изображения.Согласованность точек проецирования на неискаженное изображение

Из моих исследований я нашел два способа сделать это. getOptimalNewCameraMatrix функции

  1. Используйте OpenCV, чтобы вычислить матрицу камеры нового неискаженного изображения в K». Затем используйте эту функцию K 'в opencv's projectPoints, с параметрами искажения, установленными на 0, чтобы получить проецируемую точку.

  2. Используйте функцию projectPoints с использованием матрицы исходной камеры K вместе с коэффициентами искажения D в этой функции и получите прогнозируемую точку.

Должно ли выход обоих методов соответствовать?

+0

ничего нового? это помогает? – nkint

ответ

2

Я думаю, что в вашей мысли что-то отсутствует.

Матрица камеры K и dist. Коэффициент D - это параметры для создания искажения (если ваш объектив искажает изображение, как в рыбий глаз). Это то, что называется внутренними параметрами камеры.

Если мы изменим термины с компьютерного зрения на компьютерную графику, эти параметры являются тем, который вы используете для определения усечения вида, и, например, они используются для получения фокусного расстояния камеры.

Но их недостаточно, чтобы сделать материал проецирования.

Для проекции, если вы думаете, что в терминах компьютерной графики (например, opengl, например) вам нужна матрица проекционного прогноза. Матрица модели - это матрица, определяющая положение объекта в мире. Матрица представления определяет положение камеры, а матрица проецирования определяет усечение (фокусный угол, искажение перспективы и т. Д.).

Если вы хотите знать, как преобразовать точки модели из 3d в 2d (или наоборот), вам понадобятся проекция и матрицы представлений (у вас есть модельная матрица, потому что у вас есть три точки, из которых вы хотите Начало). А в компьютерном зрении матрица зрения называется эстринскими параметрами.

Итак, вам нужны и эстринские параметры, которые являются положением камеры в мире. То есть, например, этими параметрами являются rvec и tvec, которые необходимы cv:: projectPoints.

Если вы хотите их вычислить, то это результат вывода cv::solvePnP, который делает противоположное тому, что вы хотите сделать: из некоторых известных трехмерных точек в сочетании с известной 2-й проекцией на них на экране камеры эта функция дает вы являетесь параметрами estrinsic (из которых вы можете получить матрицу вида для некоторой opengl-opencv-дополненной реальности - любое приложение через cv::Rodrigues).

Последнее примечание: в то время как искомые параметры фиксируются во всех снимках, которые вы снимаете с помощью камеры (в то время как вы не изменяете фокусное расстояние, конечно), параметры estrinisc изменяются каждый раз, когда вы перемещаете камеру, чтобы взять новую изображение с другой точки зрения (то есть: это изменяет перспективную точку зрения, поэтому 3D-2D-прогноз вы хотите найти)

Надежды могут помочь!