写一段代码实现3*3卷积提取特征图
时间: 2024-02-19 13:33:18 浏览: 60
以下是一个示例代码,用于实现3*3卷积提取特征图。
```
import numpy as np
def convolution(image, kernel):
# 获取图像和卷积核的尺寸
image_height, image_width = image.shape
kernel_height, kernel_width = kernel.shape
# 计算输出特征图的尺寸,并初始化一个全0的特征图
output_height = image_height - kernel_height + 1
output_width = image_width - kernel_width + 1
output = np.zeros((output_height, output_width))
# 进行卷积操作
for i in range(output_height):
for j in range(output_width):
# 切片获取图像中当前卷积窗口的像素值
window = image[i:i+kernel_height, j:j+kernel_width]
# 将窗口中的像素值与卷积核进行点乘运算,并将结果累加到输出特征图中
output[i][j] = np.sum(window * kernel)
return output
```
使用该函数可以对输入图像进行3*3卷积操作,提取出特征图。以下是一个示例:
```
# 定义一个3*3的卷积核
kernel = np.array([
[1, 0, -1],
[1, 0, -1],
[1, 0, -1]
])
# 定义一个输入图像
image = np.array([
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
])
# 对输入图像进行卷积操作,提取特征图
feature_map = convolution(image, kernel)
# 输出特征图
print(feature_map)
```
输出结果为:
```
[[-6. -6. -6.]
[-6. -6. -6.]
[-6. -6. -6.]]
```
可以看到,该函数成功地对输入图像进行了3*3卷积操作,并提取出了一个3*3的特征图。
阅读全文