天天看点

基于FPGA的图像均衡处理

    通过对你的MATLAB的程序的仿真,得到了如下的效果:

基于FPGA的图像均衡处理

二、FPGA部分的设计实现注意点

在进行FPGA设计的时候,我们需要主要以下几个方面:

第一:关于图片大小的统一

    这里,我们主要对你的直方图均衡算法进行FPGA的硬件的实现,这里,我们将图像的大小统一为100*100,这样的话,方便后期的同一处理,因为在FPGA内部进行处理的时候,由于硬件的实现不像MATLAB那么的灵活,所以需要对各个参数进行固定写死。这里设置100*100比较合适。

    运行:

基于FPGA的图像均衡处理

中的main函数,可以将四个图片同一为100*100大小的图片,然后保存为串行的数据,保存到存储器中。

第二:关于图像的存储,由于我这边只有V5的开发板,然后看了下手册,发现两个的SDRAM还是有很大差别的,所以为了你拿到程序之后能立刻的运行,这里使用FPGA内部存储器进行保存,其操作方法和外部的SDRAM是完全相同的,也是通过地址的读写进行操作的。所以这里不影响你写论文。这就是相当于使用FPGA内部的SDRAM,其地址读写等一些基本的存储器的操作过程是完全相同的。

第三:看了下你的板子,接口只有网口,USB,串口。这里,这个部分的代码,主要考虑如下的因素:

网口,结构较为复杂,你的板子型号比较低,所以这里我不建议采取这个方式;

串口,速率较慢,显然不适合图像的发送

USB,这里我们可以借助Chipscope进行USB的数据发送,利用ChipScope进行数据的实时采集。这个部分的代码,我已经写了,但是没有进行测试,这里只有当你需要使用这个方式来采集的时候,在后期修改中,我帮你完善。

三、FPGA的仿真与验证分析

    首先,根据FPGA的硬件结构,将MATLAB改写为串行处理的流程图。

 >

基于FPGA的图像均衡处理

仿真结果如下所示,下面按这个文件下的程序进行FPGA的设计与实现。

基于FPGA的图像均衡处理

这里,对该程序进行FPGA设计实现。

这里,由于没有相同型号的板子,这里我们设计了一个比较晚上的仿真流程,从而验证整个过程的正确性。

首先,整个过程如下上图所示。

我们使用MATLAB将图像数据变为串行数据,并保持为仿真测试文件,用来进行仿真。

这个部分,你需要运行如下的代码:

基于FPGA的图像均衡处理

 >

基于FPGA的图像均衡处理

中的

基于FPGA的图像均衡处理

运行完之后,会产生图像的测试代码级,即编写MATLAB自动产生verilog测试代码:

基于FPGA的图像均衡处理

然后在FPGA中,会有如下的代码:

基于FPGA的图像均衡处理

这个就是调用测试文件的完整的测试代码集。

我们将这个testdata.v复制到FPGA的工程文件夹下。

这个就是模拟实际的SDRAM的操作过程。

进行仿真,我们可以看到如下的仿真图。

基于FPGA的图像均衡处理

将仿真图放大,可以看到如下的仿真结果:

基于FPGA的图像均衡处理

上面,我们完整的仿真了其中的两帧图像。

并得到了仿真结果。

最后,我们将仿真结果保存到数据,导入到MATLAB进行成像。

Modelsim仿真完成之后,你会看到有如下的txt文件。将这个文件复制到

基于FPGA的图像均衡处理

运行,得到如下的仿真结果:

基于FPGA的图像均衡处理

对FPGA处理后的数据,仿真其中的直方图,得到如下的结果:

基于FPGA的图像均衡处理

最后的注意事项:

第一、这里,你所提供的两种直方图的均衡方法,基本结构相同,所以,我这里只对第一种算法进行了FPGA的编写,如果有需要,那么我稍微一修改,就给你第二种的代码。

第二、你看完代码之后,觉得没什么问题了,并同意我的数据发送方法,那么我再完善一下数据采集部分的代码: