如何在Python中为np.array格式图像添加反射(镜像)填充?
实现二维数组的镜像填充(适配卷积输出与输入形状一致)
要实现镜像填充并保证卷积后输出和输入(7,7)形状一致,核心是用numpy.pad()函数的reflect模式,该模式会以图像边缘为轴镜像填充像素,自然覆盖所有角落。
步骤说明
- 确定填充宽度:假设使用k×k的卷积核,需要的填充宽度为
pad = (k-1) // 2。比如常用的3×3卷积核,pad=1,填充后图像变为9×9,卷积后刚好回到7×7。 - 使用
np.pad()执行镜像填充,指定mode='reflect'。
示例代码
import numpy as np # 原始7×7图像数组 img = np.array([[1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14], [15, 16, 17, 18, 19, 20, 21], [22, 23, 24, 25, 26, 27, 28], [29, 30, 31, 32, 33, 34, 35], [36, 37, 37, 39, 40, 41, 42], [43, 44, 45, 46, 47, 48, 49]], dtype=np.uint8) # 假设用3×3卷积核,计算填充宽度 kernel_size = 3 pad = (kernel_size - 1) // 2 # 执行镜像填充,上下左右各填充pad个像素 padded_img = np.pad(img, pad_width=((pad, pad), (pad, pad)), mode='reflect') # 查看填充后的形状(应为9×9) print("填充后形状:", padded_img.shape) # 查看填充后的数组(可直观看到角落的镜像效果) print(padded_img)
关键参数解释
pad_width=((pad,pad), (pad,pad)):指定二维数组的填充维度,第一个元组对应上下方向的填充数量,第二个对应左右方向,每个子元组的两个值分别是首尾的填充数(这里首尾均填充pad个像素)。mode='reflect':填充模式为镜像反射,以图像边缘为对称轴生成填充像素,比如原数组边缘的1,左侧会填充2;边缘的7,右侧会填充6,角落像素则同时在行、列方向完成镜像填充。
内容的提问来源于stack exchange,提问作者sermomon
相关产品推荐
相关产品推荐

