发明名称 基于条纹结构光的动态场景深度获取方法
摘要 本发明公开了一种基于条纹结构光的动态场景深度获取方法,主要解决现有技术计算深度精度低,深度空间分辨率低的问题。其实现步骤为:设计De Bruijn序列编码的黑白条纹模板P,用投影仪将其投射到三维场景中,用摄像机记录变形条纹图像U;利用投影仪和摄像机的几何关系与De Bruijn序列确定变形条纹图像U中黑白条纹的序号;求取变形条纹图像U和黑白条纹模板P之间的相位差,利用黑白条纹的序号与相位差求取变形条纹图像中各像素点对应在黑白条纹模板P中的匹配点坐标;用匹配点坐标与线面相交几何关系求出变形条纹图像U中每个像素点的深度。本发明具有计算复杂度低、深度空间分辨率高、深度精度高的优点,可用于对动态场景的精确三维重建。
申请公布号 CN103400366B 申请公布日期 2016.04.13
申请号 CN201310277892.5 申请日期 2013.07.03
申请人 西安电子科技大学 发明人 石光明;李甫;李芹;齐飞;石悦鑫;高山
分类号 G06T7/00(2006.01)I;G06T9/00(2006.01)I;G06T17/00(2006.01)I 主分类号 G06T7/00(2006.01)I
代理机构 陕西电子工业专利中心 61205 代理人 王品华;朱红星
主权项 一种基于条纹结构光的动态场景深度获取方法,包括如下步骤:(1)设计2元3次De Bruijn序列编码的不同宽度的黑白条纹模板P:(1a)设定一对黑白条纹作为基本单元,且黑色条纹在左,白色条纹在右,并且设定黑白条纹宽度之和为常数L,定义白色条纹宽度与L的比值为占空比,当白色条纹的占空比为2/6时,该对黑白条纹的编码为0,当白色条纹的占空比为4/6时,该对黑白条纹的编码为1;(1b)将一系列黑白条纹编码按照2元3次De Bruijn序列的规律变化,即按00010111规律变化的黑白条纹,即构成黑白条纹模板P;经投影仪T将该黑白条纹模板P投射到三维场景中,用摄像机C记录经场景调制过的变形条纹图像U;(2)对记录变形条纹图像U使用阈值法二值化,得到二值图像B:(2a)将变形条纹图像U分割为大小一致的m个图像块,m≥2;(2b)对每个图像块按照如下公式进行二值化,<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><msub><mi>v</mi><mrow><mo>(</mo><mi>a</mi><mo>,</mo><mi>n</mi><mo>)</mo></mrow></msub><mo>=</mo><mfenced open = "{" close = ""><mtable><mtr><mtd><mrow><mn>255</mn><mo>,</mo><msub><mi>u</mi><mrow><mo>(</mo><mi>a</mi><mo>,</mo><mi>n</mi><mo>)</mo></mrow></msub><mo>&gt;</mo><msub><mi>t</mi><mi>a</mi></msub></mrow></mtd></mtr><mtr><mtd><mrow><mn>0</mn><mo>,</mo><msub><mi>u</mi><mrow><mo>(</mo><mi>a</mi><mo>,</mo><mi>n</mi><mo>)</mo></mrow></msub><mo>&le;</mo><msub><mi>t</mi><mi>a</mi></msub></mrow></mtd></mtr></mtable></mfenced><mo>,</mo></mrow>]]></math><img file="FDA0000908466530000011.GIF" wi="473" he="166" /></maths>其中,u<sub>(a,n)</sub>为第a个图像块中第n个像素点的灰度值,a=1,…,m,t<sub>a</sub>为第a个图像块对应的阈值,该阈值针对每个图像块应用双峰法确定,v<sub>(a,n)</sub>为相应二值图像块中第n个像素点的取值;(2c)把所有二值化后的图像块合并为一个二值图像B;(3)根据占空比的不同,将二值图像B中的每个黑白条纹对译成0、1序列码:(3a)根据二值图像B中条纹间的边界点确定黑白条纹宽度;(3b)求出每个白色条纹宽度与其左侧的黑色条纹的宽度之和,并用白色条纹宽度除以相应的黑白条纹宽度之和,求得白色条纹的占空比;(3c)当白色条纹的占空比为2/6时,黑白色条纹对解码为0,当白色条纹的占空比为4/6时,黑白色条纹对解码为1;(4)根据De Bruijn序列解码方式,将步骤(3)中得到的对应黑白条纹对的0、1序列解码为0~7的序号N:(4a)根据2元3次De Bruijn序列的编码方案,将编码序列000定义为序号0,将编码序列001定义为序号1,将编码序列010定义为序号2,将编码序列101定义为序号3,将编码序列011定义为序号4,将编码序列111定义为序号5,将编码序列110定义为序号6,将编码序列100定义为序号7;(4b)从步骤(3)确定的黑白条纹对编码序列中提取所有长度为3的相邻的黑白条纹对编码序列,并将步骤(4a)中定义的编码序列对应的序号赋给该黑白条纹对作为该黑白条纹对的序号N;5)在步骤(4)得到的黑白条纹对序号N基础上加上8M,得到连续序号,其中M为正整数,其取值通过外极线段确定,步骤如下:(5a)当给定场景的深度范围(d<sub>min</sub>,d<sub>max</sub>)后,调整投影仪T和摄像机C的位置,使变形条纹图像U中每个像素点对应到黑白条纹模板P中的外极线段长度小于等于一个De Bruijn序列周期;(5b)根据摄像机C、变形条纹图像U中的点A和三维场景中的点O的共线性,将点O的坐标(x<sub>O</sub>,y<sub>O</sub>,z<sub>O</sub>)表示为:(x<sub>O</sub>,y<sub>O</sub>,z<sub>O</sub>)=(C<sub>x</sub>,C<sub>y</sub>,C<sub>z</sub>)+γ<sub>1</sub>[(x<sub>U</sub>,y<sub>U</sub>,z<sub>U</sub>)‑(C<sub>x</sub>,C<sub>y</sub>,C<sub>z</sub>)],   1)其中,(x<sub>U</sub>,y<sub>U</sub>,z<sub>U</sub>)为变形条纹图像U中像素点A的三维坐标,(C<sub>x</sub>,C<sub>y</sub>,C<sub>z</sub>)为摄像机C光心的三维坐标,γ<sub>1</sub>为点C到点O的距离;(5c)根据点C到直线E的距离d<sub>max</sub>,确定点C到点O的距离γ<sub>1</sub>为:<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><msub><mi>&gamma;</mi><mn>1</mn></msub><mo>=</mo><mfrac><mrow><msub><mi>d</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub><mo>-</mo><msub><mi>C</mi><mi>z</mi></msub></mrow><mrow><msub><mi>z</mi><mi>U</mi></msub><mo>-</mo><msub><mi>C</mi><mi>z</mi></msub></mrow></mfrac><mo>,</mo></mrow>]]></math><img file="FDA0000908466530000021.GIF" wi="318" he="141" /></maths>其中,z<sub>U</sub>为变形条纹图像U中像素点A坐标(x<sub>U</sub>,y<sub>U</sub>,z<sub>U</sub>)中的第三个分量,C<sub>z</sub>为摄像机C的光心坐标(C<sub>x</sub>,C<sub>y</sub>,C<sub>z</sub>)中的第三个分量;2)(5d)将式2)代入式1),得点O的坐标(x<sub>O</sub>,y<sub>O</sub>,z<sub>O</sub>)为:<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><mo>(</mo><msub><mi>x</mi><mi>O</mi></msub><mo>,</mo><msub><mi>y</mi><mi>O</mi></msub><mo>,</mo><msub><mi>z</mi><mi>O</mi></msub><mo>)</mo><mo>=</mo><mo>(</mo><msub><mi>C</mi><mi>x</mi></msub><mo>,</mo><msub><mi>C</mi><mi>y</mi></msub><mo>,</mo><msub><mi>C</mi><mi>z</mi></msub><mo>)</mo><mo>+</mo><mfrac><mrow><msub><mi>d</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub><mo>-</mo><msub><mi>C</mi><mi>z</mi></msub></mrow><mrow><msub><mi>z</mi><mi>U</mi></msub><mo>-</mo><msub><mi>C</mi><mi>z</mi></msub></mrow></mfrac><mo>&lsqb;</mo><mo>(</mo><msub><mi>x</mi><mi>U</mi></msub><mo>,</mo><msub><mi>y</mi><mi>U</mi></msub><mo>,</mo><msub><mi>z</mi><mi>U</mi></msub><mo>)</mo><mo>-</mo><mo>(</mo><msub><mi>C</mi><mi>x</mi></msub><mo>,</mo><msub><mi>C</mi><mi>y</mi></msub><mo>,</mo><msub><mi>C</mi><mi>z</mi></msub><mo>)</mo><mo>&rsqb;</mo><mo>;</mo><mo>-</mo><mo>-</mo><mo>-</mo><mn>3</mn><mo>)</mo></mrow>]]></math><img file="FDA0000908466530000022.GIF" wi="1587" he="143" /></maths>(5e)根据三维场景中的点O、投影仪T和黑白条纹模板P中的点F的共线性,将点F的坐标(x<sub>F</sub>,y<sub>F</sub>,z<sub>F</sub>)表示为:(x<sub>F</sub>,y<sub>F</sub>,z<sub>F</sub>)=γ<sub>2</sub>(x<sub>O</sub>,y<sub>O</sub>,z<sub>O</sub>),   4)其中,γ<sub>2</sub>为中间变量,<img file="FDA0000908466530000031.GIF" wi="229" he="134" />f为投影仪的焦距;(5g)将式3)代入式4),得到点F的坐标(x<sub>F</sub>,y<sub>F</sub>,z<sub>F</sub>)中的x<sub>F</sub>为<maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><msub><mi>x</mi><mi>F</mi></msub><mo>=</mo><mfrac><mi>f</mi><msub><mi>d</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub></mfrac><mrow><mo>(</mo><msub><mi>C</mi><mi>x</mi></msub><mo>+</mo><mfrac><mrow><mo>(</mo><msub><mi>d</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub><mo>-</mo><msub><mi>C</mi><mi>z</mi></msub><mo>)</mo><mo>(</mo><msub><mi>x</mi><mi>U</mi></msub><mo>-</mo><msub><mi>C</mi><mi>x</mi></msub><mo>)</mo></mrow><mrow><msub><mi>z</mi><mi>U</mi></msub><mo>-</mo><msub><mi>C</mi><mi>z</mi></msub></mrow></mfrac><mo>)</mo></mrow><mo>,</mo><mo>-</mo><mo>-</mo><mo>-</mo><mn>5</mn><mo>)</mo></mrow>]]></math><img file="FDA0000908466530000032.GIF" wi="1414" he="158" /></maths>(5h)根据式5),确定M的取值为:M=quot(x<sub>F</sub>,8L);(6)对所得变形条纹图像U与黑白条纹模板P求其相位差,利用该相位差与步骤(5)得到的连续序号求取变形条纹图像U中各像素点对应在黑白条纹模板P中的匹配点坐标:(6a)求得第s对黑白条纹右边界点在黑白条纹模板P中的坐标x<sub>s</sub>:x<sub>s</sub>=(N<sub>s</sub>+8·M<sub>s</sub>)·L,其中,N<sub>s</sub>为第s对黑白条纹对应的序号,取值为0~7,M<sub>s</sub>为第s对黑白条纹对应的8的倍数,L为黑白条纹宽度之和;(6b)将黑白条纹模板P与Gabor滤波器进行卷积,得到在x<sub>s</sub>点处的卷积结果为:<img file="FDA0000908466530000033.GIF" wi="483" he="79" />其中,ρ<sub>1</sub>为卷积结果的幅值,k<sub>1</sub>为黑白条纹模板P中x<sub>s</sub>的局部频率,φ<sub>1</sub>为黑白条纹模板P中x<sub>s</sub>的初始相位,j为复数虚部的单位;(6c)将变形条纹图像U与Gabor滤波器进行卷积,得到在变形条纹图像U像素点(x<sub>U</sub>,y<sub>U</sub>,z<sub>U</sub>)中的x<sub>U</sub>处的卷积结果为:<maths num="0005" id="cmaths0005"><math><![CDATA[<mrow><msub><mi>R</mi><mi>U</mi></msub><mrow><mo>(</mo><msub><mi>x</mi><mi>U</mi></msub><mo>,</mo><msub><mi>k</mi><mn>2</mn></msub><mo>)</mo></mrow><mo>=</mo><msub><mi>&rho;</mi><mn>2</mn></msub><msup><mi>e</mi><mrow><mi>j</mi><mrow><mo>(</mo><msub><mi>k</mi><mn>2</mn></msub><msub><mi>x</mi><mi>U</mi></msub><mo>+</mo><msub><mi>&phi;</mi><mn>2</mn></msub><mo>)</mo></mrow></mrow></msup><mo>,</mo></mrow>]]></math><img file="FDA0000908466530000034.GIF" wi="525" he="87" /></maths>其中,ρ<sub>2</sub>为卷积结果的幅值,k<sub>2</sub>为变形条纹图像U中x<sub>U</sub>处的局部频率,φ<sub>2</sub>为变形条纹图像U中x<sub>U</sub>处的初始相位;(6d)求取变形条纹图像U中像素点x<sub>U</sub>处对应到黑白条纹模板P中的匹配点坐标x<sub>s</sub>′:<maths num="0006" id="cmaths0006"><math><![CDATA[<mrow><msup><msub><mi>x</mi><mi>s</mi></msub><mo>&prime;</mo></msup><mo>=</mo><msub><mi>x</mi><mi>s</mi></msub><mo>+</mo><mfrac><mrow><mo>(</mo><msub><mi>k</mi><mn>2</mn></msub><msub><mi>x</mi><mi>U</mi></msub><mo>+</mo><msub><mi>&phi;</mi><mn>2</mn></msub><mo>)</mo><mo>-</mo><mo>(</mo><msub><mi>k</mi><mn>1</mn></msub><msub><mi>x</mi><mi>s</mi></msub><mo>+</mo><msub><mi>&phi;</mi><mn>1</mn></msub><mo>)</mo></mrow><msub><mi>k</mi><mn>1</mn></msub></mfrac><mo>;</mo></mrow>]]></math><img file="FDA0000908466530000041.GIF" wi="661" he="142" /></maths>(7)对变形条纹图像U中每个像素点,结合步骤(6)得到的匹配点坐标,用线面相交几何关系求得相应的深度值D<sub>1</sub>:<maths num="0007" id="cmaths0007"><math><![CDATA[<mrow><msub><mi>D</mi><mn>1</mn></msub><mo>=</mo><mfrac><mrow><mi>f</mi><mo>&CenterDot;</mo><mrow><mo>(</mo><msub><mi>C</mi><mi>x</mi></msub><msub><mi>z</mi><mi>U</mi></msub><mo>-</mo><msub><mi>C</mi><mi>z</mi></msub><msub><mi>x</mi><mi>U</mi></msub><mo>)</mo></mrow></mrow><mrow><msup><msub><mi>x</mi><mi>s</mi></msub><mo>&prime;</mo></msup><mo>&CenterDot;</mo><mrow><mo>(</mo><msub><mi>z</mi><mi>U</mi></msub><mo>-</mo><msub><mi>C</mi><mi>z</mi></msub><mo>)</mo></mrow><mo>-</mo><mrow><mo>(</mo><msub><mi>x</mi><mi>U</mi></msub><mo>-</mo><msub><mi>C</mi><mi>x</mi></msub><mo>)</mo></mrow></mrow></mfrac><mo>,</mo></mrow>]]></math><img file="FDA0000908466530000042.GIF" wi="638" he="154" /></maths>其中,(x<sub>U</sub>,y<sub>U</sub>,z<sub>U</sub>)为变形条纹图像U像素点的三维坐标,x<sub>s</sub>'为x<sub>U</sub>处的匹配点坐标,(C<sub>x</sub>,C<sub>y</sub>,C<sub>z</sub>)为摄像机C的光心坐标,f为投影仪T的焦距;(8)用Harris角点检测算子提取变形条纹图像U的角点,再用所得角点划分变形条纹图像U的连续区域;(9)对深度值D<sub>1</sub>中的异常值进行校正:(9a)计算步骤(5)中相邻连续条纹序号的差值,定义差值不是1的条纹序号对应的像素点的深度值为异常值D<sub>2</sub>,并对变形条纹图像U中所有像素点的深度值的正常或者异常进行标记,记作q,第n个像素点的标记q<sub>n</sub>={0,1},n=1…576×576,576×576为变形条纹图像U的分辨率,0表示深度值正常,1表示深度值异常;(9b)选取异常值D<sub>2</sub>邻域内未被标记的正常深度值D<sub>1</sub>,再在这些正常深度值D<sub>1</sub>中筛选与异常值D<sub>2</sub>位于同一连续区域内的正常深度值D<sub>1</sub>,对这些深度值D<sub>1</sub>求平均得到对异常值D<sub>2</sub>的校正值D<sub>3</sub>;(9c)由正常深度值D<sub>1</sub>与校正值D<sub>3</sub>,得到最终的深度值D为:D=(1‑q)·D<sub>1</sub>+q·D<sub>3</sub>,即当q=0时,D=D<sub>1</sub>;当q=1时,D=D<sub>3</sub>。
地址 710071 陕西省西安市太白南路2号