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 = intr0, cx = intr1, cy = intr2

其他类推。

相关推荐
Runwise创新社区6 小时前
开源大模型从本地跑通到生产上线:以千问为例的五级部署阶梯与六项选型检查
人工智能·系统架构·开源
云上先途6 小时前
对话智能体和普通聊天机器人有什么区别?能不能对接企业自有知识库?
大数据·人工智能·机器人
我是小白呀6 小时前
17-企业Workflow引擎怎么选:定时、队列、n8n、Temporal与Camunda
java·开发语言·人工智能·dubbo·workflow
IanSkunk6 小时前
长葛视光服务流程拆解:儿童视力建档与随访体系的数据模型设计
人工智能
海宇AI6 小时前
零信任架构实战:基于海宇车型识别精准构建自动化车队评估微服务
java·人工智能·架构·自动化
LabVIEW开发6 小时前
LabVIEW + FlexRIO:3 个月搭出质谱分析系统
人工智能·labview·labview知识·labview功能·labview程序
余槐i6 小时前
将AI Agent嵌入现有Java系统时,Spring Boot 3.2的异步冲突与内存泄漏排查
人工智能·spring boot·性能优化·kubernetes·ai agent
tellmewhoisi6 小时前
机器学习:集成学习4(XGBoost推导)
人工智能·机器学习·集成学习
鲜于言悠9056 小时前
AI自动化工作流实战:告别重复加班的四层架构方案
人工智能
一水鉴天6 小时前
软件方法—工程函数—语言模型 20260925(千问)
人工智能·机器学习·边缘计算