У меня 16 3D -точек, 16 2D точек, матрица камеры и коэффициенты искажения. Используя эту информацию, я пытаюсь вычислить новые векторы вращения и векторы перевода. Вот используемый код. < /P>
success, rvec, tvec = cv2.solvePnP(points_3d, points_2d, camera_mat, dist_coeffs, cv2.SOLVEPNP_SQPNP)
< /code>
Однако, когда я вычисляю ошибку резации, я получаю 37,62. Я не уверен, что это хорошо или плохо, но когда я вижу результаты при графике, точки, рассчитанные из вычисленных векторов вращения и трансляционных векторов, вообще не соответствуют исходным 2D -точкам.points_3d = np.array([[ 0.0372, 0.1479, -0.41549],
[ 0.035929, 0.14503, -0.41567],
[ 0.038972, 0.14346, -0.41596],
[ 0.040218, 0.14636, -0.41576],
[ 0.05385, 0.15091, -0.41269],
[ 0.051617, 0.15007, -0.41291],
[ 0.052712, 0.14775, -0.41314],
[ 0.054902, 0.14861, -0.41292],
[ 0.051169, 0.13196, -0.41463],
[ 0.049269, 0.12951, -0.41472],
[ 0.05178, 0.12735, -0.41475],
[ 0.053669, 0.12987, -0.41464],
[ 0.068838, 0.13369, -0.41467],
[ 0.065162, 0.1327, -0.41504],
[ 0.066796, 0.12903, -0.41516],
[ 0.070597, 0.13008, -0.41479]], dtype=np.float32)
< /code>
keypoints_img2 = np.array([[[ 1372.6, 2195.5],
[ 1454.5, 2093.3],
[ 1679.5, 2099.3],
[ 1606.2, 2210.1],
[ 2236.2, 3110.9],
[ 2111.4, 2993.3],
[ 2290.8, 2914.1],
[ 2417.1, 3020.1],
[ 2755.1, 2273.7],
[ 2717.9, 2182.6],
[ 2907.2, 2172],
[ 2953.4, 2261.2],
[ 3853, 2501.9],
[ 3616, 2398.8],
[ 3768.6, 2308.8],
[ 4006.6, 2403.1]],
[[ 2648.8, 1869.9],
[ 2799.1, 1827.4],
[ 2911.2, 1891],
[ 2753.4, 1932.5],
[ 2487.6, 2734.7],
[ 2541.1, 2622.6],
[ 2724.2, 2645.6],
[ 2678.9, 2749.4],
[ 3783.5, 2423.8],
[ 3879.2, 2344.9],
[ 4070.7, 2411.6],
[ 3979.4, 2498.6],
[ 4268.3, 3057.6],
[ 4201.3, 2861.7],
[ 4530.6, 2878.6],
[ 4625.6, 3086.7]],
[[ 2027.6, 1606.8],
[ 2200.7, 1580.1],
[ 2265.7, 1652.1],
[ 2073.3, 1679],
[ 1545.2, 2435],
[ 1647.8, 2342.5],
[ 1807, 2387],
[ 1694.9, 2480.6],
[ 2931.2, 2277.5],
[ 3074.6, 2203.5],
[ 3217.9, 2300.6],
[ 3076.5, 2373],
[ 2836.1, 2972.7],
[ 2917.4, 2772.8],
[ 3229.6, 2828.5],
[ 3161.3, 3055.4]],
[[ 3441.8, 1223.3],
[ 3648.2, 1239.5],
[ 3620, 1338.7],
[ 3403.8, 1322.5],
[ 2526.9, 1894.5],
[ 2680.5, 1842.4],
[ 2757.6, 1930.3],
[ 2602.1, 1981.8],
[ 3867.3, 2231.6],
[ 4124, 2216],
[ 4197.6, 2373.5],
[ 3922.1, 2387.2],
[ 2810.8, 2839.6],
[ 3112.5, 2679.9],
[ 3343.2, 2892.6],
[ 3020.5, 3067.9]],
[[ 3057.4, 1253.5],
[ 3240.9, 1300.1],
[ 3136.5, 1378.6],
[ 2948.3, 1320.7],
[ 1940.2, 1671],
[ 2111.9, 1670.3],
[ 2121.8, 1760.1],
[ 1942.1, 1769.8],
[ 2878.5, 2282.3],
[ 3130, 2338.8],
[ 3071.2, 2498],
[ 2802.4, 2443.1],
[ 1332.9, 2532.6],
[ 1705.7, 2474.9],
[ 1727, 2724.7],
[ 1308.3, 2784.9]],
[[ 3744.6, 1467.5],
[ 3896.2, 1550],
[ 3719.6, 1610.6],
[ 3575.3, 1528.6],
[ 2590.4, 1710.1],
[ 2740.6, 1730.7],
[ 2693.9, 1810],
[ 2543.4, 1799],
[ 3050.7, 2442.4],
[ 3254, 2554.5],
[ 3090, 2702.5],
[ 2878.1, 2578.8],
[ 1541.4, 2315],
[ 1850.1, 2348.3],
[ 1726.1, 2555.7],
[ 1391.4, 2521.6]],
[[ 3802.1, 1857.2],
[ 3924.7, 1973.8],
[ 3693.6, 1988.9],
[ 3590.1, 1872.6],
[ 2635.8, 1862.8],
[ 2778, 1918.5],
[ 2679.7, 1979.8],
[ 2546.1, 1924.2],
[ 2627, 2648.3],
[ 2776.5, 2818.6],
[ 2515.3, 2917.5],
[ 2382.2, 2737.4],
[ 1207.9, 2147.9],
[ 1457.3, 2250.7],
[ 1215.3, 2403],
[ 956.73, 2291]],
[[ 4635.4, 2671],
[ 4563.1, 2876],
[ 4205.8, 2753.2],
[ 4293.3, 2560.8],
[ 3676, 2167.5],
[ 3747.2, 2276.2],
[ 3564.9, 2298.2],
[ 3488.9, 2188.4],
[ 2582, 2856.6],
[ 2493.3, 3064.1],
[ 2195.1, 3018.2],
[ 2308.3, 2804],
[ 2074.4, 1931.5],
[ 2099.4, 2073.3],
[ 1800.1, 2109.1],
[ 1733.3, 1974.6]],
[[ 3282.6, 2599.3],
[ 3036, 2743.4],
[ 2797, 2557],
[ 3052.9, 2423.6],
[ 3131.1, 2004.7],
[ 3116.9, 2122.1],
[ 2919.3, 2101.3],
[ 2943.4, 1993.2],
[ 1606.1, 2377.4],
[ 1379.6, 2536.9],
[ 1189.2, 2426.6],
[ 1422.9, 2283.9],
[ 1691.1, 1496.7],
[ 1622.1, 1615.5],
[ 1348.9, 1592.8],
[ 1430, 1472.2]],
[[ 2384.4, 2636.8],
[ 2008.6, 2725.2],
[ 1940, 2493.6],
[ 2284.3, 2430.4],
[ 2971.5, 2086.4],
[ 2898.7, 2173.9],
[ 2718.9, 2104.1],
[ 2802.4, 2019.7],
[ 1350.3, 2078.8],
[ 1075.1, 2164.4],
[ 997.15, 2027.3],
[ 1264.4, 1950.8],
[ 1905.7, 1300.4],
[ 1770.3, 1403],
[ 1556.9, 1344.1],
[ 1700.7, 1243.1]],
[[ 2721.9, 2535.5],
[ 2545, 2397.8],
[ 2773.3, 2273.9],
[ 2957.1, 2403.9],
[ 4326.6, 2878.7],
[ 4083, 2860.9],
[ 4062.1, 2707.5],
[ 4286, 2714.4],
[ 3362.3, 1969],
[ 3174.4, 1910.9],
[ 3278.5, 1813.4],
[ 3456.5, 1873],
[ 4550.8, 1711.2],
[ 4296.9, 1716.1],
[ 4238.6, 1586.2],
[ 4488.3, 1582]],
[[ 1912.5, 2559.2],
[ 1884, 2415.2],
[ 2130.3, 2369.6],
[ 2178.4, 2512.3],
[ 3284.3, 3305.3],
[ 3081.7, 3218.5],
[ 3170.5, 3083.5],
[ 3371.3, 3162.2],
[ 3034.8, 2295.5],
[ 2913, 2203.2],
[ 3040.8, 2161.6],
[ 3193.3, 2241.9],
[ 4246.1, 2341.8],
[ 3976, 2282.3],
[ 4027.2, 2158],
[ 4280, 2211.4]]], dtype=np.float32)
< /code>
camera_matrix = np.array([[ 4099.4, 0, 2888.4],
[ 0, 3618.1, 2179.7],
[ 0, 0, 1]])
< /code>
dist_coeffs = np.array([[ -0.069681, 4.94, 0.068934, 0.0015466, -41.365]])
< /code>
class CalibResult():
def __init__(self, rvec, tvec):
self.rvec = rvec
self.tvec = tvec
class Calibrator():
def solvePnP(points_3d: np.ndarray, points_2d: np.ndarray, camera_mat: np.ndarray, dist_coeffs: np.ndarray, method=cv2.SOLVEPNP_SQPNP) -> tuple[np.ndarray, np.ndarray] | None:
success, rvec, tvec = cv2.solvePnP(points_3d, points_2d, camera_mat, dist_coeffs, cv2.SOLVEPNP_SQPNP)
if success:
return rvec, tvec
computed_calib_results: list[CalibResult] = []
for imgpoint_set in keypoints_img2:
rvec, tvec = Calibrator.solvePnP(
points_3d,
imgpoint_set,
camera_matrix,
dist_coeffs)
computed_calib_results.append(CalibResult(rvec, tvec))
< /code>
Is there a better way of computing the rotation vectors and translation vectors given the arguments mentioned above?
Подробнее здесь: https://stackoverflow.com/questions/797 ... points-cam
Поиск векторов вращения и трансляционных векторов с учетом 3D -точек, 2D -точек, матрицы камеры и коэффициентов искажени ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
О векторах вращения и перемещения, получаемых из матрицы камеры с шахматной доской.
Anonymous » » в форуме Python - 0 Ответы
- 21 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Использование nlopt в Python с несколькими ограничениями на основе коэффициентов матрицы
Anonymous » » в форуме Python - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-