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


    目录

    1.算法运行效果图预览

    2.算法运行软件版本

    3.部分核心程序

    4.算法理论概述

    5.算法完整程序工程


    1.算法运行效果图预览

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

    2.算法运行软件版本

    vivado2019.2

    matlab2022a

    3.部分核心程序

    1. `timescale 1ns / 1ps
    2. //
    3. // Company:
    4. // Engineer:
    5. //
    6. // Create Date: 2022/07/28 01:51:45
    7. // Design Name:
    8. // Module Name: test_image
    9. // Project Name:
    10. // Target Devices:
    11. // Tool Versions:
    12. // Description:
    13. //
    14. // Dependencies:
    15. //
    16. // Revision:
    17. // Revision 0.01 - File Created
    18. // Additional Comments:
    19. //
    20. //
    21. module test_image;
    22. reg i_clk;
    23. reg i_rst;
    24. reg i_en;
    25. reg [7:0] image_buff [0:100000];
    26. reg [7:0] II0;
    27. wire [7:0] o_image;
    28. wire flager;
    29. integer fids,jj=0,dat;
    30. //D:\FPGA_Proj\FPGAtest\codepz
    31. initial
    32. begin
    33. fids = $fopen("D:\\FPGA_Proj\\FPGAtest\\codepz\\data.bmp","rb");
    34. dat = $fread(image_buff,fids);
    35. $fclose(fids);
    36. end
    37. initial
    38. begin
    39. i_clk=1;
    40. i_rst=1;
    41. #2000;
    42. i_rst=0;
    43. end
    44. always #10 i_clk=~i_clk;
    45. always@(posedge i_clk)
    46. begin
    47. if(i_rst)
    48. begin
    49. II0<=0;
    50. jj<=0;
    51. end
    52. else
    53. begin
    54. if(jj<=66614 & jj>=1)
    55. i_en<=1'b1;
    56. else
    57. i_en<=1'b0;
    58. II0<=image_buff[jj];
    59. jj<=jj+1;
    60. end
    61. end
    62. tops tops_u(
    63. .i_clk (i_clk),
    64. .i_rst (i_rst),
    65. .i_en (i_en),
    66. .i_I0 (II0),
    67. .o_image (o_image),
    68. .flager (flager)
    69. );
    70. reg[19:0]cnts;
    71. always @(posedge i_clk or posedge i_rst)
    72. begin
    73. if(i_rst)
    74. begin
    75. cnts<=20'd0;
    76. end
    77. else begin
    78. cnts<=cnts+20'd1;
    79. end
    80. end
    81. integer fout1;
    82. integer fout2;
    83. initial begin
    84. fout1 = $fopen("flager.txt","w");
    85. fout2 = $fopen("expansion.txt","w");
    86. end
    87. always @ (posedge i_clk)
    88. begin
    89. if(cnts <= 66514)
    90. begin
    91. $fwrite(fout1,"%d\n",flager);
    92. $fwrite(fout2,"%d\n",o_image);
    93. end
    94. else
    95. begin
    96. $fwrite(fout1,"%d\n",0);
    97. $fwrite(fout2,"%d\n",0);
    98. end
    99. end
    100. endmodule
    101. 0X_014m

    4.算法理论概述

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

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

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

    5.算法完整程序工程

    OOOOO

    OOO

    O

  • 相关阅读:
    给网站添加xml地图索引写法
    C++基础:函数模板
    Leetcode刷题day6|242.有效的字母异位词 ,349. 两个数组的交集, 202. 快乐数,1. 两数之和
    动态顺序串的基本实现
    Linux之文件/目录搜索
    CentOS 7离线升级OpenSSH至9.1p1操作过程及遇上的问题
    Linux系统任务设置
    机器学习 day38(有放回抽样、随机森林算法、XGBoost)
    基于FPGA实现FPDLINK III
    GO 中的指针?
  • 原文地址:https://blog.csdn.net/aycd1234/article/details/133721850