FPGA图像处理系统仿真平台的搭建
1概述
在FPGA实现图像处理算法之前我们需要验证我们的verilog代码的算法是否正确,或者是哪里出了问题,这时搭建一个图像处理的仿真平台就非常必要。我们很容易在仿真过程中找到算法的计算错误,但是下板之后就不那么容易了。所以搭建FPGA图像处理仿真平台非常必要。
整体思路:我们利用matlab将图像转换为txt文档,然后在使用verilog仿真平台读入txt文档的图像数据,经过我们的verilog图像处理算法后再将它转换为txt文档,最后由matlab读入显示图片。Matlab具有很强的数字图像处理和分析能力,这样我们可以对照我们的算法结果是否正确。
2仿真平台搭建
图1 FPGA图像仿真平台
如图1所示,首先将一幅图像由Matlab转换为txt文档,然后由FPGA的仿真平台IMread.v读入图像数据,VGA_CTL为VGA时序发生模块,数据进入VGA_CTL模块后转成VGA时序。再由图像处理法处理数据,将处理好的数据发送给Imwrite模块,Imwrite模块将数据转换为txt文档,最后由Matlab显示,达到图像的验证目的。
3实验程序设计
Matlab程序的设计:
1>img_txt.m完成图像转txt.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ProjectName :img_txt.m
% FPGAOpen Source Studio
%Author:Lipu
%Description: image to txt
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
close all
clc
img =imread('800_600.jpg');
R=img(:,:,1);
G=img(:,:,2);
B=img(:,:,3);
%**************************
[a,b,c]=size(img);
fidR=fopen('testR.txt','w');
fidG=fopen('testG.txt','w');
fidB=fopen('testB.txt','w');
for i=1:a
for j= 1:b
fprintf(fidR,'%d\n',R(i,j));
fprintf(fidG,'%d\n',G(i,j));
fprintf(fidB,'%d\n',B(i,j));
end
end
fclose(fidR);
fclose(fidG);
fclose(fidB);
figure,
subplot(221),imshow(img),title('img');
subplot(222),imshow(R),title('R');
subplot(223),imshow(G),title('G');
subplot(224),imshow(B),title('B');
2> Txt_img.m完成txt转图像
FPGA代码设计:
1> Imread.v完成图像读入
2> Imwrite.v完成图像转txt
3>vga_ctl.v和vga_parameter.vh完成VGA时序的发生。
4>tb_image.v完成各个模块连接与控制的顶层仿真模块。
4实验结果
图2实验原图
图3转换txt的R,G,B及原图显示
图4 txt转换图像Ycbcr算法后图像显示
总结:
本实验为了FPGA在图像处理算法仿真搭建平台,方便以后的时序以及算法查错。Matlab自身也很方便图像的分析,利用好matlab将使我们事半功倍。
领取专属 10元无门槛券
私享最新 技术干货