1. 自拍全景算法相关汇总
  2. 1. stitcher 模块
  3. 2. SIFT
  4. 3. surf算法
  5. 4. 鱼眼图像校正
  6. 5. 目前主流产品

自拍全景算法相关汇总

1. stitcher 模块

Mat pano;  
Stitcher stitcher = Stitcher::createDefault(try_use_gpu);  
Stitcher::Status status = stitcher.stitch(imgs, pano); 


//使用Surf算法来寻找特征点,支持Surf和Orb两种方式
detail::SurfFeaturesFinder *featureFinder = new detail::SurfFeaturesFinder();  
stitcher.setFeaturesFinder(featureFinder);  

//1:平面拼接
PlaneWarper* cw = new PlaneWarper();  
stitcher.setWarper(cw);  

多种拼接方式
opencv图片全景拼接详解

stitching.cpp
opencv实现图像的拼接功能 -

项目:
panorama image stitching based on SIFT features
https://github.com/izhengfan/panorama

Open-Source SIFT Library
https://github.com/robwhess/opensift

https://github.com/ppwwyyxx/OpenPano
OpenPano: Automatic Panorama Stitching From Scratch
.
+++RobHess的SIFT源码分析:综述 - Why So Serious?

SIFT算法学习小记

+++ SIFT算法详解

SIFT变换_百度百科

RobHess的SIFT源码分析:综述 - Why So Serious?

SIFT算法实现理解及注释详解(基于Rob Hess源码) - 一亩半分地

++基于SIFT特征的全景图像拼接 - Why So Serious?

拼接的图片怎么是模糊的? - 知乎

AutoStitch: a new dimension in automatic image stitching

图像拼接现在还有研究的价值吗?有哪些可以研究的点?现在技术发展如何? - 知乎

YaqiLYU - 知乎

C++ implementation of the ECCV 2016 paper, Natural Image Stitching with the Global Similarity Prior.+++nothinglo/NISwGSP

PTGUI_百度百科

2. SIFT

SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT)
是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interest points,or corner points)及其有关scale 和 orientation 的描述子得到特征并进行图像特征点匹配,获得了良好效果,是用于图像处理领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。

SIFT特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关。对于光线、噪声、微视角改变的容忍度也相当高。基于这些特性,它们是高度显著而且相对容易撷取,在母数庞大的特征数据库中,很容易辨识物体而且鲜有误认。使用SIFT特征描述对于部分物体遮蔽的侦测率也相当高,甚至只需要3个以上的SIFT物体特征就足以计算出位置与方位。在现今的电脑硬件速度下和小型的特征数据库条件下,辨识速度可接近即时运算。SIFT特征的信息量大,适合在海量数据库中快速准确匹配。[5]

3. surf算法

sift算法比较稳定,检测到的特征点也比较多,其最大的缺点是计算复杂度较高。后面有不少学者对其进行了改进,其中比较出名的就是surf算法,surf的中文意思为快速鲁棒特征。

Surf在速度上比sift要快许多,这主要得益于它的积分图技术,已经Hessian矩阵的利用减少了降采样过程,另外它得到的特征向量维数也比较少,有利于更快的进行特征点匹配。

作为尺度不变特征变换算法(Sift算法)的加速版,Surf算法在适中的条件下完成两幅图像中物体的匹配基本实现了实时处理,其快速的基础实际上只有一个——积分图像haar求导

特征点检测学习_2(surf算法)

Sift/Surf采用Henssian矩阵获取图像局部最值还是十分稳定的,但是在求主方向阶段太过于依赖局部区域像素的梯度方向,有可能使得找到的主 方向不准确,后面的特征向量提取以及匹配都严重依赖于主方向,即使不大偏差角度也可以造成后面特征匹配的放大误差,从而匹配不成功;另外图像金字塔的层取 得不足够紧密也会使得尺度有误差,后面的特征向量提取同样依赖相应的尺度,发明者在这个问题上的折中解决方法是取适量的层然后进行插值。

Sift是一种只 利用到灰度性质的算法,忽略了色彩信息,后面又出现了几种据说比Surf更稳定的描述器其中一些利用到了色彩信息

4. 鱼眼图像校正

《单幅圆形鱼眼图像的校正》matlab程序

经纬度映射法校正鱼眼图像 程序 - wd1603926823的专栏

鱼眼拼接之SIFT之进行特征点匹配 - wd1603926823的专栏

OpenCV/source/sample/cpp的学习

stitching.cpp鱼眼图像拼接融合 源码分析 - wd1603926823的专栏

研究鱼眼校正拼接全景漫游的 所以我需要着重看以下几个cpp:

  • 1:brief_match_test.cpp :利用brief描述算子匹配二维图像特征点

  • 2:calibration.cpp 3calibration.cpp:相机外定标。根据自带的函数提取角点后定标

  • 3: calibration_artificial :根据角点自动校准摄像。初始化后寻找角点再用calibrateCamera校准

  • 4:chamfer.cpp:图像匹配。把图像二值后在目标图像中寻找模板图像。主要调用chamerMatching函数。

  • 5: descriptor_extractor_matcher.cpp:SIFT匹配。

  • 6:detector_descriptor_evaluation.cpp:计算检测算子。各种Dataset。以及detector_descriptor_matcher_evaluation.cpp:计算检测算子匹配

  • 7:freak_demo.cpp:利用特征点进行图像匹配。特征点描述包括A. Alahi, R. Ortiz, and P. Vandergheynst. FREAK: Fast Retina Keypoint.

  • 8: matcher_simple.cpp:SURF图像匹配。参数少,效果和generic_descriptor_match.cpp相似。而matching_to_many_images.cpp多幅图像的匹配。强大的SURF算法。

  • 9:stereo_match.cpp :立体匹配。

  • 10:stitching.cpp stitching_detailed.cpp:图像拼接。涉及到特征点的提取、特征点匹配、图像融合等等。Stitcher类。

图像拼接(十一):双摄像头实时拼接+stitching_detailed - czl389的专栏

图像拼接(十):OPenCV stitching和stitching_detailed - czl389的专栏

opencv中stitching_detail的运行 - 木鸟飞 - 博客园

opencv全景拼接例子 - cmake编译

5. 目前主流产品

有颜值也有实力:HUAWEI nova 2 Plus拍照专项评测
全景自拍:顾名思义是在自拍功能的基础下加入了全景拍摄功能,不过这个全景拍摄的操作就比普通全景拍摄简单很多。打开功能后,先拍摄画面中间部分的照片,然后向左移拍摄左边场景,再向右移拍右边场景。

手机全景拍摄解决方案 - 虹软解决方案

opencv图片全景拼接详解

从目前看,应该使用opencv2版本,因为opencv3版本把一些算法移到了其他的目录,需要重新编译处理,可以按照下面的方法。但是目前我们还是以opencv2开始研究。

Building and Installing OpenCV with Extra Modules on Windows 7 64-bit


技术交流学习,请加QQ微信:631531977
目录