Vitis HLS 学习笔记--变量存储(DDR中的图像数据:生成、存储、调取 + Filter2D函数)

发布时间:2026/8/7 17:43:04

Vitis HLS 学习笔记--变量存储(DDR中的图像数据:生成、存储、调取 + Filter2D函数)
目录1. 简介2. 图像数据2.1 变量理解2.2 生成图像(随机数据)2.3 调取(传递)图像数据2.4 Filter2D函数3. 总结1. 简介通过 HLS 中提供的函数 Filter2D了解在硬件加速中图像数据在 DDR 中的存储模式从而理解的生成、调取方法方便快速测试和验证。1基本概念HWC 和 CHW高度(Height)、宽度(Width)、颜色通道(Channel)HWC图片为 RGB 256×256其在 HWC 格式下的表示为 [256, 256, 3]图像数据首先按照图像的高度和宽度排列对于图像中的任意一个像素点其 RGB 三个颜色通道的值是连续存储的。这种存储方式比较直观。CHW图片为 RGB 256×256在CHW格式下的表示为[3, 256, 256]。数据首先按颜色通道分布对于同一颜色通道内的数据则按照图像的高度和宽度顺序排列。对于图像中的任意一个像素点其RGB三个颜色通道的值在内存中是分开、不连续存储的。这种方式在某些图像处理和深度学习框架中比较常见它能提高某些类型的计算效率。2. 图像数据2.1 变量理解unsigned stride ceil(width/64.0)*64; // width 1080, stride 1088 unsigned nbytes (stride*height); // 图像的一个通道在内存中的大小1Stridestride 表示图像数据中一行像素的实际占用字节数。由于内存对齐的要求或为了提高访问效率图像的实际行宽度stride可能会比基于像素宽度直接计算的值更大。在这个例子中width 是 1080 像素通过 ceil(width / 64.0) * 64 计算得到 stride 为 1088 字节。这是因为内存对齐到 64 字节的倍数。2nbytesnbytes 表示图像的一个通道在内存中的总大小。它是 stride 和 height 的乘积。在这个例子中如果 height 是 720 像素那么 nbytes 就是 1088 * 720 字节。2.2 生成图像(随机数据)为图像的每个颜色通道分配内存空间然后初始化这些内存空间。目的初始化分配的内存空间。rand()为 y_src、u_src 和 v_src 分配随机值模拟图像数据。0将 y_dst、u_dst 和 v_dst 初始化为 0准备存储处理后的图像数据。//每个通道分别申请内存空间CHW存储模式 unsigned char *y_src (unsigned char *)malloc(nbytes); unsigned char *u_src (unsigned char *)malloc(nbytes); unsigned char *v_src (unsigned char *)malloc(nbytes); unsigned char *y_dst (unsigned char *)malloc(nbytes); unsigned char *u_dst (unsigned char *)malloc(nbytes); unsigned char *v_dst (unsigned char *)malloc(nbytes); for (int i0; inbytes; i) { y_src[i], u_src[i], v_src[i] rand(), rand(), rand(); y_dst[i], u_dst[i], v_dst[i] 0, 0, 0; }2.3 调取(传递)图像数据功能对源图像数据应用滤波器并将结果存储在目标图像数据中。float factor filterFactors[filterType]; short bias filterBiases[filterType];actor 和 bias从预定义的滤波器参数数组中获取当前滤波器类型的缩放因子和偏置值。这些参数用于滤波器计算。#pragma omp parallel for num_threads(3) for (int n0; nnumRuns; n) { // Compute reference results Filter2D(filterCoeffs[filterType], factor, bias, width, height, stride, y_src, y_dst); Filter2D(filterCoeffs[filterType], factor, bias, width, height, stride, u_src, u_dst); Filter2D(filterCoeffs[filterType], factor, bias, width, height, stride, v_src, v_dst); }OpenMP 并行化使用 OpenMP 指令 #pragma omp parallel for 并行执行循环指定使用 3 个线程。numRuns表示要执行的滤波操作的次数。Filter2D 函数对每个颜色通道Y、U、V分别应用二维滤波器。这段代码通过并行化处理提高了对图像数据的滤波效率。每个颜色通道Y、U、V分别应用滤波器并行执行可以显著减少处理时间。2.4 Filter2D函数Filter2D 函数的主要功能是对图像应用二维滤波器。Filter2D(…,… …) { for(int y0; yheight; y) { for(int x0; xwidth; x) { // Apply 2D filter to the pixel window int sum 0; for(int row0; row FILTER_V_SIZE; row) { for(int col0; col FILTER_H_SIZE; col) { unsigned char pixel; int xoffset (xcol-(FILTER_H_SIZE/2)); int yoffset (yrow-(FILTER_V_SIZE/2)); // Deal with boundary conditions : clamp pixels to 0 when outside of image if ( (xoffset0) || (xoffsetwidth) || (yoffset0) || (yoffsetheight) ) { pixel 0; } else { pixel src[yoffset*stridexoffset]; } sum pixel*coeffs[row][col]; } } unsigned char outpix MIN(MAX((int(factor * sum)bias), 0), 255); //归一化饱和处理 dst[y*stridex] outpix;}}解释 offsetxoffset 和 yoffset 用于计算当前滤波器元素对应的图像像素位置。xoffset (x col - (FILTER_H_SIZE / 2)) 和 yoffset (y row - (FILTER_V_SIZE / 2)) 确保滤波器中心对准当前像素点 (x, y)。边界处理检查 xoffset 和 yoffset 是否超出图像边界。如果超出边界将 pixel 设为 0否则从源图像 src 中获取对应像素值。3. 总结本文介绍了在硬件加速中使用 HLS 提供的 Filter2D 函数处理图像数据的过程。HWC 和 CHW 两种图像数据存储格式及其应用场景。图像数据在内存中的存储方式包括 stride 和 nbytes 的计算方法。展示生成随机图像数据并使用 OpenMP 并行化处理对图像数据应用滤波器。简单分析了 Filter2D 函数的实现细节。

相关新闻

音频处理全流程指南:从降噪、均衡到母带处理的标准化工作流

音频处理全流程指南:从降噪、均衡到母带处理的标准化工作流

2026/8/7 17:43:04

在实际音乐制作、视频剪辑和内容创作领域,音频处理是一个基础但至关重要的环节。无论是为原创音乐添加效果,还是为视频内容制作背景音轨,亦或是处理网络投稿的音频素材,掌握一套清晰、可复现的音频处理工作流,都能极大…

无需ROOT的Android虚拟定位终极指南:GoGoGo摇杆控制全解析

无需ROOT的Android虚拟定位终极指南:GoGoGo摇杆控制全解析

2026/8/7 17:43:03

无需ROOT的Android虚拟定位终极指南:GoGoGo摇杆控制全解析 【免费下载链接】GoGoGo 一个基于 Android 调试 API 百度地图实现的虚拟定位工具,并且同时实现了一个可以自由移动的摇杆 项目地址: https://gitcode.com/GitHub_Trending/go/GoGoGo 你…

免费QQ空间备份工具:完整保存你的青春记忆

免费QQ空间备份工具:完整保存你的青春记忆

2026/8/7 17:33:03

免费QQ空间备份工具:完整保存你的青春记忆 【免费下载链接】QZoneExport QQ空间导出助手,用于备份QQ空间的说说、日志、私密日记、相册、视频、留言板、QQ好友、收藏夹、分享、最近访客为文件,便于迁移与保存 项目地址: https://gitcode.co…

Tombi未来路线图:即将到来的7大令人期待的功能

Tombi未来路线图:即将到来的7大令人期待的功能

2026/8/7 18:33:05

Tombi未来路线图:即将到来的7大令人期待的功能 【免费下载链接】tombi TOML Formatter / Linter / Language Server 项目地址: https://gitcode.com/gh_mirrors/to/tombi Tombi作为一款功能丰富的TOML格式化工具、代码检查器和语言服务器,正在不断…

Modelsim仿真操作指南:从环境搭建到波形调试的完整实践

Modelsim仿真操作指南:从环境搭建到波形调试的完整实践

2026/8/7 18:33:05

1. 项目概述:为什么需要一份详尽的Modelsim仿真操作指导?如果你是一名FPGA或ASIC的开发者,那么“仿真”这个词对你来说,就像厨师手中的锅铲一样,是每天都要打交道的基础工具。而Modelsim,无疑是这个领域里最…

AutowareArchitectureProposal消息类型全解析:从控制到感知的关键数据结构

AutowareArchitectureProposal消息类型全解析:从控制到感知的关键数据结构

2026/8/7 18:33:05

AutowareArchitectureProposal消息类型全解析:从控制到感知的关键数据结构 【免费下载链接】AutowareArchitectureProposal.proj This is the source code of the feasibility study for Autoware architecture proposal. 项目地址: https://gitcode.com/gh_mirro…

DeepFilterNet实战指南:5步掌握高效音频降噪技术

DeepFilterNet实战指南:5步掌握高效音频降噪技术

2026/8/7 18:33:05

DeepFilterNet实战指南:5步掌握高效音频降噪技术 【免费下载链接】DeepFilterNet Noise supression using deep filtering 项目地址: https://gitcode.com/GitHub_Trending/de/DeepFilterNet DeepFilterNet是一款基于深度学习的实时音频降噪框架,…

5分钟快速上手:Windows版iperf3网络测速完整指南

5分钟快速上手:Windows版iperf3网络测速完整指南

2026/8/7 18:33:05

5分钟快速上手:Windows版iperf3网络测速完整指南 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds iperf3是一款专业的网络性能测试工具&a…

如何快速集成SlidingCard到Android项目:3分钟实现炫酷滑动卡片

如何快速集成SlidingCard到Android项目:3分钟实现炫酷滑动卡片

2026/8/7 18:23:05

如何快速集成SlidingCard到Android项目:3分钟实现炫酷滑动卡片 【免费下载链接】SlidingCard Sliding cards with pretty gallery effects. 项目地址: https://gitcode.com/gh_mirrors/sl/SlidingCard SlidingCard是一款为Android应用提供精美画廊效果的滑动…

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

2026/8/6 19:19:00

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经从网易云音乐下载了心爱的歌曲&am…

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

2026/8/5 6:02:27

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比工程导读:本文深入讨论 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 在生产工程实践中的核心落地方案。基于 分布式架构与微服务设计 视角,剖析实际痛点、架…

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

2026/8/5 8:19:55

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,…

CAD图库管理:从文件归档到设计资产管理的效率革命

CAD图库管理:从文件归档到设计资产管理的效率革命

2026/8/7 0:02:15

你肯定遇到过这种情况:打开一个老项目,想找某个特定的图块——比如一个标准的门、一个特定的设备符号,或者一个公司logo。你记得它就在某个DWG文件里,或者曾经从某个同事那里拷来过。于是,你开始在一堆命名混乱的文件夹…

5分钟掌握Wand-Enhancer:2026年终极WeMod专业版免费解锁指南

5分钟掌握Wand-Enhancer:2026年终极WeMod专业版免费解锁指南

2026/8/7 0:02:15

5分钟掌握Wand-Enhancer:2026年终极WeMod专业版免费解锁指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wand-Enhancer是一款功能强…

“Quality Control(质量控制)”在软件工程中通常指通过一系列活动确保软件产品符合预定的质量标准和用户需求

“Quality Control(质量控制)”在软件工程中通常指通过一系列活动确保软件产品符合预定的质量标准和用户需求

2026/8/7 0:02:15

“Quality Control(质量控制)”在软件工程中通常指通过一系列活动确保软件产品符合预定的质量标准和用户需求。而“软件测试”是质量控制的关键手段之一,属于QC范畴下的具体实践,其目标是发现缺陷、验证功能正确性、评估软件质量属…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/6 5:43:30

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/7 8:02:42

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/4 15:11:03

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…