【FPGA图像处理实战】- 图像行缓存设计实现方式一(FIFO)

图像处理中稍复杂点的算法,就需要行缓存,以实现3*3窗口、6*6窗口的数据计算。

本文将介绍使用FIFO来实现图像行缓存的设计,包括关键逻辑分析,源代码实现分享。

一、行缓存功能的设计框架

图像数据一般都是按照从左到右,从上到下,一行行数据的方式发送传输的。

这里以3*3窗口为例,需要同时输出三行(上一行、当前行、下一行),如下图所示。

 

9879800499517074d0c4ad884a5f87f4.png

 

网上通常看见的行缓存实现,3*3窗口需要3个行缓存,这里我分享更加节省资源的方式,实际只需通过2个行缓存即可实现。

二、行缓存设计的关键思想

每一个行缓存fifo,都是在缓存完一行数据后,如果有新的数据输入,则同步输出一个数据出去。

这样当新的一行数据到来时,第1个行缓存刚好输出上一行数据,第2个行缓存输出当前行数据,刚到来的新的一行数据直接当做下一行数据输出即可。

有些特殊位置数据需要处理:以当前行为图像边界数据时,上一行和下一行数据实际不存在,需要直接给0或者复制当前行来处理。

这里以以3*3窗口为例,边界行处理逻辑如下:

  • 第1个行缓存,是整个画面的第1行时, 上一行数据不存在,复制第1个行缓存或者直接为0输出。
  • 第1个行缓存,是整个画面的最后第1行时, 下一行数据不存在,复制第1个行缓

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

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

相关文章

Java 重写(Override)与重载(Overload)的对比

Java中的重写(Override)和重载(Overload)是两种不同的方法重写/重载的概念。下面是重写和重载的对比及示例代码: 重写(Override) 重写是指在子类中重新定义父类中已有的方法,以便在子类中实现不同的行为。子类中的重写方法必须具有相同的方法名、参数列…

机器学习三个基本要素:优化算法

在确定了训练集 D、假设空间 ℱ 以及学习准则后,如何找到最优的模型𝑓(x,θ∗) 就成了一个最优化(Optimization)问题。机器学习的训练过程其实就是最优化问题的求解过程。 参数与超参数 在机器学习中,优化又可以分为参…

mybatis查询结果resultMap映射vo源码分析

概述 mybatis是一个常用的持久层框架;通常搭配mysql使用; 在将查询结果映射成一个复杂vo的时候,通常会用到resultMap,在其中嵌套association和collection等操作;将一个复杂查询拆分成简单查询; 在vo中的变…

数据云:数据基础设施的一小步,数字经济的一大步

随着数字经济的崛起,数据正成为推动社会发展和经济增长的核心要素。在这个数字化时代,数据已经被誉为新的生产要素,是数字经济发展的基础性资源和战略性资源。为了更好地支持数据的汇聚、流通和应用,数据基础设施迎来了一次重要的…

WSL 配置 Docker 内存和 CPU 资源限制

我用的电脑一共有40G内存,最近发现电脑重启后,VmmemWSL 进程很快就会占用一多半的内存(20G),电脑中有多个停止运行的容器,正常启动状态的只有一个 MySQL 服务,通过 docker stats 查看占用内存也…

PyCharm安装教程

1.1 为什么要安装python开发环境 上一篇文章我们安装了python,准确来说是python解释器,它没有自带的可视化开发工具,只能通过命令行窗口来执行python代码,这里我们就来下载一个用于python开发的可视化工具——PyCharm。 1.2 PyC…

boost1.55 安装使用教程 windows

第一步 :首先在boost官网上下载库压缩包 添加链接描述 选择自己需要的版本进行下载 解压后执行booststrap.bat 用来生成创建b2.exe 和bjam.exe 拓展:.\b2 --help 了解一下有哪些参数可以配置 默认b2.exe编译后,链接到项目如果出现如下错误…

人工智能基本常识:让深度学习技术更加人性化

近年来,人工智能技术日臻成熟。现在,许多产品和服务都依靠人工智能技术实现自动化和智能化,因此它与我们的日常生活息息相关。无论是为我们带来各种便利的家用设备,还是我们一直在使用的产品制造方式,人工智能的影响无…

低代码开发与传统软件开发:未来趋势与竞争格局

近年来,低代码开发平台的快速发展引起了各行各业的广泛关注。低代码开发平台简化了软件开发的复杂性,提供了更快速、更灵活的开发方式。于是,许多人开始产生一个疑问:未来低代码开发是否会取代传统软件开发?今天这篇文…

ThinkPHP6使用Validate验证表单字段唯一

ThinkPHP6使用Validate验证表单字段唯一 1.创建用户验证文件,如User 1.1 单应用创建验证文件 php think make:validate User 1.2 多应用创建验证文件,admin为应用名, php think make:validate adminUser 创建成功后,应用内会…

java8与java9新特性对比

Java 8和Java 9是Java语言的两个重要版本,它们分别引入了许多新的特性和改进。下面是Java 8和Java 9的一些主要特性对比: Lambda表达式和函数式接口 Java 8引入了Lambda表达式和函数式接口,使得在Java中能够更方便地编写函数式风格的代码。L…

nodejs微信小程序+python+PHP沧州地区空气质量数据分析系统-计算机毕业设计推荐 django

本系统不仅主要实现了注册登录,系统首页,个人中心,用户管理,城市区域管理,空气状况管理,空气质量管理,系统管理,数据爬取,大屏分析等功能,通过这些功能基本可…

CompressAI benchmark经典/传统图像编码器的使用

文章目录 使用简介安装依赖编译安装BPG 使用简介 CompressAI的github仓库中Usage-Evaluation给出了传统编解码器的使用帮助,但是并未给出详细的使用方法。本文旨在进行总结使用方法。下图是传统编解码器相关代码的存放地点,其中codecs为各种编解码器类的…

Java版企业电子招标采购系统源码—鸿鹄电子招投标系统-企业战略布局下的采购寻源

项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及审…

Impala4.x源码阅读笔记(二)——Impala如何高效读取Iceberg表

前言 本文为笔者个人阅读Apache Impala源码时的笔记,仅代表我个人对代码的理解,个人水平有限,文章可能存在理解错误、遗漏或者过时之处。如果有任何错误或者有更好的见解,欢迎指正。 Iceberg表是一种用于存储大规模结构化数据的…

Shiro框架权限控制

首先去通过配置类的用户认证,在用户认证完成后,进行用户授权,用户通过授权之后再跳转其他的界面时,会进行一个验证,当前账号是否有权限。 前端权限控制显示的原理 在前端中,通常使用用户的角色或权限信息来…

L1-040:最佳情侣身高差

题目描述 专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)1.09 (男方的身高)。如果符合,你俩的身高差不管是牵手、拥抱、接吻,都是最和谐的差度。 下面就…

如何建立一套完善的销售管理体系?

如何建立一套完善的销售管理体系? 该提问下已有许多专业的回答,从多个角度为题主出谋划策:销售主管如何提升个人能力、销售团队如何管理、PDCA管理方法论、销售闭环……似乎都与硬性的个人能力挂钩,销售能力、管理能力等等。 或…

使用Java实现桶排序算法

文章目录 桶排序算法 今天来看看桶排序算法: 桶排序算法 (1)基本思想:把数组 arr 划分为 n 个大小相同子区间(桶),每个子区间各自排序,最后合并 。计数排序是桶排序的一种特殊情况…

UI 优先的统一身份认证系统 Casdoor

Casdoor 是一个基于 OAuth 2.0 / OIDC 的 UI 优先集中认证 / 单点登录 (SSO) 平台,简单点说,就是 Casdoor 可以帮你解决 用户管理 的难题,你无需开发用户登录注册等与用户鉴权相关的一系列功能,只需几个步骤,简单配置&…