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

简介

互补格雷码+相移码实现物体三维重建,整个重建过程可以分为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 ] \begin{aligned} \begin{bmatrix} u_{c} \\ v_{c} \\ 1 \end{bmatrix} &= \begin{bmatrix} f_{cx} & 0 & u_{c0} & 0 \\ 0 & f_{cy} & v_{c0} & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \frac{1}{Z_{c}} \begin{bmatrix} R_{w\rightarrow c} & t_{w\rightarrow c} \\ 0 & 1 \end{bmatrix} \begin{bmatrix} X_{w} \\ Y_{w} \\ Z_{w} \\ 1 \end{bmatrix} \\ &= \begin{bmatrix} f_{cx} & 0 & u_{c0} \\ 0 & f_{cy} & v_{c0} \\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix}X_{c}/Z_{c} \\ Y_{c}/Z_{c} \\ 1 \end{bmatrix} \\ &= \begin{bmatrix} f_{cx} & 0 & u_{c0} \\ 0 & f_{cy} & v_{c0} \\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix}x_{c} \\ y_{c} \\ 1 \end{bmatrix} \end{aligned} 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\{\begin{array}{ll}X_{c}=x_{c} \ast Z_{c} \\ Y_{c}=y_{c} \ast Z_{c} \\ Z_{c}=Z_{c} \end{array} \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\{\begin{array}{ll}u_{c}=f_{cx} \ast x_{c} + u_{c0} \\ v_{c}=f_{cy} \ast y_{c} + v_{c0}\end{array} \right. \Rightarrow \left\{\begin{array}{ll}x_{c}=(u_{c} - u_{c0})/f_{cx} \\ y_{c}= (v_{c} - v_{c0})/f_{cy}\end{array} \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\{\begin{array}{ll}X_{p}=x_{p} \ast Z_{p} \\ Y_{p}=y_{p} \ast Z_{p} \\ Z_{p}=Z_{p} \end{array} \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\{\begin{array}{ll}u_{p}=f_{px} \ast x_{p} + u_{p0} \\ v_{p}=f_{py} \ast y_{p} + v_{p0}\end{array} \right. \Rightarrow \left\{\begin{array}{ll}x_{p}=(u_{p} - u_{p0})/f_{px} \\ y_{p}= \ast (v_{p} - v_{p0})/f_{py}\end{array} \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}=\begin{bmatrix}r_{11} & r_{12} & r_{13} \\ r_{21} & r_{22} & r_{23} \\ r_{31} & r_{32} & r_{33} \end{bmatrix}、t_{c \rightarrow p}=\begin{bmatrix}t_{x} & t_{y} & t_{z}\end{bmatrix} Rcp=r11r21r31r12r22r32r13r23r33tcp=[txtytz]

由下面式子,

[ X p Y p Z p ] = R c → p [ X c Y c Z c ] + t c → p \begin{bmatrix}X_{p} \\ Y_{p} \\ Z_{p} \end{bmatrix} = R_{c \rightarrow p}\begin{bmatrix}X_{c} \\ Y_{c} \\ Z_{c} \end{bmatrix} + 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\{\begin{array}{ll} 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} \end{array} \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\{\begin{array}{ll}u_{p}=f_{px} \ast x_{p} + u_{p0} \\ u_{p} =\frac{\Phi(u_{c},v_{c}) \ast T}{2\pi}\end{array} \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\{\begin{array}{ll} x_{p} \ast 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_{px} \ast x_{p} + u_{p0} = \frac{\Phi(u_{c},v_{c}) \ast T}{2\pi} \end{array} \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\{\begin{array}{ll}X_{c} = x_{c} \ast Z_{c} \\ Y_{c} = y_{c} \ast Z{c} \\ Z_{c} = \frac{x_{p}t_{z}-t_{x}}{J_{x}-J_{z}x_{p}} \end{array} \right. Xc=xcZcYc=ycZcZc=JxJzxpxptztx

  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 33
    评论
在Matlab中,解包裹格雷码可以通过以下步骤来实现: 1. 生成格雷码:可以使用互补格雷码的方法生成所需位数的格雷码。在生成格雷码的同时,将每一位格雷码与其对应的十进制数形成键值对存储在字典中,以方便后续的转换操作。中的详细原理。 需要注意的是,由于Matlab程序中求解格雷码值的代码可能存在效率问题,因此在实际使用中可能需要进行优化操作。如果您有更好的优化方法,可以进行交流和讨论。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [互补格雷码+移码求解包裹位(Matlab实现)](https://blog.csdn.net/qq_40918859/article/details/122359752)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [(超详细)互补格雷码+移码求解包裹位(Python实现)](https://blog.csdn.net/qq_40918859/article/details/120575820)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值