最近在做老师布的一个作业,原来是要做全景视频合成,可是做出来发现实时性根本达不到,改成全景图片合成吧。废话不多说啦,说说原理。
原理:
1 直方图均衡化对图片三个信道进行归一化处理。
2 柱面投影
3 图片配准
4 图片融合
简单解释一下,柱面投影其实不难,就是一个曲面与一个跟它相切的平面的三角变换关系,有高中数学的人完全可以明白。做这块的程序,要知道摄像机的视角,或者知道投影中心到投影柱面的距离,这两个参数是可以相互换算的,知道一个即可。
图片配准,由于时间关系,我用的算法是最简单的,首先是提取特征点,我用的是SIFT特征点,这个特征点计算着真心很慢呀,这个是没有办法做到实时性的主要原因。投影后的图片,水平,垂直平移,进行配准。
对于图片融合,就是加权融合。在两个图片重合的区域,dst=a*src1+(1-a)*src2,src1是一个图片,src2是第二个图片,dst是融合的目标图片。其中a是不断变化的,目的是达到一种效果,在离src1近的地方,a比较大,这样src1占的比重就比较大。随着离src2越来越近,a慢慢变成0,这样第二个图片占的比重就越来越大啦。
下面说一下遇到的问题:
1 不同的图片之间,sift特征点的个数是不一样的,因此对不同的图片,参数可能设置的不一样。
2 sift特征点的获取速度太慢,我用的OPENCV里的库函数得到的特征点,不知道是不是opencv库函数的问题。光得到特征点,一个图片都差不多1s,达不到实时的要求。
3 根据图片融合的多少,可以大概的判断一下特征点的距离,根据这个可以删去那些不必要的特征点,但是这样就有局限性,要根据图片融合的尺寸,来修改参数,自适应性不好。
原理很简单,下面直接上图,状哉我交大。
原文地址:http://blog.csdn.net/d14665/article/details/42425723