张氏相机标定,像素坐标<---->世界坐标 学习笔记
下面这些文章比较详细,便于我这样的初学者理解…
一共有三篇,分前,中,后(主要是matlab,opencv实现)
https://blog.csdn.net/qq_37059483/article/details/79482541
本人按照第三篇实现时出了好多问题😭(也许太菜了~),后借鉴另外一篇完成相机内外参数的计算
https://blog.csdn.net/weixin_43837871/article/details/89296462?spm=1001.2014.3001.5501
关于单目相机标定还有一些比较有趣的文章参考
- 这个测量项目很有趣,不过要事先获得相机的高度,跟我没关系/(ㄒoㄒ)/~~
https://blog.csdn.net/mao_hui_fei/article/details/80822339
- 这个测量相机高度的(通过相似三角形啥的)也好有趣,不过误差有点大啊😅
https://blog.csdn.net/weixin_41695564/article/details/80454055?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-0.no_search_link&spm=1001.2101.3001.424
- 如果需要更多的,这个公众号也发过许多讲解的文章…
https://mp.weixin.qq.com/s/-hbnarTK_DvuLiBSKsfy6A
对了,拿到内外参数后还会有对应的旋转矩阵R和平移矩阵T,分别对应每一张图片相对于相机中心线的变换,然后如果计算的话,R是一个33的矩阵,而程序跑出的结果是一个13的旋转向量。
这个问题困扰了我快一天,后面才知道这个是旋转平面所对应的欧拉角,只需要写一个具体的程序转换一下就好了(opencv的)
import os
import cv2
import numpy as np
T = np.zeros((1,3), np.float32)
a = (0.2,0.4,0.8)
print (a)
R = cv2.Rodrigues(a)
print (R[0])
v3 = (R[0][2,1],R[0][0,2],R[0][1,0])
print (v3)
c = cv2.Rodrigues(v3)
print (c[0])
b = cv2.Rodrigues(R[0])
print (b[0])
p = (-2.100418,-2.167796,0.27330)
print(cv2.Rodrigues(p)[0])
但是最关键的地方,得到了所需的所有参数后,如何通过相机坐标系下的像素点反推世界坐标系下的像素点,这个公式我不会反解啊(会的大佬麻烦提供下资料QAQ)
P中参数都可求得
如何求W(世界坐标),X像素坐标(暂未验证)
更新中…