最佳缝合线能够有效的去除拼接中运动物体移动出现的鬼影,如何寻找最佳缝合线对于图像拼接去除鬼影比较的重要。寻找最佳缝合线涉及到比较重要的一个思想是动态规划,寻找强度值最优的路径。

关于强度值的计算,具体情况如下:

以上公式是重叠像素点的颜色值之差,是结构值之差。这里的结构值计算采用Sobel算子,也可以考虑其他的边缘检测算子,其中x,y方向的算子如下:

                   

最后寻找最佳缝合线思想,步骤:

1、考虑强度值E的每一列都为一条最佳缝合线,首先从第一行开始,累计添加下一行的强度值;

2、每一列强度值向下一行的左、中、右进行扫描,获取最小的强度累计值,并记录最小强度值的列号;

3、统计出强度值最小的一条做为最佳缝合线。

4、最后根据最佳缝合线进行图像的拼接融合,融合也可以采用改进加权平均融合。

直接看效果图

重影图

最佳缝合线融合图

def optimal_seam_rule_value(self, I1, I2):I1 = cv2.cvtColor(I1, cv2.COLOR_BGR2GRAY)I2 = cv2.cvtColor(I2, cv2.COLOR_BGR2GRAY)Sx = np.array([[-2, 0, 2], [-1, 0, 1], [-2, 0, 2]])Sy = np.array([[-2, -1, -2], [0, 0, 0], [2, 1, 2]])I1_Sx = cv2.filter2D(I1, -1, Sx)I1_Sy = cv2.filter2D(I1, -1, Sy)I2_Sx = cv2.filter2D(I2, -1, Sx)I2_Sy = cv2.filter2D(I2, -1, Sy)E_color = (I1 - I2) ** 2E_geometry = (I1_Sx - I2_Sx) * (I1_Sy - I2_Sy)E = E_color + E_geometryreturn E.astype(float)def optimal_seam_rule2(self, I1, I2):E = self.optimal_seam_rule_value(I1, I2)# optimal seampaths_weight = E[0, 1:-1].reshape(1, -1)  # Cumulative strength valuepaths = np.arange(1, E.shape[1] - 1).reshape(1, -1)  # save indexfor i in range(1, E.shape[0]):# boundary processlefts_index = paths[-1, :] - 1lefts_index[lefts_index < 0] = 0rights_index = paths[-1, :] + 1rights_index[rights_index > E.shape[1] - 1] = E.shape[1] - 1mids_index = paths[-1, :]mids_index[mids_index < 0] = 0mids_index[mids_index > E.shape[1] - 1] = E.shape[1] - 1# compute next row strength value(remove begin and end point)lefts = E[i, lefts_index] + paths_weight[-1, :]mids = E[i, paths[-1, :]] + paths_weight[-1, :]rights = E[i, rights_index] + paths_weight[-1, :]# return the index of min strength value values_3direct = np.vstack((lefts, mids, rights))index_args = np.argmin(values_3direct, axis=0) - 1  # # next min strength value and indexweights = np.min(values_3direct, axis=0)path_row = paths[-1, :] + index_argspaths_weight = np.insert(paths_weight, paths_weight.shape[0], values=weights, axis=0)paths = np.insert(paths, paths.shape[0], values=path_row, axis=0)# search min pathmin_index = np.argmin(paths_weight[-1, :])return paths[:, min_index]

另外一篇博客多个路径抵达某点时最小能量和计算,然后通过回溯方式自底向上查找最佳缝合线:https://blog.csdn.net/YMilton/article/details/109361107

python最佳缝合线(Image Stitching 2)相关推荐

  1. 动态规划最佳缝合线查找(Image Stitching 3)

    1. 存在的问题 之前最佳缝合线查找存在一定的问题:查找不到最小能量和的缝合线路径.举一个简单的例子如图1.1所示: 图1.1 如果从上至下求和选择最小能量函数,则选择的路径为蓝色,但是蓝色路径不是最 ...

  2. python学习路线-Python最佳学习路线

    Python最佳学习路线 如何学习Python 最近开始整理python的资料,会陆续放到博客中存档.找了几个qq群,其中有一个群78486745(点击进群).后面就没怎么加群了,还是需要看官方文档为 ...

  3. Python最佳代码实践:性能、内存和可用性!

    作者:Satwik Kansal,译者:Prodesire 英文原文:https://dwz.cn/r4N2hvht 译文:https://zhuanlan.zhihu.com/p/28675694 ...

  4. python最佳实践笔记

    本文为阅读Python最佳实践指南后的心得体会 结构 README.rst LICENSE setup.py requirements.txt sample/__init__.pycore.pyhel ...

  5. 针对新人的:Python最佳学习路线

    原文作者:佛山小程序员 原文链接:https://blog.csdn.net/weixin_44192923/article/details/86515020 Python最佳学习路线 最近开始整理p ...

  6. python469教程_从入门到精通真不难:Python最佳学习路线(视频学习教程)分享

    随着人工智能时代的来临, Python开始崭露头角并迅速吸引了人们的广泛关注.很多人想要从事Python开发,但需要学什么内容.怎么快速学习呢?接下来就给大家分享 Python最佳学习路线.帮你快速找 ...

  7. python最佳ide_2014年最佳PHP IDE-调查结果

    python最佳ide Exactly one month ago, we opened the Best PHP IDE of 2014 survey. 4000 entries later, it ...

  8. python最佳实践指南试题_8.1. 关于这份指南

    与 Tcl.Perl.Ruby.Scheme 以及 Java 类似,Python 是一门用途广泛的高级编程语言.它的一些关键特性有: 语法清晰.可读性极佳 Python 的设计哲学着眼于可读性,它以缩 ...

  9. python比较好的书籍推荐-推荐几本2019年初学者学习Python最佳书籍!

    一些程序员说Python是一门很棒的第一语言,而另一些程序员则声称Python是学习的最后一种很棒的语言!无论如何,Python是一种非常流行的学习语言,这是无可争辩的.根据TIOBE指数,它是目前世 ...

  10. Python 最佳实践

    前言 对我来说,以前每次面试是我审视自己,检验自己的一种方式.每次准备面试,以及被面试官问住的时候才会发现,其实我python我学的还不够好.工作中也是,可以从其他的同事那里获得成长.但是我今天说的是 ...

最新文章

  1. composer的基本运用
  2. 8086寄存器组织结构
  3. Access denied for user 'root'@'localhost' 解决流程
  4. css背景图宽度只适应,高度不变
  5. android socket io和服务器_Java socket通讯服务器和客户端教学版
  6. mysql从节点放家里_添加MySQL 5.6 从节点 Slave
  7. hybris测试数据的存放位置
  8. 如何保持安全在线的五大技巧
  9. mac m1 php,【php】Macbook m1 Big Sur 安装php7.1 mondodb 折腾记
  10. Markdown 编辑器 Editor.md 使用
  11. 郭天祥 10天搞定单片机 (3)数码管+中断
  12. ASP.NET MVC入门
  13. win10的系统mysql服务器地址,win10系统上的mysql服务器地址
  14. python无法打开微信登录_如何让你的微信登录界面地球转起来(利用python实现)...
  15. Bomb(数位DP板题)
  16. Haskell:理解Haskell中的CPS(Cont)
  17. html大作业展示个人风采,个人风采展示自我介绍精选模板
  18. easyuefi如何添加引导_easyuefi怎么用?easyuefi基本使用方法介绍
  19. Java基础语法(汉罗塔)
  20. 修复mysql表快速解决is marked as crashed and should be repaired故障

热门文章

  1. 浅谈聚簇索引和非聚簇索引的区别
  2. oracle 切换cdb,CDB与PDB之间的切换方法
  3. python输入月份判断天数用函数的方法,python 月份天数
  4. pyinstaller打包程序带图片终极教程
  5. Android 和 Java 性能优化最佳实践
  6. QCC3040---earbud init module
  7. web应用防火墙和传统防火墙的区别。
  8. idea 2020.2隐藏了菜单栏Main Menu 恢复方法
  9. SpringBoot06-Dubbo和Zookper集成
  10. mysql操作入门(四)-----数据排序(升序、降序、多字段排序)