基于Python设计的无缝图像拼接项目

无缝图像拼接 运行说明 首先安装依赖的第三方库: c++ sudo apt install cmake libcgal-dev libcgal-qt5-dev sudo pip2 install opencv-python 然后编译 C++ 文件: c++ cmake

本文包含相关资料包-----> 点击直达获取<-------

无缝图像拼接

运行说明

首先安装依赖的第三方库:

c++ sudo apt install cmake libcgal-dev libcgal-qt5-dev sudo pip2 install opencv-python

然后编译 C++ 文件:

c++ cmake . make

在当前目录下生成可执行文件 main。

使用命令

c++ ./main <args>

即可运行或查看帮助,如图 1 所示:

图 1: 查看帮助

实现方式

考虑到实现效率,我采用 C++ 编写代码,其中图片的读入和输出采用 GitHub 上的开源仓库"stb"实现,图片边缘的提取采用 OpenCV。

算法细节

MVC

MVC[3, 2] 算法可分为如下步骤:

找出所有的边缘像素点的位置;

使用 CGAL 将这些点进行带约束的三角剖分;

对于三角剖分结果中的非边缘像素点,依据论文中给出的权重计算方式算出这个点所要垫高的权值;

对于每个三角面片,已经求出了三个顶点的垫高的权值,并且由于假设函数在该范围内平滑,因此直接用一个平面去拟合三角形内的所有像素点的权值大小即可。

图 2 展示了 MVC 算法的中间结果,图 2(a)显示的是从 mask 中找到边缘之后的可视化效果,图 2(b)显示的是从这些边界上的点生成三角剖分的网格之后的效果。请注意,原图并不是一个凸多边形,因此在三角剖分之后要手动去掉那些不在轮廓内的三角形,具体可以采用射线法判断某个点是否在多边形内的算法即可。

边界分割 (b) 三角剖分结果图 2: MVC 可视化中间步骤

1.2 Poisson

此外我还实现了泊松图像融合算法 [4, 5] 进行对比,其梯度计算方式为

(x,y) = 4I(x,y) I(x 1,y) I(x,y 1) I(x +1,y) I(x,y +1)

将原图求完梯度之后,将该梯度匹配到目标图上的某一区域,本质上是一个解线性方程组的问题。形式化地,设有 N 个像素点需要匹配到目标图片中,则需要求解线性方程组Ax =b

其中 x 代表融合后的图片中像素点的值,矩阵 A 的大小 N ×N,列向量 x 和 b 的大小 N,并且 A 的每一行至多只有 5 个非零元素,并且对角线上的元素均为 4。

是一个巨大的稀疏矩阵。考虑到矩阵求逆的复杂度为 O(N3) 太高,并且某些情况下连都无法直接以矩阵形式存储,因此无法直接从公式

x = A1b

求得 x。此处采用 Jacobi Method 迭代求解出 x 的值,详见 [1]。

1.3 实验结果

1.3.1 Test1

使用命令

c++ time ./main -s img/src3.jpg -t img/target1.jpg -m img/mask3.jpg -o result_MVC.png -h -135 -w -30 -a MVC time ./main -s img/src3.jpg -t img/target1.jpg -m img/mask3.jpg -o result_Poisson.png -i 5000 -h 50 -w 100 -a Poisson

可得到如下结果

```c++ Done with 262 vertices and 466 triangles. real 0m0.243s user 0m0.287s sys 0m0.233s


iter 5001 
err 0.001767 0.001913 0.003486 
real    0m0.361s
user    0m0.345s
sys 0m0.016s

```

可以看到,MVC 总共只用了 262 个三角顶点,耗时 0.243s;Poisson 由于使用迭代方法求解矩阵,迭代次数越多解的越精确,5000 轮之后误差几乎为 0,并且运行速度为 0.36s,二者均十分快。合成效果如图 3 所示。由于该样本太容易合成,二者在效果上看不出有什么明显差别。

图 3: 第一组数据合成效果

1.3.2 Test2

使用命令

c++ time ./main -s img/src4.png -t img/target2.png -m img/mask4.png -o result_MVC.png -h 142 -w 132 -a MVC time ./main -s img/src4.png -t img/target2.png -m img/mask4.png -o result_Poisson.png -i 10000 -h 150 -w 150 -a Poisson

可得到如下结果

```c++ Done with 836 vertices and 1580 triangles. real 0m0.233s user 0m0.228s sys 0m0.305s


iter 10001 
err 82.519269 49.665685 58.341544 
real    0m5.356s 
user    0m5.351s 
sys 0m0.004s

```

可以看到 MVC 总共只用了 836 个三角顶点,耗时 0.228s;Poisson 在 10000 轮之后总误差不到 100,平均每个像素点误差不到 0.01,并且运行速度为 5s 左右。合成效果如图 4 所示,对比可以发现 MVC 的边缘比 Poisson 更加平滑。

MVC (b) Poisson 图 4: 第二组数据合成效果

1.3.3 Test3

使用命令

c++ time ./main -s img/src0.jpg -t img/target0.jpg -m img/mask0.png -h 318 -w 370 -o result_MVC.png time ./main -a Poisson -s img/src0.jpg -t img/target0.jpg -m img/ mask0.png -o result_poisson.png -i 10000 -h 350 -w 400

可得到如下结果

```c++ Done with 1702 vertices and 3346 triangles. real 0m0.420s user 0m0.458s sys 0m0.253s


iter 10001 
err 2238.275301 1683.477450 1885.838338 
real    0m43.901s 
user    0m43.816s 
sys 0m0.040s

```

这是 MVC 论文中的图,可以看到 MVC 总共只用了 1702 个三角顶点,耗时 0.458s;

Poisson 在 10000 轮之后总误差大约 2000,平均每个像素点误差不到 0.03,但是运行速度达到了 43s 左右。合成效果如图 5 所示。从效果上看而言还是 MVC 更胜一筹。

MVC (b) Poisson 图 5: 第三组数据合成效果

c++ References Jacobi method. . Accessed: 2018-04-12. Kewei Chen and Chenen Wu. Mvc. . Accessed: 2018-06-12. Zeev Farbman, Gil Hoffer, Yaron Lipman, Daniel Cohen-Or, and Dani Lischinski. Coordinates for instant image cloning. ACM Transactions on Graphics (TOG), 28(3):67, 2009. Patrick Pérez, Michel Gangnet, and Andrew Blake. Poisson image editing. ACM Transactions on graphics (TOG), 22(3):313--318, 2003. Christopher J. Tralie. Poisson image editing. Accessed: 2018-04-12.

参考文献

  • 印刷公司内容管理平台的设计与实现(吉林大学·郎彩虹)
  • 智能服装款式设计系统的数据库实现和远程数据获取(东华大学·万登峰)
  • 基于Java Web的牧草种子显微图像拼接系统的研究与实现(内蒙古农业大学·宁丽娜)
  • 家居导购数据平台的设计与实现(北京交通大学·李昊)
  • 建筑设计院图档管理系统的设计与实现(吉林大学·时淮龙)
  • 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
  • 基于B/S架构的工程图纸管理系统(辽宁科技大学·孔庆涛)
  • 基于DNN生成商品外观设计图的Web应用的设计与实现(大连海事大学·杨书雯)
  • 基于DNN生成商品外观设计图的Web应用的设计与实现(大连海事大学·杨书雯)
  • 基于PHP+MySQL的交互学习系统的设计与实现(吉林大学·刘博)
  • 基于.NET自定义控件的社区网站系统研究与实现(武汉理工大学·刘亚)
  • 基于J2EE的手机综合网站的设计与实现(吉林大学·宋微)
  • 基于B/S架构的工程图纸管理系统(辽宁科技大学·孔庆涛)
  • Linux环境下基于Web的图档管理系统的开发(山东科技大学·刘治国)
  • 家居导购数据平台的设计与实现(北京交通大学·李昊)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设驿站 ,原文地址:https://m.bishedaima.com/yuanma/36040.html

相关推荐

  • 基于python实现的Bilibili弹幕检索系统

    基于python实现的Bilibili弹幕检索系统 一,概述 首先是完成信息分析与设计的作业,该作业需要完成一个检索系统, 我完成的是一个弹幕检索系统
    2024年05月14日
    1 1 1
  • 高校学科竞赛平台

    这是一个🔥🔥基于SpringBoot框架的高校学科竞赛平台设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    1 1 1
  • 基于SpringBoot框架的音乐网站

    这是一份采用Java语言编写的🔥🔥SpringBoot音乐网站项目源代码🔥🔥,该项目运用了SpringBoot框架和Vue技术,支持在开发环境中如Idea或Eclipse运行
    2024年05月23日
    27 1 3
  • 基于SpringBoot框架的大学生竞赛管理系统

    这是一套采用Java编程语言,基于SpringBoot框架构建的大学竞赛管理系统的源代码,项目中融入了Vue技术,开发工具为Idea或Eclipse,此竞赛管理系统适用于毕业设计或课程设计任务
    2024年05月23日
    7 1 1
  • javaweb九宫格日记本系统、servlet+jsp+mysql

    在当今信息技术快速发展的背景下,网络应用日益普及,为了满足用户的个性化需求和提升用户体验,基于JavaWeb技术开发的九宫格日记本系统备受关注,本系统采用Servlet和JSP技术
    2024年05月07日
    5 1 2
  • 厨艺交流平台

    这是一个🔥🔥基于SpringBoot框架的厨艺交流平台设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    1 1 1
  • 基于Jsp和MySQL实现的图书管理系统

    Library-management-system 基于Jsp和MySQL实现的图书管理系统 参考文献 基于J2EE的远程网络教育系统研究与实现(电子科技大学·陈南荪) 基于JSP的高校图书管理系统开发和实现(电子科技大学·朱丽萍) 基于
    2024年05月14日
    4 1 1
  • Java+JavaWeb在线考试系统

    这是一个🔥🔥JavaWeb在线考试系统🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 JavaWeb在线考试系统开发技术栈为SSM项目,可以作为毕业设计课程设计作业使用java
    2024年05月23日
    13 1 3
  • 基于Android和SSM框架实现的学生成绩管理系统APP

    基于Android和SSM框架实现的学生成绩管理系统APP 1,项目概述 1,1 项目的目的和意义 建立学生成绩管理系统,利用手机对学生成绩进行管理
    2024年05月14日
    4 1 1
  • 基于Java+JSP+Servlet的图书管理系统

    这是一个🔥🔥基于JSP+Servlet的图书管理系统🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 图书管理系统开发技术栈为JSP项目,可以作为毕业设计课程设计作业基于Java+Jsp+Servlet的编写一个图书管理系统
    2024年05月23日
    4 1 1

发表回复

登录后才能评论