深度学习FPGA实现基础知识15(Matlab图像处理“卷积”运算)

妖狐艹你老母 2022-05-19 10:35 555阅读 0赞

需求说明:深度学习FPGA实现知识储备

来自:时间的诗

说明:用Matlab验证图像卷积运算可以通过FFT和IFFT实现,且结果与直接进行卷积运算相同。

  1. 利用fft2conv2做卷积
  2. clc; clear all;
  3. %% 利用fft2计算二维卷积
  4. % 利用fft2函数可以计算二维卷积,如:
  5. a=[
  6. 2
  7. 2
  8. 1;
  9. 1
  10. 2
  11. 3;
  12. 1
  13. 1
  14. 1];
  15. b=[
  16. 11
  17. 2
  18. 3
  19. 3
  20. 4
  21. 1;
  22. 2
  23. 3
  24. 3
  25. 4
  26. 1
  27. 5;
  28. 2
  29. 7
  30. 12
  31. 22
  32. 11
  33. 11;
  34. 21
  35. 22
  36. 11
  37. 3
  38. 4
  39. 5;
  40. 7
  41. 8
  42. 6
  43. 2
  44. 1
  45. 2;
  46. 4
  47. 5
  48. 3
  49. 32
  50. 1
  51. 21];
  52. a
  53. 0 = a; b
  54. 0 = b;
  55. [ma, na] = size(a); % a的维数
  56. [mb, nb] = size(b); % b的维数
  57. a(ma*mb-
  58. 1, na*nb-
  59. 1) =
  60. 0; % 扩展a
  61. b(ma*mb-
  62. 1, na*nb-
  63. 1) =
  64. 0; % 扩展b
  65. c=ifft2(fft2(a).*fft2(b)); % fft2ifft2
  66. c1=c(
  67. 1
  68. :ma+mb-
  69. 1,
  70. 1
  71. :na+nb-
  72. 1); % 提取
  73. %% 利用conv2(二维卷积函数)校验, 如:
  74. a=a0; b = b0;
  75. c2=conv2(a,b); % conv2
  76. fprintf(
  77. \nUse fft2, c1 = \n’); disp(c1);
  78. fprintf(
  79. \nUse conv2, c2 = \n’); disp(c2);
  80. % 经验证发现是一样的,所以说求卷积可以使用傅立叶变换后点乘,
  81. % 然后在逆傅立叶变换回去则可

计算结果

  1. Use fft2, c1 =
  2. 22.0000
  3. 26.0000
  4. 21.0000
  5. 14.0000
  6. 17.0000
  7. 13.0000
  8. 6.0000
  9. 1.0000
  10. 15.0000
  11. 34.0000
  12. 54.0000
  13. 32.0000
  14. 32.0000
  15. 34.0000
  16. 25.0000
  17. 8.0000
  18. 17.0000
  19. 38.0000
  20. 71.0000
  21. 102.0000
  22. 106.0000
  23. 93.0000
  24. 51.0000
  25. 27.0000
  26. 46.0000
  27. 102.0000
  28. 127.0000
  29. 127.0000
  30. 124.0000
  31. 130.0000
  32. 75.0000
  33. 43.0000
  34. 37.0000
  35. 103.0000
  36. 174.0000
  37. 156.0000
  38. 100.0000
  39. 74.0000
  40. 49.0000
  41. 28.0000
  42. 36.0000
  43. 83.0000
  44. 117.0000
  45. 149.0000
  46. 110.0000
  47. 98.0000
  48. 59.0000
  49. 32.0000
  50. 11.0000
  51. 28.0000
  52. 46.0000
  53. 69.0000
  54. 83.0000
  55. 124.0000
  56. 48.0000
  57. 65.0000
  58. 4.0000
  59. 9.0000
  60. 12.0000
  61. 40.0000
  62. 36.0000
  63. 54.0000
  64. 22.0000
  65. 21.0000
  66. Use conv2, c2 =
  67. 22
  68. 26
  69. 21
  70. 14
  71. 17
  72. 13
  73. 6
  74. 1
  75. 15
  76. 34
  77. 54
  78. 32
  79. 32
  80. 34
  81. 25
  82. 8
  83. 17
  84. 38
  85. 71
  86. 102
  87. 106
  88. 93
  89. 51
  90. 27
  91. 46
  92. 102
  93. 127
  94. 127
  95. 124
  96. 130
  97. 75
  98. 43
  99. 37
  100. 103
  101. 174
  102. 156
  103. 100
  104. 74
  105. 49
  106. 28
  107. 36
  108. 83
  109. 117
  110. 149
  111. 110
  112. 98
  113. 59
  114. 32
  115. 11
  116. 28
  117. 46
  118. 69
  119. 83
  120. 124
  121. 48
  122. 65
  123. 4
  124. 9
  125. 12
  126. 40
  127. 36
  128. 54
  129. 22
  130. 21
  131. </div>

发表评论

表情:
评论列表 (有 0 条评论,555人围观)

还没有评论,来说两句吧...

相关阅读