• 互补格雷码+相移码求解三维点云


    简介

    互补格雷码+相移码实现物体三维重建,整个重建过程可以分为6个步骤:

    1. 生成格雷码图像
    2. 生成四步相移图像
    3. 求解相对相位
    4. 求解绝对相位
    5. 获得相机-投影仪像素坐标之间的对应关系
    6. 根据标定参数获得重建点云信息

    🚀Github项目已建立,项目中提供了实验数据,供大家学习,欢迎大家star⭐️收藏!🚀

    求解绝对相位的具体原理和代码可以参考(超详细)互补格雷码+相移码求解包裹相位(Python实现),下面的内容主要介绍获得绝对相位后如何计算三维坐标点,重在理论推导。

    5. 获得相机-投影仪像素坐标之间的对应关系

    获得绝对相位后,就可以建立相机-投影仪像素坐标之间的对应关系,假设相机像素坐标为 ( u c , v c ) (u_{c},v_{c}) (uc,vc),投影仪像素坐标为 ( u p , v p ) (u_{p},v_{p}) (up,vp),相移码一个周期所占的像素个数为 T T T,那么通过相位关系可以得到如下关系式:

    Φ ( u p , v p ) = Φ ( u c , v c ) \Phi(u_{p},v_{p})=\Phi(u_{c},v_{c}) Φ(up,vp)=Φ(uc,vc)

    Φ ( u p , v p ) = 2 π u p T \Phi(u_{p},v_{p})=\frac{2\pi u_{p}}{T} Φ(up,vp)=T2πup

    可以得到如下关系式:

    u p = Φ ( u p , v p ) ∗ T 2 π = Φ ( u c , v c ) ∗ T 2 π u_{p}=\frac{\Phi(u_{p},v_{p}) \ast T}{2\pi}=\frac{\Phi(u_{c},v_{c}) \ast T}{2\pi} up=2πΦ(up,vp)T=2πΦ(uc,vc)T

    6. 根据标定参数获得重建点云信息

    6.1 根据内参数获得关系式

    根据相机模型:

    [ u c v c 1 ] = [ f c x 0 u c 0 0 0 f c y v c 0 0 0 0 1 0 ] 1 Z c [ R w → c t w → c 0 1 ] [ X w Y w Z w 1 ] = [ f c x 0 u c 0 0 f c y v c 0 0 0 1 ] [ X c / Z c Y c / Z c 1 ] = [ f c x 0 u c 0 0 f c y v c 0 0 0 1 ] [ x c y c 1 ] [ucvc1]=[fcx0uc000fcyvc000010]1Zc[Rwctwc01][XwYwZw1]=[fcx0uc00fcyvc0001][Xc/ZcYc/Zc1]=[fcx0uc00fcyvc0001][xcyc1]

    ucvc1=fcx000fcy0uc0vc010001Zc[Rwc0twc1]XwYwZw1=fcx000fcy0uc0vc01Xc/ZcYc/Zc1=fcx000fcy0uc0vc01xcyc1
    ucvc1=fcx000fcy0uc0vc01000Zc1[Rwc0twc1]XwYwZw1=fcx000fcy0uc0vc01Xc/ZcYc/Zc1=fcx000fcy0uc0vc01xcyc1

    可以得到:

    { X c = x c ∗ Z c Y c = y c ∗ Z c Z c = Z c \left\{Xc=xcZcYc=ycZcZc=Zc

    Xc=xcZcYc=ycZcZc=Zc
    \right. Xc=xcZcYc=ycZcZc=Zc

    由相机内参数可得

    { u c = f c x ∗ x c + u c 0 v c = f c y ∗ y c + v c 0 ⇒ { x c = ( u c − u c 0 ) / f c x y c = ( v c − v c 0 ) / f c y \left\{uc=fcxxc+uc0vc=fcyyc+vc0

    uc=fcxxc+uc0vc=fcyyc+vc0
    \right. \Rightarrow \left\{xc=(ucuc0)/fcxyc=(vcvc0)/fcy
    \right. {uc=fcxxc+uc0vc=fcyyc+vc0{xc=(ucuc0)/fcxyc=(vcvc0)/fcy

    投影仪可以看作逆相机,因此投影仪模型与相机模型相同,同理可得:

    { X p = x p ∗ Z p Y p = y p ∗ Z p Z p = Z p \left\{Xp=xpZpYp=ypZpZp=Zp

    \right. Xp=xpZpYp=ypZpZp=Zp

    { u p = f p x ∗ x p + u p 0 v p = f p y ∗ y p + v p 0 ⇒ { x p = ( u p − u p 0 ) / f p x y p = ∗ ( v p − v p 0 ) / f p y \left\{up=fpxxp+up0vp=fpyyp+vp0

    \right. \Rightarrow \left\{xp=(upup0)/fpxyp=(vpvp0)/fpy
    \right. {up=fpxxp+up0vp=fpyyp+vp0{xp=(upup0)/fpxyp=(vpvp0)/fpy

    6.2 根据外参数获得方程

    设相机投影仪系统的外参数为 R c → p = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ] 、 t c → p = [ t x t y t z ] R_{c \rightarrow p}=[r11r12r13r21r22r23r31r32r33]

    、t_{c \rightarrow p}=[txtytz]
    Rcp=r11r21r31r12r22r32r13r23r33tcp=[txtytz]

    由下面式子,

    [ X p Y p Z p ] = R c → p [ X c Y c Z c ] + t c → p [XpYpZp]

    = R_{c \rightarrow p}[XcYcZc]
    + t_{c \rightarrow p} XpYpZp=RcpXcYcZc+tcp

    展开得:

    { X p = r 11 X c + r 12 Y c + r 13 Z c + t x = ( r 11 x c + r 12 y c + r 13 ) Z c + t x Y p = r 21 X c + r 22 Y c + r 23 Z c + t y = ( r 21 x c + r 22 y c + r 23 ) Z c + t y Z p = r 31 X c + r 32 Y c + r 33 Z c + t z = ( r 31 x c + r 32 y c + r 33 ) Z c + t z \left\{Xp=r11Xc+r12Yc+r13Zc+tx=(r11xc+r12yc+r13)Zc+txYp=r21Xc+r22Yc+r23Zc+ty=(r21xc+r22yc+r23)Zc+tyZp=r31Xc+r32Yc+r33Zc+tz=(r31xc+r32yc+r33)Zc+tz

    \right. Xp=r11Xc+r12Yc+r13Zc+tx=(r11xc+r12yc+r13)Zc+txYp=r21Xc+r22Yc+r23Zc+ty=(r21xc+r22yc+r23)Zc+tyZp=r31Xc+r32Yc+r33Zc+tz=(r31xc+r32yc+r33)Zc+tz

    又由相机投影仪像素坐标得关系有:

    { u p = f p x ∗ x p + u p 0 u p = Φ ( u c , v c ) ∗ T 2 π ⇒ f p x ∗ x p + u p 0 = Φ ( u c , v c ) ∗ T 2 π \left\{up=fpxxp+up0up=Φ(uc,vc)T2π

    \right. \Rightarrow f_{px} \ast x_{p} + u_{p0} = \frac{\Phi(u_{c},v_{c}) \ast T}{2\pi} {up=fpxxp+up0up=2πΦ(uc,vc)Tfpxxp+up0=2πΦ(uc,vc)T

    最终得到连联立方程组:

    { x p ∗ Z p = ( r 11 x c + r 12 y c + r 13 ) Z c + t x Z p = ( r 31 x c + r 32 y c + r 33 ) Z c + t z f p x ∗ x p + u p 0 = Φ ( u c , v c ) ∗ T 2 π \left\{xpZp=(r11xc+r12yc+r13)Zc+txZp=(r31xc+r32yc+r33)Zc+tzfpxxp+up0=Φ(uc,vc)T2π

    \right. xpZp=(r11xc+r12yc+r13)Zc+txZp=(r31xc+r32yc+r33)Zc+tzfpxxp+up0=2πΦ(uc,vc)T

    解得:

    Z c = x p t z − t x J x − J z x p Z_{c} = \frac{x_{p}t_{z}-t_{x}}{J_{x}-J_{z}x_{p}} Zc=JxJzxpxptztx

    J x = ( r 11 x c + r 12 y c + r 13 ) J_{x} = (r_{11}x_{c} + r_{12}y_{c} + r_{13}) Jx=(r11xc+r12yc+r13)
    J z = ( r 31 x c + r 32 y c + r 33 ) J_{z} = (r_{31}x_{c} + r_{32}y_{c} + r_{33}) Jz=(r31xc+r32yc+r33)
    x p = ( Φ ( u c , v c ) ∗ T 2 π − u p 0 ) / f p x x_{p} = (\frac{\Phi(u_{c},v_{c}) \ast T}{2\pi} - u_{p0})/f_{px} xp=(2πΦ(uc,vc)Tup0)/fpx

    相机坐标系下的得三维坐标点为:

    { X c = x c ∗ Z c Y c = y c ∗ Z c Z c = x p t z − t x J x − J z x p \left\{Xc=xcZcYc=ycZcZc=xptztxJxJzxp

    \right. Xc=xcZcYc=ycZcZc=JxJzxpxptztx

  • 相关阅读:
    Math对象:JavaScript中的数学工具
    Android | ADB 命令
    python入门基础-数据类型&有序序列和无序序列;
    PyTorch入门教学——torchvision中数据集的使用
    springboot
    YOLOX 学习笔记
    wireshark使用
    MyBatis-Plus找不到Mapper.xml文件的解决方法
    MongoDB聚合运算符:$lte
    一种用于入侵检测的自适应集成机器学习模型
  • 原文地址:https://blog.csdn.net/qq_40918859/article/details/127763190