图像旋转的FPGA实现(一)
继续图像处理专题,这次写的是图像旋转。若要说小分辨率的图像旋转倒也简单,直接将原始图像存储在BRAM中,然后按照旋转后的位置关系取出便是。但是对于高分辨的图像(720P及以上)就必须得用DDR3或者DDR4缓存了,而DDR是突发传输,对连续视频流十分友好。所以在旋转180°时倒也问题不大,但是若旋转90°或者270°的话,每取出一个数据,
就要跨行一次,而DDR跨行传输的效率极低,经测量大概是10%左右,根本无法满足实时性要求。
那么,又该怎么解决旋转90°或者270°DDR传输效率低的问题呢?我查阅了大量资料,有一种方法是改用sram存储图像,这样便没有跨行传输效率低下的问题。但是现在FPGA的开发板普遍带的是DDR,也没有必要为了图像旋转这个功能重新设计电路,增加sram芯片。另一种方法则是改变DDR读写图像的方式,这里也有两种方案。方案1是对DDR进行分块,DDR的一块存储一行有效图像数据,这样就使得DDR跨行次数减少。同时由于DDR位宽大于像素数据位宽,所以每读取一个数据就能获得数个像素点,可供几次旋转90°或者270°使用。
方案2是对图像进行分块,写入DDR时按照分块尺寸对应关系,每一行写入一个分块,这个方法同样会使得旋转操作后读取DDR跨行变少。有些人或许就会疑问,连续的视频流怎么分块呢?视频的确是连续进入的,可是我们可以控制写入的地址,假如分辨率是1920*1080,分块是192*10,那么在DDR写到192-8地址时,就直接跳转到0+DDR列长度处了,进而实现DDR的一块存储原图像的一行数据。
这里的话,我选择的是第一种方案,即DDR的一块存储原图像一行有效数据,并在720P和1080P各种制式下验证通过,具体实现细节见下一篇博客。
事实上,我只实现了直角旋转,即旋转90°,旋转180°,旋转270°。而想实现任意角度旋转的话则思路一致,即重新排列图像写入DDR顺序,使得读DDR跨行操作次数降低,而关于这一点,万方上有一篇名叫“基于FPGA的数字图像旋转引擎设计”(李杰明)的论文,大家有兴趣的可以去查阅观看。
图像旋转的FPGA实现(一)的更多相关文章
- NOI题库 09:图像旋转翻转变换
NOI题库开始的题,也是略水,当然也是大水,所以彼此彼此 09:图像旋转翻转变换 总时间限制: 1000ms 内存限制: 65536kB 描述 给定m行n列的图像各像素点灰度值,对其依次进行一系列操作 ...
- 【OpenCV学习笔记】之六 手写图像旋转函数---万丈高楼平地起
话说,平凡之处显真格,这一点也没错! 比如,对旋转图像进行双线性插值,很简单吧? 可,对我,折腾了大半天,也没有达到预期效果! 尤其是三个误区让我抓瞎好久: 1,坐标旋转公式. 这东西,要用 ...
- opencv 图像仿射变换 计算仿射变换后对应特征点的新坐标 图像旋转、缩放、平移
常常需要最图像进行仿射变换,仿射变换后,我们可能需要将原来图像中的特征点坐标进行重新计算,获得原来图像中例如眼睛瞳孔坐标的新的位置,用于在新得到图像中继续利用瞳孔位置坐标. 仿射变换在:http:// ...
- Opencv2.4.4作图像旋转和缩放
关于下面两个主要函数的讲解: cv::getRotationMatrix2D(center, angle, scale); cv::warpAffine(image, rotateImg, rotat ...
- 每日算法37:Rotate Image (图像旋转)
You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...
- [google面试CTCI] 1-6.图像旋转问题
[字符串与数组] Q:Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes, wr ...
- pyhton:图像旋转
最近一个作业中要用到图像旋转,分享一下学习过程.如有讲错的地方,恳请指正! 图像旋转,想想真简单啊,不就是将图像矩阵乘上一个旋转平移矩阵就完了吗?实际上还真没这么简单.首先这个旋转平移矩阵怎么获得?通 ...
- CCF CSP 201503-1 图像旋转 (降维)
题目链接:http://118.190.20.162/view.page?gpid=T27 问题描述 试题编号: 201503-1 试题名称: 图像旋转 时间限制: 5.0s 内存限制: 256.0M ...
- 图像旋转、伸缩的自写matlab实现
一.图像的旋转 今天的代码不是自己写的,缺少一些时间.但是认认真真推导了一下旋转的公式,代码的思想与原博博主一致,致敬! 愚以为,自己来实现图像旋转算法的关键点有二:其一,确定旋转后的图像边界.其二, ...
随机推荐
- P5132 Cozy Glow之拯救小马国
题目描述 Cozy Glow偷偷摸摸的造了一个魔法阵,这个魔法阵在吸取小马国的魔力,所以你得赶紧把它毁掉. 这个魔法阵由若干个神器组成,每个神器都有一个法力值,每两个神器之间也都有一个关联值.你要依次 ...
- 网络游戏逆向分析-3-通过发包函数找功能call
网络游戏逆向分析-3-通过发包函数找功能call 网络游戏和单机游戏的分析有相似点,但是区别还是很大的. 网络游戏和单机游戏的区别: 网络游戏是需要和服务器进行交互的,网游中的所有功能几乎都会先发送封 ...
- SpringBoot整合SpringSecurity示例实现前后分离权限注解
SpringBoot 整合SpringSecurity示例实现前后分离权限注解+JWT登录认证 作者:Sans_ juejin.im/post/5da82f066fb9a04e2a73daec 一.说 ...
- Django(70)接口版本控制
前言 在RESTful规范中,有关版本的问题,用restful规范做开放接口的时候,用户请求API,系统返回数据.但是难免在系统发展的过程中,不可避免的需要添加新的资源,或者修改现有资源.因此,改 ...
- linux下 大日志文件查看与搜索---less
场景 有一个几十m的大日志文件,里边的记录是按时间排序的. 现在需要找到其中,不知道在什么位置的一条错误消息.这时候,想把内容拷出来都费劲,就算拷出来了,一般的编辑器也难以hold住这么大的文件.这时 ...
- Redmine部署中遇到的问题
Redmine部署文章: 第一篇:Redmine部署 第二篇:Redmine部署中遇到的问题 上一篇文章我写了Redmine怎样部署(点这里直达上一篇文章),这一篇就写一下在Redmine部署中遇到过 ...
- 模拟windows10计算器的实现
用户界面部分: import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.HashMap; impo ...
- 一个SDK给我干懵逼了?大厂的SDK就这?
活久见 .org.jboss.netty 和 io.netty 你分的清吗? 大家好,我是小猿来也,一个热衷写 bug 的程序猿. 一天我正在专心致志写 Bug 的时候,一个同事跑过来找我. 说有个很 ...
- bcprov-jdk15-145.rar
javapdf文件操作,加密包 bcprov-jdk15-145.rar https://files.cnblogs.com/files/blogs/692137/bcprov-jdk15-145.r ...
- 一小时搞懂Mysql锁机制
内容概述: 我们知道,数据也是一种供许多用户共享访问的资源.如何保证数据并发访问的一致性.有效性,是所有数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素.从这一角度来说,锁对 ...