用gprMax产生bp成像结果。源代码如下:
import sys
sys.path.append('D:/mygprmax/gprMax') # 把 gprMax 安装路径添加至系统,使 import 可以找到 gprMax 模块
import numpy as np
from tools.plot_Bscan import get_output_data, mpl_plot
import matplotlib.pyplot as plt
from numba import jit
filename_target = r"D:\soil_cylinder_merged.out"#获取有目标回波数据文件
rxnumber = 1
rxcomponent = 'Ez'
# 获取回波数据
outputdata_t, dt = get_output_data(filename_target, rxnumber, rxcomponent)
plt.imshow(outputdata_t,
extent=[0, outputdata_t.shape[1], outputdata_t.shape[0], 0],
interpolation='nearest',
aspect='auto', cmap='gray',
vmin=-np.amax(np.abs(outputdata_t)),
vmax=np.amax(np.abs(outputdata_t)))
plt.show()
filename_back = r"D:\soil_background_merged.out"#获取背景回波数据文件
rxnumber = 1
rxcomponent = 'Ez'
# 获取回波数据
outputdata_b, dt = get_output_data(filename_back, rxnumber, rxcomponent)
plt.imshow(outputdata_b, extent=[0, outputdata_b.shape[1], outputdata_b.shape[0], 0],
interpolation='nearest',
aspect='auto', cmap='gray',
vmin=-np.amax(np.abs(outputdata_b)),
vmax=np.amax(np.abs(outputdata_b)))
plt.show()
target_back = outputdata_t-outputdata_b#有目标的数据减去背景数据,去除直达波
plt.imshow(target_back, extent=[0, target_back.shape[1], target_back.shape[0], 0],
interpolation='nearest',
aspect='auto', cmap='gray',
vmin=-np.amax(np.abs(target_back)),
vmax=np.amax(np.abs(target_back)))
plt.show()
@jit(nopython=True)
def bp(outputdata, soil, timewindow, cell, exception):#BP 成像算法
'''
:param outputdata: B-scan 数据
:param soil: 探测区域介质相对介电常数
:param timewindow: 时窗:param cell: 单元格大小,一般是 dx
:param exception: 默认为 0
:return: BP 结果
'''
# time_rows -- 时间维采样点数 scans -- 扫描次数
time_rows, scans = outputdata.shape
# 时间维步进
dt = timewindow / time_rows
# 电磁波
c = 3e8
v = c / np.sqrt(soil)
# 实际探测区域的 x 长度 cell -- 天线步进,作为成像区域划分单位
domain_x = cell * scans
x_vec = np.arange(0, domain_x, cell)
# 根据时窗和波速算出 y 的实际长度
domain_y = cell * np.ceil(timewindow * v / 2 / cell)
y_vec = np.arange(0, domain_y, cell)
rows = y_vec.shape[0] # 成像区域行数
cols = x_vec.shape[0] # 成像区域列数
ans = np.zeros((rows, cols)) # 存储 bp 结果,空矩阵
for row in range(rows):
for col in range(cols):
ascan_curve = 0 # 存储当前单元格幅值和
for scan in range(scans):
d = 2 * np.sqrt(np.power((y_vec[row] - 0), 2) + np.power((x_vec[col] - x_vec[scan]), 2))
time = d / v # 双程传播时间
serie = time / dt + exception # 时间索引
fix = int(serie)
ceil = int(np.ceil(serie))
if serie < time_rows - 1 and serie > 0:
ascan_curve += outputdata[fix][scan] + outputdata[ceil][scan] - (serie - fix) * outputdata[fix][scan]
ans[row][col] = ascan_curve
return ans
target_back_bp = bp(target_back,80,5e-9,0.002,50)#对去除直达波的数据进行 BP 成像
plt.imshow(target_back_bp, extent=[0, target_back_bp.shape[1], target_back_bp.shape[0], 0],
interpolation='nearest',
aspect='auto', cmap='gray',
vmin=-np.amax(np.abs(target_back_bp)),
vmax=np.amax(np.abs(target_back_bp)))
plt.show()
在命令窗口运行,返回错误
重装numpy
出现冲突,尚未解决
抱着试一试的想法重新运行,于是出现了这种错误,找不到numpy包,又无法安装因为已存在
使用pip list查看
请问该如何解决?