发明名称 基于平面表面高动态范围图像的真实点光源位置测算方法
摘要 本发明涉及一种基于平面表面高动态范围图像的真实点光源位置测算方法,其特征在于:采用彩色数码相机与三角架相连,彩色数码相机与计算机相连,计算机中存有若干即62个圆,并将其编号dt记为1,2,3,...,62的半径为10mm大正圆随机分布,做为随机点云标定模板,将随机点云标定模板印刷于210mm*297mm纯白色表面光滑不透光pvc板上,记作随机点云标记板;其具有高效、简便等优点,更适合在实际用使用;其高效、快捷地估计出实际空间中点光源的位置并且为后期在三维建模软件中将其虚拟化做准备。
申请公布号 CN106157321A 申请公布日期 2016.11.23
申请号 CN201610609268.4 申请日期 2016.07.29
申请人 长春理工大学 发明人 韩成;杨华民;李华;权巍;蒋振刚;翟宏宇;薛耀红;胡汉平;王旭阳;王颖
分类号 G06T7/00(2006.01)I 主分类号 G06T7/00(2006.01)I
代理机构 吉林长春新纪元专利代理有限责任公司 22100 代理人 王薇
主权项 一种基于平面表面高动态范围图像的真实点光源位置测算方法,其特征在于:采用彩色数码相机与三角架相连,彩色数码相机与计算机相连,计算机中存有若干即62个圆,并将其编号dt记为1,2,3,...,62的半径为10mm大正圆随机分布,做为随机点云标定模板,将随机点云标定模板印刷于210mm*297mm纯白色表面光滑不透光pvc板上,记作随机点云标记板;具体的测算步骤如下:步骤1、将三角架调至适当高度,并调整三脚架的云台部分,使得通过彩色数码相机具体步骤如下的取景器目镜能够看到随机点云标记板的全部,将彩色数码相机调至M档,拍摄五张仅曝光时间不同的标记板照片,分别记为Pic0、Pic1、Pic2、Pic3、Pic4,对应的曝光时间依次记为Ev0、Ev1、Ev2、Ev3、Ev4,五张标记板照片的图像分辨率均为pix1*pix2;步骤2、使用MALAB R2012b中的makehdr函数和Ev0、Ev1、Ev2、Ev3、Ev4,将Pic0、Pic1、Pic2、Pic3、Pic4合成为一张随机点云标记板高动态范围图像,记为HDRI,存储于计算机4中;步骤3、在随机点云标记板上建立以随机点云标记板的几何中心为原点O、沿纸面向上为Z轴正方向的右手坐标系,记为世界坐标系;步骤4、使用MALAB R2012b将HDRI上所有像素点的luminance值存储到pix1*pix2的数组中,记为lum,其中lum(i,j)表示HDRI上坐标为(i,j)像素点的luminance值,在HDRI中随机点云标记板区域内的白色部分任意选取五个像素点,依次分别记为point0、point1、point2、point3、point4,并记它们在HDRI中的像素坐标依次分别为<img file="32070dest_path_image001.GIF" wi="427" he="24" />,同时,易获取point0、point1、point2、point3、point4所对应的luminance值,依次分别记为<img file="878105dest_path_image002.GIF" wi="553" he="25" />;步骤5、使用OpenCV1.0中的cvThreshold函数,对随机点云标定模板进行二值化;使用OpenCV1.0中的cvFindContours函数,在二值化后的HDRI中找出各图形的轮廓的点集;使用OpenCV1.0中的cvCvtSeqToArray函数,依次将每一个图形的轮廓的点集转换为一维数组,一维数组中元素的类型都为CvPoint;最后,使用OpenCV1.0中的cvFindContours函数,对每个一维数组进行圆拟合,得到每个圆的圆心坐标,记为<img file="595525dest_path_image003.GIF" wi="155" he="30" />,并从rotatedrect数据结构中提取出每个圆的二次曲线方程记为:<img file="990734dest_path_image004.GIF" wi="554" he="64" />其中<img file="742790dest_path_image005.GIF" wi="456" he="23" />分别为编号为dt的圆二次曲线方程的多项式系数,令<img file="502935dest_path_image006.GIF" wi="412" he="108" />,并将<img file="769969dest_path_image007.GIF" wi="62" he="31" />归一化记为<img file="906552dest_path_image008.GIF" wi="71" he="29" />;步骤6、将随机点云标定模板中的每一个圆的<img file="575431dest_path_image009.GIF" wi="72" he="30" />(后文称做“中心圆”)与其最近的4个圆的<img file="506477dest_path_image010.GIF" wi="74" he="26" />(后文称做“邻近圆”)构成一个按照中心圆编号为次序的PN*5矩阵,记为YU,其中YU[dt][0]记录中心圆的<img file="260807dest_path_image011.GIF" wi="71" he="28" />,YU[dt][ii]记录其最近4个圆的<img file="935502dest_path_image012.GIF" wi="71" he="27" />,ii=0,1,2,3,如图4所示为一组,计算出每个中心圆曲线与其邻近圆曲线间的<img file="458887dest_path_image013.GIF" wi="54" he="29" />做为边长,其中<img file="826414dest_path_image014.GIF" wi="331" he="34" />;根据余弦定理计算方法如下:<img file="2793dest_path_image015.GIF" wi="486" he="363" />将每个中心圆的四个余弦值存储为62*4的数组,记为YXJ1,其中YXJ1(dt,0)、YXJ1(dt,1)、YXJ1(dt,2)、YXJ1(dt,3)表示随机点云标定模板中编号为dt的圆的4个相关余弦值,记为<img file="277917dest_path_image016.GIF" wi="355" he="43" />;步骤7、使用OpenCV1.0中的cvThreshold函数,对HDRI进行二值化;使用OpenCV1.0中的cvFindContours函数,找出每一个可见椭圆的轮廓点集;随后,需使用OpenCV1.0中的cvCvtSeqToArray函数,依次将每一个可见椭圆的轮廓的点集转换为一维数组,一维数组中元素的类型都为CvPoint;最后,使用OpenCV1.0中的cvFitEllipse函数,对每个一维数组进行椭圆拟合,得到每个椭圆的圆心在世界坐标系下的坐标,记为<img file="859071dest_path_image017.GIF" wi="125" he="39" />,并从rotatedrect数据结构中提取出每个可见椭圆的二次曲线方程记为:<img file="131920dest_path_image018.GIF" wi="552" he="65" />其中<img file="860842dest_path_image019.GIF" wi="474" he="24" />分别为编号为<img file="877340dest_path_image020.GIF" wi="26" he="24" />的椭圆二次曲线方程的多项式系数,令<img file="313000dest_path_image021.GIF" wi="464" he="111" />,并将<img file="84647dest_path_image022.GIF" wi="72" he="27" />归一化记为<img file="972969dest_path_image023.GIF" wi="83" he="28" />,其中<img file="855474dest_path_image024.GIF" wi="27" he="30" />表示HDRI中可见椭圆的编号;步骤8、将HDRI中的每一个可见的椭圆的<img file="145641dest_path_image025.GIF" wi="83" he="30" />(后文称做“中心椭圆”)与其最近的4个椭圆的<img file="88189dest_path_image026.GIF" wi="83" he="30" />(后文称做“邻近椭圆”)构成一个按照中心椭圆编号为次序的TN*5矩阵,记为TU,其中TU(dt’,0)记录中心椭圆的<img file="463807dest_path_image027.GIF" wi="80" he="28" />,TU(dt’, ii)记录其最近4椭圆的<img file="884424dest_path_image028.GIF" wi="85" he="28" />,ii=0,1,2,3,如图5所示为一组,计算出每个中心椭圆与其邻近椭圆间的<img file="297606dest_path_image029.GIF" wi="57" he="29" />做为边长,其中<img file="348739dest_path_image030.GIF" wi="395" he="34" />;根据余弦定理计算方法如下:<img file="273970dest_path_image031.GIF" wi="503" he="366" />将每个中心椭圆处的四个余弦值存储为TN*4的数组,记为YXJ2[TN][4],其中YXJ2[dt’]表示摄影球图片中可见的编号为dt’的椭圆的4个相关余弦值可记为<img file="435961dest_path_image032.GIF" wi="390" he="43" />,TN表示在HDRI中观察到的椭圆圆点的总数;步骤9、将数组YXJ2与YXJ1进行比较,找出其中相匹配的点,其满足:<img file="497458dest_path_image033.GIF" wi="554" he="40" />;按照YXJ1中各点顺序将YXJ2中与YXJ1中相匹配的点存储于TN*4的数组中,记为YXJ3;步骤10、将YXJ1中每个圆形的圆心的坐标<img file="719492dest_path_image034.GIF" wi="122" he="30" />和YXJ3中对应的椭圆圆心的坐标<img file="69701dest_path_image035.GIF" wi="158" he="32" />传递给OpenCV1.0中的摄像机标定函数CalibrateCamera2,便可得彩色数码相机的3*3旋转矩阵R和3*1平移矩阵T,从而可以计算得到point0、point1、point2、point3、point4在世界坐标系中的坐标<img file="97700dest_path_image036.GIF" wi="115" he="32" />,N=0,1,2,3,4:令<img file="216966dest_path_image037.GIF" wi="257" he="105" />,<img file="406639dest_path_image038.GIF" wi="208" he="150" />,由<img file="244145dest_path_image039.GIF" wi="294" he="29" />解出采样点point0、point1、point2、point3、point4在世界坐标系中的坐标;步骤11、将point0、point1、point2、point3、point4中的任意四个点为一组,分为不重复的五组,并将这五组采样点所对应的在世界坐标系中的坐标和luminance值存储到一个5*4*4数组中,记为g_pi,其中g_pi[n][p][q](q=0,1,2)表示第n组采样点中第p个采样点在世界坐标系中的坐标,g_pi[n][p][3]表示第n组采样点中第p个采样点的luminance值;步骤12、分别假设n=0、1、2、3、4,对g_pi[n][p][3]执行步骤13、14、15操作;步骤13、根据对实际点光源的位置,估计出大致测算范围M,使得欲测算的点光源能够位于以随机点云标记板所在平面为底面的M*M*M的立方体内,该立方体记为C,设该场景下环境光的luminance值为lum_amb,则可针对每组采样点利用牛顿迭代法解如下方程组:设最终待求点光源在图2所示坐标系中的坐标为<img file="747939dest_path_image040.GIF" wi="75" he="30" />,<img file="49607dest_path_image041.GIF" wi="554" he="278" />,该方程组记为“三球方程组”;步骤14、每组采样点在解步骤13中涉及的方程组时所选取的初始值可采用如下方法确定:由M*M*M立方体的各边中点,将M*M*M的待分割立方体分割为等大的八个较小的立方体,按照方位顺序将这八个较小立方体编号,并记为C<sub>f</sub>,其中f=0,1,2,…,7,此八个较小立方体的体中心点在世界系中的空间坐标记为<img file="344935dest_path_image042.GIF" wi="104" he="35" />,并计算如下式子:<img file="732054dest_path_image043.GIF" wi="414" he="60" />,该式记为“最小距离式”,其中<img file="39538dest_path_image044.GIF" wi="120" he="30" />为步骤13中牛顿迭代法解方程组时以<img file="930134dest_path_image045.GIF" wi="88" he="25" />为初始值的估算结果;步骤15、选取使得最小距离式成立的体中心点所在较小立方体作为新的待分割立方体,重复操作步骤14,直到最小距离式的结果值小于0.001或者待分割立方体的边长不大于0.01,重复步骤14终止,至此,求得每组采样点所估算出的关于lum_amb的点光源坐标,记为<img file="664872dest_path_image046.GIF" wi="152" he="36" />;步骤16、以步骤13中涉及的lum_amb为自变量,求解出满足下式的lum_amb值:<img file="dest_path_image048.GIF" wi="533" he="100" />;步骤17、根据步骤16中所得的lum_amb值,依照步骤14、15所述操作求解三球方程组,并将五个三球方程组的结果坐标取平均值;通过以上步骤便可快速、高精度地估计实际空间中点光源的位置并且为后期在三维建模软件中将其虚拟化做准备。
地址 130022 吉林省长春市卫星路7186号科技大厦B座1603室