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

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

来自:时间的诗

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

利用fft2和conv2做卷积
clc; clear all;
%% 利用fft2计算二维卷积
% 利用fft2函数可以计算二维卷积,如:
a=[2 2 1;1 2 3;1 1 1];  
b=[11 2 3 3 4 1;2 3 3 4 1 5; ...
    2 7 12 22 11 11;21 22 11 3 4 5; ...
    7 8 6 2 1 2;4 5 3 32 1 21];
a0 = a; b0 = b;
[ma, na] = size(a); % a的维数
[mb, nb] = size(b); % b的维数
a(ma*mb-1, na*nb-1) = 0; % 扩展a
b(ma*mb-1, na*nb-1) = 0; % 扩展b
c=ifft2(fft2(a).*fft2(b)); % 用fft2和ifft2
c1=c(1:ma+mb-1,1:na+nb-1); % 提取
%% 利用conv2(二维卷积函数)校验, 如:
a=a0; b = b0;
c2=conv2(a,b); % 用conv2
fprintf('\nUse fft2, c1 = \n'); disp(c1);
fprintf('\nUse conv2, c2 = \n'); disp(c2);
% 经验证发现是一样的,所以说求卷积可以使用傅立叶变换后点乘,
% 然后在逆傅立叶变换回去则可
计算结果
Use fft2, c1 = 
   22.0000   26.0000   21.0000   14.0000   17.0000   13.0000    6.0000    1.0000
   15.0000   34.0000   54.0000   32.0000   32.0000   34.0000   25.0000    8.0000
   17.0000   38.0000   71.0000  102.0000  106.0000   93.0000   51.0000   27.0000
   46.0000  102.0000  127.0000  127.0000  124.0000  130.0000   75.0000   43.0000
   37.0000  103.0000  174.0000  156.0000  100.0000   74.0000   49.0000   28.0000
   36.0000   83.0000  117.0000  149.0000  110.0000   98.0000   59.0000   32.0000
   11.0000   28.0000   46.0000   69.0000   83.0000  124.0000   48.0000   65.0000
    4.0000    9.0000   12.0000   40.0000   36.0000   54.0000   22.0000   21.0000

Use conv2, c2 = 
    22    26    21    14    17    13     6     1
    15    34    54    32    32    34    25     8
    17    38    71   102   106    93    51    27
    46   102   127   127   124   130    75    43
    37   103   174   156   100    74    49    28
    36    83   117   149   110    98    59    32
    11    28    46    69    83   124    48    65
     4     9    12    40    36    54    22    21

你可能感兴趣的:(matlab,卷积运算)