深度学习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];
a
0 = a; b
0 = 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
</div>
还没有评论,来说两句吧...