FPGA图像处理——前置基础篇

FPGA图像处理——前置基础篇

本系列博客旨在结合FPGA来进行图像处理,致力于各种图像处理算法的实现,同时参考了博客原创作者——咸鱼FPGA的资料。以下是前置基础三节,我会以一个小白的角度去思考,解析学习过程中遇到的各种问题。

1.Modelsim 联合 Matlab的图像仿真平台

这是一个用于验证自己各种图像处理算法实现效果的平台,基本思路在于,将要进行处理的图片转换为. txt 格式,利用 modelsim 的脚本把 .txt 文件输入到 testbench 中进行仿真并得到处理后的 .txt文件,最后用matlab显示处理后效果。

举个栗子——图像RGB转Gray

step1:利用img_to_txt脚本将RGB图像转换为hex文件便于输入

1.1

step2: 编写对应的verilog以及testbench文件

以一个RGB转GRAY的程序为例,编写好对应的img_en.v \ rgb_to_gray.v \ top.v \ tb_top.v之后,创建ise并进行仿真

step3:熟悉modelsim的相关操作,熟悉bat文件的编写
step4:用matlab进行处理,查看相应图像处理算法的实现效果

1.2

过程中出现的问题
  1. 代码编译过程中出现了,在top_tb中作为引用的数据应该是常量;错误的定义了其中img_data的位宽导致数据呈现高阻态无法被matlab识别
  2. matlab端则是出现了,matlab侧和FPGA侧对于图片的定义要统一,不能前后不一致;再就是转换成的灰度数据为24位宽,直接显示的话图片呈白色,需要把数据进行一个8位宽的转换

2.串口传图中的RGB332格式和RGB565格式

写在前面:之前在这个模块卡了一段时间的壳,因为我这边一直是将串口配合SDRAM再配合HDMI进行显示,之前在接口驱动上可能有一定问题,就是当我采用1024*768@60HZ的VGA时序作为SDRAM的读模块再转HDMI时候,显示器就会有闪屏现象,初步猜测应该是频率的原因。

首先我们先完成正常的功能实现以及探讨一下分辨率上的问题:

一、关于生成RGB332和生成RGB565的问题

日常见到的图片大多是RGB888的,但是像项目中的许多图片传输格式采取的是RGB332和RGB565,这就涉及到一个格式转换的问题,用matlab可以简单的实现。

1.3

值得注意的是,当你采用不同格式的图像格式传输数据时,相应的图像打包模块要发生改变,因为SDRAM的输入输出端口复用的模块限制为16bit数据,当你采用RGB332格式存数据时候,可以先高位补0,取的时候丢掉即可。

二、搭建工程

模块这部分网上有很多教程也比较基础,这里主要是参考了野火FPGA和咸鱼FPGA的一些设计,复用了一些模块。串口接收模块、VGA时序驱动模块、SDRAM模块、HDMI接口模块,其中HDMI接口模块后续在接口系列博客中进行更详细的介绍。

1.4

HDMI接口将输入的VGA/DVI时序转换成四对差分信号进行一个”并转串“的传输,里面涉及一个TMDS传输的概念。

1.5

三、实验效果

RGB332格式图片显示

1.7

RGB565格式图片显示

1.6

posted @ 2024-03-25 22:10  齐迩  阅读(47)  评论(0编辑  收藏  举报