你已经派生过 gprMax
镜像自地址
https://gitee.com/sunhf/gprMax.git
已同步 2025-08-07 04:56:51 +08:00
Change HDF5 file attribute from 'dx,dy,dz' to 'dx_dy_dz'
这个提交包含在:
@@ -11,17 +11,17 @@ fullfilename = strcat(pathname, filename);
|
||||
if filename ~= 0
|
||||
header.title = h5readatt(fullfilename, '/', 'Title');
|
||||
header.iterations = double(h5readatt(fullfilename,'/', 'Iterations'));
|
||||
tmp = h5readatt(fullfilename, '/', 'dx, dy, dz');
|
||||
tmp = h5readatt(fullfilename, '/', 'dx_dy_dz');
|
||||
header.dx = tmp(1);
|
||||
header.dy = tmp(2);
|
||||
header.dz = tmp(3);
|
||||
header.dt = h5readatt(fullfilename, '/', 'dt');
|
||||
header.nsrc = h5readatt(fullfilename, '/', 'nsrc');
|
||||
header.nrx = h5readatt(fullfilename, '/', 'nrx');
|
||||
|
||||
|
||||
% Time vector for plotting
|
||||
time = linspace(0, (header.iterations)*(header.dt), header.iterations)';
|
||||
|
||||
|
||||
% Initialise structure for field arrays
|
||||
fields.ex = zeros(header.iterations, header.nrx);
|
||||
fields.ey = zeros(header.iterations, header.nrx);
|
||||
@@ -29,7 +29,7 @@ if filename ~= 0
|
||||
fields.hx = zeros(header.iterations, header.nrx);
|
||||
fields.hy = zeros(header.iterations, header.nrx);
|
||||
fields.hz = zeros(header.iterations, header.nrx);
|
||||
|
||||
|
||||
% Save and plot fields from each receiver
|
||||
for n=1:header.nrx
|
||||
path = strcat('/rxs/rx', num2str(n));
|
||||
@@ -44,7 +44,7 @@ if filename ~= 0
|
||||
fields.hx(:,n) = h5read(fullfilename, strcat(path, 'Hx'));
|
||||
fields.hy(:,n) = h5read(fullfilename, strcat(path, 'Hy'));
|
||||
fields.hz(:,n) = h5read(fullfilename, strcat(path, 'Hz'));
|
||||
|
||||
|
||||
fh1=figure('Name', strcat('rx', num2str(n)));
|
||||
ax(1) = subplot(3,2,1); plot(time, fields.ex(:,n), 'r', 'LineWidth', 2), grid on, xlabel('Time [s]'), ylabel('Field strength [V/m]'), title('E_x')
|
||||
ax(2) = subplot(3,2,3); plot(time, fields.ey(:,n), 'r', 'LineWidth', 2), grid on, xlabel('Time [s]'), ylabel('Field strength [V/m]'), title('E_y')
|
||||
@@ -53,7 +53,7 @@ if filename ~= 0
|
||||
ax(5) = subplot(3,2,4); plot(time, fields.hy(:,n), 'b', 'LineWidth', 2), grid on, xlabel('Time [s]'), ylabel('Field strength [A/m]'), title('H_y')
|
||||
ax(6) = subplot(3,2,6); plot(time, fields.hz(:,n), 'b', 'LineWidth', 2), grid on, xlabel('Time [s]'), ylabel('Field strength [A/m]'), title('H_z')
|
||||
set(ax,'FontSize', 16, 'xlim', [0 time(end)]);
|
||||
|
||||
|
||||
% Options to create a nice looking figure for display and printing
|
||||
set(fh1,'Color','white','Menubar','none');
|
||||
X = 60; % Paper size
|
||||
@@ -62,11 +62,11 @@ if filename ~= 0
|
||||
yMargin = 0; % Bottom/top margins from page borders
|
||||
xSize = X - 2*xMargin; % Figure size on paper (width & height)
|
||||
ySize = Y - 2*yMargin; % Figure size on paper (width & height)
|
||||
|
||||
|
||||
% Figure size displayed on screen
|
||||
set(fh1, 'Units','centimeters', 'Position', [0 0 xSize ySize])
|
||||
movegui(fh1, 'center')
|
||||
|
||||
|
||||
% Figure size printed on paper
|
||||
set(fh1,'PaperUnits', 'centimeters')
|
||||
set(fh1,'PaperSize', [X Y])
|
||||
|
@@ -72,7 +72,7 @@ def pixel_match(pixellist, pixeltest):
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
|
||||
# Parse command line arguments
|
||||
parser = argparse.ArgumentParser(description='Convert a PNG image to a HDF5 file that can be used to import geometry (#geometry_objects_read) into a 2D gprMax model. Colours from the image are selected which correspond to a list of materials that should be supplied in a separate text file.', usage='python convert_png2h5.py imagefile dx dy dz')
|
||||
parser.add_argument('imagefile', help='name of image file including path')
|
||||
@@ -82,7 +82,7 @@ if __name__ == "__main__":
|
||||
|
||||
# Open image file
|
||||
im = mpimg.imread(args.imagefile)
|
||||
|
||||
|
||||
# Store image data to use for creating geometry
|
||||
imdata = np.rot90(im, k=3) # Rotate 90CW
|
||||
imdata = np.floor(imdata * 255).astype(np.int16) # Convert pixel values from float (0-1) to integer (0-255)
|
||||
@@ -101,25 +101,25 @@ if __name__ == "__main__":
|
||||
plt.show()
|
||||
|
||||
# Format spatial resolution into tuple
|
||||
dxdydz = (args.dxdydz[0][0], args.dxdydz[0][1], args.dxdydz[0][2])
|
||||
|
||||
dx_dy_dz = (args.dxdydz[0][0], args.dxdydz[0][1], args.dxdydz[0][2])
|
||||
|
||||
# Filename for geometry (HDF5) file
|
||||
hdf5file = os.path.splitext(args.imagefile)[0] + '.h5'
|
||||
|
||||
|
||||
# Array to store geometry data (initialised as background, i.e. -1)
|
||||
data = np.ones((imdata.shape[0], imdata.shape[1], args.zcells), dtype=np.int16) * -1
|
||||
|
||||
# Write geometry (HDF5) file
|
||||
with h5py.File(hdf5file, 'w') as fout:
|
||||
|
||||
# Add attribute with name 'dx, dy, dz' for spatial resolution
|
||||
fout.attrs['dx, dy, dz'] = dxdydz
|
||||
# Add attribute with name 'dx_dy_dz' for spatial resolution
|
||||
fout.attrs['dx_dy_dz'] = dx_dy_dz
|
||||
|
||||
# Use a boolean mask to match selected pixel values with position in image
|
||||
for i, material in enumerate(materials):
|
||||
mask = np.all(imdata == material, axis=-1)
|
||||
data[mask,:] = i
|
||||
|
||||
|
||||
# Write data to file
|
||||
fout.create_dataset('data', data=data)
|
||||
|
||||
|
@@ -44,7 +44,7 @@ def calculate_antenna_params(filename, tltxnumber=1, tlrxnumber=None, rxnumber=N
|
||||
|
||||
# Open output file and read some attributes
|
||||
f = h5py.File(filename, 'r')
|
||||
dxdydz = f.attrs['dx, dy, dz']
|
||||
dxdydz = f.attrs['dx_dy_dz']
|
||||
dt = f.attrs['dt']
|
||||
iterations = f.attrs['Iterations']
|
||||
|
||||
|
在新工单中引用
屏蔽一个用户