Files
LBPM/workflows/Morphological_Analysis/generate_morphological_configs.py
2016-11-01 15:57:27 -04:00

120 lines
4.3 KiB
Python

#!/usr/bin/env python
import numpy as np
import matplotlib.pylab as plt
from glob import glob
import sys
#from dist_func_utils import *
import scipy.stats as stats
import scipy.ndimage.morphology as morphology
import scipy.ndimage.measurements as measurements
from morphological_analysis_utils import *
# Check if there is a proper command line argument
#if len(sys.argv) !=2:
# sys.stderr.write('Usage: ' + sys.argv[0] + ' <Base name of the segmented image data>\n')
# sys.exit()
# end if
base_name = 'MicroModel' # Give the name of the input parameter file
#base_name = 'SignDist' # Give the name of the input parameter file
#base_name = sys.argv[1] # Give the name of the input parameter file
SegImage_format = '.raw'
# Load a group of segmented image data files with 'base_name' in the names of files
# e.g. 'Micromodel_1_segmented.raw' etc.
file_input_group = glob('*'+base_name+'*'+SegImage_format) # need to match the image data format
# Dimensions for segmented image
lz = 500
ly = 500
lx = 12
#lz = 200
#ly = 200
#lx = 200
R_critical = 4.5
# Process all imported experimental images
if not file_input_group:
print 'Error: Input files cannot be found ! '
else:
for ii in range(len(file_input_group)):
file_input_single = file_input_group[ii]
print "Analyzing segmented image data "+file_input_single+" now..."
# The imported data is a double-precision signed distance map
image_raw = np.fromfile(file_input_single,dtype=np.uint8)
#image_raw = np.fromfile(file_input_single,dtype=np.float64)
image_raw.shape=(lz,ly,lx)
edt_dist = morphology.distance_transform_edt(image_raw)
#edt_dist = edt_dist[:,:,5]
# wrap the medium with one layer of solid phase
#image_raw = np.lib.pad(image_raw,((0,0),(1,1),(1,1)),'constant',constant_values=0.0)
drain_config,Sw_drain = generate_morph_drain_config(edt_dist,R_critical)
imbib_config,Sw_imbib = generate_morph_imbib_config(edt_dist,R_critical)
#drain_config,Sw_drain = generate_morph_drain_config(image_raw,R_critical)
#imbib_config,Sw_imbib = generate_morph_imbib_config(image_raw,R_critical)
#Sw_drain = generate_morph_drain_curv_3D(image_raw,R_critical)
#imbib_config,Sw_imbib = generate_morph_imbib_config2_3D(image_raw,R_critical)
#Sw_imbib = generate_morph_imbib_curv2_3D(image_raw,R_critical)
print 'Rcrit: '+str(R_critical)+', Drain_Sw = '+str(Sw_drain)
print 'Rcrit: '+str(R_critical)+', Imbib_Sw = '+str(Sw_imbib)
# Save the configuration files
# drain_config.tofile('Drain_config_Rcrit_'+str(R_critical)+'.raw')
# imbib_config.tofile('Imbib_config_Rcrit_'+str(R_critical)+'.raw')
# Load the saved data
# drain_config = np.fromfile('Drain_config_Rcrit_'+str(R_critical)+'.raw',dtype=np.uint8)
# imbib_config = np.fromfile('Imbib_config_Rcrit_'+str(R_critical)+'.raw',dtype=np.uint8)
# drain_config.shape = (lz,ly,lx)
# imbib_config.shape = (lz,ly,lx)
plt.figure(1)
plt.subplot(1,2,1)
plt.title('Drainage: Rcrit='+str(R_critical)+' Sw='+str(Sw_drain))
plt.pcolormesh(drain_config[:,:,lx/2],cmap='hot')
#plt.pcolormesh(drain_config[20,:,:],cmap='hot')
plt.axis('equal')
plt.grid(True)
plt.subplot(1,2,2)
plt.title('Imbibition: Rcrit='+str(R_critical)+' Sw='+str(Sw_imbib))
plt.pcolormesh(imbib_config[:,:,lx/2],cmap='hot')
#plt.pcolormesh(imbib_config[20,:,:],cmap='hot')
plt.axis('equal')
plt.grid(True)
# plt.figure(1)
# plt.subplot(1,2,1)
# plt.title('Drainage: Rcrit='+str(R_critical)+' Sw='+str(Sw_drain))
# plt.pcolormesh(drain_config,cmap='hot')
# plt.axis('equal')
# plt.grid(True)
#
# plt.subplot(1,2,2)
# plt.title('Imbibition: Rcrit='+str(R_critical)+' Sw='+str(Sw_imbib))
# plt.pcolormesh(imbib_config,cmap='hot')
# plt.axis('equal')
# plt.grid(True)
plt.figure(2)
plt.plot(Sw_drain,1.0/R_critical,'ro',markersize=6,label='Drainage')
plt.plot(Sw_imbib,1.0/R_critical,'b^',markersize=6,label='Imbibition')
plt.legend(loc='best')
plt.grid(True)
plt.xlim([0,1.0])
plt.ylim([0,2.0])
plt.show()
#end if
#end for