GPR数据增强—添加噪声


前言

利用深度学习网络进行探地雷达(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图像
alt
去直达波后的GPR B-scan图像
请添加图片描述
加入噪声的GPR B-scan图像
请添加图片描述

总结

数据增强方法除了添加噪声之外,还有图像平移、裁剪、缩放等等,此外,更高级的方法可以利用生成对抗网络生成逼真的GPR图像,以此来达到扩充GPR数据集的目的。

gprMAX 中,可以通过设置模拟参数来控制是否考虑直达的影响。具体来说,可以设置 `rx_filter` 参数来选择接收端是否考虑直达和表面的影响。默认情况下,`rx_filter` 参数设置为 `none`,即不考虑直达和表面的影响。可以将 `rx_filter` 设置为 `gaussian` 或 `mean`,以考虑直达和表面的影响。具体来说: - 如果将 `rx_filter` 设置为 `gaussian`,则将使用高斯滤器滤除直达和表面的影响。可以使用 `rx_settings` 参数来设置高斯滤器的参数,例如高斯滤器的中心频率和带宽等。 - 如果将 `rx_filter` 设置为 `mean`,则将使用均值滤器滤除直达和表面的影响。可以使用 `rx_settings` 参数来设置均值滤器的参数,例如均值滤器的窗口大小等。 下面是一些示例代码,演示如何设置 `rx_filter` 和 `rx_settings` 参数来去除直达和表面的影响: ```matlab % 创建一个模拟对象 clear all close all clc mdl = gprMax; % 设置模拟参数 mdl = mdl.set('time_window', [0 100e-9]); % 设置时间窗口 mdl = mdl.set('dx', 0.01); % 设置空间分辨率 mdl = mdl.set('dy', 0.01); mdl = mdl.set('dz', 0.01); mdl = mdl.set('dt', 0.5e-12); % 设置时间分辨率 mdl = mdl.set('frequencies', 0:0.1e9:2.5e9); % 设置频率范围 mdl = mdl.set('rx', 'rx4'); % 设置接收端 mdl = mdl.set('rx_filter', 'gaussian'); % 设置接收端滤器 mdl = mdl.set('rx_settings', 'f_low', 0.1e9, 'f_high', 2.5e9, 'centre_freq', 1.25e9, 'bw', 0.1e9); % 设置高斯滤器参数 % 运行模拟 mdl.run(); % 显示 B-scan 图像 figure; mdl.sensor_data.plot2d_Bscan('rx4', 'all', 'amplitude'); ``` 在上面的代码中,将 `rx_filter` 设置为 `gaussian`,并使用 `rx_settings` 参数设置高斯滤器的参数。具体来说,将中心频率设置为 1.25 GHz,带宽设置为 0.1 GHz,频率范围设置为 0.1 GHz 到 2.5 GHz。这将滤除直达和表面的影响,生成的 B-scan 数据将不包含直达和表面的信息。 如果要使用均值滤器,可以将 `rx_filter` 设置为 `mean`,并使用 `rx_settings` 参数设置均值滤器的参数。具体用法与高斯滤器类似,这里不再赘述。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值