基于FPGA的图像缩小算法实现,包括tb测试文件和MATLAB辅助验证

目录

1.算法运行效果图预览

2.算法运行软件版本

3.部分核心程序

4.算法理论概述

5.算法完整程序工程


1.算法运行效果图预览

将FPGA的处理结果导出到matlab中显示图像效果:

2.算法运行软件版本

vivado2019.2

matlab2022a

3.部分核心程序

复制代码
`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/07/28 01:51:45
// Design Name: 
// Module Name: test_image
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module test_image;

reg i_clk;
reg i_rst;
reg i_en;
reg [7:0] image_buff [0:100000];
reg [7:0] II0;
wire [7:0] o_image;
wire flager;
integer fids,jj=0,dat;
 
//D:\FPGA_Proj\FPGAtest\codepz

initial 
begin
	fids = $fopen("D:\\FPGA_Proj\\FPGAtest\\codepz\\data.bmp","rb");
	dat  = $fread(image_buff,fids);
	$fclose(fids);
end
 
initial 
begin
i_clk=1;
i_rst=1;
#2000;
i_rst=0;
end 

always #10  i_clk=~i_clk;
 
always@(posedge i_clk) 
begin
     if(i_rst)
     begin
	 II0<=0;
	 jj<=0;
     end
     else
     begin
     if(jj<=66614 & jj>=1)
     i_en<=1'b1;
     else
     i_en<=1'b0;
	 II0<=image_buff[jj];
	 jj<=jj+1;
	 end
end
 
 
tops tops_u(
.i_clk              (i_clk),
.i_rst              (i_rst),
.i_en               (i_en),
.i_I0               (II0),
.o_image            (o_image),
.flager             (flager)
);

reg[19:0]cnts;
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
     begin
         cnts<=20'd0;
     end
else begin
         cnts<=cnts+20'd1;
     end
end  



integer fout1;
integer fout2;
initial begin
  fout1 = $fopen("flager.txt","w");
  fout2 = $fopen("expansion.txt","w");
end

 
always @ (posedge i_clk)
 begin
    if(cnts <= 66514)
    begin
	$fwrite(fout1,"%d\n",flager);
	$fwrite(fout2,"%d\n",o_image);
	end
	else
    begin
	$fwrite(fout1,"%d\n",0);
	$fwrite(fout2,"%d\n",0);
	end
	
end

endmodule
0X_014m

4.算法理论概述

图像放小算法主要通过抽取算法实现,常见的抽取算法最大值抽取,和均值抽取。其示意图如下所示:

以缩小一半为例,如果是最大值抽取,则在一个2*2窗口内,选择最大的像素输出,那么整个图像的维度就变为了原图像的一半。如果是均值抽取,则在一个2*2窗口内,选择四个像素均值输出,那么整个图像的维度就变为了原图像的一半。

在FPGA上实现图像放小算法时,可以采用硬件并行处理的方式,以提高处理速度。具体地,可以通过图像数据缓冲单元模块来实现。

5.算法完整程序工程

OOOOO

OOO

O

相关推荐
我爱C编程1 小时前
基于GCC-PHAT与球面散乱数据插值ML估计算法的混合麦克风阵列声源定位方法Matlab仿真
matlab·gcc-phat·球面散乱数据插值·ml估计·麦克风阵列声源定位
泛联新安4 小时前
FPGA功能仿真:VShark正式亮相,换仿真器不用换习惯
fpga开发·编译·仿真·嵌入式软件·代码漏洞扫描
泛联新安8 小时前
FPGA仿真加速:AccEmu正式亮相,一周的回归,一天跑完
机器学习·fpga开发·数据挖掘·回归·自动化·嵌入式软件·代码漏洞扫描
Terasic友晶科技8 小时前
【教程】Agilex 5 SOC FPGA的HPS端如何响应FPGA端中断(四)——设计中断驱动程序
fpga开发·hps·fpga端中断·设计中断驱动程序
菜鸟~noob23318 小时前
【电子战】第03篇:CFAR(恒虚警)处理【含matlab代码】
开发语言·matlab
菜鸟~noob23321 小时前
【电子战】第02篇:能量检测器 vs. 相关检测器【含matlab代码】
开发语言·matlab
szxinmai主板定制专家1 天前
基于 RK3588+RK1820/28 算力卡的国产工控机,适用于机器视觉,机器人等边缘算力场景
人工智能·fpga开发·zynq·控制器·mpsoc·半导体设备
菜鸟~noob2331 天前
【电子战】 第01篇:噪声、门限与虚警/检测概率(PFA/PD)【含matlab代码】
开发语言·matlab
unicrom_深圳市由你创科技1 天前
硬件在环(HIL)测试在FPGA项目中为什么重要?
fpga开发
嵌入式-老费1 天前
esp32开发与应用(和高云FPGA的配合)
fpga开发