介绍双线性插值算法来实现图像缩放,FPGA 硬件实现方法,包括图像数据缓冲单元、插值系数生成单元以及插值计算单元等。

图像是人类感知世界的视觉基础,是人类获取信息、表达信息的重要手段。现在研究较多的是数字图像,它是由连续函数或离散函数生成的抽象图像,能直接被计算机处理。图像缩放是数字图像处理的重要一环,在实际应用中经常要将图像进行放大或缩小。例如,等离子电视、液晶电视和发光二极管(LED)显示屏等显示器需将接收到的图像分辨率进行缩放, 使之与显示器的物理分辨率一致,才能在显示器上完整地显示视频图像。

一、双线性插值算法原理

1.1、图像缩放算法选择

图像缩放算法种类较多,几乎都是通过插值算法实现的,传统的插值算法有:最近邻插值、双线性插值和立方卷积插值等。最简单的插值方法是最近邻插值,与其他两种插值算法相比,最近邻插值具有简单快速的特点,但是对于近邻像素点的灰度值有较大改变,细微结构是粗糙的。双线性插值方法具有低通滤波器性质,使高频信息受损,图像轮廓模糊,但边缘处的过渡比较自然。与最近邻插值相比,它的计算量较大,但缩放后的图像质量高, 不会出现像素值不连续的情况,在对图像边缘质量要求不是非常高的情况下,这种方法是完全可以接受的。立方卷积法计算量要比双线性插值大很多,但精度高,能保持较好的图像边缘细节。实际应用中,因为 FPGA 内的逻辑资源有限,而算法越复杂占用的逻辑资源就越多,对FPGA完成图像的实时缩放有重要影响,所以实际应用中应选择合适的算法,并非精度越高越好。综上所述,本文选用双线性插值算法来实现图像缩放。

1.2、双线性插值算法

在双线性插值中,新创建的图像的像素值是由原图像位置在它附近的(2 x 2)个邻近像素的值通过加权平均计算得出的,然后由新图像的某个像素( y', x' )处,对( y',x' )取整得到 (v,u) 并得到 (1+ v,u ),(v,u +1),( v+1,u+1) 的值,利用双线性插值得到像素点 ,(y,x) 的值并写回新图像。

图1 双线性插值原理图

设原始图像中相邻两列的 4个像素点为 p 1、p 2 、p 3 、p 4 ,水平和垂直两个方向点距为单位长度 l。4 点坐标分别为 p(x,y),p(x+1,y),p(x,y+1),p(x+1,y+1) 目标像素点的坐标为A(x+dx,y+dy),dx、dy 分别是目标像素点与原始图像中邻近点的水平和垂直坐标方向上的两个增量。那么,采用双线性插值法得到目标插值像素点A的灰度值为:

考虑以FPGA来实现插值运算时,共需要8个乘法器、2个减法器和4个加法器,占用了较多的逻辑资源,所以将它改写为:

1.3、算法的 FPGA 实现

整个算法主要由图像数据缓冲模块、系数生成和逻辑控制模块、双线性插值计算模块等3大模块来实现,如图 2。

图 2 用 FPGA实现双线性插值的系统框图

1.3.1、图像数据缓冲

数字视频信号的数据量很大,传输带宽特别高。在用硬件系统对数字视频图像进行实时处理时,需要建立一个图像数据的存储缓冲机制,为插值运算及时准确地提供图像数据。一般情况下需要采用片外大容量高速存储器存储至少两帧的图像数据,利用"Ping-Pong" 轮换机制实现图像数据缓冲。当需要使用一帧内像素点数据时,可以及时从一个存储器中读取;与此同时,连续的图像数据被存至另一个存储器中。但是,这样的帧存储器不仅增加了成本,还要在 FPGA 内利用逻辑模块设计帧存控制逻辑。为了降低成本,提高系统集成度,利用FPGA的内部逻辑资源为每一彩色通道设计了一组由3个双端口 RAM 组成的图像数据缓冲阵列,并将这样一个缓冲阵列称为行缓冲器。

1.3.2、插值系数生成

根据双线性插值运算公式及二维图像插值的 FPGA 实现方法,两个运算系数dx和 dy 需要准确及时地求出,提供给插值运算单元,并且只有当生成的系数在时序节拍上与图像数据存储、插值计算单元的时序配合一致时,才能有效地完成整幅图像的插值运算。因此,在生成系数的同时,必须能够给出系数在原图像中对应邻近像素点的坐标信息,即在 DPRAM 中的存储地址,以便图像数据缓冲模块可以同步地取出参与运算的4个图像数据。

首先需要确定缩放因子S。对于以单位长度"1"来表示相邻两个像素点的距离的模型进行缩放时,以S为间隔形成一个新采样格栅,重新对原图像在水平和垂直两个方向上进行重采样,新图像的像素点距离即为S。如果把分辨率为640x480的图像转化为800x600的图像,就需要放大1.25倍,则缩放因子为S=l/1.25,如果把分辨率为1024x768的图像转化为 800x600,将图像缩小0.78125倍时,缩放因子为S=l/0.78125,上述两种情况下,目标图像在水平和垂直两个方向的缩放比例是一样的。若在水平和垂直两个方向上的缩放比例不一致,则缩放因子也就不相同,分别定义为 S_x 和 S_y。那么,对应于新图像中坐标为(m,n)的像素点,系数 dx 和 dy 可以由公式(2)得到:

式中[ ]表示下取整。

1.4、双线性插值运算单元

在获取插值像素点相邻4点的图像数据和插值系数后,就可以进行双线性插值运算了。依据插值公式,设计了一种具有流水线特性的运算逻辑结构如图 3。

.5、功能实现

整个硬件模块在像素间距为 20mm的发光二极管(LED)显示屏中得到了成功应用,虽然从理论上讲,利用双线性插值算法实现图像缩放存在边缘高频分量的损失,但从 LED显示屏的显示效果来看,人眼完全可以接受,所采用的算法适合于这一工程应用

1.6、总结

在权衡算法复杂度、缩放效果和 FPGA逻辑资源等3大因素后,选择了双线性插值算法来实现图像缩放。虽然该算法在理论上会造成被缩放图像边缘高频分量的损失,使图像边缘模糊,但在很多对图像质量要求不是很严格的场合,比如在LED显示屏上播放视频图像,所获得的图像质量是人眼完全可以接受的,效果良好。

对FPGA感兴趣的朋友,多多关注我,互相探讨

基于FPGA 的图像缩放算法设计相关推荐

  1. verilog 算法加速模块设计流程_基于FPGA的图像加速器的设计

    基于 FPGA 的图像加速器的设计 摘 要 介绍了一种基于 FPGA 的图像加速器的设计.本文硬件加速器的实质是通过流水线 设计来减少多余的操作达到加速的目的的, 内存是由 DMA 控制器访问, 之后 ...

  2. 基于FPGA的千兆以太网设计

    今天给大侠带来基于FPGA的千兆以太网设计,话不多说,上货. 一.设计概述 由于设计比较复杂,本篇带来设计流程以及设计思路,仅供各位大侠参考. 本篇通过管理数据输入输出MDIO配置PHY寄存器,使其工 ...

  3. 基于FPGA的深度学习算法加速

    学习总结--基于FPGA的深度学习算法加速 1.深度学习算法加速的方法 2.为什么用FPGA来加速YOLOV2 3.FPGA简介 4.PYNQ框架与HLS加速理论 5.实验结果 1.深度学习算法加速的 ...

  4. 基于FPGA的图像浮雕效果实现

    基于FPGA的图像浮雕效果实现 项目简述 算法原理及MATLAB实现 浮雕效果的FPGA实现 FPGA工程代码 下板效果 参考文献 总结 项目简述 为什么要做这个小项目,因为最近正在在学习FPGA开源 ...

  5. 几个图像缩放算法的比较

    几个图像缩放算法的比较 前段时间由于项目的需求,需要实现图像的缩放功能,期间查找了不少关于图像缩放算法的资料,现把自己的心得整理一下. 由于研究生期间没有选修过图像处理方面的课程,所以对图像缩放的原理 ...

  6. 基于FPGA的VGA/LCD显示控制器设计(中)

    今天给大侠带来基于FPGA的VGA/LCD显示控制器设计,由于篇幅较长,分三篇.今天带来第二篇,中篇,VGA 显示原理以及VGA/LCD 显示控制器的基本框架,话不多说,上货. 之前也有图像处理以及V ...

  7. 基于FPGA的USB接口控制器设计(VHDL)(中)

    今天给大侠带来基于 FPGA 的 USB 接口控制器设计(VHDL),由于篇幅较长,分三篇.今天带来第二篇,中篇,USB通信原理.USB 系统开发以及设计实例.话不多说,上货. 之前有关于 Veril ...

  8. 基于DSP的图像旋转算法数据调度策略

    基于DSP的图像旋转算法数据调度策略 [日期:2008-8-14] 来源:电子技术应用  作者:李筱琳,冯 燕,何亦征 [字体:大 中 小] <script src="http://w ...

  9. 基于FPGA的数字视频信号处理器设计(中)

    今天给大侠带来基于FPGA的数字视频信号处理器设计,由于篇幅较长,分三篇.今天带来第二篇,中篇,视频信号概述和视频信号处理的框架.话不多说,上货. 之前也有图像处理相关方面的文章,这里超链接几篇,给各 ...

最新文章

  1. 尚硅谷最新版JavaWeb全套教程,java web零基础入门完整版(四)
  2. [initandlisten] connection refused because too many open connections: 819 of 819
  3. 微软Windows SharePoint Services 3.0 应用程序模板( Templates)中文版推出了
  4. 电商网站前端架构 学习笔记(全是干货)
  5. 重磅!清华这个决定冲上热搜!网友:不愧是清华…
  6. DataTable相关
  7. Resharper F12下载dll源码
  8. vcpkg安装库时异常解决
  9. 关于补码--看锆石fpga计算峰峰值时的疑问启示
  10. 旅游推荐系统更新版本
  11. Word文档day01
  12. uni-app最新获取微信头像方法getUserProfile?
  13. uni-app实现图片的上传和裁剪
  14. 名词介绍 CAPEX OPEX
  15. cmnet与cmwap区别
  16. 企业专线传输网络与普通宽带的对比
  17. EXCEL如何批量一次性修改内容
  18. Java通SAS下载sas脚本
  19. 极致视觉追求 六款热门高清屏笔记本推荐
  20. 杰理之调节数字音量不起作用以及调节数字音量影响混响效果的解决办法【篇】

热门文章

  1. ROW_NUMBER() OVER函数使用方法
  2. [木桶效应][hashmap]leetcode1189:“气球” 的最大数量(easy)
  3. 【TARS】理解RegistryServer
  4. Hadoop集群的启动
  5. 测试过程分为哪些阶段
  6. jsoup实战之抓取大众点评网区域省份城市信息
  7. Kettle分布式集群安装部署详细步骤和使用分布式Kettle集群示例
  8. python同花顺程序化交易接口能查询数据吗?
  9. 室外3D雷达地图构建流程
  10. 机器学习之数据分析与特征工程