15 print(f
"Reading {input_file}...")
17 sdf_3d, origin, spacing = pnm.SDFReader.read_vti(input_file)
21 print(f
"Grid Shape (Nz, Ny, Nx): {shape}")
23 print(
"Running Segmentation...")
24 seg_3d = pnm.segment_volume(sdf_3d, spacing)
27 unique_labels = np.unique(seg_3d)
28 pores = unique_labels[unique_labels > 0]
29 solids = unique_labels[unique_labels < 0]
31 print(f
"Total Labels: {len(unique_labels)}")
32 print(f
"Pore IDs: {len(pores)}")
33 print(f
"Solid IDs: {len(solids)}")
36 print(f
"Saving segmented volume to {output_file}...")
38 fields={
"Labels": seg_3d,
"SDF": sdf_3d},
42 print(
"Extracting Topology...")
43 connections = pnm.extract_topology(seg_3d)
44 print(f
"Found {len(connections)} connections "
45 f
"({int(((connections[:, 0] > 0) & (connections[:, 1] > 0)).sum())} pore-pore).")
47 with open(edge_file,
"w")
as f:
48 for u, v
in connections:
50 print(f
"Saved {edge_file}")