Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Updated hill shade algorithm for testing
  • Loading branch information
daminton committed Apr 24, 2020
1 parent 8368127 commit 4b4c220
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 75 deletions.
6 changes: 3 additions & 3 deletions examples/mare-with-rays-model2/ctem.in
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ numintervals 300 ! Total number of intervals
restart F ! Restart a previous run
impfile eta-3.2.dat ! Impactor SFD rate file (col 1: Dimp (m), col 2: ! impactors > D (m**(-2) y**(-1))
popupconsole F ! Pop up console window every output interval
saveshaded F ! Output shaded relief images
saveshaded T ! Output shaded relief images
saverego F ! Output regolith map images
savepres F ! Output simplified console display images (presentation-compatible images)
savetruelist F ! Save the true cumulative crater distribution for each interval (large file size)
sfdcompare Robbins2014-A15-FassettCounts-binned.dat ! File name for the SFD comparison file used in the console display
shadedminh -85.0 ! Minimum height for shaded relief map (m) (Default - automatic)
shadedmaxh 85.0 ! Maximum height for shaded relief map (m) (Default - automatic)
shadedminh -60.0 ! Minimum height for shaded relief map (m) (Default - automatic)
shadedmaxh 10.0 ! Maximum height for shaded relief map (m) (Default - automatic)
runtype single ! Run type: options are normal / statistical
! single: craters accumulate in successive intervals
! statistical: surface is reset between intervals
Expand Down
136 changes: 64 additions & 72 deletions examples/mare-with-rays-model2/ctem_io_writers.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
import shutil
import scipy
from scipy import signal
from matplotlib.colors import LightSource
import matplotlib.cm as cm

#Set pixel scaling common for image writing, at 1 pixel/ array element
dpi = 72.0
Expand Down Expand Up @@ -79,27 +81,31 @@ def copy_dists(parameters):
#Possible references
#http://nbviewer.jupyter.org/github/ThomasLecocq/geophysique.be/blob/master/2014-02-25%20Shaded%20Relief%20Map%20in%20Python.ipynb

def image_dem(parameters, surface_dem):

#Create surface dem map
solar_angle = 20.0
dem_map = numpy.copy(surface_dem) - numpy.roll(surface_dem, 1, 0)
dem_map = (0.5 * numpy.pi) + numpy.arctan2(dem_map, parameters['pix'])
dem_map = dem_map - numpy.radians(solar_angle) * (0.5 * numpy.pi)
numpy.place(dem_map, dem_map > (0.5 * numpy.pi), 0.5 *numpy.pi)
dem_map = numpy.absolute(dem_map)
dem_map = 254.0 * numpy.cos(dem_map)

#Save image to file
def image_dem(parameters, DEM):
dpi = 300.0 # 72.0
pix = parameters['pix']
gridsize = parameters['gridsize']
ve = 1.0
azimuth = 300.0 #parameters['azimuth']
solar_angle = 20.0 #parameters['solar_angle']

ls = LightSource(azdeg=azimuth, altdeg=solar_angle)

dem_img = ls.hillshade(DEM, vert_exag=ve, dx=pix, dy=pix)

# Generate image to put into an array
height = gridsize / dpi
width = gridsize / dpi
fig = matplotlib.pyplot.figure(figsize=(width, height), dpi=dpi)
ax = matplotlib.pyplot.axes([0, 0, 1, 1])
ax.imshow(dem_img, interpolation="nearest", cmap='gray')
matplotlib.pyplot.axis('off')
# Save image to file
filename = parameters['workingdir'] + 'surf' + os.sep + "surf%06d.png" % parameters['ncount']
height = parameters['gridsize'] / dpi
width = height
fig = matplotlib.pyplot.figure(figsize = (width, height), dpi = dpi)
fig.figimage(dem_map, cmap = matplotlib.cm.gray, origin = 'lower')
matplotlib.pyplot.savefig(filename)
matplotlib.pyplot.savefig(filename,dpi=dpi,bbox_inches=0)

return

return

def image_regolith(parameters, regolith):

#Create scaled regolith image
Expand All @@ -122,67 +128,53 @@ def image_regolith(parameters, regolith):

return

def image_shaded_relief(parameters, surface_dem):
#The color scale and appearance of this do not quite match the IDL version
def image_shaded_relief(parameters, DEM):
dpi = 300.0 #72.0
pix = parameters['pix']
gridsize = parameters['gridsize']
ve = 1.0
mode = 'overlay'
azimuth = 300.0 #parameters['azimuth']
solar_angle = 20.0 #parameters['solar_angle']

#Create image by convolving DEM with 3x3 illumination matrix
light = numpy.array([[1.0, 1.0, 1.0], [0.0, 0.0, 0.0], [-1.0, -1.0, -1.0]])
convolved_map = scipy.signal.convolve2d(surface_dem, light, mode = 'same')

#Adjust output to resemble IDL (north slopes illuminated, south in shadow)
convolved_map = convolved_map * -1.0
convolved_map[0,:]=0.0
convolved_map[-1,:] =0.0
convolved_map[:,0]=0.0
convolved_map[:,-1]=0.0

#If no shadedmin/max parameters are read in from ctem.dat, determine the values from the data
if (parameters['shadedminhdefault'] == 1): shadedminh = numpy.amin(surface_dem)
if (parameters['shadedmaxhdefault'] == 1): shadedmaxh = numpy.amax(surface_dem)
ls = LightSource(azdeg=azimuth, altdeg=solar_angle)
cmap = cm.cividis

#If min and max appear to be reversed, then fix them
# If min and max appear to be reversed, then fix them
if (parameters['shadedminh'] > parameters['shadedmaxh']):
temp = parameters['shadedminh']
shadedminh = parameters['shadedmaxh']
shadedmaxh = temp
parameters['shadedminh'] = parameters['shadedmaxh']
parameters['shadedmaxh'] = temp
else:
parameters['shadedminh'] = parameters['shadedminh']
parameters['shadedmaxh'] = parameters['shadedmaxh']

# If no shadedmin/max parameters are read in from ctem.dat, determine the values from the data
if (parameters['shadedminhdefault'] == 1):
shadedminh = numpy.amin(DEM)
else:
shadedminh = parameters['shadedminh']
shadedmaxh = parameters['shadedmaxh']

#If dynamic range is valid, construct a shaded DEM
dynamic_range = shadedmaxh - shadedminh
if (dynamic_range != 0):
dem_scaled = numpy.copy(surface_dem) - shadedminh
numpy.place(dem_scaled, dem_scaled < 0.0, 0.0)
numpy.place(dem_scaled, dem_scaled > dynamic_range, dynamic_range)
dem_scaled = dem_scaled / dynamic_range
if (parameters['shadedmaxhdefault'] == 1):
shadedmaxh = numpy.amax(DEM)
else:
dem_scaled = numpy.copy(surface_dem) * 0.0

#Generate shaded depth map with surface_dem color scaling (RGBA)
shaded = scipy.misc.bytescale(convolved_map)
if numpy.amax(shaded) == 0: shaded=255
shadedscl = shaded / 255.0

#shaded_imagearr = matplotlib.cm.jet(dem_scaled)
#print dem_scaled[0:4,0:4]
#shaded_imagearr[:,:,0] = shaded_imagearr[:,:,0] * shadedscl
#shaded_imagearr[:,:,1] = shaded_imagearr[:,:,1] * shadedscl
#shaded_imagearr[:,:,2] = shaded_imagearr[:,:,2] * shadedscl
#shaded_imagearr[:,:,3] = shaded_imagearr[:,:,3] * shadedscl

#Delivers nearly proper coloring, but no shaded relief
shaded_imagearr = dem_scaled * shadedscl
shaded_imagearr = matplotlib.cm.jet(shaded_imagearr)
shaded_imagearr = numpy.around(shaded_imagearr, decimals = 1)

#Save image to file
shadedmaxh = parameters['shadedmaxh']



dem_img = ls.shade(DEM, cmap=cmap,blend_mode=mode,
vert_exag=ve, dx=pix, dy=pix,
vmin=shadedminh, vmax=shadedmaxh)

#Generate image to put into an array
height = gridsize / dpi
width = gridsize / dpi
fig = matplotlib.pyplot.figure(figsize=(width, height), dpi=dpi)
ax = matplotlib.pyplot.axes([0, 0, 1, 1])
ax.imshow(dem_img,interpolation="nearest")
matplotlib.pyplot.axis('off')
# Save image to file
filename = parameters['workingdir'] + 'shaded' + os.sep + "shaded%06d.png" % parameters['ncount']
height = parameters['gridsize'] / dpi
width = height
fig = matplotlib.pyplot.figure(figsize = (width, height), dpi = dpi)
fig.figimage(shaded_imagearr, cmap = matplotlib.cm.jet, origin = 'lower')
matplotlib.pyplot.savefig(filename)
matplotlib.pyplot.savefig(filename,dpi=dpi,bbox_inches=0)
return

def create_rplot(parameters,odist,pdist,tdist,ph1):
Expand Down

0 comments on commit 4b4c220

Please sign in to comment.