12.自定义的多帧缓存架构

1.简介

  在数字图像处理中,经常需要用到的一个架构就是多帧缓存。视频流中需要用到多帧缓存来防止帧撕裂现象,图像处理中也需要帧差法来做移动目标检测。因此一个多帧缓存架构在图像系统的设计中是十分重要的。

2.多帧缓存

  在视频流中,通常不能保证数据的写入和读取是同样帧率的,写快读慢或者写慢读快都是常见现象。如果读写都在同一片内存地址中,那么将不能保证读出的一帧是完整的一帧图像,它很有可能是写入的图像中前多帧拼接而成的,这样就会造成帧撕裂的情况。
  假设写是读的三倍速度,且只缓存一帧图像,且读写同时开始操作同一片内存地址。来看看写三帧图像的同时读出的三帧分别发生了什么。
在这里插入图片描述

  (1)可以看出在写完第一帧的时候,读只读了写入第一帧的三分之一。
  (2)开始写第二帧的时候,读的还是第一帧的部分内容。
  (3)第二帧写到中途时,写追上读,第二帧写完后,读的第一帧中间有部分第二帧内容。
  (3)开始写第三帧内容时,由于写是读的三倍速度,此时当读一帧完成时,写第三帧也刚好完成。
  由图可以看出,当写时是读的三倍时,读出的像素不是一副完整的图像,而是有前两帧拼接而成的一副图像。当读写差异过大时,读出的一副图像可能由多幅写入的图像构成,这种现象被叫做帧撕裂。

2.1 乒乓操作

  为了避免帧撕裂,我们通常将读写的地址分开,来确保读出的是一幅完整的图像。最常见的就是乒乓操作。将读写分两片地址来进行。
  乒乓操作将读写分两块内存来进行操作,同一片地址读写交错进行。核心操作就是快等慢
在这里插入图片描述
  读写地址同时从图像缓存区一进行读写,快的操作第一个到达区域二,慢的操作还在区域一。当快的操作先写完操作完一帧图像后,查看慢操作是否在和自己操作同一帧,是的话跳转下一片区域,不是的话继续操作本内存区域,等待慢操作到来。而慢操作只需要按照顺序来操作内存区域即可,不需要查看快操作所操作的内存区域。这就是快等慢。
  假如快操作在操作自己的一片内存区域的时候慢操作到来了,因为快操作比慢操作快,所以也不用担心在一副图像中读出两帧图像。
  由乒乓操作延申出了三帧缓存,多帧缓存架构,多帧缓存的核心思想就是快操作会直接跳过慢操作所在的内存区域。但是这样做有一个缺点,即事先需要知道读写操作的快慢来指导谁跳谁,来确定编程代码
  可不可以做到自适应呢?个人想法:读写操作刚开始时,谁先操作完一副图像,就可以在程序中标记谁是快操作,谁是慢操作,后续根据这个标记来指导读写的内存跳转,即可以做到自适应的多帧缓存结构。编程可能稍微复杂,但是节约内存空间。

2.2 自适应的多帧缓存架构

  另一种的通用自适应多帧缓存架构也是基于多帧缓存的思想提出的。核心操作就是读操作永远是写操作的上一片内存,而写操作就依次操作分配的内存区域。总结就是多帧缓存+写比读低一帧缓存区。这种操作在读写速度一致和读快写慢的时候都可以有效保证帧的完整性,但是在写比读快很多的且读写缓存区域分配不足的时候依然有写追上读而造成帧撕裂的情况。因此需要根据读写速度来分别足够的内存区域来满足多缓存架构的需要。

3 多缓存架构的实现

  在数字图像处理中,视频流通常由SDRAM或者DDR3来进行缓存。SDRAM一般自己编写驱动,DDR3一般借由mig IP核驱动或者用ZYNQ的PS由AXI协议DMA访问。其中mig IP核可以选择AXI接口或者自己的接口。这里我们选择例化mig ip核并启用AXI接口。
  一个完整的视频流传输系统的上电顺序应该为:

系统上电
存储器初始化完成
视频输入系统初始化完成
视频输出系统初始化完成

  基于DDR3以及AXI协议多帧缓存架构的系统图如下:
在这里插入图片描述
  图中的红色区域是为了防止帧断流导致图像错位而无法恢复。每一帧开始时清空fifo和数据拼接区域,帧结束时复位DMA的地址部分,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/596610.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DC9 Debian和sql注入

信息收集 sudo arp-scan -l 列出局域网主机 arp-scan向局域网中所有可能的ip地址发出arp请求包,如果得到arp回应,就证明局域网中某台主机使用了该ip dc9的ip : 192.168.146.133 访问网页 cms为Debian 端口扫描 22端口是filtered 隐藏目…

【鸿蒙 HarmonyOS】@ohos.promptAction (弹窗)

一、背景 创建并显示文本提示框、对话框和操作菜单。 文档地址👉:文档中心 说明 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 该模块不支持在UIAbility的文件声明处使用,即…

瑞_Redis_商户查询缓存_添加Redis缓存缓存更新策略

文章目录 项目介绍1 短信登录2 商户查询缓存2.1 什么是缓存2.1.1 缓存的应用场景2.1.2 为什么要使用缓存2.1.3 Web应用中缓存的作用2.1.4 Web应用中缓存的成本 2.2 添加Redis缓存2.2.1 背景2.2.2 缓存模型和思路2.2.3 代码实现2.2.4 测试附:IDEA控制台输出自动换行设…

C++的list类(一):list类的常见操作和模拟实现

目录 前言 List类的迭代器 List类的模拟实现 list.h文件 test.cpp文件 前言 vector的insert和erase都会导致迭代器失效list的insert不会导致迭代器失效,erase会导致迭代器失效 insert导致失效的原因是开辟了新空间后,迭代器扔指向原空间erase导致失…

AWS入门实践-利用S3构建一个静态网站

使用Amazon S3托管静态网站是一个流行的选择,因为它简单、成本效益高,并且易于维护。静态网站由不含服务器端脚本的文件组成,如HTML、CSS和JavaScript文件。下面是使用S3托管静态网站的操作步骤: 如果大家没有AWS免费账号&#x…

FlutterFlame游戏实践#08 | 打砖块 -关卡设计

theme: cyanosis 本文为稀土掘金技术社区首发签约文章,30天内禁止转载,30天后未获授权禁止转载,侵权必究! Flutter\&Flame 游戏开发系列前言: 该系列是 [张风捷特烈] 的 Flame 游戏开发教程。Flutter 作为 全平台 的 原生级 渲…

爬虫 新闻网站 以湖南法治报为例(含详细注释,控制台版) V2.0 升级自定义查询关键词、时间段

目标网站:湖南法治报 爬取目的:为了获取某一地区更全面的在湖南法治报已发布的宣传新闻稿,同时也让自己的工作更便捷 环境:Pycharm2021,Python3.10, 安装的包:requests,csv&#xff…

Day:004(1) | Python爬虫:高效数据抓取的编程技术(数据解析)

数据解析-正则表达式 在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样 把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 正则表达式是对字符串操作的一种…

软考113-上午题-【计算机网络】-IPv6、无线网络、Windows命令

一、IPv6 IPv6 具有长达 128 位的地址空间,可以彻底解决 IPv4 地址不足的问题。由于 IPv4 地址是32 位二进制,所能表示的IP 地址个数为 2^32 4 294 967 29640 亿,因而在因特网上约有 40亿个P 地址。 由 32 位的IPv4 升级至 128 位的IPv6&am…

90天玩转Python-02-基础知识篇:初识Python与PyCharm

90天玩转Python系列文章目录 90天玩转Python—01—基础知识篇:C站最全Python标准库总结 90天玩转Python--02--基础知识篇:初识Python与PyCharm 90天玩转Python—03—基础知识篇:Python和PyCharm(语言特点、学习方法、工具安装) 90天玩转Python—04—基础知识篇:Pytho…

【鸿蒙 HarmonyOS】获取设备的地理位置

一、背景 获取移动设备的地理位置,包含:经度、维度、具体地理位置等,地理位置信息能在许多业务场景中被应用,如导航、地图服务、位置服务、社交媒体等。 下面以一个Demo例子,来实现获取设备地理位置的功能 官方文档…

springboot之mybatisPlus多表查询及分页查询

文章目录 一、多表查询二、mybatis-plus条件查询三、分页查询 一、多表查询 可能会用到的注解 这里的场景是,查询每个用户及其所有的订单。就是查询你的id号的同时,把你所有的历史订单信息都拉出来。 表结构这样 CREATE TABLE User ( id INT PRIMARY…