实际问题中用到的算法——递归算法确定插帧顺序

这篇具有很好参考价值的文章主要介绍了实际问题中用到的算法——递归算法确定插帧顺序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题:

现在需要给一个视频序列插帧,插帧算法要求每次只能由两帧输入插值得到其中间帧。如果现在需要给一个视频做 4 倍(或者更高的 8,16 倍等类似)的插帧,则一个插帧的思路是当前视频每相邻帧之间插入 3 帧,即:假设插帧前视频帧序号是 0,4,8,12…,则插帧时补充相邻帧跨过的 3 个序号,得到插帧后的视频帧序号为 0,1,2,3,4,5,6,.. 即可。具体顺序为 由 0,4 插帧得 2,再由 0,2 插帧得到 1、由 2,4 插帧得到 3。

现在要解决的问题,简单来说就是,需要编写一个确定插帧顺序的代码,要求 (1)新的帧只能由原有的或者已生成帧插值得到。(2)插帧只能得到给定两帧的中间帧。

方案:

这个问题其实本质上用到的算法是递归,因为满足“原来的问题,可以转化为更小的同一问题”,即“由 0,4 插帧得 2” 和 后续的 “由 0,2 插帧得到 1、由 2,4 插帧得到 3” 本质都是从外往内找中点。

算法代码如下,输入是原视频相邻帧的序号,输出是插帧顺序,如 end_index=4, start_index=0 时,输出为 [[0, 4, 2], [0, 2, 1], [2, 4, 3]] 内层list代表 [已有帧1,已有帧2,新生成帧]

def interpIndexOrder(end_index, start_index=0):
    """
    determine the interpolate index generating order for a given start_index and end_index
    the rule is: the new interpolate index can only be generated as the middle point of the existing indexes
    for example: start_index=0 and end_index=4, the interpolate index generating order is: [0, 4->2], [0, 2->1], [2, 4->3]
    return: [[existing_index1, existing_index2, generated_new_index], ...
    """
    x = []

    def recur_interp(start_index, end_index):
        if end_index-start_index == 1:
            return # stop criterion
        assert (start_index +
                end_index) % 2 == 0, 'start_index + end_index should be even'
        
        mid_index = (start_index + end_index) // 2
        x.append([start_index, end_index, mid_index])
        
        # sub-problem
        recur_interp(start_index, mid_index)
        recur_interp(mid_index, end_index)
    
    recur_interp(start_index, end_index)
    return x

另外需要注意的是,为了在递归的时候把插帧次序记录下来,下面的函数使用了两层,第一层主函数里面的变量 x 对于子函数 recur_interp() 是处于嵌套作用域,可以被访问。文章来源地址https://www.toymoban.com/news/detail-417497.html

参考:

  • 这个问题的来源和最终应用完整代码 link

到了这里,关于实际问题中用到的算法——递归算法确定插帧顺序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 谈谈:你在工作中用到的设计模式!

    Hello 大家龙年好! 春节的假期转眼间过去,我们也要回归往日的节奏 因为最近和小伙伴们聊天发现,我们普遍在面试中,对被问起 设计模式 在工作中的应用,既有点熟悉,又有点陌生, 在网上看吧,又感觉 鸡肋 (为啥?不能解燃煤之急啊! 哈哈),所以,为了打破这一尴尬的窘境,我亲自针

    2024年02月20日
    浏览(25)
  • 工作中用到的数通、安全的查询、工具、文档链接

    感觉有用的就会补充进去,有推荐可以发评论区 华为序列号查询 https://support.huawei.com/enterprise/ecareWechat 华为设备信息速查 https://info.support.huawei.com/info-finder/search-center/zh/enterprise/switch 华为数通产品解决方案案例 https://forum.huawei.com/enterprise/zh/thread/634081358710194176 华为交换机命名

    2024年02月04日
    浏览(32)
  • 设计模式的分类及Spring中用到的设计模式

    在《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)一书中,提出了 23 种设计模式,通常称为 GoF(Gang of Four)设计模式。这些设计模式被分为以下三种类型: 创建型模式(Creational Patterns): 工厂方法模式(Factory Method Pattern) 抽象

    2024年02月22日
    浏览(31)
  • 1902_野火FreeRTOS教程内核在STM32中用到的2个中断PENDSV和SYSTICK

    全部学习汇总:  g_FreeRTOS: FreeRTOS学习笔记 (gitee.com) 上面是涉及到的源代码,而这次需要分析的就是78、79行的两个中断。首先,需要确认NVIC_SYSPRI2寄存器的作用。 进一步看里面相关的定义,从这里看这个注释与代码出现了不一致的地方。也就是这个 0xe000ed20地址究竟是哪一

    2024年02月21日
    浏览(30)
  • 【开源与项目实战:开源实战】82 | 开源实战三(中):剖析Google Guava中用到的几种设计模式

    上一节课,我们通过 Google Guava 这样一个优秀的开源类库,讲解了如何在业务开发中,发现跟业务无关、可以复用的通用功能模块,并将它们从业务代码中抽离出来,设计开发成独立的类库、框架或功能组件。 今天,我们再来学习一下,Google Guava 中用到的几种经典设计模式:

    2024年02月11日
    浏览(54)
  • ES 写入瓶颈需要进行压测,才能确定实际是否达到瓶颈

    筛查分析 普及:JMQ 默认生产者发送消息 QPS 受到主题的 broker 数量影响,(8w/s)/broker 3.2.1 MQ 积压分析 1)分析原因一、ES 写入量大,导致 ES 写入 QPS 瓶颈 ES 写入瓶颈需要进行压测,才能确定实际是否达到瓶颈; 通过查询集群负载,写入队列有无积压,cpu 高不高,来定位 以下

    2023年04月11日
    浏览(40)
  • 数据结构与算法学习(day4)——解决实际问题

    在本章的学习此前,需要复习前三章的内容,每个算法都动手敲一遍解题。宁愿学慢一点,也要对每个算法掌握基本的理解! 前面我们学习了简化版桶排序、冒泡排序和快速排序三种算法,今天我们来实践一下前面的三种算法。 本章的学习目标: (1)回顾三个算法的基本原

    2024年02月09日
    浏览(44)
  • 经典递归算法——汉诺塔问题

             相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动

    2024年02月06日
    浏览(28)
  • 算法:分治思想处理归并递归问题

    利用归并思想进行分治也是很重要的一种思路,在解决逆序对的问题上有很大的需求空间 于是首先归并排序是首先的,归并排序要能写出来: 以上为归并排序基本算法原理,基于这个原理可以解决逆序对问题,逆序对问题通常问法是,给定某一个数据,在整个数组中找比这

    2024年02月10日
    浏览(34)
  • 算法与数据结构——递归算法+回溯算法——八皇后问题

    八皇后问题是一个经典的回溯算法问题,目的是在8×8的国际象棋棋盘上放置八个皇后,使得没有皇后可以互相攻击(即没有两个皇后在同一行、同一列或同一对角线上)。 回溯算法是一种解决问题的算法,它通过尝试所有可能的解决方案来解决问题。在八皇后问题中,计算

    2024年02月09日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包