colmap的几种相机类型和内外参取得方法

colmap的相机类型可以参考models.h文件。

主要有以下几种相机类型:

SimplePinhole:

内参格式:f, cx, cy

实际用的时候:fx=fy=f


Pinhole:

内参格式:fx, fy, cx, cy

其他可以自行查看models.h文件。

内参存放在images.bin, 外参存放在cameras.bin中

python 复制代码
def read_colmap(path):
    try:
        cameras_extrinsic_file = os.path.join(path, "sparse/0", "images.bin")
        cameras_intrinsic_file = os.path.join(path, "sparse/0", "cameras.bin")
        cam_extrinsics = read_extrinsics_binary(cameras_extrinsic_file)
        cam_intrinsics = read_intrinsics_binary(cameras_intrinsic_file)
    except:
        cameras_extrinsic_file = os.path.join(path, "sparse/0", "images.txt")
        cameras_intrinsic_file = os.path.join(path, "sparse/0", "cameras.txt")
        cam_extrinsics = read_extrinsics_text(cameras_extrinsic_file)
        cam_intrinsics = read_intrinsics_text(cameras_intrinsic_file)

extr = cam_extrinsics[key]
intr = cam_intrinsics[extr.camera_id]

R = qvec2rotmat(extr.qvec)
t = np.array(extr.tvec)

#world to camera
T = np.zeros((4, 4))
T[:3, :3] = R
T[:3, 3] = t
T[3, 3] = 1.0

def qvec2rotmat(qvec):
    return np.array([
        [1 - 2 * qvec[2]**2 - 2 * qvec[3]**2,
         2 * qvec[1] * qvec[2] - 2 * qvec[0] * qvec[3],
         2 * qvec[3] * qvec[1] + 2 * qvec[0] * qvec[2]],
        [2 * qvec[1] * qvec[2] + 2 * qvec[0] * qvec[3],
         1 - 2 * qvec[1]**2 - 2 * qvec[3]**2,
         2 * qvec[2] * qvec[3] - 2 * qvec[0] * qvec[1]],
        [2 * qvec[3] * qvec[1] - 2 * qvec[0] * qvec[2],
         2 * qvec[2] * qvec[3] + 2 * qvec[0] * qvec[1],
         1 - 2 * qvec[1]**2 - 2 * qvec[2]**2]])

如果是SimplePinhole,

那么,fx = fy = intr[0], cx = intr[1], cy = intr[2]

其他类推。

相关推荐
Monly211 天前
大模型:prompt提示词工程指南
人工智能·prompt
电报号dapp1191 天前
下一代DeFi聚合枢纽:融合RWA资产与社区激励的多维平台设计
大数据·人工智能·去中心化·区块链·智能合约
深小乐1 天前
10个晚上,全程 AI,我做出了一个微信小程序
人工智能
chaors1 天前
Langchain入门到精通0x03:Langchain的服务部署
人工智能·langchain·ai编程
renhongxia11 天前
面向开放世界的具身智能泛化能力探索
人工智能·深度学习·机器学习·架构·transformer
安全渗透Hacker1 天前
安全使用OpenClaw:从官方威胁模型出发,全面规避AI智能体风险
人工智能·安全·ai·安全威胁分析
卢_猫之使徒1 天前
如何写一个SKill
人工智能
RuiBo_Qiu1 天前
【LLM基础】5.prompt & context engineering
人工智能·机器学习·prompt·ai-native
San30.1 天前
手写 Mini Cursor:基于 Node.js 与 LangChain 的开发实战
人工智能·langchain·node.js·agent
Keep_Trying_Go1 天前
基于stable diffusion图像生成的小小demo应用(pytorch)
人工智能·stable diffusion