FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套工程源码

news2024/11/24 19:08:39

目录

  • 1、设计思路和架构
  • 2、纯verilog代码搭建,不带任何ip
  • 3、双线性插值和邻域插值算法
  • 4、vivado和matlab联合仿真及结果
  • 5、工程代码1:720P原始摄像头采集显示
  • 6、工程代码2:720P缩小到800x600P显示
  • 7、工程代码3:720P缩放大1920x1080P显示
  • 8、上板调试验证并演示
  • 9、福利:工程源码获取

1、设计思路和架构

本设计将常用的双线性插值和邻域插值算法融合为一个代码中,通过输入参数选择某一种算法;代码使用纯verilog实现,没有任何ip,可在Xilinx、Intel、国产FPGA间任意移植;代码以ram和fifo为核心进行数据缓存和插值实现,设计架构如下:
在这里插入图片描述
视频输入时序要求如下:
在这里插入图片描述
输入像素数据在dInValid和nextDin同时为高时方可改变;
视频输出时序要求如下:
在这里插入图片描述
输出像素数据在dOutValid 和nextdOut同时为高时才能输出;

2、纯verilog代码搭建,不带任何ip

代码使用纯verilog实现,没有任何ip,可在Xilinx、Intel、国产FPGA间任意移植;
图像缩放的实现方式很多,最简单的莫过于Xilinx的HLS方式实现,用opencv的库,以c++语言几行代码即可完成,关于HLS实现图像缩放请参考我之前写的文章HLS实现图像缩放
网上也有其他图像缩放例程代码,但大多使用了IP,导致在其他FPGA器件上移植变得困难,通用性不好;
相比之下,本设计代码就具有通用性;
代码架构如图;
在这里插入图片描述
其中顶层接口部分如下:
在这里插入图片描述

3、双线性插值和邻域插值算法

本设计将常用的双线性插值和邻域插值算法融合为一个代码中,通过输入参数选择某一种算法;
具体选择参数如下:

input  wire i_scaler_type //0-->bilinear;1-->neighbor

通过输入i_scaler_type 的值即可选择;

输入0选择双线性插值算法;
输入1选择邻域插值算法;

关于这两种算法的数学差异,请参考我之前写的文章HLS实现图像缩放

4、vivado和matlab联合仿真及结果

第一步:网上下载一张1280X720的图片,并用matlab将图片转换为RGB格式的txt文档;
第二步:在vivado下设计tstbench,将RGB格式的txt文档作为视频输入源给到图像缩放模块,并将缩放后的图像数据写入输出txt文档;
第二步:用matlab将输出txt文档转换为图片,并于原图一并输出显示以做比较;
根据以上方法得到以下仿真结果:
双线性插值算法原图1280X720缩小到800x600如下:
在这里插入图片描述
邻域插值算法原图1280X720缩小到800x600如下:
在这里插入图片描述
双线性插值算法原图1280X720放大到1920x1080如下:
在这里插入图片描述
邻域插值算法原图1280X720放大到1920x1080如下:
在这里插入图片描述

5、工程代码1:720P原始摄像头采集显示

三套工程的设计架构都一样,如下:
在这里插入图片描述
开发板:Xilinx Kintex7开发板;
开发环境:Vivado2019.1;
输入:OV5640摄像头,分辨率1280x720p;
输出:HDMI,1080P分辨率下的720P有效区域显示;
工程作用:采集原始的720P图像,以便和后面的缩小效果作比较;
工程BD如下:
在这里插入图片描述
其中FDMA控制器配置如下:
在这里插入图片描述
FDMA架构实现了视频到DDR3的三帧缓存读写,关于FDMA,请参考我之前写的文章FDMA视频到DDR3的三帧缓存
工程代码架构如下:
在这里插入图片描述
工程的资源消耗和功耗如下:
在这里插入图片描述

6、工程代码2:720P缩小到800x600P显示

开发板:Xilinx Kintex7开发板;
开发环境:Vivado2019.1;
输入:OV5640摄像头,分辨率1280x720p;
输出:HDMI,1080P分辨率下的800x600有效区域显示;
工程作用:1280x720原图缩小到800x600,并和原图作比较;
工程设计框架、BD、工程代码架构和工程1一样,FDMA配置如下:
在这里插入图片描述

7、工程代码3:720P缩放大1920x1080P显示

开发板:Xilinx Kintex7开发板;
开发环境:Vivado2019.1;
输入:OV5640摄像头,分辨率1280x720p;
输出:HDMI,1080P分辨率下的800x600有效区域显示;
工程作用:1280x720原图放大到1920x1080,并和原图作比较;
工程设计框架、BD、工程代码架构和工程1一样,FDMA配置如下:
在这里插入图片描述

8、上板调试验证并演示

板子连接如下:
在这里插入图片描述
工程1:原图1280x720输出效果如下:
在这里插入图片描述
工程2:原图1280x720缩小到800x600输出效果如下:
在这里插入图片描述
工程3:原图1280x720放大到1920x1080输出效果如下:
在这里插入图片描述
动态视频演示如下:

FPGA纯verilog代码实现图像缩放

9、福利:工程源码获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料如下:获取方式:私。
网盘资料如下:
在这里插入图片描述

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

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

相关文章

结合FPGA和NVIDIA Jetson Orin NX 系统的视觉边缘计算机

边缘计算机采用NVIDIA Jetson Orin NX模块化系统和高带宽图像采集卡,用于实时图像采集计算和人工智能处理。虹科与一家专注于高速图像采集和处理的以色列科技公司Gidel合作,今天宣布新的NVIDIA Jetson Orin NX™ 16GB模块化系统(SoM)将被添加到Gidel的Fa…

Jmeter接口测试流程详解(中科软测认证中心)

Jmeter接口测试流程详解(中科软测认证中心) 目录:导读 1、jmeter简介 2、jmeter安装 3、设置jmeter的中文界面 4、jmeter主要元件 5、Jmeter元件的作用域和执行顺序 6、jmeter接口测试流程步骤 1、jmeter简介 Jmeter是由Apache公司开…

【数据架构系列-02】从《数据中台能力成熟度模型》的发布,聊聊火了的中台

热点之所以会“热起来”,是由于万众瞩目的那份炽烈,也是因为无数双“手”的奋力炒作。所以,要穿过那“缭绕烟雾”看到本质,便需要冷静的头脑。 2023年1月4日,信通院发布了《数据中台能力成熟度模型》框架,不由让我浮想联翩,之后是不是还会出现…

Python采集豆某影片并作词云图分析

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 目录前言环境使用:模块使用:爬虫基本思路:代码展示绘制词云图尾语 💝环境使用: Python 3.8 解释器 Pycharm 编辑器 模块使用: import parsel >>> pip install parsel import…

二叉树26:二叉树的最近公共祖先

主要是我自己刷题的一些记录过程。如果有错可以指出哦,大家一起进步。 转载代码随想录 原文链接: 代码随想录 leetcode链接:236. 二叉树的最近公共祖先 题目: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科…

网络工程师备考9章

第九章:网络操作系统与应用服务器 9.1 考点分析 ​​​​​​​ 注:MCSE、RHCE基础:微软和红帽的系统工程师的内容都纳入到一章里;我们要学的服务器类型非常多,最重要的罗列下来,总结起来就是3D+I; 9.1.1 网络操作系统 9.2 安装过程 略 9.3 Windows Server 2008 R2 本…

创新科技引领清洁新标准,CEYEE希亦洗地机重新定义深度清洁

后疫情时代,随着人们健康意识的增强,家庭清洁卫生意识逐渐深入人心,大家对于清洁家电的选择也不再局限于基础功能,而是更注重智能化、健康化、便捷性、多功能等维度。创新型科技新消费品牌「CEYEE希亦」也由此应运而生&#xff0c…

SpringCloud-Eureka

1.Spring Cloud是什么? SpringCloud是一系列框架的有序集合。【包含了开发所需的其他的框架】 它利用SpringBoot的开发便利性,巧妙地简化了分布式系统基础设施的开发,如服务注册、服务发现、配置中心、消息总线、负载均衡、断…

如何安装python运行环境,想学python需要安装什么

这篇文章主要介绍了安装python程序后要进行什么设置,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。 1、使用python需要安装哪些软件 《Python 3.9.7软件》百度网盘资源免费下…

浅析DDOS攻击及防御

如今,信息技术的发展为人们带来了诸多便利,无论是个人社交行为,还是商业活动都离不开网络。但是,网络空间在创造机遇的同时,也带来了威胁,其中 DDOS 就是最具破坏力的攻击。经过这些年的不断发展&#xff0…

QT/C++——文件和进程线程编程

目录 一、文件普通读写和流式读写 二、目录遍历和文件属性读写 三、进程 四、线程 五、线程同步 六、线程互斥 一、文件普通读写和流式读写 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTextEdit> #include <QLineEdit> #include…

iPhone彻底删除的重要照片怎么找回来?三招找回被删照片!

要说iPhone手机占用储存空间最多的是什么&#xff1f;照片&#xff0c;相信是大部分苹果手机用户的回答。 iPhone强大的拍照技术&#xff0c;拍了很多照片&#xff0c;却十分占用内存。在清理照片时&#xff0c;为了快速释放内存&#xff0c;快速滑动批量删除照片。 我们知道&…

C++ 标准库 常用算法总结(排序、合并、搜索和分区)

本系列文章介绍了所有的STL常用的算法。这些算法通常都有不同的功能&#xff0c;例如&#xff1a;排序元素算法{sort()、stable_sort()、nth_element()}、 查询元素算法{find()、find_if()、find_if_not()、find_end()、find_first_of()、adjacent_find()}、 复制元素算法{co…

Android 分区存储

1.Android存储 Android存储分为内部存储和外部存储&#xff08;外部存储并不是指SD存储卡或外部硬盘&#xff09;。 ①内部存储 用于Android系统本身和应用程序的存储区域&#xff0c;比如手机的/system/、/data/等目录。 如果没有这一块存储区域是无法运行Android系统和应用…

Windows Server 2022 中文版、英文版下载 (updated Jan 2023)

Windows Server 2022 正式版&#xff0c;2023 年 1 月更新&#xff0c;持续更新中… 请访问原文链接&#xff1a;https://sysin.org/blog/windows-server-2022/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org 此次发布更新…

如何设置 Excel 的行标题

Excel的行标题 打开或关闭Excel标题行Excel中的标题行格式选项Microsoft Excel工作表可以容纳一百万行,其中包含数字或文本数据集。行标题是位于工作表第1列左侧的灰色列,其中包含数字(1、2、3等),有助于识别工作表中的每一行。 尽管列标题是灰色的行,但它通常是字母(A、…

java泛型4

通配符之设定类型通配符的上限-------什么时候需要设置上限&#xff1f;&#xff1f;&#xff1f;&#xff1f;协变 还差一个Canvas类 这样定义行不行&#xff1f;不行&#xff01;&#xff01;&#xff01; 测试一下&#xff1a; 注意上面的drawAll()方法的形参类型是List …

好的直线导轨应该具备哪些要求?

直线导轨运用于各行各业&#xff0c;范围非常之广&#xff0c;但是对于直线导轨的要求都是大同小异的&#xff0c;下面我们来看下良好的直线导轨都应具备哪些要求&#xff1f; 1>运动灵敏度与定位精度高&#xff1a;定位精度是指运动构件能按要求停止在指定位置的能力。运动…

musl pwn 入门 (4)

在前面的介绍中&#xff0c;我们学习了musl pwn的基本原理&#xff0c;下面我们就通过一道经典例题进一步巩固。 这是DefCon Quals 2021中的一道题mooosl&#xff0c;直接在github上搜这道题的名字就可以找到作者发布的附件&#xff0c;内含说明、作者的exp、源码以及二进制程…

Linux系统之openEuler安装部署

Linux系统之openEuler安装部署一、openEuler介绍1.openEuler简介2.openEuler的硬件要求①物理机的安装要求②虚拟机的安装要求二、下载openEuler系统镜像1.官方网址2.下载openEuler系统镜像三、虚拟机配置工作1.设置虚拟机名称2.处理器配置3.设置虚拟机内存4.设置网络类型5.磁盘…