从相机空间到像素空间的投影和反投影原理和代码

目录

从相机空间到像素空间的投影

效果

​编辑

公式

​编辑

代码

像素空间到相机空间的反投影


记录一下从相机空间到像素空间的投影(3D-->2D)和像素空间到相机空间的反投影(2D-->3D)。

推荐blog:SLAM入门之视觉里程计(2):相机模型(内参数,外参数) - Brook_icv - 博客园 (cnblogs.com)

从相机空间到像素空间的投影

主要是估计出物体相对相机的位姿之后,把物体投影到2D像素平面看看mask,想看看根据marker的位姿传播的误差大不大。即看看投影误差。

效果

还是存在一些误差

公式

代码

我这里的代码是从物体坐标系--》相机坐标系--》像素坐标系

def project3Dto2D(points_local, center_local, pose, K, height, width):
    relative_points = points_local - center_local             # (0,0,0), 物体在物体坐标系下的点云的坐标
    homogeneous_points = np.ones((4,relative_points.shape[0]))
    homogeneous_points[:3,:] = relative_points.transpose()

    camera_points = np.matmul(pose, homogeneous_points)  # 物体在cam坐标系下的点云的坐标

    image_points = np.matmul(K, camera_points[:3,:]) # 相机坐标系下的点云坐标投影到图像平面

    assert np.min(image_points[2]) > 0

    image_points[0] = image_points[0]/image_points[2] # 将投影后的图像坐标除以深度,得到归一化坐标。
    image_points[1] = image_points[1]/image_points[2]

    pixel_points = np.round(image_points[:2,:]) # 对归一化坐标取整,得到像素坐标。

    mask1 = pixel_points[0,:] > -1            # 根据像素坐标的范围进行剪裁,即将超出图像范围的点云剔除。
    mask2 = pixel_points[1,:] > -1
    mask3 = pixel_points[0,:] < width
    mask4 = pixel_points[1,:] < height

    mask = mask1&mask2&mask3&mask4
    selected_index = np.where(mask)
    pixel_points = np.take(pixel_points, selected_index[0], axis=1)
    depth = np.take(image_points[2,:], selected_index[0])
    
    return pixel_points.astype(int), depth

像素空间到相机空间的反投影

主要是根据yolov8检测的mask(u,v),获取对应的深度值z,根据uvz求解出物体的在相机坐标下的3D坐标(XYZ)

cx, cy, fx, fy = 323, 238, 616, 616
x = (u - cx) / fx
y = (v - cy) / fy
x = x * z
y = y * z
相关推荐
W Y1 小时前
【智能制造-50】雅可比矩阵在机器人中如何应用
矩阵·机器人·制造
power-辰南1 小时前
机器学习之数据分析及特征工程详细分析过程
人工智能·python·机器学习·大模型·特征
少说多想勤做1 小时前
【前沿 热点 顶会】AAAI 2025中与目标检测有关的论文
人工智能·深度学习·神经网络·目标检测·计算机视觉·目标跟踪·aaai
橙子小哥的代码世界3 小时前
【计算机视觉基础CV-图像分类】05 - 深入解析ResNet与GoogLeNet:从基础理论到实际应用
图像处理·人工智能·深度学习·神经网络·计算机视觉·分类·卷积神经网络
leigm1233 小时前
深度学习使用Anaconda打开Jupyter Notebook编码
人工智能·深度学习·jupyter
Aileen_0v05 小时前
【玩转OCR | 腾讯云智能结构化OCR在图像增强与发票识别中的应用实践】
android·java·人工智能·云计算·ocr·腾讯云·玩转腾讯云ocr
速科德电机科技5 小时前
机器人加装电主轴【铣削、钻孔、打磨、去毛刺】更高效
机器人·电主轴
阿正的梦工坊6 小时前
深入理解 PyTorch 的 view() 函数:以多头注意力机制(Multi-Head Attention)为例 (中英双语)
人工智能·pytorch·python
Ainnle6 小时前
GPT-O3:简单介绍
人工智能
OceanBase数据库官方博客6 小时前
向量检索+大语言模型,免费搭建基于专属知识库的 RAG 智能助手
人工智能·oceanbase·分布式数据库·向量数据库·rag