FPGA纯verilog实现图像视频旋转 串口指令控制旋转角度 提供工程源码和技术支持

news2024/11/25 3:21:02

目录

  • 1、前言
  • 2、理论基础
  • 3、设计思路和框架
    • 图像输入和采集
    • 图像旋转处理
    • 图像缓存
    • 图像输出
  • 4、vivado工程详解
  • 5、上板调试验证
  • 6、福利:工程代码的获取

1、前言

图像旋转是一种常用的图像处理技术,其基本原理就是指图像以某一点为中心旋转一定的角度,形成一幅新的图像的过程。当然这个点通常就是图像的中心。图像的旋转是图像几何变换的一种,旋转前后的图像的像素的 RGB 都是没有改变的,改变的只是每一个像素的所在位置,这个就是旋转的本质。
本设计采用OV5640摄像头作为输入,分辨率为640x480,也可配置为其他分辨率,输出HDMI,分辨率为1024x768@60Hz。图像缓存至DDR做旋转变换,旋转角度由串口命令控制,实用性很强,高度贴近真实项目,希望对你有用。
本文详细描述了设计方案,工程代码编译通过后上板调试验证,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

2、理论基础

图像旋转是指图像以某一点为中心旋转一定的角度,形成一幅新的图像的过程。当然这个点通常就是图像的中心。既然是按照中心旋转,自然会有这样一个属性:旋转前和旋转后的点离中心的位置不变。
根据这个属性,我们可以得到旋转后的点的坐标与原坐标的对应关系。由于原图像的坐标是以左上角为原点的,所以我们先把坐标转换为以图像中心为原点。假设原图像的宽为 w,高为 h,(x0,y0)为原坐标内的一点,转换坐标后的点为(x1,y1)。那么不难得到:
x1 = x0 - w/2;y1 = -y0 + h/2;
在新的坐标系下,假设点(x0,y0)距离原点的距离为 r,点与原点之间的连线与 x 轴的夹角为 b,旋转的角度为 a,旋转后的点为(x1,y1),如下图所示。
在这里插入图片描述
那么有以下结论:
x0=rcosb;y0=rsinb
x1 = rcos(b-a) = rcosbcosa+rsinbsina=x0cosa+y0sina;
y1=rsin(b-a)=rsinbcosa-rcosbsina=-x0sina+y0cosa;
得到了转换后的坐标,我们只需要把这些坐标再转换为原坐标系即可。这里还有一点要注意,旋转后的图像的长和宽会发生变化,因此要计算新图像的长和宽。

3、设计思路和框架

设计思路和框架如下:
在这里插入图片描述

图像输入和采集

本设计采用OV5640摄像头作为输入,分辨率为640x480,也可配置为其他分辨率,OV5640需要i2c配置才能使用,代码里包含了纯verilog的i2c配置,图像采集输出RGB565格式图像数据,图像采集顶层接口如下:

module uiSensorRGB565(
	input         cmos_clk_i  ,//cmos senseor clock.
	input         rst_n_i     ,//system reset.active low.
	input         cmos_pclk_i ,//input pixel clock.
	input         cmos_href_i ,//input pixel hs signal.
	input         cmos_vsync_i,//input pixel vs signal.
	input [7:0]   cmos_data_i ,//data.
	output        cmos_xclk_o ,//output clock to cmos sensor.
    output [15:0] rgb_o       ,
    output        de_o        ,
    output        vs_o        ,
    output        hs_o        
    );

图像旋转处理

本小节内容包括串口解析、旋转参数切换和图像旋转前处理等模块内容。
首先,本设计暂时只支持90°、180°、270°和360°旋转,不支持任意角度旋转;
旋转角度由串口命令控制,控制命令如下:
串口发送0xaa 0xbb 0x00 0x00 0x00 0x01 0x01 0xcc 0xdd 旋转90°;
串口发送0xaa 0xbb 0x00 0x00 0x00 0x02 0x02 0xcc 0xdd 旋转180°;
串口发送0xaa 0xbb 0x00 0x00 0x00 0x04 0x04 0xcc 0xdd 旋转270°;
串口发送0xaa 0xbb 0x00 0x00 0x00 0x08 0x08 0xcc 0xdd 旋转360°;
视频演示使用的串口调试助手配置和指令如下:
在这里插入图片描述
关于串口指令和解析,请参考我之前写的文章点击查看:串口解析
参数切换模块:根据切换信号来切换输出到各个模块的参数。
图像旋转前处理模块:根据切换信号对 ram 中的数据进行调度,以方便 ddr 控制器模块的使用。

图像缓存

调用MIG实现图像到DDR3的乒乓缓存,这里用到的是纯净的MIG,并未用到我常用的FDMA+AXI MIG方案,直接调用MIG更为简单;
想了解FDMA+AXI MIG图像缓存方案的可以参考我之前写的文章点击查看:FDMA+AXI MIG

图像输出

图像输出采用HDMI发送,分辨率为1024x768@60Hz,HDMI由silicon9134芯片编码,silicon9134需要i2c配置才能使用,代码里包含了纯verilog的i2c配置,想了解silicon9134芯片配置的可以参考我之前写的文章点击查看:silicon9134

4、vivado工程详解

开发板:Xilinx Artix7-35T开发板;
开发环境:vivado2019.1;
输入:OV5640摄像头,分辨率640x480;
输出:HDMI,辨率为1024x768@60Hz,silicon9134编码;
工程代码架构如下:
在这里插入图片描述
FPGA资源消耗和功耗预估如下:
在这里插入图片描述

5、上板调试验证

在这里插入图片描述
演示视频如下:

FPGA图像视频旋转

6、福利:工程代码的获取

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

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

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

相关文章

函数的极限

目录 函数极限的定义: 数列的极限和函数极限 定理1: 自变量趋向有限制时,函数的极限 左右极限: 定理: 需要分左右极限求极限的三种问题: 例题: 例2: 极限性质: 保号…

WebRTC标准与框架解读(1)

1、如果让我来设计webrtc框架我在分析源码的时候,都喜欢做这样一件事情:如果让我来设计它,我会怎么做?大家可以紧跟我的思路,分析一下WebRTC为什么如此设计。为了对整个框架有有一个全面的了解,我们首先要做…

外包测试3年,离职后成功入职华为,拿到offer的那天我泪目了....

一提及外包测试,大部分人的第一印象就是:工作强度大,技术含量低,没有归属感!外包工作三年总体感受就是这份工作缺乏归属感,心里总有一种落差,进步空间不大,接触不到核心技术&#xf…

IO详解(文件,流对象,一些练习)

目录 文件 文件概念 文件的路径 路径有俩种表示风格 文件类型 如何区分文本文件还是二进制文件? java对文件的操作 File类中的一些方法 流对象 流对象的简单概念 java标准库的流对象 1.字节流,(操作二进制数据的) 2.字符流 (操作文本数据的) 流对象最核心的四个…

Android Framework-进程间通信——Binder

我们知道,同一个程序中的两个函数之间能直接调用的根本原因是处于相同的内存空间中。 比如有以下两个函数A和B: /*Simple.c*/ void A() { B(); } void B() { }因为是在一个内存空间中,虚拟地址的映射规则完全一致,所以函数A和B之…

【JAVA程序设计】【C00111】基于SSM的网上图书商城管理系统——有文档

基于SSM的网上图书商城管理系统——有文档项目简介项目获取开发环境项目技术运行截图项目简介 基于ssm框架开发的网上在线图书售卖商城项目,本项目分为三种权限:系统管理员、卖家、买家 管理员角色包含以下功能: 用户信息管理、权限管理、订…

XSS跨站脚本

XSS跨站脚本XSS简介XSS验证XSS危害XSS简介 XSS被称为跨站脚本攻击(Cross-site scripting),由于和CSS(Cascading Style Sheets)重名,所以改为XSS。XSS主要基于javascript语言完成恶意的攻击行为,因为javascript可以非常灵活的操作html、css和…

day57-day58【代码随想录】二刷数组

文章目录前言一、螺旋矩阵||(力扣59)二、螺旋矩阵(力扣54)三、顺时针打印矩阵(剑指 Offer29)四、在排序数组中查找元素的第一个和最后一个位置(力扣34)【二分查找】五、有多少小于当…

自动驾驶决策概况

文章目录1. 第一章行为决策在自动驾驶系统架构中的位置2. 行为决策算法的种类2.1 基于规则的决策算法2.1.1 决策树2.1.2 有限状态机(FSM)2.1.3 基于本体论(Ontologies-based)2.2 基于统计的决策算法2.2.1 贝叶斯网络(B…

智慧制硅厂 Web SCADA 生产线

我国目前是全球最大的工业硅生产国、消费国和贸易国,且未来该产业的主要增量也将来源于我国。绿色低碳发展已成为全球大趋势和国际社会的共识,随着我国“双碳”目标的推进,光伏产业链快速发展,在光伏装机需求的带动下,…

flink兼容性验证

flink介绍:https://blog.csdn.net/weixin_43563705/article/details/107604693 一、安装启动 安装flink及其依赖 yum install java-1.8.0-openjdk curl tar mkdir -p /usr/local/flink wget https://mirrors.aliyun.com/apache/flink/flink-1.16.1/flink-1.16.1-bi…

如何校招进BAT做产品经理

嗨,很高兴,以文字的形式和你见面。在校招中,我拿到了百度、京东、爱奇艺、新浪和去哪儿的产品经理校招offer,其中百度是special offer。在找实习的过程中,也拿到了爱奇艺、微信电影票、搜狐畅游、艺龙等公司的产品经理…

Ac4GlcNAz,98924-81-3,N-乙酰葡糖胺叠氮基,可以进行糖化学修饰

Ac4GlcNAz反应特点:四乙酰氨基叠氮氨基葡萄糖(Ac4GlcNAz,98924-81-3)为糖缀合物可视化提供非放射性替代物。西安凯新生物科技有限公司供应的解释道它是细胞通透性、细胞内处理和结合的,而不是其天然单糖对乙酰氨基葡萄…

CEC2017:斑马优化算法(Zebra Optimization Algorithm,ZOA)求解cec2017(提供MATLAB代码)

一、斑马优化算法 斑马优化算法(Zebra Optimization Algorithm,ZOA)Eva Trojovsk等人于2022年提出,其模拟斑马的觅食和对捕食者攻击的防御行为。 斑马因身上有起保护作用的斑纹而得名。没有任何动物比斑马的皮毛更与众不同。斑…

SpringCloud的基本使用

文章目录一.单体架构和分布式架构的区别1.单体架构2.分布式架构二.微服务1.微服务的架构特征2.微服务技术对比3.企业需求4.微服务的远程定义5.提供者与消费者三.Eureka注册中心1.eureka的作用2.搭建EurekaServer3.Eureka注册3.服务拉取四.Ribbon负载均衡1.负载均衡流程2.负载均…

总被程序员坑?你需要了解API接口

编辑导读:程序员是公司里的技术岗,也是产品经理最密切的合作伙伴。但是,程序员能看懂产品经理的工作,产品经理却不一定能明白程序员的工作,因此也常常被无良程序员坑。本文就从API接口的维度,浅析API的概念…

十七、本地方法接口的理解

什么是本地方法? 1.简单来讲,一个Ntive method 就是一个Java调用非Java代码的接口.一个Native Method 是这样一个Java方法:该方法的实现由非Java语言实现,比如C,这个特征并非Java所特有,很多其他的编程语言都由这一机制,比如在C中…

常见HTTP攻击赏析(1)

基于OpenAPI的APIcat开源日志监控软件已经开发一段时间了,在自己的网站上抓到了一些HTTP的攻击,没事,我们就汇总给大家做个赏析,也当是个提醒。 对应的OpenAPI定义上传到了百家饭平台 API攻击样例详情百家饭OpenAPI平台主站http…

最新会声会影2023旗舰版更新了哪些功能?

会声会影在用户的陪伴下走过26余载,经过上百个版本的优化迭代,已将操作极大简易化,会声会影拥有公认的上手口碑。只需将想要的效果拖拽到轨道上,一拖一放间快速成片。专业工具助力视频剪辑操作简单,功能同样强大&#…

Ubuntu 新人上手 Microk8s 指南

文章目录1. 什么是 Ubuntu 核心2. 什么是 Kubernetes3. 什么是MicroK8s4. 为什么选择 Microk8s on Core5. 安装Ubuntu Core6. Ubuntu Core上安装 MicroK8S7. 启动 Microk8s8. 启用必要的 MicroK8s 插件9. 部署示例容器工作负载10. 检查部署状态并访问您的应用程序11. 管理镜像1…