基于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

相关推荐
hai3152475435 小时前
RISC-V CVA6 AXI适配器+DMA桥蜂鸟E203处理器的总线接口单元(BIU)仲裁器
驱动开发·fpga开发·硬件架构·硬件工程·精益工程
高速上的乌龟10 小时前
Lattice LFCPNX-100 HSB+Fpga开发详解:2.3 Hololink 顶层模块深度全解析
linux·fpga开发
吃好睡好便好13 小时前
矩阵的乘法运算
数据结构·人工智能·学习·线性代数·算法·matlab·矩阵
Ricky055314 小时前
搭载实时 FPGA 处理系统的航天器上用于海上监视的超分辨率YOLO目标检测技术(意大利2026年研究)
yolo·目标检测·fpga开发
kaizq15 小时前
在线设计模仿平台StepFPGA应用实践
fpga开发·verilog编程·在线设计仿真·小脚丫stepfpga·图形化设计·risc-v_soc·ima-copilot-ds
listhi52018 小时前
基于MATLAB的自适应粒子群算法(APSO)实现大规模分类特征选择
算法·matlab·分类
cjie22119 小时前
图像缩放需要哪些参数和端口
计算机视觉·fpga开发
思尔芯S2C19 小时前
FPGA Prototyping That Creates Useful Pre-Silicon Evidence
fpga开发
可编程芯片开发19 小时前
基于PSO粒子群优化的配电网可靠性指标matlab仿真
matlab·pso粒子群优化·配电网可靠性
啄缘之间19 小时前
10.【学习】SPI & UART 验证环境与测试用例
开发语言·经验分享·学习·fpga开发·测试用例·verilog