发明内容
鉴于上述现有技术的不足,本发明的目的在于提供一种基于多投影的图像拼接融合方法及***,旨在提供解决多投影的图像拼接融合误差大的问题。
本发明的技术方案如下:
一种基于多投影的图像拼接融合方法,其中,包括步骤:
A、将投影视频、图片进行贝塞尔曲面输出;
B、对摄像头作标定,用标定的摄像头内部参数对拍摄图像做修正;
C、对融合区域生成特征点并进行特征点识别;
D、对融合区进行校正并融合。
所述的基于多投影的图像拼接融合方法,其中,所述步骤A包括:
A1、将投影视频、图片输出到与屏幕一样大小的d3d纹理表面;
A2、将纹理贴到一屏幕大小为基准的4*4控制点的贝塞尔表面上;
A3、通过d3d渲染贝塞尔表面到屏幕输出。
所述的基于多投影的图像拼接融合方法,其中,所述步骤B中,对摄像头作标定采用的是Opencv的标定与修正算法。
所述的基于多投影的图像拼接融合方法,其中,所述步骤C中,每个融合区域均居中输出一行或一列圆,图像扣除融合区域后的其他区域均匀输出多个圆,通过居中的圆计算投影之间偏差,其他区域的圆用于调整投影仪自身误差和微调,特征圆的识别采用Opencv的圆识别算法。
所述的基于多投影的图像拼接融合方法,其中,所述步骤D包括:
D1、选择一个投影画面作为基准画面,其相邻图像以基准图像为标准分别校正,然后再依次以校正好的图像为基准校正其相邻的图像;
D2、各个投影仪依次独立投影,投射出融合区域圆和非融合区域圆,各个投影仪相应的照相机分别拍摄各自投影仪的投影图像得出多副图像,再分别对各个图像进行贝塞尔曲面校正;
D3、利用边缘融合函数进行图像融合;
所述边缘融合函数为:
;
其中,a为亮度调节系数,x为像素列在叠加区的相对位置; p 为影响因子。
一种基于多投影的图像拼接融合***,其中,包括:
贝塞尔曲面输出模块,用于将投影视频、图片进行贝塞尔曲面输出;
摄像头标定模块,用于对摄像头作标定,用标定的摄像头内部参数对拍摄图像做修正;
特征点识别模块,用于对融合区域生成特征点并进行特征点识别;
图像融合模块,用于对融合区进行校正并融合。
所述的基于多投影的图像拼接融合***,其中,所述贝塞尔输出模块包括:
纹理投射单元、用于将投影视频、图片输出到与屏幕一样大小的d3d纹理表面;
贝塞尔投射单元、用于将纹理贴到一屏幕大小为基准的4*4控制点的贝塞尔表面上;
渲染单元、用于通过d3d渲染贝塞尔表面到屏幕输出。
所述的基于多投影的图像拼接融合***,其中,所述摄像头标定模块中,对摄像头作标定采用的是Opencv的标定与修正算法。
所述的基于多投影的图像拼接融合***,其中,所述特征点识别模块中,每个融合区域均居中输出一行或一列圆,图像扣除融合区域后的其他区域均匀输出多个圆,通过居中的圆计算投影之间偏差,其他区域的圆用于调整投影仪自身误差和微调,特征圆的识别采用Opencv的圆识别算法。
所述的基于多投影的图像拼接融合***,其中,所述图像融合模块包括:
第一校正单元,用于选择一个投影画面作为基准画面,其相邻图像以基准图像为标准分别校正,然后再依次以校正好的图像为基准校正其相邻的图像;
第二校正单元,用于各个投影仪依次独立投影,投射出融合区域圆和非融合区域圆,各个投影仪相应的照相机分别拍摄各自投影仪的投影图像得出多副图像,再分别对各个图像进行贝塞尔曲面校正;
融合单元,用于利用边缘融合函数进行图像融合;
所述边缘融合函数为:
;
其中,a为亮度调节系数,x为像素列在叠加区的相对位置; p 为影响因子。
有益效果:本发明通过将投影视频、图片进行贝塞尔曲面输出,对摄像头作标定,用标定的摄像头内部参数对拍摄图像做修正,对融合区域生成特征点并进行特征点识别,对融合区进行校正并融合,进行多步骤的图像拼接融合,解决了现有技术中通过人眼来判定重合与拼接,存在一定的误差的问题,使图像拼接融合更加准确,保证多个投影的图像融合后,与一副完整图像误差最小化,保证图像的质量。
具体实施方式
本发明提供一种基于多投影的图像拼接融合方法及***,为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参阅图1,为本发明一种基于多投影的图像拼接融合方法的步骤流程图,其中,包括步骤:
S1、将投影视频、图片进行贝塞尔曲面输出;
S2、对摄像头作标定,用标定的摄像头内部参数对拍摄图像做修正;
S3、对融合区域生成特征点并进行特征点识别;
S4、对融合区进行校正并融合。本发明的所述方法,多投影的图像需要经过融合形成一个完整的图像,因此,首先对投影视频和图片进行贝塞尔曲面输出,然后对摄像头进行标定,进行第一步的图像修正,选取特征点,通过特征点进行标定,以特征点为基准点对融合区域进行图像修正,对各个融合区域进行修正后,将修正后的图像进行融合得到一副完整的图像。
进一步的,如图2所示,为所述的基于多投影的图像拼接融合方法的步骤S1的流程图,其中,所述步骤S1包括:
S101、将投影视频、图片输出到与屏幕一样大小的d3d纹理表面;
S102、将纹理贴到一屏幕大小为基准的4*4控制点的贝塞尔表面上;
S103、通过d3d渲染贝塞尔表面到屏幕输出。本发明的所述方法,步骤S1中,先将投影视频、图片等先输出到一个与屏幕一样大小的d3d纹理表面,再将纹理贴到一屏幕大小为基准的4*4个控制点的贝塞尔表面上(该表面Z方向相等,为一平面),再通过d3d渲染此贝塞尔表面到屏幕输出。通过调整16个控制点即可随意扭曲输出的图像,输出任意的贝塞尔表面。(设屏幕分辨率为1024*768)如图3所示。
进一步的,所述的基于多投影的图像拼接融合方法,其中,所述步骤S2中,对摄像头作标定采用的是Opencv的标定与修正算法。
本发明的基于Opencv的相机标定算法具体为:
1.打印一张标定板,然后附加到一个平坦的表面上;
2.通过移动相机或平面拍摄标定板各种角度的图片(3张以上);
3.使用Opencv函数cvFindChessboardCorners和cvFindCornerSubPix函数检测图片中的棋盘角点;
4.使用cvCalibrateCamera2计算出相机的内参和畸变系数。
所述的基于多投影的图像拼接融合方法,其中,所述步骤S3中,每个融合区域均居中输出一行或一列圆,图像扣除融合区域后的其他区域均匀输出多个圆,通过居中的圆计算投影之间偏差,其他区域的圆用于调整投影仪自身误差和微调,特征圆的识别采用Opencv的圆识别算法。
本发明所述基于Opencv的圆识别算法具体为:在黑底图像绘制白色圆,用相机拍摄到的图像目标圆与底图在亮度上差别明显,故可采用如下方式识别圆心位置:
1、采用大律法(OTSU)计算图像的最佳分割阈值T;
2、使用阈值T对图像进行二值化处理,得到一幅目标圆灰度为255,底图灰度为0的图像;
3、使用Opencv的找连通区域函数cvFindContours找出像素数大于1000的连通区域(可有效排除噪音点的影响);
4、再使用cvFitEllipse2找到连通区域的拟合圆,取其圆心即为投射圆的位置。
采用找连通区域的方法比Opencv直接找圆算法抗干扰能力更强,适应性更好,精度更高。
本发明的较佳实施例,假设共有m*n个投影仪,图像大小为w*h,图像之间的水平融合区域宽度为a,图像之间垂直融合区域高度为b,则整个输出画面的大小为:
[m*w - (m-1)*a] * [n*h - (n-1)*b]
首先,每个图像输出一系列圆,输出方法如下:
每个融合区域均居中输出(位于融合区中部)一行(水平融合)或一列(垂直融合)圆;
图像扣除融合区域后的其他区域均匀输出x*y个圆。
融合区域的圆因为都居中,所以两个投影完全正确融合后,两行(列)圆将完全重合。通过识别融合区域圆的位置,即可计算两个投影之间的偏差,通过调整即可使到两个投影基本重合。其他区域的x*y个圆用于调整投影仪自身误差和微调。
进一步的,如图4所示,为所述的基于多投影的图像拼接融合方法的步骤S4的流程图,其中,所述步骤S4包括:
S401、选择一个投影画面作为基准画面,其相邻图像以基准图像为标准分别校正,然后再依次以校正好的图像为基准校正其相邻的图像;
S402、各个投影仪依次独立投影,投射出融合区域圆和非融合区域圆,各个投影仪相应的照相机分别拍摄各自投影仪的投影图像得出多副图像,再分别对各个图像进行贝塞尔曲面校正;
S403、利用边缘融合函数进行图像融合;
所述边缘融合函数为:
;
其中,a为亮度调节系数,x为像素列在叠加区的相对位置; p 为影响因子。
本发明进一步的,一较佳实施例,设有4个投影,A、B、C、D,A的水平融合区域的投射圆位置点为Pa1、Pa2、Pa3….Pak,垂直投射圆位置点为Pak+1、Pak+2、Pak+3…..Pa2k; B的水平融合区域的投射圆位置点为Pb1、Pb2、Pb3….Pbk,垂直投射圆位置点为Pbk+1、Pbk+2、Pbk+3…..Pb2k; C的水平融合区域的投射圆位置点为Pc1、Pc2、Pc3….Pck,垂直投射圆位置点为Pck+1、Pck+2、Pck+3…..Pc2k; D的水平融合区域的投射圆位置点为Pd1、Pd2、Pd3….Pdk,垂直投射圆位置点为Pdk+1、Pdk+2、Pdk+3…..Pd2k;
第一步:先选择一个投影画面作为基准画面(此步骤只能通过人眼判断,选择相对投影银幕偏差最小的投影图像),其相邻图像以基准图像为标准分别校正,然后再依次以校正好的图像为基准校正其相邻的图像。
设选择A作为基准画面,先投影A的水平、垂直融合区圆Pa1、Pa2、Pa3….Pak,Pak+1、Pak+2、Pak+3…..Pa2k,通过A投影相应的相机拍摄;然后依次投射B画面垂直融合区圆Pbk+1、Pbk+2、Pbk+3…..Pb2k,C画面水平融合圆Pc1、Pc2、Pc3….Pck,并使用A投影对应的相机拍摄,因B垂直融合区圆和C水平融合区圆均位于A投影区内,故A相机可拍摄到其图像。因采用同一相机拍摄,故可认为拍摄到的图像的偏差如实反映了两个投影图像之间的偏差,可用两列点之间的偏差来计算两个投影图像之间的不对齐情况, 设Pa2k与Pak+1在内存垂直方向的距离为Ly,屏幕高度为H
B水平偏移E1= [(Pak+1.x+Pak+2.x、Pak+3.x+…..Pa2k.x)- (Pbk+1.x+Pbk+2.x、Pbk+3.x+…..Pb2k.x) ] / k;
A、B垂直偏移E2= [(Pak+1.y+Pak+2.y、Pak+3.y+…..Pa2k.y)- (Pbk+1.y+Pbk+2.y、Pbk+3.y+…..Pb2k.y) ] / k;
A 、B旋转偏移E3 = arctan{ [(Pak+1.x-Pbk+1.x) - (Pa2k.x-Pb2k.x)] / (Pa2k.y-Pak+1.y)}
A、B高度偏差E4 = [(Pa2k.y-Pak+1.y) - (Pb2k.y-Pbk.y)] * (H/Ly)
以上计算出的是拍摄到的图像上的偏移量,需要转换为电脑输出时的像素偏移量,通过计算它们之间的比率即可;
比率p = Ly / (Pa2k.y – Pak+1.y)
P即为拍摄图像1个像素对应的内存像素数,水平、垂直、高度偏移量分别乘以p即可得出内存偏移量。
第一次使用此方法校正后,基本也消除大部分误差,但如果第一次误差太大,第一次校正后仍然会存在部分偏差(原因可能是比率的计算、偏移的计算为一个平均估值,无法跟实际情况完全一样,但跟实际比较接近),故使用3次此方法校正,实验证明可将误差缩小到更小的范围。其他两个屏幕之间的校正与此方法一样。
第二步:各个投影仪依次独立投影,投射出x*y个圆和融合区域圆,各个投影仪相应的照相机分别拍摄各自投影仪的投影图像得出m*n副图像,再分别对各个图像进行贝塞尔曲面校正。因x*y个圆均匀分布于非融合区域内,通过照相机图像分析各个圆的分布情况即可得出各个点的偏差,然后通过贝塞尔曲面来校正偏差。
以融合区域作为参考点,因各个圆点(包括融合区域和非融合区域)在内存中的均匀分布,故只需调整摄出的圆使其均匀分布即可。
以水平融合区域和垂直融合区域为边做矩形,则其他圆点应均匀分布于矩形内,设Pa2k与Pak+1在内存垂直方向的距离为Ly,Pa2k与Pa1在内存的水平距离为Lx,内存与图像水平比率Kx,垂直比率Ky
Kx= Lx / (Pak.x-Pa1.x)
Ky= Ly / (Pa2k.y – Pak+1.y)
根据比率关系即可计算出各个圆点在图像上的理想位置,假如图像只有一个水平融合区域和一个垂直融合区域,则共有(m+1)*(n+1)个圆点。第i行j列(0<=i<=m,0<=j<=n)的点在照片的理想位置Pij应为
Pij = (Kx*i,Ky*j)
设照片上第i行j列点的实际位置为P’ij,则各个点的偏差
Eij = Pij – P’ij
则点在内存的偏差
E’ij = (Eij.x*Kx,Eij.y*Ky)
根据各个点在内存的偏差使用贝塞尔曲面来校正偏差。贝塞尔校正算法基于贪婪算法,如下:
已知平面上k个点阵Pk(P1,P2…Pk),对个点分别做偏移得到点阵P’k(P’1,P’2,P’3…P’k),通过调整P’k所在的贝塞尔曲面使P’k与Pk完全重合,则作距离
D = |P1-P’1| + |P2-P’2 | + |P3-P’3|+…..|Pk-P’k|
设定一个偏移量d对贝塞尔控制点Pb做偏移水平和垂直偏移
Pb1=Pb + (d,0)
Pb2 = Pb + (-d,0)
Pb3 = Pb + (0,d)
Pb4 = Pb + (0,-d)
分别计算当某个贝塞尔控制点偏移Pb1、Pb2、Pb3、Pb4时的距理D1、D2、D3、D4,取D、D1、D2、D3、D4中的最小值,将此时的贝塞尔控制点作为新的控制点,如果最小值为D则停止,否则循环上述操作。
分别对16个控制点都循环以上操作,直到找到D不再变小为止,则此时控制点即为结果控制点位置。
常用的图像融合算法函数如下:
;
其中:x为像素列在叠加区的相对位置; p 为影响因子,在实际应用中,通过上述融合函数后的图像并不完好,中间会出现灰带,导致这种现象的原因是叠加区的图像仅仅增加像素值,没有对图像输出亮度进行改变. 因此,为了融合完整,必须将叠加区的像素映射成亮度的函数,即显示器的伽玛函数。
因此为了进一步控制叠加区图像的亮度可对上述融合函数进行优化,得到更加全面的边缘融合函数,即
所述边缘融合函数为:
;
函数中, a 为亮度调节系数, a ∈[ 0 ,1 ] . 当a > 0. 5 时,则混合区的中心变亮;当a < 0. 5 时,则混合区的中心变暗。
一种基于多投影的图像拼接融合***,如图5所示,为所述***的结构框图,其中,包括:
贝塞尔曲面输出模块100,用于将投影视频、图片进行贝塞尔曲面输出;
摄像头标定模块200,用于对摄像头作标定,用标定的摄像头内部参数对拍摄图像做修正;
特征点识别模块300,用于对融合区域生成特征点并进行特征点识别;
图像融合模块400,用于对融合区进行校正并融合。
进一步的,所述的基于多投影的图像拼接融合***,如图6所示为所述***的贝塞尔曲面输出模块的结构框图,其中,所述贝塞尔输出模块100包括:
纹理投射单元101,用于将投影视频、图片输出到与屏幕一样大小的d3d纹理表面;
贝塞尔投射单元102,用于将纹理贴到一屏幕大小为基准的4*4控制点的贝塞尔表面上;
渲染单元103,用于通过d3d渲染贝塞尔表面到屏幕输出。
所述的基于多投影的图像拼接融合***,其中,所述摄像头标定模块中,对摄像头作标定采用的是Opencv的标定与修正算法。
所述的基于多投影的图像拼接融合***,其中,所述特征点识别模块中,每个融合区域均居中输出一行或一列圆,图像扣除融合区域后的其他区域均匀输出多个圆,通过居中的圆计算投影之间偏差,其他区域的圆用于调整投影仪自身误差和微调,特征圆的识别采用Opencv的圆识别算法。
进一步的,所述的基于多投影的图像拼接融合***,如图7所示,为所述***的图像融合模块的结构框图,其中,所述图像融合模块400包括:
第一校正单元401,用于选择一个投影画面作为基准画面,其相邻图像以基准图像为标准分别校正,然后再依次以校正好的图像为基准校正其相邻的图像;
第二校正单元402,用于各个投影仪依次独立投影,投射出融合区域圆和非融合区域圆,各个投影仪相应的照相机分别拍摄各自投影仪的投影图像得出多副图像,再分别对各个图像进行贝塞尔曲面校正;
融合单元403,用于利用边缘融合函数进行图像融合;
所述边缘融合函数为:
;
其中,a为亮度调节系数,x为像素列在叠加区的相对位置; p 为影响因子。
综上所述,本发明通过将投影视频、图片进行贝塞尔曲面输出,对摄像头作标定,用标定的摄像头内部参数对拍摄图像做修正,对融合区域生成特征点并进行特征点识别,对融合区进行校正并融合,进行多步骤的图像拼接融合,解决了现有技术中通过人眼来判定重合与拼接,存在一定的误差的问题,使图像拼接融合更加准确,保证多个投影的图像融合后,与一副完整图像误差最小化,保证图像的质量。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。