Значение возвращаемого значения retval в cv2.CalibrateCamera ⇐ Python
Значение возвращаемого значения retval в cv2.CalibrateCamera
как сказано в заголовке, мой вопрос касается возвращаемого значения, заданного функцией калибровки камеры из OpenCv.
http://docs.opencv.org/modules/calib3d/ ... ction.html
У меня есть функциональная реализация на Python для определения внутренних параметров и коэффициентов искажения камеры с использованием черно-белой сетки.
Вопрос больше касается retval, возвращаемого функцией. Если я правильно понял, это «средняя ошибка перепроецирования. Это число дает хорошую оценку точности найденных параметров. Оно должно быть как можно ближе к нулю». как указано в
http://docs.opencv.org/doc/tutorials/ca ... ровка.html
Что именно означает значение, максимально близкое к нулю?
Например, когда я делаю это для своей веб-камеры Logitech:
Среднеквадратичное значение: 0,702660793513
матрица камеры:
[[ 616.30868126 0. 339.02126978] [0.605.08224927 241.64607568] [ 0. 0. 1. ]] Коэффициенты искажения:
[ 0.19805527 -0.62915986 0.00924648 0.02618232 1.02491764] В этом случае, как ошибка количественно определяет качество оценки внутренних параметров?
РЕДАКТИРОВАТЬ:
Поэтому я начал искать ответы, копнул немного глубже и проверил реализацию этой функции cpp.
Это функция, вычисляющая это значение ошибки:
static double ComputeReprojectionErrors( const вектор& objectPoints, const вектор& imagePoints, const вектор& rvecs, const вектор& tvecs, const Mat& cameraMatrix, const Mat& distCoeffs, вектор& perViewErrors ) { вектор imagePoints2; интервал я, TotalPoints = 0; двойной totalErr = 0, ошибка; perViewErrors.resize(objectPoints.size()); for( я = 0; я < (int)objectPoints.size(); я++) { projectPoints(Mat(objectPoints), rvecs, tvecs, cameraMatrix, distCoeffs, imagePoints2); ошибка = норма(Mat(imagePoints), Mat(imagePoints2), NORM_L2); int n = (int)objectPoints.size(); perViewErrors = (float)std::sqrt(err*err/n); totalErr += ошибка*ошибка; общее количество баллов += n; } return std::sqrt(totalErr/totalPoints); } Эта ошибка вычисляется с учетом tvecs и rvecs, найденных с помощью cv2.CalibrateCamera, она перепроецирует точки, используемые для поиска этих векторов перемещения и вращения, и вычисляет евклидово расстояние между перепроецированной точкой и фактическими координатами этих точек.
>
Я не думаю, что эта ошибка ограничена [0,1], а зависит от диапазона координат, используемых для калибровки. Так что это зависит от разрешения изображений, используемых для калибровки.
Может ли кто-нибудь это подтвердить/опровергнуть?
как сказано в заголовке, мой вопрос касается возвращаемого значения, заданного функцией калибровки камеры из OpenCv.
http://docs.opencv.org/modules/calib3d/ ... ction.html
У меня есть функциональная реализация на Python для определения внутренних параметров и коэффициентов искажения камеры с использованием черно-белой сетки.
Вопрос больше касается retval, возвращаемого функцией. Если я правильно понял, это «средняя ошибка перепроецирования. Это число дает хорошую оценку точности найденных параметров. Оно должно быть как можно ближе к нулю». как указано в
http://docs.opencv.org/doc/tutorials/ca ... ровка.html
Что именно означает значение, максимально близкое к нулю?
Например, когда я делаю это для своей веб-камеры Logitech:
Среднеквадратичное значение: 0,702660793513
матрица камеры:
[[ 616.30868126 0. 339.02126978] [0.605.08224927 241.64607568] [ 0. 0. 1. ]] Коэффициенты искажения:
[ 0.19805527 -0.62915986 0.00924648 0.02618232 1.02491764] В этом случае, как ошибка количественно определяет качество оценки внутренних параметров?
РЕДАКТИРОВАТЬ:
Поэтому я начал искать ответы, копнул немного глубже и проверил реализацию этой функции cpp.
Это функция, вычисляющая это значение ошибки:
static double ComputeReprojectionErrors( const вектор& objectPoints, const вектор& imagePoints, const вектор& rvecs, const вектор& tvecs, const Mat& cameraMatrix, const Mat& distCoeffs, вектор& perViewErrors ) { вектор imagePoints2; интервал я, TotalPoints = 0; двойной totalErr = 0, ошибка; perViewErrors.resize(objectPoints.size()); for( я = 0; я < (int)objectPoints.size(); я++) { projectPoints(Mat(objectPoints), rvecs, tvecs, cameraMatrix, distCoeffs, imagePoints2); ошибка = норма(Mat(imagePoints), Mat(imagePoints2), NORM_L2); int n = (int)objectPoints.size(); perViewErrors = (float)std::sqrt(err*err/n); totalErr += ошибка*ошибка; общее количество баллов += n; } return std::sqrt(totalErr/totalPoints); } Эта ошибка вычисляется с учетом tvecs и rvecs, найденных с помощью cv2.CalibrateCamera, она перепроецирует точки, используемые для поиска этих векторов перемещения и вращения, и вычисляет евклидово расстояние между перепроецированной точкой и фактическими координатами этих точек.
>
Я не думаю, что эта ошибка ограничена [0,1], а зависит от диапазона координат, используемых для калибровки. Так что это зависит от разрешения изображений, используемых для калибровки.
Может ли кто-нибудь это подтвердить/опровергнуть?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение