全景图片拼接

最近在做老师布的一个作业,原来是要做全景视频合成,可是做出来发现实时性根本达不到,改成全景图片合成吧。废话不多说啦,说说原理。

原理:

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 根据图片融合的多少,可以大概的判断一下特征点的距离,根据这个可以删去那些不必要的特征点,但是这样就有局限性,要根据图片融合的尺寸,来修改参数,自适应性不好。

原理很简单,下面直接上图,状哉我交大。







压缩包中包含的具体内容: 对给定数据中的6个不同场景图像,进行全景拼接操作,具体要求如下: (1) 寻找关键点,获取关键点的位置和尺度信息(DoG检测子已由KeypointDetect文件夹中的detect_features_DoG.m文件实现;请参照该算子,自行编写程序实现Harris-Laplacian检测子)。 (2) 在每一幅图像中,对每个关键点提取待拼接图像的SIFT描述子(编辑SIFTDescriptor.m文件实现该操作,运行EvaluateSIFTDescriptor.m文件检查实现结果)。 (3) 比较来自两幅不同图像的SIFT描述子,寻找匹配关键点(编辑SIFTSimpleMatcher.m文件计算两幅图像SIFT描述子间的Euclidean距离,实现该操作,运行EvaluateSIFTMatcher.m文件检查实现结果)。 (4) 基于图像中的匹配关键点,对两幅图像进行配准。请分别采用最小二乘方法(编辑ComputeAffineMatrix.m文件实现该操作,运行EvaluateAffineMatrix.m文件检查实现结果)和RANSAC方法估计两幅图像间的变换矩阵(编辑RANSACFit.m 文件中的ComputeError()函数实现该操作,运行TransformationTester.m文件检查实现结果)。 (5) 基于变换矩阵,对其中一幅图像进行变换处理,将其与另一幅图像进行拼接。 (6) 对同一场景的多幅图像进行上述操作,实现场景的全景拼接(编辑MultipleStitch.m文件中的makeTransformToReferenceFrame函数实现该操作)。可以运行StitchTester.m查看拼接结果。 (7) 请比较DoG检测子和Harris-Laplacian检测子的实验结果。图像拼接的效果对实验数据中的几个场景效果不同,请分析原因。 已经实现这些功能,并且编译运行均不报错!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大指挥官

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值