[code| NeRF--]

paper:NeRF−−: Neural Radiance Fields Without Known Camera Parameters

如何优化Pose

pose:相机转世界坐标系的变换矩阵T = [R|t], 可直接优化平移向量t,因为它是定义在SE(3)欧式空间(x,y,z)上; 而代表相机旋转的R并不是在欧式空间上,而用旋转轴和角表示的(类似球坐标系,极坐标系?),所以要优化R,首先把旋转角度转换为旋转矩阵,这里是利用经典的Rodrigues公式

在这里插入图片描述
参考链接:SO(3),SE(3)基础;Rodrigues公式

code

1.先看make_c2w(r, t)输入的是(3,) 的轴角(axis-angle)向量,首先利用函数 Exp(r) 是将一个 so(3) 空间的向量转换为 SO(3) 空间的旋转矩阵。
2.r—>R: 调用 vec2skew(r) 将轴角向量转换为一个 (3, 3) 的斜对称矩阵(skew-symmetric matrix),计算轴角向量的模长 norm_r,并创建一个 (3, 3) 的单位矩阵 eye,用于表示 SO(3) 空间中的恒等变换,最后旋转矩阵由Rodrigues公式计算
def SO3_to_quat(R):
    """
    :param R:  (N, 3, 3) or (3, 3) np
    :return:   (N, 4, ) or (4, ) np
    """
    x = RotLib.from_matrix(R)
    quat = x.as_quat()
    return quat


def quat_to_SO3(quat):
    """
    :param quat:    (N, 4, ) or (4, ) np
    :return:        (N, 3, 3) or (3, 3) np
    """
    x = RotLib.from_quat(quat)
    R = x.as_matrix()
    return R


def convert3x4_4x4(input):
    """
    :param input:  (N, 3, 4) or (3, 4) torch or np
    :return:       (N, 4, 4) or (4, 4) torch or np
    """
    if torch.is_tensor(input):
        if 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值