Coder Social home page Coder Social logo

image-stitching's Introduction

Image-Stitching

项目内容

使用opencv中的基本工具,以sift算法为核心,对两张包含部分相同内容的图片进行基于特征提取的图像拼接。

实现过程

第一步:对输入图象进行图像增强(目前测试了直方图均衡化、亮度匹配)
第二步:使用SIFT算法对两张图片进行特征提取
第三步:对两张图上的特征点进行匹配(目前测试了暴力匹配、K-最近邻匹配)
第四步:对匹配好的特征点对,进行筛选,尽量剔除误匹配,根据匹配效果最好的四个点计算投影变换使用的单应性矩阵(目前测试了RANSAC算法剔除误匹配)
第五步:根据第四步返回的单应性矩阵进行图片拼接

结果介绍

根目录中的图片即为不同算法输出的结果,命名方式为:图像增强方法__特征匹配方法__拼接图片组编号

实现细节


第一步:图象增强虽然放在开头,确是其他部分调整完之后最后进行的内容,在得到base line之后根据结果缺陷有针对性地进行图象增强
第二步:在充分理解SIFT算法之后,可以考虑换用SURF等其他特征提取算法
第三步:依照目前的结果来看,虽然两种匹配方式选择的特征点对有所区别,不过最终拼接的效果相差很小
第四步:最省心的一步
第五步:本来考虑了两种拼接方法,一种是直接覆盖式,另一种是加权融合式。后来经过实验证明,最理想条件下,两种方式均能做到完美拼接,但是随着难度的提升,加权融合式拼接会因为拼接错位以及权值无法精确计算而产生虚影,而直接覆盖式即使存在误差也能比较清晰地看到大部分图片信息,最终决定只保留了直接覆盖式拼接。

遇到的问题及困难

第一步:目前测试的两种增强方式都是为了实现亮度归一化,避免在特征匹配良好的情况下,因为图片亮度而导致的不自然。很遗憾目前的两种方法都不理想。亮度匹配是根据两张图片的亮度均值之差对其中一张图片的亮度进行整体平移,但是测试结果显示跟不增强的结果几乎没什么区别。直方图均衡化在图片高亮部分表现不错,但是对低亮度部分几乎不起作用,并且在图片分辨率不高的情况下会严重损害图像清晰度,产生马赛克一样的色块。

第二步:SIFT算法提取特征时,对图片的亮度十分敏感,如果亮度差别比较明显的话,即使特征很明显也很容易产生大量误匹配最终导致匹配失败。这也是最后想到引入图像增强进行亮度归一化的原因,不过目前并没有得到很好的解决。

第三、四步:基本都是调取API所以难度不大

第五步:由于opencv的图片拼接API封装的过于高级,没有基本工具包可用,所以全部代码都是由手写实现。其中最关键的是对单应性矩阵的理解,如果不能应用单应性矩阵计算出变换后的画布最大尺寸,就有可能产生图片变换后超出画布范围的情况。

项目成员

Winter : https://github.com/zysc1996
JocelynWang2333 : https://github.com/JocelynWang2333
Sunmile : https://github.com/Sunmilelj
Rongxin : https://github.com/dengrongxin

后续工作

这个项目可尝试的内容还有很多,会在将来不定期更新。

image-stitching's People

Contributors

zysc1996 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.