题型:3道编程题
题目1:
图像的卷积是图像处理的最常用的方法,当前神经网络中的卷积神经网络当中也用到了卷积的操作来提取特征。卷积一般包含以下几个概念:.
1.输入:一个m*n大小的矩阵,是一个二维数组,是图像的数据信息:例如
2 | 3 | 7 | 4 | 6 | 2 | 9 |
6 | 6 | 9 | 8 | 7 | 4 | 3 |
3 | 4 | 8 | 3 | 8 | 9 | 7 |
7 | 8 | 3 | 6 | 6 | 3 | 4 |
4 | 2 | 1 | 8 | 3 | 4 | 6 |
3 | 2 | 4 | 1 | 9 | 8 | 3 |
0 | 1 | 3 | 9 | 2 | 1 | 4 |
记作二维数组I.
2.卷积核:一个k*l大小的矩阵,是一个二维数组,k,I为奇数,保证卷积核有一个中心,例如:
3 | 4 | 4 |
1 | 0 | 2 |
-1 | 0 | 3 |
记作二维数组K,该卷积核的中心就是K[1][1].
(如果K的大小为3*5,则中心为K[1][2])
3.卷积操作:将卷积核的中心对准输入的某个元素,两个矩阵会有重合区域,将两个矩阵的重合区域中的对应重合元素相乘后求和,得到的结果就是输出中对应元素的数据。将卷积核分别从左往右、从上往下进行滑动,重复对重合中的元素进行相乘后求和,就能够完成对整个图像的卷积操作了。例如:
上面的卷积核K的中心对准输入I[0][0],重合部分就有4个元素,卷积结果就是K[1][1]*I[0][0] +K[1][2] * I[0][1] + K[2][1] *1[1][0] + K[2][2]*I[1][1]。
上面的卷积核K的中心对准输入I[2][3],重合部分就有9个元素,卷积结果就是K[0][0]*I[1][2] + K[0][1]*1[1][3] + K[0][2]*I[1][4] + K[1][0]*1[2][2] + K[1][1]*I[2][3]+ K[1][2]*1[2][4] + K[2][0]*1[3][2] + K[2][1]*][3][3] + K[2][2]*I[2][4]
4.输出:将卷积核滑动过程中的卷积结果按照顺序放入一个二维数组中,即图像卷积的输出。
5.滑动步长:卷积核滑动的距离,即卷积核每次滑动经过的元素个数,如果为2即每次滑动跳过一个元素,今天我们仅考虑步长为1的情况,即卷积核会经过每个输入的元素,这样输出数组的大小是跟输入数组的大小是一样的。现在让我们来编程完成一些具体操作吧,并且这次操作有一些特殊的要求,当输出中的元素小于0时要变更为0,当输出中的元素大于255时要变更为255。
输入描述:
第一行输入4个数字M、N、K、L。M、N表示输入数组的大小,K、L表示卷积核的大小。M,N,K,L皆不大于256
之后M行表示输入每行的数据,每行有N个数字。
再之后K行表示卷积核的每行的数据,每行有L个数字。如:
5 6 3 3
1 1 1 1 1 1
1 2 2 2 2 1
2 3 3 1 2 2
1 2 2 3 4 5
5 6 6 6 3 4
1 10 1
1 20 1
1 8 1
输出描述
输出M行数据,每行N个数字,表示卷积后的数据结果如:
31 41 42 42 41 31
52 84 84 69 74 51
65 107 109 79 106 98
91 137 139 138 145 161
110 154 157 165 110 127
示例1
7 7 3 3
2 3 7 4 6 2 9
6 6 9 8 7 4 3
3 4 8 3 8 9 7
7 8 3 6 6 3 4
4 2 1 8 3 4 6
3 2 4 1 9 8 3
0 1 3 9 2 1 4
4 8 4
8 16 8
-4 8 -4
输出
80 108184 168 152 144 168
180 2