前言
利用深度学习网络进行探地雷达(GPR)图像检测、识别等任务需要大量GPR训练数据集,然而实测GPR数据集的获取比较耗时,且成本大,利用一些数据增强方法对雷达数据集进行扩充很有必要。本文主要介绍添加噪声的方法来扩充雷达数据集。
一、去直达波
探地雷达数据一般存在较强的直达波,在添加噪声之前需要先去掉图像中的直达波,常用的去直达波方法为均值法,实现比较简单,就是用图像中的每个像素值减去该像素值所在行的均值。
代码如下:
# 去直达波
def mean_gpr(x): #传入的x为具有直达波的图像矩阵
for i in range(x.shape[0]):
mean_i = np.mean(x[i])
for j in range(x.shape[1]):
x[i][j] = x[i][j] - mean_i
return x
二、添加噪声
对去直达波后的图像进行加噪处理
代码如下:
def Add_noise(x,snr):#传入的是图像矩阵x和信噪比snr(dB)
'''snr(db) = 10log10(ps/pn)'''
snr = 10 ** (snr / 10.0)#第一个snr指的倍率
xpower = np.sum(x ** 2) / np.size(x)
npower = xpower / snr
noise = np.random.randn(x.shape[0], x.shape[1]) * np.sqrt(npower)
x_noise = x + noise
return x_noise
三、处理结果
if __name__ == '__main__':
rect_all = []
file = 'GPR_B-scan.txt'
x_raw = np.loadtxt(file)#具有直达波的图像矩阵
plt.imshow(x_raw, aspect='auto',cmap='gray')
plt.show()
x_s = mean_gpr(x_raw) # 去直达波
plt.imshow(x_s, aspect='auto', cmap='gray')
plt.show()
x_noise = Add_noise(x_s,-5)#加噪声,构成信噪比为-5db
plt.imshow(x_noise, aspect='auto', cmap='gray')
plt.show()
#PS:最好是把图像的背景值转换到0附近再做加噪处理
具有直达波的GPR B-scan图像
去直达波后的GPR B-scan图像
加入噪声的GPR B-scan图像
总结
数据增强方法除了添加噪声之外,还有图像平移、裁剪、缩放等等,此外,更高级的方法可以利用生成对抗网络生成逼真的GPR图像,以此来达到扩充GPR数据集的目的。