|
|
|
|
Homework 2 |
In this part of the assignment, we will use a digital elevation map of the Mount St. Helens area, shown in Figure 3.
|
data
Figure 3. Digital elevation map of Mount St. Helens area. |
|
|---|---|
|
|
Figure 4 shows a directional derivative, a digital approximation to
|
der
Figure 4. Directional derivative of elevation. |
|
|---|---|
|
|
Figure 5 shows an application of helical
derivative, a filter designed by spectral factorization of the
Laplacian filter
|
helder
Figure 5. Helix derivative of elevation. |
|
|---|---|
|
|
scons viewto reproduce the figures on your screen.
scons der.view
from rsf.proj import *
import math
# Download data
txt = 'st-helens_after.txt'
Fetch(txt,'data',
server='https://raw.githubusercontent.com',
top='agile-geoscience/notebooks/master')
Flow('data.asc',txt,'/usr/bin/tail -n +6')
# Convert to RSF format
Flow('data','data.asc',
'''
echo in=$SOURCE data_format=ascii_float
label=Elevation unit=m
n1=979 o1=557.805 d1=0.010030675 label1=X
n2=1400 o2=5107.965 d2=0.010035740 label2=Y |
dd form=native |
clip2 lower=0 | lapfill grad=y niter=200
''')
Result('data','grey title="Digital Elevation Map" allpos=y')
# Vertical and horizontal derivatives
Flow('der1','data','igrad')
Flow('der2','data','transp | igrad | transp')
ders = []
for alpha in range(0,360,15):
der = 'der%d' % alpha
# Directional derivative
Flow(der,'der1 der2',
'''
add ${SOURCES[1]} scale=%g,%g
''' % (math.cos(alpha*math.pi/180),
math.sin(alpha*math.pi/180)))
ders.append(der)
Flow('ders',ders,
'''
cat axis=3 ${SOURCES[1:%d]} |
put o3=0 d3=15
''' % len(ders))
Plot('ders','grey gainpanel=all wanttitle=n',view=1)
# !!! MODIFY BELOW !!!
alpha=45
Result('der','der%d' % alpha,
'''
grey title="Directional Derivative at %gô_"
''' % alpha)
# Laplacian filter on a helix (!!! MODIFY !!!)
Flow('slag0.asc',None,
'''echo 1 1000 n1=2 n=1000,1000
data_format=ascii_int in=$TARGET
''')
Flow('slag','slag0.asc','dd form=native')
Flow('ss0.asc','slag',
'''echo -1 -1 a0=2 n1=2
lag=$SOURCE in=$TARGET data_format=ascii_float''')
Flow('ss','ss0.asc','dd form=native')
# Wilson-Burg factorization
na=50 # filter length
lags = list(range(1,na+1)) + list(range(1002-na,1002))
Flow('alag0.asc',None,
'''echo %s n=1000,1000 n1=%d in=$TARGET
data_format=ascii_int
''' % (' '.join([str(x) for x in lags]),2*na))
Flow('alag','alag0.asc','dd form=native')
Flow('hflt hlag','ss alag',
'wilson lagin=${SOURCES[1]} lagout=${TARGETS[1]}')
# Helical derivative
Flow('helder','data hflt hlag','helicon filt=${SOURCES[1]}')
Result('helder','grey mean=y title="Helical Derivative" ')
def plotfilt(title):
return '''
window n1=11 n2=11 f1=50 f2=50 |
grey wantaxis=n title="%s" pclip=100
crowd=0.85 screenratio=1
''' % title
# Laplacian impulse response
Flow('spike',None,'spike n1=111 n2=111 k1=56 k2=56')
Flow('imp0','spike ss','helicon filt=${SOURCES[1]} adj=0')
Flow('imp1','spike ss','helicon filt=${SOURCES[1]} adj=1')
Flow('imp','imp0 imp1','add ${SOURCES[1]}')
Plot('imp',plotfilt('(a) Laplacian'))
# Test factorization
Flow('fac0','imp hflt',
'helicon filt=${SOURCES[1]} adj=0 div=1')
Flow('fac1','imp hflt',
'helicon filt=${SOURCES[1]} adj=1 div=1')
Plot('fac0',plotfilt('(b) Laplacian/Factor'))
Plot('fac1',plotfilt('(c) Laplacian/Factor'))
Flow('fac','fac0 hflt',
'helicon filt=${SOURCES[1]} adj=1 div=1')
Plot('fac',plotfilt('(d) Laplacian/Factor/Factor'))
Result('laplace','imp fac0 fac1 fac','TwoRows',
vppen='gridsize=5,5 xsize=11 ysize=11')
End()
|
|
|
|
|
Homework 2 |