IMCORR
IMCORR
IMCORR
=
..
-
-.:.. __ ..... _ ..
---
-
-
I
" .
..,?i
I
\
'r'
I
-,
,
1.
-
-----
------ - -
Fi",,. 1.22. T ... wrten> I""giwdinal ,'.Iocj,y "",me ....".ina !'qIll .. from appU" .. ion of
COSI-COIT frequen,iol and corrtWon Lo ASTER band 3:0< imasn and
apphcOlioo of I).lCORR 10 Is<' m .....
77
one notable spike in the statistical correlator's curve from 137 m/yr to 50 m/yr at the 250
pixel mark. Beyond this region, beginning 300 pixels east of the toe, IMCORR' s and
COSI-Corr' s results diverge considerably. While IMCORR' s results continue to show
increasing velocities upglacier, proceeding to speeds of 200 m/yr and greater, COSI-
Corr' s two correlator engines produce considerably slower velocities. The statistical
correlator produces speeds ranging from 125-150 m/yr down to 50 m/yr and lower,
fluctuating erratically within this range. The frequential correlator produced the slowest
speeds, ranging from 70 m/yr to 37 m/yr, with the least fluctuations in velocity. The
erratic fluctuations in velocity produced by the correlation routines, particularly
IMCORR and COSI-Corr' s statistical correlator, suggest that the programs cannot
consistently find matching pixel patterns within the same distance from one location to
the next using the ASTER images. This is a hint that the pixel patterns between the 2003
and 2005 images have changed sufficiently to make correlation between them unreliable.
Similar trends are found in Figure 3.23, which displays COSI-Corr' s and
IMCORR' s results when applied to edge maps. The three correlator engines are most in
agreement in the western third of the profile, with typically no more than 25 m/yr
separating the three. At the 300 pixel mark, the frequential correlator diverges from the
other two. As before, the frequential correlator produces lower speeds and is more
consistent in magnitude, although the velocities it produces still fluctuate unrealistically
between 130 to 50 m/yr, with most points hovering around 100 m/yr. The statistical
correlator is more erratic than the frequential, producing speeds that range from 200 m/yr
to 12 m/yr and showing several dramatic spikes in which velocity doubles or triples
suddenly. Overall, the edge maps produced the most erratic velocity results and the most
77
one notable spike in the statistical correlator's curve from 137 mlyr to 50 mlyr at the 250
pixel mark. Beyond this region, beginning 300 pixels east of the toe, IMCORR's and
COSI-Corr's results diverge considerably. While IMCORR's results continue to show
increasing velocities upglacier, proceeding to speeds of200 mlyr and greater, COSI-
Corr's two correlator engines produce considerably slower velocities. The statistical
correlator produces speeds ranging from 125-150 m/yr down to 50 mlyr and lower,
fluctuating erratically within this range. The frequential correlator produced the slowest
speeds, ranging from 70 mlyr to 37 mlyr, with the least fluctuations in velocity. The
erratic fluctuations in velocity produced by the correlation routines, particularly
IMCORR and COSI-Corr's statistical correlator, suggest that the programs cannot
consistently find matching pixel patterns within the same distance from one location to
the next using the ASTER images. This is a hint that the pixel patterns between the 2003
and 2005 images have changed sufficiently to make correlation between them unreliable.
Similar trends are found in Figure 3.23, which displays COSI-Corr's and
IMCORR's results when applied to edge maps. The three correlator engines are most in
agreement in the western third of the profile, with typically no more than 25 mlyr
separating the three. At the 300 pixel mark, the frequential correlator diverges from the
other two. As before, the frequential correlator produces lower speeds and is more
consistent in magnitude, although the velocities it produces still fluctuate unrealistically
between 130 to 50 mlyr, with most points hovering around 100 mlyr. The statistical
correlator is more erratic than the frequential, producing speeds that range from 200 mlyr
to 12 mlyr and showing several dramatic spikes in which velocity doubles or triples
suddenly. Overall, the edge maps produced the most erratic velocity results and the most
78
, , | , , , | , , , | , , i r
_ COSI-Corr freqential correlator, edge maps
_ COSI Corr statistical correlator, edge maps
- IMCORR edge maps
Tustumena Longitudinal Velocity Profile
250
200 -
E,
i" 150
o
I
100
50
. r
f
J
_. L
r
1
f
100 200 300 400 500 600 700
Distance from west to east (pixels)
800 900
Figure 3.23. Tustumena longitudinal velocity profile showing results from application of
COSI-Corr frequential and statistical correlators and IMCORR to edge maps.
dramatic fluctuations in speed regardless of which correlation routine was used.
Application of COSI-Corr' s frequential correlator to ASTER band 3N images produced
the least erratic results, although even these results show unrealistic velocity
discontinuities.
The results of COSI-Corr' s frequential correlator when applied to the edge maps
and ASTER band 3N, along with IMCORR' s results, are shown in Figure 3.24. As
before, the velocities are most in agreement nearest the glacier toe. Beginning at 300
pixels up from the toe, the results derived from the three correlation routines diverge.
Beyond this point, IMCORR continually produces the highest velocities, often exceeding
200 m/yr. COSI-Corr' s results derived from edge maps consistently produce the next
highest velocities, ranging between 50 and 125 m/yr, with most results hovering around
-
I
-
f"
.... _---
"'*-----
---
"
"
-
. ,
,
... -: .... .:: .. --:-. ....
fiil'''' l .2l. T."wnrn:o , .. Io<ity prom. showin& <=11 .. from o.pplkation of
COSI-COIT frequontiol ......... i .. iool >OmI01OtS ..... NCOII.R ,,, edge mapI.
dramali. fi"",u"ioo> in <p:<d n:prdl ... "fwhich """,,I .. ;.,., """ine wu ......
Applic.,;on ofC05I.(;O<T"' frequeolio, """",loIor \C ASTEII. _ IN imagos prod""ed
di""""inui,;cs.
n.. mulls "fCOSI-C"",', ti-tqu",,,i.1 corrclatO, ",hal applied ",!he: <'IIge INP'
ond ASTER bmd IN. along ,"' ilh lMCOIUn teO"los. .... ...".." in Figure 3.24. A.
bcfor<, the ,'.Ioci,; .. "'" "'0", in ",,.,,,., Ihc: lI,xier loe. .. 100
79
1
: .
i ' ~ i i i i i i _ i i i i
"100 200 300 400 500 600 700 800 900
Distance from west to east (pixels)
Figure 3.24. Tustumena longitudinal velocity profile showing results from application of
COSI-Corr's frequential correlator to ASTER band 3N images and edge map, and
application of IMCORR to edge maps.
100 m/yr 25 m/yr. The velocities derived from ASTER band 3N are the slowest, yet
most consistent, with most speeds between 50 to 30 m/yr. The differences in velocity
produced by application of the correlator routines to edge maps and ASTER band 3N
images suggest the edge maps allow both COSI-Corr and IMCORR to find offsets of
greater magnitude. The edge maps also cause the correlation routines to find greater
fluctuations in velocity, which may be caused by the absence of intermediate, gray scale
BVs. The binary edge maps may appear too similar across their length and width within a
search and reference chip pair, causing the correlation routine to occasionally misidentify
the location of best match.
The results of applying COSI-Corr' s statistical correlator to edge maps and
ASTER band 3N are compared in Figure 3.25. Once again, the results align most closely
i r . 1 1 1 1 i 1 | 1 i i | 1 i 1 1 1 r
COSI-Corr freqential correlator. ASTER band 3N
_ COSI-Corr frequential correlator, edge maps
IMCORR edge maps
250
~ 200
E
100
50
A i . . I
Tustumena Longitudinal Velocity Profile
~ T'"
-
-
!
,
I ,.
, .
,.
-
.... .... .... ... ',;""._._.-_._.-_..J
, 40 __ " __
Fi""" ),24, T""umrna IooBiludioml ,'<kocily profile obowi"ll ...... 11. from applk01i"" of
COSI-COOT" fi-eq....,ti&I orTt1 .. ". 10 ASTEll band J:-O images and edge map, and
applio.,,,,,, ofL\iCORll1<> edge maps,
prod""ed by opplicaTioro of The "",",I.,.,. "'"'i ..... 1<> edg. maps and ,,-STEil band 3:-0
images OIlgg<Sl The edge _ allow both COSI-COOT and Il<1CORll1<> find off .... of
n""tuaTions in , .. kocily, wbioh may I>< <oused by The obseTIc:. of inl...",edi.,., gray 0<.1.
BV .. Th< binary edge maps m.oy _or 100 .imila: ><...,.. The-ir Imp and widTh wiThin a
Tho raul .. of applying COSI-COOT" ..... i .. iul orTt1.,,,.,o edge maps and
,,-STEil band 3:-0 .... >mpar<d in Figure ),2S, Once opin. The ....,,1 .. align mosI dos<ly
80
2i>0
200
ISO
100
50
Tustumena Longitudinal Velocity Profile
> > i i i i
1
i ' i
1
< i
1
COSt Con statistical correlator ASTER band 3N
COS! Corr statistical correlator odge maps
IMCORR edge maps
J
- ':
'L
100 200 300 400 500 600 700 800
Distance from west to east (pixels)
900
Figure 3.25. Tustumena longitudinal velocity profile from application of COSI-Corr' s
statistical correlator to ASTER band 3N images and edge maps, and application of
IMCORR to edge maps.
near the glacier toe and then begin to diverge in the middle of the glacier at 300 pixels
from the toe. Between 500 and 600 pixels from the toe, COSI-Corr' s results from the two
images pairs agree quite well and then diverge considerably upglacier from this point. As
before, the velocities derived from ASTER band 3N images show less extreme volatility
compared to the velocities derived from edge maps.
In general, IMCORR produced the highest velocities along the length of
Tustumena Glacier and is consistent in doing so, but also produced the greatest volatility
in its results. COSI-Corr' s frequential correlator, when applied to ASTER band 3N,
produced the most consistent velocities, which are often 1/3 the speed of IMCORR' s
results. COSI-Corr' s statistical correlator produced results with speeds and volatility that
typically fell between the other two routines. Use of ASTER band 3N images produced
results with fewer and less extreme velocity discontinuities compared to edge maps,
-
-
t
1'"
I e aa
-
----_ ..
------
---
, .
-
... ... .,. - TOO
- -_._-
Fiaure 3.2l. Tas,um<l\a ,,,Iooi,y prOflk from awl",oUoo OfCOSI-C",,",
otati"ical rornlat<x 10 ASTER band )S irnaaeo ond edll.< rnapo.. ond """lie .. .,., or
IMCORR 10 edi< m .....
from tilt ' or. lOO ond 600 pi .. ,. from tho toe. COSI-C.".,., raul .. from tho ,,,"
compared to ,lie ,olooi,i .. deIi,'ed from edge: map,.
in i .. raul ... COSI-CorT', frequc:nti.1 00,,,,10l0I". ,..ben awlied to ASTER band lS
....... 1 ... COSI-CO!T' , ... ,i"iell ''''''''' ' 0l0I" ptOCioced raul" "ith "': 1. ond >'Ol oti luy 1h.I,
typie.lly roll bet"...", tho _ """ f"O\Iti .... u ... or .... STER band lS imoll" prodoced
....... 110 with re", ... ond ...... tr<me "elooi, y discontinui,i .. oompared 10 edge rnapo..
81
which may be due to the absence of gray scale values in the binary edge maps. The
difference in results between the frequential and statistical type of correlation routines
suggests the statistical method is more prone to erratic behavior, regardless of the type of
imagery it is operating on.
An analysis of McCarty Glacier produced results similar to what is presented
above. The combined results from Tustumena and McCarty Glaciers show both of COSI-
Corr' s correlator engines are prone to erratic behavior, whether run on edge maps or
ASTER band 3N images, and with the additional knowledge that IMCORR also behaves
erratically with this data set, hint there may be a problem with this ASTER imagery pair.
No combination of correlator engine and image type produced realistic,
acceptable results along the length of either glacier, and yet these routines have been
successfully used by other researchers to derive velocity fields on alpine glaciers, so the
failure to produce realistic outcomes points to the ASTER data set. This does not mean
the ASTER imagery is flawed, but rather the two-year time span, and the change in the
ice surface during this span, may be too great to allow consistent, reliable correlations. To
test this hypothesis, one-year imagery must be used within a correlation routine.
The velocity fields and longitudinal profiles all show implausible ice flow
conditions with rapid moving ice in close proximity to slow moving ice and no apparent
physical cause for such behavior. IMCORR produced the most dramatic discontinuities in
velocity when applied to edge maps, with COSI-Corr' s statistical correlator performing
slightly better with smaller magnitudes of discontinuities, and COSI-Corr' s frequential
correlator producing the least erratic behavior, particularly when applied to ASTER band
3N images.
81
which may be due to the absence of gray scale values in the binary edge maps. The
difference in results between the frequential and statistical type of correlation routines
suggests the statistical method is more prone to erratic behavior, regardless of the type of
imagery it is operating on.
An analysis of McCarty Glacier produced results similar to what is presented
above. The combined results from Tustumena and McCarty Glaciers show both of COS 1-
Corr's correlator engines are prone to erratic behavior, whether run on edge maps or
ASTER band 3N images, and with the additional knowledge that IMCORR also behaves
erratically with this data set, hint there may be a problem with this ASTER imagery pair.
No combination of correlator engine and image type produced realistic,
acceptable results along the length of either glacier, and yet these routines have been
successfully used by other researchers to derive velocity fields on alpine glaciers, so the
failure to produce realistic outcomes points to the ASTER data set. This does not mean
the ASTER imagery is flawed, but rather the two-year time span, and the change in the
ice surface during this span, may be too great to allow consistent, reliable correlations. To
test this hypothesis, one-year imagery must be used within a correlation routine.
The velocity fields and longitudinal profiles all show implausible ice flow
conditions with rapid moving ice in close proximity to slow moving ice and no apparent
physical cause for such behavior. IMCORR produced the most dramatic discontinuities in
velocity when applied to edge maps, with COSI-Corr's statistical correlator performing
slightly better with smaller magnitudes of discontinuities, and COSI-Corr's frequential
correlator producing the least erratic behavior, particularly when applied to ASTER band
3N images.
82
After all the discussion regarding velocity discontinuities and the comparison of
results from the various combinations of imagery and correlator engines, one
fundamental question remains unasked - which of these velocities is accurate? One way
to answer this question is to visually track surface features between sequential images,
calculate a velocity, and compare it with results from the three algorithms. Unfortunately,
this will not work because the change in the pattern of BVs between the ASTER images
is too great to allow visual tracking of an ice surface feature, and the question of which of
the above results is correct remains unanswered.
3.8 Tustumena Vector Fields Derived From Landsat-5 Imagery
To assess the possibility that a two-year time span between sequential images is
too great and there is too much ablation and subsequent change in ice surface features for
the correlator engines to properly and accurately find offsets, Landsat-5 TM data
spanning single ablation seasons (2006/07 and 2007/08) and a two-year span (2006-08)
were processed with COSI-Corr's frequential correlator. The frequential correlator was
chosen over the two statistical correlator engines because testing on Tustumena Glacier
with PCA images derived from the Landsat data proved the frequential correlator
provided accurate results (as will be shown later in this chapter). IMCORR failed to
produce any correlations on the glacier when provided PCA images, and COSI-Corr' s
statistical correlator produced a spatially extensive velocity field, but with errant
velocities upglacier. While the change in sensors provides an improvement in temporal
resolution, it comes with the cost of lower spatial resolution at 30 m instead of ASTER' s
15 m. The Landsat-5 TM imagery was minimally processed before applying COSI-Corr.
Upon receipt from the USGS, the images had undergone terrain correction, so
82
After all the discussion regarding velocity discontinuities and the comparison of
results from the various combinations of imagery and correlator engines, one
fundamental question remains unasked - which of these velocities is accurate? One way
to answer this question is to visually track surface features between sequential images,
calculate a velocity, and compare it with results from the three algorithms. Unfortunately,
this will not work because the change in the pattern of BV s between the ASTER images
is too great to allow visual tracking of an icc surface feature, and the question of which of
the above results is correct remains unanswered.
3.8 Tustumena Vector Fields Derived From Landsat-5 Imagery
To assess the possibility that a two-year time span between sequential images is
too great and there is too much ablation and subsequent change in ice surface features for
the correlator engines to properly and accurately find offsets, Landsat-5 TM data
spanning single ablation seasons (2006/07 and 2007108) and a two-year span (2006-08)
were processed with COSI-Corr's frequential correlator. The frequential correlator was
chosen over the two statistical correlator engines because testing on Tustumena Glacier
with PCA images derived from the Landsat data proved the frequential correlator
provided accurate results (as will be shown later in this chapter). IMCORR failed to
produce any correlations on the glacier when provided PCA images, and COSI-Corr's
statistical correlator produced a spatially extensive velocity field, but with errant
velocities upglacier. While the change in sensors provides an improvement in temporal
resolution, it comes with the cost oflower spatial resolution at 30 m instead of ASTER's
15 m. The Landsat-5 TM imagery was minimally processed before applying COSI-Corr.
Upon receipt from the USGS, the images had undergone terrain correction, so
83
orthorectification was not necessary, and as explained earlier, image-to-image
georeferencing was removed from the preprocessing routine. The Landsat-5 TM data
contains some minor scan line striping, but this was significantly reduced when Principal
Component Analysis was performed on the images and the striping is not noticeable on
the glaciers.
The 2006/07 image pair produced a vector field more spatially extensive and
more consistent in velocity magnitude than any previous vector field on Tustumena
Glacier (Figure 3.26). Beginning upglacier, there is a cluster of green vectors showing
velocities ranging from 150 to 200 m/yr, which is somewhat inconsistent with the
adjacent clusters of orange and yellow vectors (200-300 m/yr). There are longitudinal
moraines present in the area that may have a reverse dip (upslope) that are being revealed
as ablation progresses, but close visual examination could not determine whether this is
so because the moraines appear uniform to the eye. As the ice approaches the confluence
with HI2, it is moving between 250-300 m/yr. At the junction with HI2, the flow of ice of
Tustumena Glacier slows considerably. The ice from HI2 is moving < 15 m/yr, which
places significant drag on the flow of ice within Tustumena and slows it. This is seen as a
cluster of blue vectors at the junction with HI2 in Figure 3.26. The additional resistance
to flow caused by the merging of slow moving ice is not the only cause for the abrupt
decrease in velocity in this area. There is a medial moraine in Tustumena Glacier
spanning the longitudinal centerline that is reverse-dipping and that causes COSI-Corr to
underestimate the ice displacement across the glacier (Figure 3.27). As ablation
progresses and more of the moraine is revealed upglacier, the apparent upglacier
83
orthorectification was not necessary, and as explained earlier, image-to-image
georeferencing was removed from the preprocessing routine. The Landsat-5 TM data
contains some minor scan line striping, but this was significantly reduced when Principal
Component Analysis was performed on the images and the striping is not noticeable on
the glaciers.
The 2006/07 image pair produced a vector field more spatially extensive and
more consistent in velocity magnitude than any previous vector field on Tustumena
Glacier (Figure 3.26). Beginning upglacier, there is a cluster of green vectors showing
velocities ranging from 150 to 200 m/yr, which is somewhat inconsistent with the
adjacent clusters of orange and yellow vectors (200-300 m/yr). There are longitudinal
moraines present in the area that may have a reverse dip (upslope) that are being revealed
as ablation progresses, but close visual examination could not determine whether this is
so because the moraines appear uniform to the eye. As the ice approaches the confluence
with HI2, it is moving between 250-300 m/yr. At the junction with HI2, the flow of ice of
Tustumena Glacier slows considerably. The ice from HI2 is moving < 15 m/yr, which
places significant drag on the flow of ice within Tustumena and slows it. This is seen as a
cluster of blue vectors at the junction with HI2 in Figure 3.26. The additional resistance
to flow caused by the merging of slow moving ice is not the only cause for the abrupt
decrease in velocity in this area. There is a medial moraine in Tustumena Glacier
spanning the longitudinal centerline that is reverse-dipping and that causes COSI-Corr to
underestimate the ice displacement across the glacier (Figure 3.27). As ablation
progresses and more of the moraine is revealed upglacier, the apparent upglacier
Figu", 3.26. TU$I .......... Glacier .cloci.y f!dol deri .... from 2006107 l.an<lsal-S TM i",.J!CS ' <>.I
COSI.con-ln:quOJ"i., 0<111'<1 .. "",
85
Figure 3.27. Reverse-dipping moraine that causes underestimation of ice movement.
movement cancels part of the downglacier flow of ice and causes underestimation of
displacement measurements.
Once the additional slow-moving mass from HI2 is incorporated into the flow of
Tustumena, and once past the reverse-dipping moraine, the ice resumes it rapid pace, as
exhibited by the cluster of yellow vectors just past the junction with HI2. Downslope
from this point, the ice decelerates and diverges. Ice from HI2 completely ablates along
the north margin and ice north of Tustumena' s center line exits the main valley via a dead
end side valley, calves down a steep incline, melts, and forms a tarn. The main flow of
ice continues downvalley at a pace between 150-200 m/yr until within four km of the toe,
at which point the ice decelerates to less than 100 m/yr.
The deceleration of ice near the glacier toe is likely caused by a combination of
mass loss due to increased ablation at lower elevations and a decrease in topographic
gradient. Tustumena Glacier has an ice surface gradient of 28.9 m/km along most of its
"""-..,..", <oncel, part oflho do","&I.d ... nov.. ofi >rod ,..,... ..-l<reolirnation of
dispIOC<m<n' n><a&W<'tIl""".
"
Cln<. "'" oddiliorW .Io .... """'i"ll mass from Hil i. i ~ < J into !he 110 ... of
T""umrna. and <>nt. """ II>< fC'-cne-dipping m<>nin<. <he icc raumcs it rapid .,.. .. ..
.. hibikd by Iho .Ius, ... of yellow "<C1OrS j ... lSI "'" j..."ion "'1111112. [)ov,'lalope
from llIis poinl. "'" ice dec.lent .. and d i , . ~ Ice from 1m <OII'Ipl<1<ly obi .... along
<he nonh martin ODd ice oonh orTu .. umrna', .",,'er lin< ai ...... "",in .... Itcy ,i. "dead
end ,id< , .. lIey, cal,'os dovo." stoep "IO'i ... ",.I,s, one! {ann tam. The main 110 ... of
i oon';n...,. dow.,-alley" . ~ .,.,.. ..... 1$1).200 rnJyr "",;I " 'ilhin four km oflbt too.
'" ",hi<:h poin' .... ice dec.I""" .. to , ... than 100 mI)T.
The db:.lerotion of ice ncar thc: iJa<ierl<H: i. likely caused by . oombin>'ion of
.,... loss due lO inc:rnoed ablation at \0",'''' ele-... ions and "d ....... in oopographic
pi..,., T ... ~ Gl""ierl\as on k ",("".pi"", 0[28.9 mlkrn alonK ""'" of lIS
length (Figure 3.28a) except near its toe where the gradient briefly flattens before
resuming a similar incline down to the toe. The break in surface gradient at
approximately 1.5 km up from the toe affects velocity farther upglacier. There is a 75
m/yr deceleration in velocity beginning at 3 km from the toe, which is likely initiated by
the change in surface gradient 1500 meters downglacier. At approximately the 8.7 km
mark, a sudden drop in velocity is seen in the profile. This marks the junction where
Tustumena's ice suddenly decelerates as it encounters the slower moving mass from HI2
and the reverse-dipping moraine, which causes underestimation of ice surface
displacement. Downslope from the junction with HI2, the velocity fluctuates for 3.75 km
within a range of 150-200 m/yr. It is possible that these minor variations in speed are also
caused by the apparent upglacier movement of moraines as they are exposed via melt.
However, this cannot be confirmed as the moraine patterns in this area are too diffuse to
visually track with certainty.
To establish the mechanism of ice flow that dominates Tustumena Glacier,
whether plug flow caused by basal slip or flow via ice deformation, transverse velocity
profiles (Figures 3.28b-d) are examined for telltale characteristics of flow type.
Beginning upglacier, transect D-D' (Figure 3.28d) exhibits the classic profile for plug
flow with steep gradients along the north and south margins that rise to a relatively
uniform plateau in the middle of the glacier (Copland et al , 2009; Fatland et al., 2003).
This curve indicates that most of the ice is moving enmasse, as a single block, with some
noticeable drag along the margins. The transverse profile C- C (Figure 3.28c) indicates
little, if any drag, along the northern margin as ice approaches the dead end side valley,
which is indicative of basal slip. Along the centerline of the glacier the profile has a
86
length (Figure 3.28a) except near its toe where the gradient briefly flattens before
resuming a similar incline down to the toe. The break in surface gradient at
approximately 1.5 km up from the toe affects velocity farther upglacier. There is a 75
mlyr deceleration in velocity beginning at 3 km from the toe, which is likely initiated by
the change in surface gradient 1500 meters downglacier. At approximately the 8.7 km
mark, a sudden drop in velocity is seen in the profile. This marks the junction where
Tustumena's ice suddenly decelerates as it encounters the slower moving mass from HI2
and the reverse-dipping moraine, which causes underestimation of ice surface
displacement. Downslope from the junction with HI2, the velocity fluctuates for 3.75 km
within a range of 150-200 mlyr. It is possible that these minor variations in speed are also
caused by the apparent upglacier movement of moraines as they are exposed via melt.
However, this cannot be confirmed as the moraine patterns in this area are too diffuse to
visually track with certainty.
To establish the mechanism of ice flow that dominates Tustumena Glacier,
whether plug flow caused by basal slip or flow via ice deformation, transverse velocity
profiles (Figures 3.28b-d) are examined for telltale characteristics of flow type.
Beginning upglacier, transect D-D' (Figure 3.28d) exhibits the classic profile for plug
flow with steep gradients along the north and south margins that rise to a relatively
uniform plateau in the middle of the glacier (Copland et aI., 2009; Fatland et aI., 2003).
This curve indicates that most of the ice is moving enmasse, as a single block, with some
noticeable drag along the margins. The transverse profile C-C' (Figure 3.28c) indicates
little, if any drag, along the northern margin as ice approaches the dead end side valley,
which is indicative of basal slip. Along the centerline of the glacier the profile has a
87
Tustumena longitudinal elevation and velocity profile A-A'
0>
cd
ay
i
CD
O
E
c
.2
+-
cc
>
M
LLI
a)
3.0 4.5 6.0 7.5 9.0 10.5 12.0
Distance from west to east (km)
Tustumena Velocity: Transverse Profile B-B'
b)
300 600 900 1200
Distance from south to north along B-B (meters)
Figure 3.28. Profiles for 2006/07 Tustumena velocity field, a) Elevation and longitudinal
velocity profile A-A' . b) Transverse profile along B-B' .
"
,
,
f
,
!
f
~
~
'00
.J
om.nc:e !rom _ 10 .... (km)
,
,
F i g u ~ 3.28. Prom .. for 2006/07 T" .. um ...... Iocj,y fi.ld. oJ EI ... "2Ik>n ..... longitudinal
, .. Io<ily profile AA", bl T ..... ' -..... p",fil. aJong II--W.
88
Figure 3.28 Continued. Profiles for 2006/07 Tustumena velocity field, c) Transverse
profile along C- C. d) Transverse profile along D-D' .
"
!SO
0
,
i
'"
J
, ~
'00
C
'00
TuSlumena V . . T rans_ Pro/lie e.G
SXl 1200 li!OO
0isIance tom I(Uh 10 I'IDr1i'IIiong CG' (meters)
TuS!umeM Ve : Tril/lSVe<Se Profile 0-0'
"
Fig= 3.28 eoo,;noed. Prom .. for 2006107 T ... wneno , .. 1oc;1y f,eld. oj T ~ , ' ' ' ' ' '
"",r,le o I o I l ~ C(:" _ d) T...," ..... prof,le Iiong D--D" .
..
89
distinct parabolic shape, indicative of internal deformation (Copland et al., 2009; Fatland
et al., 2003). However, the speed of the ice along the centerline, up to 180 m/yr, likely
cannot be entirely accounted for by internal deformation; certainly, considerable basal
slip occurs as well. Therefore, the fast movement of the ice, along with the parabolic
shape of the velocity transect, suggest that both mechanisms of ice flow contribute
significantly to the ice velocity in this area of the glacier. Transect B-B' , lower on the
glacier (Figure 3.28b), shows little variation across the width of the glacier, with a
velocity maximum near the center line of 160 m/yr and velocities along the north and
south margins of 120 m/yr and 140 m/yr, respectively. The relatively high velocities
suggest plug flow with little drag along the valley walls, and the gentle parabolic curve
across the glacier's midsection suggests the presence of some internal deformation as
well.
To confirm that the velocities produced by COSI-Corr are correct, pixels that are
traceable between the two images were visually selected, the offset between them was
manually measured within ENVI and a speed was calculated that can be compared to
COSI-Corr' s results. This process is partial to the observer's judgment as to what pixels,
or pattern of pixels, can be reliably tracked between images and how far and in what
direction the pixels moved, so complete confirmation is impossible due to the observer's
bias. According to Oreskes et al. (1994), verification and validation are also impossible
because natural systems (such as a glacier's motion) are open systems with infinite
degrees of freedom and infinite possibilities, while models (such as an algorithmically
derived velocity field) are closed systems with nonunique solutions that may be arrived at
by more than one path. Therefore, confirmation of the velocity field is only achieved to
89
distinct parabolic shape, indicative of internal deformation (Copland et aI., 2009; Fatland
et aI., 2003). However, the speed ofthe ice along the centerline, up to 180 m1yr, likely
cannot be entirely accounted for by internal deformation; certainly, considerable basal
slip occurs as well. Therefore, the fast movement of the ice, along with the parabolic
shape of the velocity transect, suggest that both mechanisms of ice flow contribute
significantly to the ice velocity in this area of the glacier. Transect B-B', lower on the
glacier (Figure 3.28b), shows little variation across the width of the glacier, with a
velocity maximum near the center line of 160 m1yr and velocities along the north and
south margins of 120 m1yr and 140 m1yr, respectively. The relatively high velocities
suggest plug flow with little drag along the valley walls, and the gentle parabolic curve
across the glacier's midsection suggests the presence of some internal deformation as
well.
To confirm that the velocities produced by COSI-Corr are correct, pixels that are
traceable between the two images were visually selected, the offset between them was
manually measured within ENVI and a speed was calculated that can be compared to
COSI-Corr's results. This process is partial to the observer's judgment as to what pixels,
or pattern of pixels, can be reliably tracked between images and how far and in what
direction the pixels moved, so complete confirmation is impossible due to the observer's
bias. According to Oreskes et aI. (1994), verification and validation are also impossible
because natural systems (such as a glacier'S motion) are open systems with infinite
degrees of freedom and infinite possibilities, while models (such as an algorithmically
derived velocity field) are closed systems with nonunique solutions that may be arrived at
by more than one path. Therefore, confirmation of the velocity field is only achieved to
90
Visual
speed
(m/yr)
COSI-
Point
Visual
speed
(m/yr)
Corr Difference Difference Percent
Point
Visual
speed
(m/yr)
speed
(m/yr)
(m/yr) (pixels) difference
A 70 69 1 0.03 1.4%
B 159 156 3 0.10 1.9%
C 168 164 4 0.13 2.4%
D 112 111 1 0.03 0.9%
E 88 89 1 0.03 1.1%
F 225 232 7 0.22 3.0%
the degree that predicted values (velocity field) match observed values (visually
determined velocity). Six locations along the length of Tustumena Glacier were visually
inspected and the velocity at each point calculated and compared to COSI-Corr' s results
(Table 3.1, Figure 3.29). Overall, COSI-Corr' s results compare very well with speeds
determined visually, which provides some confidence in the velocity field. The greatest
difference between the two methods, 7 m/yr, is less than 1/4 pixel, which falls within the
uncertainty for visual methods, which are constrained to measure offsets in whole pixels.
The average difference between COSI-Corr's results and results from visual inspection
for the six points is 0.09 pixels (2.8 m/yr), and the average percent difference is 1.8%.
While visual feature tracking allows some confirmation of COSI-Corr' s results,
the chosen points are sparse and provide only localized confirmation of offset magnitude
and direction. Scherler et al. (2008) suggest the use of streamlines to check the flow
direction of the velocity field along its whole length. Conceptually, the idea is simple -
place a ' seed' particle within the velocity field upglacier and trace its path as it follows
the x and y offsets prescribed within the field. This is accomplished using a customized
Table 3.1. Comparison of visually determined velocities with those derived from COSI-
Corr at the same location for 2006/07 velocity field.
.90
the degree that predicted values (velocity field) match observed values (visually
determined velocity). Six locations along the length of Tustumena Glacier were visually
inspected and the velocity at each point calculated and compared to COSI-Corr's results
(Table 3.1, Figure 3.29). Overall, COSI-Corr's results compare very well with speeds
determined visually, which provides some confidence in the velocity field. The greatest
difference between the two methods, 7 m/yr, is less than 114 pixel, which falls within the
uncertainty for visual methods, which are constrained to measure offsets in whole pixels.
The average difference between COSI-Corr's results and results from visual inspection
for the six points is 0.09 pixels (2.8 m/yr), and the average percent difference is 1.8%.
While visual feature tracking allows some confirmation of COSI-Corr's results,
the chosen points are sparse and provide only localized confirmation of offset magnitude
and direction. Scherler et al. (2008) suggest the use of streamlines to check the flow
direction of the velocity field along its whole length. Conceptually, the idea is simple -
place a 'seed' particle within the velocity field upglacier and trace its path as it follows
the x and y offsets prescribed within the field. This is accomplished using a customized
Table 3.1. Comparison of visually determined velocities with those derived from COSI-
Corr at the same location for 2006/07 velocity field.
Visual
COSI-
Point speed
Corr Difference Difference Percent
speed (m/yr) (pixels) difference
(m/yr)
(m/yr)
A 70 69 1 0.03 1.4%
B 159 156 3 0.10 1.9%
C 168 164 4 0.13 2.4%
D 112 111 1 0.03 0.9%
E 88 89 1 0.03 1.1%
F 225 232 7 0.22 3.0%
91
2006/07 Velocity raster
2.8 147.8 292.9
Velocity (m/yr)
Figure 3.29. 2006/07 velocity raster with location of points used in visual confirmation of
COSI-Corr results.
IDL program using the provided PARTICLETRACE procedure (Appendix H- Flow
Lines). If the velocity field is accurate, the seed should follow a glaciologically plausible
path as determined by moraines, flow bands, and turns in the glacier ice.
Six seed particles were placed within the 2006/07 velocity field for Tustumena
Glacier and their paths were plotted for visual inspection (Figure 3.30). Seeds A and B
were placed along the center line within HI2 and follow paths that end at the northeast
margin. These are unrealistic paths and show that COSI-Corr failed to produce accurate
correlations within HI2 for the 2006/07 image pair. COSI-Corr's failure in this instance is
likely caused by increased ablation along the length of HI2 due to its southwesterly
aspect, which allows more direct solar radiation to melt the ice. Seeds C through F follow
the velocity field down glacier in a more plausible manner, but exhibit a slight
"
, 'vej(, (17
"
, , , ,
,
,
,
,
,
"
,
t
,
"
,,',
,
"
,
3.29. 2OCI6/07 , .. 100:"1 _ ... willi loca1ion of points used in vi ...... conJirmltiOil or
COSI.c"", ..... 1 ...
IDL proVO'" us,,,, Ib< provided PARTICLE_TRACE pro<lun: (AppOndi. 11- Flo",
U"""j. [{II>< "<lodly field i. the ..... sIIou1<l follow . ilocio\oiically pl,usible
pain as determined by mon.i .... flow bands, on<! lurns in !he iI.cia icc .
........ pla<ed olon& th< ='" Ii .. within !i12 and follow ""tho tlw end .. "'" northca>I
I1W]!in. n.e.. .... WImlIi .. ic palhs and ....".. tIw. COSJ-Corr foiled '" prod"""...,..me
.".,..Iations "ilhin Hl2 R>r the: 2006J07 image: pair. COSI.(;orr", in this instance is
_to ... hich allow ......... di""" 001 .. radiation to "",It !be >te. s-m c throuih F follow
the: "<Ioo:"y field 00..'TI in mon: plousiblc m&nncf. but exhibit Iiih'
Figure 3.30. Streamlines that follow 2006/07 velocity field. f i""" 1.30. Sln:amliflCll !hal follow lOOiY07 ve\'J<ily field.
93
southwesterly bias. For instance, seed D begins near the north margin and ends near the
toe closer to the south margin and crosses two longitudinal moraines along its path: a
physical impossibility. Seed E, which begins on the glacier center line, also crosses a
longitudinal moraine, and then ends on the southern margin after traveling roughly 9 km.
Seed F exhibits similar behavior, beginning on a longitudinal moraine and ending along
the southern margin after 5 km.
To quantify the southerly bias in the velocity field, the transverse and longitudinal
movement of seed E was measured (in pixels) along its trajectory from its beginning
point to its intersection with the prominent longitudinal moraine, a distance of roughly 6
km. Along this path, seed E moved 16.3 pixels in the transverse direction and 204.5
pixels in the longitudinal direction, which yields an angle of 4.55. Thus, for every 1 km
(33.3 pixels) of longitudinal movement, there is an 80 meter (2.67 pixel) southerly bias
within the 2006/07 Tustumena Glacier velocity field. The fact that this bias is seen in all
four streamlines within Tustumena Glacier suggests it is due to subtracting too much, or
too little, during removal of the systematic error.
Tustumena Glacier's velocity field for the 2007/08 image pair is seen in Figure
3.31. Similar to the 2006/07 velocity field, the ice is moving fastest upglacier, with with
speeds up to 200 m/yr, which is up to four times faster compared to < 50 m/yr for the
previous year, so there is not as much of a deceleration in Tustumena' s speed at the
junction compared to 2006/07. Downslope from the junction with HI2, the ice maintains
a comparable velocity with 2006/07, remaining in the 150-200 m/yr range for
approximately 7 km. The ice that exits the main valley via the dead end side valley is
speeds ranging from 200-300 m/yr. As the ice approaches the junction with HI2, it slows
93
southwesterly bias. For instance, seed D begins near the north margin and ends near the
toe closer to the south margin and crosses two longitudinal moraines along its path: a
physical impossibility. Seed E, which begins on thc glacier center line, also crosses a
longitudinal moraine, and then ends on the southern margin after traveling roughly 9 km.
Seed F exhibits similar behavior, beginning on a longitudinal moraine and ending along
the southern margin after 5 km.
To quantify the southerly bias in the velocity field, the transverse and longitudinal
movement of seed E was measured (in pixels) along its trajectory from its beginning
point to its intersection with the prominent longitudinal moraine, a distance of roughly 6
km. Along this path, seed E moved 16.3 pixels in the transverse direction and 204.5
pixels in the longitudinal direction, which yields an angle of 4.55. Thus, for every 1 km
(33.3 pixels) oflongitudinal movement, there is an 80 meter (2.67 pixel) southerly bias
within (he 2006/07 Tustumena Glacier velocity field. The fact that this bias is seen in all
four streamlines within Tustumena Glacier suggests it is due to subtracting too much, or
too little, during removal of the systematic error.
Tustumena Glacier's velocity field for the 2007/08 image pair is seen in Figure
3.31. Similar to the 2006/07 velocity field, the ice is moving fastest up glacier, with with
speeds up to 200 rniyr, which is up to four times faster compared (0 < 50 m/yr for (he
previous year, so there is not as much of a deceleration in Tustumena's speed at the
junction compared to 2006/07. Downslope from the junction with HI2, the ice maintains
a comparable velocity with 2006/07, remaining in the 150-200 rniyr range for
approximately 7 km. The ice that exits the main valley via the dead end side valley is
speeds ranging from 200-300 rniyr. As the ice approaches the junction with HI2, it slows
Figure 3.31. Tustumena velocity field derived from 2007 and 2008 Landsat-5 TM images and
COSI-Corr frequential correlator.
4^
. I
,
f igure 1.11. TUOIu_ ~ " " ' i I Y rook! dori"ed from 2007 ond 2008 Landso,S TM imogcs ond
COSI.cOlT f""l"rn'i.1 oom:l .. Of.
95
to the range of 100-150 m/yr. The ice of HI2 is moving faster than the previous season,
moving slower than in the previous season, with speeds between 50-100 m/yr compared
to 100-150 m/yr in 2006/07. As the ice progresses down the main valley, the overall
speed is less than the previous year' s. There is no sudden drop in speed as the glacier toe
is approached (Figure 3.32a), but rather a gradual decline in velocity, and there is no
dramatic underestimation in speed at the location of the reverse-dipping moraine at the
8.7 km mark. The lack of these significant features in the velocity data, and the overall
reduction in speed of the 2007/08 velocity field compared to the previous year, is likely
due to the timing of the imagery. The 2008 image was acquired July 31
s t
, much earlier in
the melt season than the 2006 (Sept. 12) and 2007 (Aug. 30) images, probably before the
summer velocity maximum was reached and before significant surface ablation had
occurred. This would explain the absence of influence of the reverse-dipping moraine and
the lack of a sudden drop in velocity near the toe due to increased mass loss via ablation.
To establish the flow mechanism for the velocity field, transverse profiles (Figures 3.32a-
d) were taken across the glacier at three locations, shown in Figure 3.31 as B-B' , C- C,
and D-D' . Transect D-D' (Figure 3.32d) has some characteristics of basal slip and plug
flow with a steep velocity gradient along the north margin and a high, somewhat uniform
velocity in the glacier's midsection and on the south margin. Transect C- C (Figure
3.32c) is similar to the transect at the same location in the 2006/07 velocity field, in that
the glacier midsection has a high central velocity, which is likely due to a combination of
basal slip and internal deformation, based upon the curve' s shape and the ice speed. The
ice near the dead end side valley is moving < 40 m/yr, while the ice along the south
margin is moving 150 m/yr, with little evidence of drag along the valley walls.
95
to the range of 100-150 mlyr. The ice ofHI2 is moving faster than the previous season,
moving slower than in the previous season, with speeds between 50-100 m/yr compared
to 100-150 mlyr in 2006/07. As the ice progresses down the main valley, the overall
speed is less than the previous year's. There is no sudden drop in speed as the glacier toe
is approached (Figure 3.32a), but rather a gradual decline in velocity, and there is no
dramatic underestimation in speed at the location of the reverse-dipping moraine at the
8.7 km mark. The lack of these significant features in the velocity data, and the overall
reduction in speed ofthe 2007/08 velocity field compared to the previous year, is likely
due to the timing of the imagery. The 2008 image was acquired July 31
5
1, much earlier in
the melt season than the 2006 (Sept. 12) and 2007 (Aug. 30) images, probably before the
summer velocity maximum was reached and before significant surface ablation had
occurred. This would explain the absence of influence of the reverse-dipping moraine and
the lack of a sudden drop in velocity near the toe due to increased mass loss via ablation.
To establish the flow mechanism for the velocity field, transverse profiles (Figures 3.32a-
d) were taken across the glacier at three locations, shown in Figure 3.31 as B-B', C-C',
and D-D'. Transect D-D' (Figure 3.32d) has some characteristics of basal slip and plug
flow with a steep velocity gradient along the north margin and a high, somewhat uniform
velocity in the glacier's midsection and on the south margin. Transect C-C' (Figure
3.32c) is similar to the transect at the same location in the 2006/07 velocity field, in that
the glacier midsection has a high central velocity, which is likely due to a combination of
basal slip and internal deformation, based upon the curve's shape and the ice speed. The
ice near the dead end side valley is moving < 40 mlyr, while the ice along the south
margin is moving 150 mlyr, with little evidence of drag along the valley walls.
96
Tustumena longitudinal eievation and velocity profile A-A'
' i ' . . . i . -
1.5 3.0 4.5 6.0 7.5 9.0 10.5 12.0
Distance from west to east (km)
Tustumena Ve ocity; Transverse Prof e 3 B
1
30(J ' ' '
r
"~~ ! ' *" 1 * | . - r
250 -
>.
I 200:
>
o
150 -
>
300 600 900 1200
Distance from south to north along B-B' (meters)
Figure 3.32. Profiles for 2007/08 Tustumena velocity field, a) Elevation and longitudinal
velocity profile A-A' . b) Transverse profile along B-B' .
,-
,
t
-
-
!
f
-
-
i
>
'00
..
'.'
M
"
" .
.)
-
'00 B
.. ..
,,.,
.,
Fi""" JJ2. roo- 2007/01 YM "eIooiry r..kI. _) Ele; ...... """ IonsitM,"o!
Iodcy pmfilo AA '. b) T.-._ pmfile 8-8'.
97
Tustumena Velocity: Transverse Profile D-D
!
o
Q
O
>
d)
300 600 900 1200 1500
Distance from south to north along D-D' (meters)
Figure 3.32 Continued. Profiles for 2007/08 Tustumena velocity field, c) Transverse
profile along C- C. d) Transverse profile along D-D' .
"
""
~
'" ,
c
j
, ~
~
'00
. T ranMJrie Profile [).O'
""
0
<
1
'" ,
I
,.
>
0
'00
"
Figure 3.32 Con'inued. Profiles for 2007108 Tu",umena .... Iooi'y f,.Id. <) T...,.verse
profil. _IonS e-c'. d) T ~ v .... profile along DD' .
"
98
Transect B-B' (Figure 3.32b) exhibits a velocity along the glacier midsection of 130 m/yr
and speeds along the north and south margins of 115 m/yr and 75 m/yr, respectively.
Again, the rapid ice movement along the width of the glacier and the gentle parabolic arc
of the graph suggest that a combination of basal slip and internal ice deformation both
contribute significantly to the movement of the ice.
The accuracy of the velocity field derived from the 2007/08 image pair can be
confirmed by manually tracking pixels and determining the offset between the two
images and calculating a velocity to compare with COSI-Corr' s. At seven locations along
Tustumena Glacier and one location in HI2 Glacier, the speed of the ice was visually
determined and compared to COSI-Corr's results (Table 3.2, Figure 3.33). In general, the
two methods of velocity determination agree, with the largest difference between the two
being 20 m/yr at point F in HI2, which is only 2/3 pixel. The seven points along
Tustumena' s centerline have significantly better agreement between the visual method
and COSI-Corr, with the closest match between the two near the toe at point A, and the
Table 3.2. Comparison of visually determined velocities with those derived from COSI-
Corr at the same location for 2007/08 velocity field.
Visual
Velocity
(m/yr)
COSI-
Point
Visual
Velocity
(m/yr)
Corr Difference Difference Percent
Point
Visual
Velocity
(m/yr)
Velocity
(m/yr)
(m/yr) (pixels) difference
A 49 51 2 0.06 3.9%
B 99 106 7 0.21 6.6%
C 164 167 3 0.09 1.8%
D 168 181 13 0.40 7.2%
E 185 173 12 0.37 6.5%
F 92 112 20 0.61 17.9%
G 211 222 11 0.34 5.0%
H 244 252 8 0.25 3.2%
98
Transect B-B' (Figure 3.32b) exhibits a velocity along the glacier midsection of 130 m/yr
and speeds along the north and south margins of 115 m/yr and 75 m/yr, respectively.
Again, the rapid ice movement along the width of the glacier and the gentle parabolic arc
of the graph suggest that a combination of basal slip and internal ice deformation both
contribute significantly to the movement of the ice.
The accuracy of the velocity field derived from the 2007/08 image pair can be
confirmed by manually tracking pixels and determining the offset between the two
images and calculating a velocity to compare with COSI-Corr's. At seven locations along
Tustumena Glacier and one location in HI2 Glacier, the speed of the ice was visually
determined and compared to COSI-Corr's results (Table 3.2, Figure 3.33). In general, the
two methods of velocity determination agree, with the largest difference between the two
being 20 m/yr at point F in HI2, which is only 2/3 pixel. The seven points along
Tustumena's centerline have significantly better agreement between the visual method
and COSI-Corr, with the closest match between the two near the toe at point A, and the
Table 3.2. Comparison of visually determined velocities with those derived from COSI-
Corr at the same location for 2007/08 velocity field.
Visual
COSI-
Point Velocity
Corr Difference Difference Percent
Velocity (m/yr) (pixels) difference
(m/yr)
(m/yr)
A 49 51 2 0.06 3.9%
B 99 106 7 0.21 6.6%
C 164 167 3 0.09 1.8%
D 168 181 13 0.40 7.2%
E 185 173 12 0.37 6.5%
F 92 112 20 0.61 17.9%
G 211 222 11 0.34 5.0%
H 244 252 8 0.25 3.2%
99
2007/08 Velocity raster
0 144.5 289.0
Velocity (m/yr)
Figure 3.33. 2007/08 Velocity raster with locations of visual determination of velocity to
confirm the accuracy of COSI-Corr' s results.
greatest difference at point D, across from the dead end valley. Of significance is the
general agreement at point E where the reverse-dipping moraine lies, in which the two
methods differ by 12 m/yr, which is less than 1/2 pixel. This is also the only point in
which COSI-Corr's velocity is less than the visually determined speed. Assuming COSI-
Corr is more accurate than visual methods due to its ability to calculate speed to subpixel
accuracy, the visual methods have a tendency to underestimate velocity. The average
difference between the two methods of velocity determination for the eight selected
points is 9.50 m/yr (0.29 pixel), and the average percent difference is 6.5%. Again, the
general agreement between the two methods of velocity determination provides some
confidence in COSI-Corr' s results.
fip" l.ll. 20011Ol! rte< "ith Iocaliom oh;..w determination of,olocity 10
conr,rm the K<","""Y ofooSI..(;""., reo"lts.
sat ... 1 qm:mon' at point E where the rc,one-<!;P!';I\j """';ne I .... ;n which the two
motl>ods diIT.,. by 12 mi)T. which is leu than 11"2 pi>d. Thi. ;, .1", the only point in
<onfidono. in COSI-Corr", raul".
100
Streamlines were produced from the 2007/08 velocity field to check the field's
longitudinal accuracy. Five seeds were placed within the velocity field (Figure 3.34), one
on HI2, and four on Tustumena. Seed A, within HI2, traces a realistic path down HI2,
around the curve at the junction with Tustumena, and ends at the side valley, as would be
expected. Seeds B and C exhibit a slight northerly bias. Seed B begins on a longitudinal
moraine just upglacier from the junction with HI2 and follows the moraine for
approximately 3140 meters before gradually diverging northward and ending along the
north margin just past the dead end side valley. The angle of the northerly bias is 0.55,
which is approximately 30 m (1 pixel) of northerly bias for every 3 km (100 pixels) of
longitudinal movement within the velocity field. Seed C begins near the longitudinal
centerline and ends along the north margin at the glacier toe, exhibiting only a very slight
northerly bias. Seed D traces a path along the southern margin for several kilometers; it is
difficult to perceive any bias in its trajectory. Lastly, seed E traces a path along the
medial moraine between ice from HI2 and Tustumena as the ice proceeds towards the
dead end side valley; it is difficult to see any bias along its path. Overall, the
directionality of the 2007/08 velocity field is more reasonable than the 2006/07 velocity
field, which is likely due to a more complete and accurate removal of systematic error.
To examine other differences between the 2006/07 and 2007/08 velocity fields,
longitudinal velocity profiles are presented in Figure 3.35. The ice is moving faster
during the 2006/07 season compared to the 2007/08 season from the toe to approximately
5.5 km upglacier. At the toe, the speed difference is roughly 15 m/yr, and at the 3 km
mark, it is as large as 50 m/yr. Upglacier from the 5.5 km mark, the 2006/07 velocity
field exhibits a sinusoidal pattern presumably caused by reverse-dipping moraines.
100
Streamlines were produced from the 2007/08 velocity field to check the field's
longitudinal accuracy. Five seeds were placed within the velocity field (Figure 3.34), one
on HI2, and four on Tustumena. Seed A, within HI2, traces a realistic path down HI2,
around the curve at the junction with Tustumena, and ends at the side valley, as would be
expected. Seeds B and C exhibit a slight northerly bias. Seed B begins on a longitudinal
moraine just upglacier from the junction with HI2 and follows the moraine for
approximately 3140 meters before gradually diverging northward and ending along the
north margin just past the dead end side valley. The angle of the northerly bias is 0.55,
which is approximately 30 m (1 pixel) of northerly bias for every 3 km (100 pixels) of
longitudinal movement within the velocity field. Seed C begins near the longitudinal
centerline and ends along the north margin at the glacier toe, exhibiting only a very slight
northerly bias. Seed D traces a path along the southern margin for several kilometers; it is
difficult to perceive any bias in its trajectory. Lastly, seed E traces a path along the
medial moraine between ice from HI2 and Tustumena as the ice proceeds towards the
dead end side valley; it is difficult to see any bias along its path. Overall, the
directionality of the 2007/08 velocity field is more reasonable than the 2006/07 velocity
field, which is likely due to a more complete and accurate removal of systematic error.
To examine other differences between the 2006/07 and 2007/08 velocity fields,
longitudinal velocity profiles are presented in Figure 3.35. The ice is moving faster
during the 2006/07 season compared to the 2007/08 season from the toe to approximately
5.5 km upglacier. At the toe, the speed difference is roughly 15 m/yr, and at the 3 km
mark, it is as large as 50 m/yr. Upglacier from the 5.5 km mark, the 2006/07 velocity
field exhibits a sinusoidal pattern presumably caused by reverse-dipping moraines.
TUSTUMENA GLACIER STREAMLINED
FROM 2 0 0 7 / Q8 VELOCITY FIELD
<40^f/2jt$ *] y/
h i
1
Figure 3.34. Streamlines that follow 2007/08 velocity field.
I
,
102
Tustumena 06/07 and 07/08 longitudinal velocity profiles
1.5 3.0 4.5 6.0 7.5 9.0 10.5 12.0
Distance from west to east (km)
Figure 3.35. Comparison of longitudinal velocity profiles for 2006/07 and 2007/08 image
pairs.
affecting the measured displacement. At these locations, the mean velocity for 2006/07
may be approximately equal to the 2007/08 velocity, except for the steepest dip in
velocity in the 2006/07 profile caused by the moraine of Figure 3.27. As discussed
earlier, the difference in velocity between the two image pairs, particularly near the toe, is
likely caused by the acquisition of the 2008 image before the summer velocity maximum
was attained.
A more complete picture of the difference between Tustumena' s 2006/07 and
2007/08 velocity fields can be seen in Figure 3.36. In the lower 1/3 of the glacier, the
difference between the two vector fields is fairly uniform from margin to margin and
gently increasing from the toe inward, with the 2006/07 velocity greater than the 2007/08
velocity. The middle 1/3 of the glacier shows alternating patches of light and dark areas,
indicating the velocity difference between the two vector fields alternates, which is also
seen in the longitudinal profile (Figure 3.35). The dead end side valley has slightly higher
102
r........ frOm _., ooo! II<mI
.. l_JS_ ComJWison of !ongilooinal "eloc;ly profil .. rOt 2006101 and 2001103 illUjlO
poi ....
"clocily in the: 2006107 profile c,.sed by the: moraine J.27. A. d,,,,U>Kd
iLkely caused by the ocquioition oflll< 2008 im"ll<' I:><r".. the ..,,,.,,,.,. "elo<i'y muimum
....... wnod.
2007103 velo<i,y field an 1:>< ..... in Figure 3.16. In the 10"',,, 1/3 of the &I""i .... the
.... !oci'y. 111< mkldl. 1/3 ofthc: iJl""icr"""'" aJm .. ina palO"'" ofligln and Gar\< ......
indkoting thc: "eloci,y diff<n ....... = thc: lWO ,.to< f,elds all..".'<$. "'hich io ,Iso
I<al in the: Ioniltudinal profilo 111< de,.j end lid< ,-alloy hao .lii/ldy higher
103
Tustumena Glacier Velocity Difference
2006/07 velocity minus 2007/08 velocity
-195.6 -17.9 159.9
(m/yr)
Figure 3.36. Difference between 2006/07 and 2007/08 velocity fields for Tustumena
Glacier.
speeds in the 2006/07 velocity field and HI2 has significantly higher speeds in 2007/08.
At the junction of Tustumena and HI2 and in the area of the reverse-dipping moraine, the
2007/08 vector field has significantly higher speeds for reasons explained earlier. Farthest
upglacier, the north margin shows higher speeds in 06/07 and the south margin shows
higher speeds in 07/08. Overall, the velocity fields for the two seasons vary in a uniform
fashion in the lower 1/3 of the glacier, while the upper 2/3 of the glacier exhibits a
complex arrangement of velocity variability produced by reverse-dipping moraines, a
junction with a side glacier, a dead end side valley, and fast moving ice near the snow
line, which makes accurate correlation difficult.
COSI-Corr was run on the 2006 and 2008 Landsat-5 TM images to test whether
the two-year time span was too great to produce an accurate vector field or whether the
'"
Figure 3.36. Dirr<ra>c< bc1"-<crl 2006107 and 2007108 .... 1o<j'y fields for Tuot.."..,..
Gloc,<r,
.... J. in the 2006107 , .. I"dly field and HI2 hao iignifi<OII'ly hiiba SpOtd. in 2007101.
upglaoier. tilt north margin _ .. hig/lor .," -1, in 06107 and the IOUlh margin sM"'"
hip opds in 07/08. Ov .... lllho ,-.lodty field. for the , .. " sca><>n> "ary in a unifotnl
jun<tion with. sid. glacio< . dead end oide ,'oIley. and ros, movina icc: ""or the snow
Ii"", ... hich rnaI;"" occur:ol< com:lotion dilT"ull,
COSI-Corr " ... fUJI on II>< 1006 and 2008 LandWS TM im.ag"" 10 ,.., "I><tbcf
104
TUSTUMENA GLACIER VECTOR FIELD
9nnfi/Oft I anr t c^t F> nnsi -r.orr frequential correlator
100 TO 150 M/ YR
150 TO 200 M/ YR
200 TO 2 5 0 M/ YR
250 TO 300 M/ YR
> 300 M/ YR
0 5
1 I I I I I Km
Figure 3.37. 2006/08 Tustumena velocity field derived from Landsat-5 TM
imagery and COSI-Corr frequential correlator.
resulting displacements would compare well with the sum of the 2006/07 and 2007/08
displacements (Figure 3.37). The lower 1/3 of the velocity field, beginning several
kilometers down from the dead end side valley, appears plausible and COSI-Corr may
have been successful in this area. The upper 2/3 of the velocity field has areas of fast,
slow, and moderate velocities that do not appear to match those of the 2006/07 and
2007/08 velocity fields.
The 2006/08 displacement should equal the sum of the 2006/07 and 2007/08
displacements. Figure 3.38 shows the longitudinal displacement profile of the 2006/08
data, along with the sum of the 2006/07 and 2007/08 displacements. Along the 12.6 km
length of the profiles, there is no agreement except briefly at the 10 km mark. From the
glacier toe to the 5 km mark, the 2006/08 correlations overestimate the displacement by
at least 80 m, and at the 5 km mark, the overestimation is approximately 320 m. From
=ulting dillplai:<mcnu "'ould tompu< "'oil "ith tho sum of tho 2006107 ond lOO7/OS
dillplooancnts (Figurc 3.37). The Invo'CI" 113 of the ,.looity fiold. bogiMin& .... '.,..1
....... ond modmoto ,'olooiti .. tIw do "'" appear to mau:h thooo of tho 2006107 ond
2007/08 "<looity field .
dispIK .......... FiJlUl'" 3.38 ohovo" the Iotogitudi .. 1 displ>mftlt profile of the 2(1061(1S
dat.a. 0100$ with the sum oflb< 2006107 ond 2007108 di>p1aocmrnlS. AIooJ Ib< 12.6 Un
l<nlIIh of the profil<s., there i. no agrcan<nt .,Cq>t briony .. the 10 I:rn matI:. From the
., kast 80 m. ond .. Ib< S I:rn mar'<. Ib< o.=stimalion i. appro. imately no m. From
. I
FiJlUl'" J,l7. 2OOt>f08 'fW,t"",.,.. wlooi,y fi.ld tIeri"cd from Londsat-S TM
Lmog<rY ond COSI-Con- rr.q...."w wm:1.,.,..
105
Tustumena longitudinal displacement profiles
1.5 3.0 4.5 6.0 7.5 9.0 10.5 12.0
Distance from west to east (km)
Figure 3.38. Comparison of 2006/08 longitudinal displacement with the sum of 2006/07
and 2007/08 displacements.
the 5 km mark to the 8 km mark, the 06/08 data show a dramatic drop in displacement,
followed by a second dramatic peak that overestimates displacement by roughly 320 m
again. There is a drop in displacement in the 06/08 profile that coincides with the reverse-
dipping moraine, but the displacement is still overestimated by 150 m compared to the
06/07 and 07/08 data. The 06/08 profile has a third sharp peak at the 11 km mark
followed by a rapid decline. Overall, the 06/08 profile resembles profiles discussed
earlier produced by both IMCORR and COSI-Corr when run on the two-year ASTER
imagery. This reinforces the conclusion that a two-year time span between sequential
images is too long in this region for feature tracking to produce acceptable results.
It is worthwhile to examine the signal-to-noise ratios (SNR) for each of the
previous vector fields produced using the Landsat-5 TM imagery. SNR provides a
measure of the correlator engine' s confidence in each correlation by comparing the height
of the correlation peak with surrounding values. Leprince et al. (2007a) suggest a
'"'
I
I
'""" _ ...... (I0'Il1
FiSU'" 3.38, of2006.'08 Ionai".<Iir'l3l di<plocenterl\ ,,"'jlh the sum of2006107
and lOO71OS displ""""''''''' ,
Ih< km mar\: Lo Iho 8 km mark. Iho 06108 do .. show a dram.,i< drop in djjpl""""'''''''
follow! by. _ dramatio peal< IhaI o_erutim.,es d"plaoemertt by roug/oly no m
[0110, ... '11 by. .. <I"dine. 0. ..... 1. "'" 06.'OS prom. ,.......,bl .. prof,l" dilClloood
earlier produood by both l\ICORR and COSI-Corr when run on thc ,"'c-}Ur
previous "oor fi."" prod"" ...... ing the LaOOsaI-S 1M imlgcry. SNR p"' .... id ...
106
Figure 3.39. 2006/07 Tustumena vector field color coded by signal-to-noise ratio.
threshold of 0.99 for SNR. For the purposes of this study, no minimum threshold was
placed on SNR, so all correlations, independent of their SNR, were plotted if they passed
through the rigorous sorting routines described in Chapter 2. The 2006/07 vector field on
Tustumena Glacier consists mostly of correlations with SNR > 0.99 (red), with a minority
of correlations with SNR in the range of 0.99-0.94, and a small handful of correlations
with SNR < 0.80 (purple) (Figure 3.39). The vectors with SNR < 0.99 mostly reside
along the margins and towards the toe and dead end side valley. The main flow of ice
along the center line in the upper 2/3 of the glacier predominantly possesses SNR > 0.99.
The SNR for the 2007/08 vector field (Figure 3.40) is almost entirely in the range of
0.99-0.94 (yellow), with one correlation in the range of 0.92-0.94 (green) and a handful <
0.80 (purple). This is a stark contrast to the 2006/07 vector field, which has many
correlations with SNR > 0.99, but the vector field for the 2007/08 image pair is
confirmed to be accurate through visual calculation of velocity and streamlines even
Ilunhold of 0.99 for SSR. For the purpooeo ofthi, no minimum Ilunhold .....
placod OIl SSR. II<> all rom:lotioru. indq><n<l<nt ofthoir SSR. were plotted if they p"'n'
lIIrou$II the rigo""" sonins TOuti .... clescribcd '" OIapt<r 2. Th< 2006/07 ""tor field on
TttSlumena CI:i<r>OlUi", of oorrtl.,ions .. ilh SSR ,. 0.99 (fI). "'ilh
of """",I.ti"",, wilh SSR in the of 0.99.(1.9.\, and . snulllw>dfui of ."""Wions
wilh SSR <; 0.80 (purple) (Figure J.J9). Th< "tors .. ilh SSR <; (1.99 "",,'Iy =ide
alona the martild ODd t""-vdt the ''''' ODd dead end okIe valley. Th< maln flow of 1<.
along the li1l< in the upper 2lJ of the SllOi.,. pc t' .,. .. SSR ,. 0,<)9.
Th< SSR for the 2007108 ,'tor r .. 1d (Figure 1,40) it .Imost entirely in tile of
0,99.(1,9.\ with one "",",I.,ioo in the ""SO of 0,92.(1,9.\ (jp'Il) and Iw>dful <;
0.80 (P"'1>Ie), Thi. i "an: 00/1".... to tl>e 2006107 field. ,,hid. his many
""""Iationo with SSR,. 0.99. bu, the ,,tor field for the 2007108 pal, it
"""finned '0 be """urale Ihfough ,'isual.aloulalion ODd ""'amli ...... .."
. I
Figure J 39. 2006/07 Tust"",ena "ector field color coded .ignal-to-noi .. ratio.
107
Figure 3.40. 2007/08 Tustumena vector field color coded by signal-to-noise ratio.
though there are no correlations with SNR > 0.99. The 2006/08 vector field has an
equitable distribution of SNR (Figure 3.41) among its correlations with values from 0.99
(red), to the range of 0.99-0.94 (yellow), and < 0.8 (purple). Curiously, there is a near
complete absence of correlations with SNR in the ranges of 0.94-0.92 (green) (except for
one vector in the 2007/08 image), 0.92-0.90 (aqua), and 0.90-0.80 (blue) for all three
vector fields.
The difference in SNR between the 06/07 and 07/08 vector fields is likely due to
the size of the search window used during the correlation process. When using IMCORR,
the use of larger window sizes translates to higher correlation strength values (NSIDC
website), and similarly, COSI-Corr yields higher SNR values when larger window sizes
are used because the overlapping area between the search and reference areas is larger
(Leprince et al., 2007a). The 06/07 vector field used a variable window size ranging from
64x64 pixels to 4x4 pixels (with SNR calculated based on the 64x64 window size), while
.. ,
. I
J .
fjrure HO. 2007108 Tuslum .... ",or field colo< >Od<d by .illJl>llo-noi .. 12Iio.
though "'""' .... no <0<'1'010';"'" " 'j", S:>'II. (1.9\1. The 2006108 ,"tor r..kl bao an
... ui.-o1. di<lribubon ofSSR (Fii'= 3.41)""""'11 ito rom,.,i""" "ith .:olua from 0.99
(red). '" Ihc r3IIi< ofo.99"(),O),j (,.."""",), and < (1.8 (rwvlc). eunou.ly, then: i near
compt<te........,. of >rT<1>1ions "ilh S:-.' It in lIIe '""II' ofO.OU-O.n (jItttII) (".<p, r",
one .ector in !he 2007/08 im.,.). O.9N).90 laq .. ). and 0.90-0.80 (01",,) for :olllhrc<
v..,..,. fields.
The diff=>c< in S:-.' R bel","" Ihc 06107 and 07108 ,'!or r,e"" i. likely due 10
the size of .... O<2I'Ch " 'indow UO<d the eo .... I.,I"" ""'hen "';IIi lMCORR.
!he .... of lars" window .ius ...... ''' .. 10 my... oone!.llioo 0I=gt/l VIloes (NSIDe
,,'<bIi,e), and .imilarly. COSI-Corr yicl4s hiSb SNR ,"2luoo wll<n lorgtr ,"'indow si ...
at< UKd 1>: .... 1he .... btt"'<et1 II>< st ... h and "'r......., ....... i. W'gtr
(Leprl"" ... oJ . 1007.). The 06107 ,...:tor field used. ,..nabl. wir>dow lize rangl"i\ from
64x64 puct, 10 4.4 pi>dl ( .. ith S:':R Iculalod ba><d on Ill< 64,64 "indow size), ... hik
Figure 3.41. 2006/08 Tustumena vector field color coded by signal-to-noise ratio.
the 07/08 vector field used a static window size of 32x32 pixels, which accounts for the
lower SNR values of the 07/08 vector field. The window size used for each image pair
was chosen after several trial runs of COSI-Corr according to which produced the
greatest spatial extent of vectors upon the glacier.
Assuming higher SNR translates directly to correlation precision, then it is
possible the better accuracy of the 06/07 velocity field, as determined by the visual
confirmation data shown in Tables 3.1 and 3.2, is a direct result of the higher SNR of the
correlations within the velocity field. This explains the difference in accuracy between
the 06/07 and 07/08 velocity fields and affirms that larger window sizes produce more
accurate correlations, which appears true based on multiple trial runs of COSI-Corr.
However, larger window sizes may also incorporate areas of greater deformation or
morphological change in ice surface features, which could preclude successful
correlations. Therefore, use of a larger window size may yield an unacceptably sparse
, ,,.
d ' "
I
the 07/08 ""lOr r",kI used ..... ic .,irxlo", suo "f 32. 32 "",els, which """"""IS rot ,he
com:lation< .. -ilhin .... '-<!o<;'Y field. Thi. explain! the: difference in aocutaCy .... ,,-=
TDO<J>holoJi<ol chang< in lee surf_ features. whi<h could ...,., ... tbl
""""I .. ions. use of I t.uget v.'i_ may ykkl on wuccopubly opan<
109
vector field, which then forces the use of the next smallest window size. Ultimately, a
balance between the accuracy, as determined by SNR, and spatial extent of a vector field
must be found, which typically can only be achieved by multiple trial runs of COSI-Corr.
And because each unique satellite image pair has differing geometry, illumination, and
calendar dates, they will require unique search parameters.
In the end, SNR can be a guide to the relative accuracy of a velocity field, but it
should not be used as the sole discriminator to judge the worthiness of a single vector,
nor an entire vector field. Spatial extent must also be considered when deciding whether a
velocity field meets the user' s needs, and direction and magnitude are better quantities to
use when assessing the quality of an individual vector.
The successful application of COSI-Corr' s frequential correlator to 30-meter
Landsat-5 TM imagery spanning one year and its failure when applied to 15-meter
ASTER imagery spanning two years suggests the correlation process is less sensitive to
the spatial resolution of the imagery than it is to the time span between the images.
However, it is not simply the time span between two images that causes the correlation
process to fail locally; it is the morphological change in ice surface features caused by
displacement and ablation over two years that inhibits accurate correlation.
3.9 McCarty Vector Field Derived From Landsat-5 Imagery
A velocity field was produced for McCarty Glacier from 2006 and 2007 Landsat-
5 TM images using COSI-Corr' s frequential correlator (Figure 3.42). Due to cloud cover
in the 2008 image, a 2007/08 velocity field could not be produced. The 2006/07 velocity
field shows the ice from the northern tributaries moves steadily at 100-150 m/yr for most
of their length. The ice from the western tributary enters the valley via an icefall, where
109
vector field, which then forces the use of the next smallest window size. Ultimately, a
balance between the accuracy, as determined by SNR, and spatial extent of a vector field
must be found, which typically can only be achieved by multiple trial runs of COSI-Corr.
And because each unique satellite image pair has differing geometry, illumination, and
calendar dates, they will require unique search parameters.
In the end, SNR can be a guide to the relative accuracy of a velocity field, but it
should not be used as the sole discriminator to judge the worthiness of a single vector,
nor an entire vector field. Spatial extent must also be considered when deciding whether a
velocity field meets the user's needs, and direction and magnitude are better quantities to
use when assessing the quality of an individual vector.
The successful application of COSI-Corr's frequential correlator to 30-meter
Landsat-S TM imagery spanning one year and its failure when applied to IS-meter
ASTER imagery spanning two years suggests the correlation process is less sensitive to
the spatial resolution of the imagery than it is to the time span between the images.
However, it is not simply the time span between two images that causes the correlation
process to fail locally; it is the morphological change in ice surface features caused by
displacement and ablation over two years that inhibits accurate correlation.
3.9 McCarty Vector Field Derived From Landsat-S Imagery
A velocity field was produced for McCarty Glacier from 2006 and 2007 Landsat-
S TM images using COSI-Corr's frequential correlator (Figure 3.42). Due to cloud cover
in the 2008 image, a 2007/08 velocity field could not be produced. The 2006/07 velocity
field shows the ice from the northern tributaries moves steadily at 1 00-ISO mlyr for most
of their length. The ice from the western tributary enters the valley via an icefall, where
110
MCCARTY GLACIER VECTOR FIELD
Figure 3.42. McCarty velocity field derived from 2006/07 Landsat-5 TM imagery and
COSI-Corr frequential correlator.
ogives form; COSI-Corr failed to produce any correlations due to extreme ice
deformation here. As the tributaries merge, ice from the north is accelerated as it is
incorporated with faster moving ice from the west. Two kilometers up from the toe,
crevasses form and again COSI-Corr fails to produce correlations. The ice decelerates to
speeds < 50 m/yr as it approaches the toe before calving into McCarty Fjord, ogives
form; COSI-Corr failed to produce any correlations due to extreme ice deformation here.
As the tributaries merge, ice from the north is accelerated as it is incorporated with faster
moving ice from the west. Two kilometers up from the toe, crevasses form and again
""
Figurt 3.42. ).1cCany >'<locity fleld <kri,'cd frnrn :1006.'07 Land ... S TM un.gay on<l
COSJ-COIT i'r<oquential """"Iator.
"ii,a form: COSI-COIT failed to prod"". OlIYrorTel .. ion$ d .. t" extreme ice
defonn.,ion here. AI .... lributaries nIa$<. ;00 from .... ""nh i. ""cclcnlcd U \l i.
Of: ,. <; SO mlyr .. it "I'proa<h<s .... to< bofo'" calvinil into McCany Fjord. <>giv ..
fonn; COSI-C<n flilod 10 prod"". any KI"OJotions due 10 nlreme k. deformation ~
I l l
COSI-Corr fails to produce correlations. The ice decelerates to speeds < 50 m/yr as it
approaches the toe before calving into McCarty Fjord.
Longitudinal elevation and velocity profiles (transects A-A' , B-B' , and C- C in
Figure 3.42) are constructed to correlate ice surface speed with topography and to
estimate the primary flow mechanisms (Figures 3.43a-c). Farthest upglacier, the ice
gradually accelerates from just under 100 m/yr at location A' to 175 m/yr at the 4.5 km
mark, while the elevation gradient remains uniform. At the 4.5 km mark, there is a break
in the velocity data as the transect traverses laterally west to capture data across the
ogives. During this traverse, the ice surface elevation slightly rises and falls, delineating
the boundary between ice from the north and ice from the western tributary. This rise in
ice surface elevation suggests that the ice from the west piles up against ice from the
north as the two masses merge and ice from the west seeks to establish itself near the
valley bottom. Traversing southward across the ogives, there is a general decline in
velocity from roughly 220 m/yr to 170 m/yr over a distance of 1.5 km. Between the 2.0
and 2.5 km marks, there is another gap in the velocity data that coincides with a steep
decline in elevation and the formation of crevasses. It is possible that there is a rapid rise
in ice velocity as ice moves down the steep incline, but due to the crevassing, no
correlations were found in this region to verify such behavior. At the 1 km mark, the ice
velocity stabilizes just below 50 m/yr until it calves into McCarty Fjord.
The dominant mechanism for ice flow can be determined by examining transverse
velocity profiles B-B' and C- C (Figures 3.43b,c). Upglacier, profile C- C shows
velocities ranging from 115 m/yr along the western margin to < 95 m/yr along the eastern
COSI-Corr fails to produce correlations. The ice decelerates to speeds < 50 mlyr as it
approaches the toe before calving into McCarty Fjord.
111
Longitudinal elevation and velocity profiles (transects A-A', B-B', and C-C' in
Figure 3.42) are constructed to correlate ice surface speed with topography and to
estimate the primary flow mechanisms (Figures 3.43a-c). Farthest upglacier, the ice
gradually accelerates from just under 100 mlyr at location A' to 175 mlyr at the 4.5 km
mark, while the elevation gradient remains uniform. At the 4.5 km mark, there is a break
in the velocity data as the transect traverses laterally west to capture data across the
ogives. During this traverse, the ice surface elevation slightly rises and falls, delineating
the boundary between ice from the north and ice from the western tributary. This rise in
ice surface elevation suggests that the ice from the west piles up against ice from the
north as the two masses merge and ice from the west seeks to establish itself near the
valley bottom. Traversing southward across the ogives, there is a general decline in
velocity from roughly 220 m/yr to 170 mlyr over a distance of 1.5 km. Between the 2.0
and 2.5 km marks, there is another gap in the velocity data that coincides with a steep
decline in elevation and the formation of crevasses. It is possible that there is a rapid rise
in ice velocity as ice moves down the steep incline, but due to the crevassing, no
correlations were found in this region to verify such behavior. At the 1 km mark, the ice
velocity stabilizes just below 50 m/yr until it calves into McCarty Fjord.
The dominant mechanism for ice flow can be determined by examining transverse
velocity profiles B-B' and C-C' (Figures 3.43b,c). Upglacier, profile C-C' shows
velocities ranging from 115 mlyr along the western margin to < 95 mlyr along the eastern
McCarty Velocity: Transverse Profile C-C
250
225
200
g
175
>-
1
150
>
125
100
75
Distance from west to east along C-C (meters)
Figure 3.43. Profiles for 2006/07 velocity field of McCarty Glacier, a) Longitudinal
elevation and velocity profile A-A' , b) Transverse profile B-B' . c) Transverse profile C-
C.
III
... ' "...,
.'.'
-
,
-
!
-
-
I
-
-
'-
i:V _____
,. .
-
"
..
.,
- " .. .. ..
oj
--_.-.....
" .... __ ..
-
,
-
'"
I
0
'. ,.
' .
-
' .
'*
'.
"
--_ .. --.. .. ,-
l ' ..... _e-c
-
-
,
-
,
'"
I
, .
,.
' .
,J
_ _ _ ., __ e-c_
3.43, Ptcfil .. rOt 2006107 \'do<j,y fi.1d or M<cany GI.d"".) Longi,""inol
.kvati"" and ,.io<;'y profik A A', b) Tr2IIS, ..... profok 8,9', <) Tr2IIS\' ..... profik C-
O'.
113
margin, with little variation in between. The relatively uniform speed across the glacier
suggests that basal slip dominates ice movement in this region of the glacier.
Downglacier, after the western tributary merges with the northern tributaries, both basal
slip and internal ice deformation contribute significantly to ice movement, as is seen in
the shape of transect B-B' (Figure 3.43b). The ice is moving too fast to be entirely
attributed to deformation, up to 215 m/yr in the glacier's midsection, drag along the
valley walls slows the velocity along the west margin to 170 m/yr, and it slows the east
margin to 130 m/yr. The obvious parabolic shape of the profile indicates the effect of
internal ice deformation superimposed on the basal slip component of ice movement.
To confirm COSI-Corr' s accuracy, seven locations upon McCarty Glacier were
chosen for visual calculation of velocity to compare with COSI-Corr's results. The
locations are shown as points A-G in Figure 3.44, and their corresponding velocities are
summarized in Table 3.3. Point A, nearest the toe, has only a 2 m/yr difference between
the visual determination of speed and COSI-Corr' s velocity, the smallest difference in the
group. Point B is in the crevasse field and gives a 20 m/yr difference between the two
methods of calculating velocity. Point C is located within the longitudinal moraine on the
west side of the glacier and there is a 10 m/yr difference between the two methods at this
location. Point D is located in the center of the ogives and the two velocity calculation
methods agree to within 3 m/y of each other at this point. Point E is located in the thick
moraine along the east side of McCarty Glacier and there is only a 7 m/yr difference
found here. Points F and G are located on debris flows atop the ice in the northern
tributary. At point F, on the smaller southern debris flow, the visual method gives a speed
of 168 m/yr while COSI-Corr gives 142 m/yr, a difference of 26 m/yr, which is the
113
margin, with little variation in between. The relatively uniform speed across the glacier
suggests that basal slip dominates ice movement in this region of the glacier.
Downglacier, after the western tributary merges with the northern tributaries, both basal
slip and internal ice deformation contribute significantly to ice movement, as is seen in
the shape of transect B-B' (Figure 3.43b). The ice is moving too fast to be entirely
attributed to deformation, up to 215 m/yr in the glacier'S midsection, drag along the
valley walls slows the velocity along the west margin to 170 m/yr, and it slows the east
margin to 130 m/yr. The obvious parabolic shape of the profile indicates the effect of
internal ice deformation superimposed on the basal slip component of ice movement.
To confirm COSI-Corr's accuracy, seven locations upon McCarty Glacier were
chosen for visual calculation of velocity to compare with COSI-Corr's results. The
locations are shown as points A-G in Figure 3.44, and their corresponding velocities are
summarized in Table 3.3. Point A, nearest the toe, has only a 2 m/yr difference between
the visual determination of speed and COSI-Corr's velocity, the smallest difference in the
group. Point B is in the crevasse field and gives a 20 m/yr difference between the two
methods of calculating velocity. Point C is located within the longitudinal moraine on the
west side of the glacier and there is a 10 m/yr difference between the two methods at this
location. Point D is located in the center of the ogives and the two velocity calculation
methods agree to within 3 m/y of each other at this point. Point E is located in the thick
moraine along the east side of McCarty Glacier and there is only a 7 m/yr difference
found here. Points F and G are located on debris flows atop the ice in the northern
tributary. At point F, on the smaller southern debris flow, the visual method gives a speed
of 168 m/yr while COSI-Corr gives 142 m/yr, a difference of26 m/yr, which is the
114
2006/07 McCarty Glacier
velocity raster
G
32.7 146.2 259.7 (m/yr)
Figure 3.44. Velocity raster showing location of points used for visual calculation of
velocity.
Table 3.3. Comparison of visually determined velocity with COSI-Corr' s results for
McCarty Glacier, 2006/07.
Point
Visual
speed
(m/yr)
COSI-Corr
speed
(m/yr)
Difference
(m/yr)
Difference
(pixels)
Percent
Difference
A 44 42 2 0.06 4.5%
B 88 108 20 0.64 18.5%
C 129 139 10 0.32 7.2%
D 258 255 3 0.10 1.1%
E 140 133 7 0.22 5.0%
F 168 142 26 0.83 15.5%
G 113 96 17 0.54 15.0%
'"
Fiaun: 3.44. V.loony rut .. >howl"1I location of pOll". USO<l tor ,i...al <ak"lotion of
v<loci,y_
Tobl. 3.3. Comparison ohi...ally d .. ermi<>Od v.lo<oty "i\h COSI.cOlT'" ..,I .. for
MoCany GI""ier. 2006107.
Poin,
115
largest of the group, but still less than one pixel. At point G on the nort hern larger debris
flow, the difference bet ween the t wo met hods is 17 m/yr. Interestingly, t wo of the most
easily t raceabl e features, the debris flows, produce some of the greatest differences
bet ween the visual met hod of velocity det ermi nat i on and COSI - Cor r ' s results. Wi t hi n this
group of poi nt s, neither COSI-Corr nor the visual met hod consistently produced larger or
smaller velocities t han t he other met hod, unl i ke t he vel oci t y field of Tust umena Glacier
in whi ch the visual met hod repeatedly underest i mat ed velocity compared to COSI-Corr.
Overall, there is no mor e t han 0.83 pixel difference bet ween the visual met hod of velocity
calculation and COSI - Cor r ' s frequential correlator (Point F), wi t h half the poi nt s giving
results wi t hi n Vi pixel or less. The average difference bet ween the t wo vel oci t y
det ermi nat i on met hods is 12.1 m/ yr (0.39 pixel), and the average percent difference is
9. 54%. This general agreement bet ween the t wo met hods of velocity det ermi nat i on
provi des some confidence in COSI - Cor r ' s results.
To further confirm the l egi t i macy of McCar t y Gl aci er' s vel oci t y field, streamlines
were produced to check the directional accuracy. Fi ve seeds were pl aced in the velocity
field (Figure 3.45) at strategic locations to test the accuracy of the velocity field across its
length and wi dt h. Seeds A and B were pl aced at the head of the t wo nort hern tributaries
and their streamlines proceed downgl aci er wi t hout veeri ng across the medi al morai ne
bet ween t hem, nor do t hey di verge t owards either margi n. Seeds C and D wer e pl aced
j ust bel ow the icefall in the west ern tributary and their streamlines proceed as expect ed
down the ogi ves wi t hout any percei ved bias t owards the west ern margi n or the eastern
medi al morai nes. The streamline for seed D ends where the crevasses form and there is a
data gap in the vel oci t y field. Subsequently, seed E was pl aced i mmedi at el y downgl aci er
115
largest of the group, but still less than one pixel. At point G on the northern larger debris
flow, the difference between the two methods is 17 m/yr. Interestingly, two of the most
easily traceable features, the debris flows, produce some of the greatest differences
between the visual method of velocity determination and COSI-Corr's results. Within this
group of points, neither COSI-Corr nor the visual method consistently produced larger or
smaller velocities than the other method, unlike the velocity field of Tustumena Glacier
in which the visual method repeatedly underestimated velocity compared to COSI-Corr.
Overall, there is no more than 0.83 pixel difference between the visual method of velocity
calculation and COSI-Corr's frequential correlator (Point F), with half the points giving
results within 12 pixel or less. The average difference between the two velocity
determination methods is 12.1 m/yr (0.39 pixel), and the average percent difference is
9.54%. This general agreement between the two methods of velocity determination
provides some confidence in COSI-Corr's results.
To further confirm the legitimacy of McCarty Glacier's velocity field, streamlines
were produced to check the directional accuracy. Five seeds were placed in the velocity
field (Figure 3.45) at strategic locations to test the accuracy of the velocity field across its
length and width. Seeds A and B were placed at the head of the two northern tributaries
and their streamlines proceed downglacier without veering across the medial moraine
between them, nor do they diverge towards either margin. Seeds C and D were placed
just below the icefall in the western tributary and their streamlines proceed as expected
down the ogives without any perceived bias towards the western margin or the eastern
medial moraines. The streamline for seed D ends where the crevasses form and there is a
data gap in the velocity field. Subsequently, seed E was placed immediately downglacier
MCCARTY GLACER STREAMLINES
Figure 3.45. Streamlines that follow 2006/07 McCarty Glacier velocity field.
'"
f i ~ " ... 3.4S. S, ... .",,, ... \1'1.1, rOIIovo" 2006101 MCC .... y GI.d .. "C!o<ily field.
of the terminus of the streamline for seed D, and its path proceeds to the glacier toe
without any perceived bias. Overall, the streamlines produced from McCarty Glacier's
velocity field do not contain any visually detectable bias, which suggests the
directionality of the velocity field is accurate and the systematic error was effectively
removed.
When McCarty' s vector field is color-coded according to SNR (Figure 3.46), it
reveals that most of the vectors have a SNR between 0.99 and 0.94 (yellow), a few
MCCARTY GLACIER VECTOR FIELD
COLOR CODED BY SNR
Figure 3.46. McCarty vector field color coded by signal-to-noise ratio.
of .... lamiD" of .... otrcamlinc fOr seal D, or.d its p.alh proceeds Ie .... "'"
" 'ilhoul .. y prn:<ivod bias. O", .... lllh< suumlin .. from McCo.ny GI..,ict'.
"elo<ily fiotel do "'" .,...,lain .. y "itually eI .. oetsble ... ,,"'hioh .... gg<st.Ih.
oftl>e '-.Io<;ly field is ..,"""". or.d .... systematic....". ...... (foeli,-.Iy
mnQ'od.
Wba:> McCarty's.ertor field i. coloM:odod occooding Ie SSR (Fill"f< ;1
",,-ua litst mos:t of .... '-I"" have. S:-'"R bet .-em 0.99 ond 0.94 {yellow}. a few
"iI'", 3.46. ,'>1cCany '<ClOt fi.1d color codod by ,.;g"al-IC--noi .. ",,;0.
118
vectors in the northern tributary have SNR > 0.99 (red), and a handful of vectors around
the ogives and near the toe have SNR < 0.8 (purple). As with Tustumena Glacier's vector
fields, there is a curious lack of vectors with SNR between 0.94 and 0.80. If a SNR
threshold of 0.99 had been applied during the vector sorting routines, as suggested by
Leprince et al. (2007a), the vector field would be nearly empty and the correlation
process considered a failure. However, as just discussed, the vectors produced by COSI-
Corr are accurate and simply because the vectors do not have SNR > 0.99 does not mean
they should be discarded, but rather that they were produced using a smaller search
window size (32x32). The lower SNR and higher velocity difference between the visual
and automatic techniques of McCarty Glacier's velocity field suggests higher SNR
correlates with better accuracy, but not necessarily better spatial extent, which is why the
velocity field produced using a 32x32 search window was chosen for this study.
3.10 Positive Degree Days, Time Span, and Location Comparison
While deformation of ice surface features due to large displacements may
influence the local success or failure of feature tracking algorithms within a particular
area of a glacier, a region' s climate and associated melt intensity will determine the
maximum time span that can be accommodated by feature tracking. As a relative measure
of the amount of ablation on Harding Icefield, the number of positive degree days (PDD)
was calculated. The degree day was first introduced by Lt. Gen. Richard Strachey,
Chairman of the Meteorological Council and later described by R. H. Scott (Scott, 1884,
p.354) as "1 F of excess or defect of temperature above or below [freezing] continued
for twenty-four hours." Therefore, the PDD may be considered the "accumulated
118
vectors in the northern tributary have SNR> 0.99 (red), and a handful of vectors around
the ogives and near the toe have SNR < 0.8 (purple). As with Tustumena Glacier's vector
fields, there is a curious lack of vectors with SNR between 0.94 and 0.80. If a SNR
threshold of 0.99 had been applied during the vector sorting routines, as suggested by
Leprince et al. (2007a), the vector field would be nearly empty and the correlation
process considered a failure. However, as just discussed, the vectors produced by COSI-
Corr are accurate and simply because the vectors do not have SNR > 0.99 does not mean
they should be discarded, but rather that they were produced using a smaller search
window size (32x32). The lower SNR and higher velocity difference between the visual
and automatic techniques of McCarty Glacier's velocity field suggests higher SNR
correlates with better accuracy, but not necessarily better spatial extent, which is why the
velocity field produced using a 32x32 search window was chosen for this study.
3.10 Positive Degree Days, Time Span, and Location Comparison
While deformation of ice surface features due to large displacements may
influence the local success or failure of feature tracking algorithms within a particular
area of a glacier, a region's climate and associated melt intensity will determine the
maximum time span that can be accommodated by feature tracking. As a relative measure
of the amount of ablation on Harding Icefield, the number of positive degree days (PDD)
was calculated. The degree day was first introduced by Lt. Gen. Richard Strachey,
Chairman of the Meteorological Council and later described by R. H. Scott (Scott, 1884,
p.354) as "10 F of excess or defect of temperature above or below [freezing] continued
for twenty-four hours." Therefore, the PDD may be considered the "accumulated
119
J l I I 1 , 1 1 L
2000 2001 2002 2003 2004 2005 2006 2007 2008
Year
Figure 3.47. PDD for Seward, AK; NASA SE AWS Greenland; Pyramid station
Himalayas.
temperature" or "positive effective temperature" for a given location and time span.
Meteorological data from Seward, AK (NOAA website), northeast of Harding Icefield,
yields PDD for 2000-2008 (Figure 3.47) ranging from a high of 1713 in 2005 to a low of
1140 in 2008 and an average PDD value of 1456. A lapse rate of 6.5 C per 1000 m was
applied to adjust the temperatures, recorded at 18 meters above sea level, to an equivalent
temperature at 400 m above sea level at the midpoint along Tustumena' s ablation zone.
These values can be compared to PDD values of locations where other similar studies
using feature tracking have been performed with successful results. A recent investigation
of Khumbu Glacier, Nepal (Scherler et al., 2008) successfully used COSI-Corr to
generate velocity fields with sequential ASTER images that spanned up to 3.95 years
(Sept. ' 01 to Aug. ' 05). Khumbu Glacier is a slow moving glacier (< 50 m/yr) at high
altitude, above 5000 meters; consequently, the PDD for this location are quite low, 346
and 298 for 2003 and 2004, respectively (Figure 3.47) (NASA Goddard Space Flight
PDD Comparison
1800
'"
Mnoorolopaol data from s.,..'onI. AK (N"OAA "d .. oonheas> ofHording lcofield,
yield. POD for 200().2008 (Figut<" 3.4 7) ranging from high of 17lJ in 2005 10 10 .. ' of
1140 in 2008 anol on "-er>,. POD ,'.II!< of A lap$< .. ,. ,,{6.S C 1000 m "''25
applied '" odjUOl the 1omper:a1ure<. =<>rded .. 18 m ..... abo, ..... la..,1. 10 on Iuival"",
"""'p<mur< .. 400 m obove ... kvel at II>< midpoint alooa TU$lurnma', abl .. ioo .......
ll>est .'.1 .... oan be O<HJ\pamI '" POD '-"ues ofloc .. ions ........ OIlIer ';mil ... <tOOi ..
of Khumbu Gloci ..... Nopal (Sebert ........ 201)8) successfully ...d COSICOIT 10
i""<"". ,.10<:;'1 fields wilb ><q...mial ASTER imap tha1 up 10 ] .95 YC""
(Sq>!. '01 lO Aug. ',"). Khumbll GI .. i ... is I .to"" ",,,ina g1""i .... SO "")'1") at high
and 298 for 200J and 2001. respecli ly (Fipn: 3.47) (NASA C"""'onl SI*<" Flil/OI
a
i!
POD Comparison
,-
".
-
-
,.
,
1<100 XIO. >00, 100) 1000 1<lOS 1006 1007 loot
Vur
Figu'd_47. POD fQr s.:..-.nJ, AK: N...s,o. SE AWS Greenland, Pyr2mid".'ion
Himalayas.
120
Center Global Change Master Directory website), and associated ablation and
morphological change of ice surface features would also be low. This allows correlations
across multiple years.
Many investigations that have used optical feature tracking methods were done
using sequential images spanning only one ablation season, or within a single ablation
season. An example of this type of work was performed in SE Greenland (Howat et al.,
2008) in which 32 glaciers were analyzed with an algorithm similar to IMCORR using 16
day repeat pass ASTER imagery during the 2001-06 seasons. The shorter time span
between sequential images in this study is likely necessary as it was found many of the
outlet glaciers are moving several kilometers per year. However, the PDD, again adjusted
for elevation, for southeast Greenland (Steffen et al., 1996) for the time period of the
study is almost uniformly below 1000, so surface ablation is likely less than experienced
at Harding Icefield, and it may be possible to correlate across longer time spans in
southeast Greenland.
Many other notable studies have successfully used optical feature tracking
techniques in areas of low ablation: Antarctica (Bindschadler & Scambos, 1991;
Bindschadler et al., 1994 and 1996; Whillans & Tseng, 1995), Svalbard (Dowdeswell &
Benham, 2003; Kaab, et al., 2005; Rolstad et al., 1997), the Himalayas (Kaab, 2005;
Scherler et al., 2008), western Greenland (Joughin et al., 2004), and Ellesmere Island
(Copland et al., 2003; Williamson et al., 2008). All these studies were performed either in
areas above the Arctic Circle, in Antarctica, or at high altitude, so the effects of ablation
on ice surface features are sufficiently small to allow successful correlation between
images and generation of spatially complete and accurate velocity fields. Several other
120
Center Global Change Master Directory website), and associated ablation and
morphological change of ice surface features would also be low. This allows correlations
across multiple years.
Many investigations that have used optical feature tracking methods were done
using sequential images spanning only one ablation season, or within a single ablation
season. An example of this type of work was performed in SE Greenland (Howat et aI.,
2008) in which 32 glaciers were analyzed with an algorithm similar to IMCORR using 16
day repeat pass ASTER imagery during the 2001-06 seasons. The shorter time span
between sequential images in this study is likely necessary as it was found many of the
outlet glaciers are moving several kilometers per year. However, the PDD, again adjusted
for elevation, for southeast Greenland (Steffen et aI., 1996) for the time period of the
study is almost uniformly below 1000, so surface ablation is likely less than experienced
at Harding Icefield, and it may be possible to correlate across longer time spans in
southeast Greenland.
Many other notable studies have successfully used optical feature tracking
techniques in areas of low ablation: Antarctica (Bindschadler & Scambos, 1991;
Bindschadler et aI., 1994 and 1996; Whillans & Tseng, 1995), Svalbard (Dowdeswell &
Benham, 2003; Kaab, et aI., 2005; Rolstad et aI., 1997), the Himalayas (Kaab, 2005;
Scherler et aI., 2008), western Greenland (Joughin et aI., 2004), and Ellesmere Island
(Copland et aI., 2003; Williamson et aI., 2008). All these studies were performed either in
areas above the Arctic Circle, in Antarctica, or at high altitude, so the effects of ablation
on ice surface features are sufficiently small to allow successful correlation between
images and generation of spatially complete and accurate velocity fields. Several other
121
PDD vs Velocity for Selected Regions
*C 2500
>
2000
"5 1500
_o
> 1000
La
500
CO
SE Greenland
Svalbard
Antarctic
y v Himalayas
Alaska
500 1000 1500 2000
Positive Degree Days
New Zealand
2500 3000
Figure 3.48. Comparison of glacier velocity and positive degree days (PDD) for selected
glaciated regions.
studies have used imagery spanning a single ablation season in areas outside the polar
regions: New Zealand (Kaab, 2002; Quincey & Glasser, 2009), Norway (Jackson et al.,
2005), the Karakoram Range (Copland et al., 2009), and Kyrgyzstan (Mayer et al., 2008).
To further illustrate the unique position of southern Alaskan glaciers with regards
to ablation and location, a plot of PDD vs. glacier velocity for five selected glaciated
regions is provided (Figure 3.48). Although this represents a small sampling of
worldwide glaciated areas, southern Alaska clearly stands out with relatively slow
velocities and high ablation, which reaffirms the potential difficulties of successfully
applying optical feature tracking techniques there.
Based on the results of this study and the choices made by numerous other
'"
Now Zealand (KUb. 2002, Quin<ey &; Glosser. No", .. y (Jac' ,"" ... 01.,
LlIe Karakoram Range (Copland .. 01 . 20(9). and KJ'IlIY.tIIan (.\layer .. ol .
to oblation and \oc>lion plo! .. fPDD , ... iI.der .elocity f .. , five .. Itcd i1aci .. cd
r<gioru i. provided (Figure 3.48). ,0.1"""'$1> Ihi. . .... all <amplina of
"PI'lyi"ll opIicaI reat"'" IIac kini 'ectmiquell Ih<r<.
Based on <h resulls of "'i. OIudy and thc: obo;o .. made by num<!'OllS OIlIer
poe yS Velocity forSetected Regions
o Sf Greenl .....
S lb.rd
o AnU'etic
o cO ,
4' New Zul. nd
, ,
Figure 3.48, Cornpmoon of gloci ...... loci'y and 1>0';1;". degrt< days (POD) rot .. 1,1
glaci.,cd "'Ill"'"
122
researchers, it is clear that avoiding scenarios that lead to large ice surface ablation, such
as long time spans between images, is preferable when attempting correlations. This does
not bode well for south-central Alaska, which has high ablation rates (based on PDD
data) and exists in a continental subarctic environment. Future feature tracking studies in
this area should be restricted to a one-year time span, or within a single ablation season,
to ensure favorable results.
122
researchers, it is clear thai avoiding scenarios that lead to large icc surface ablation, such
as long lime spans between images, is preferable when attempting correlations. This does
not bode well for south-central Alaska, which has high ablation rales (based on PDD
data) and exists in a continental subarctic environment. Future feature tracking studies in
this area should be restricted to a one-year time span, or within a single ablation season,
to ensure favorable results.
4. CONCLUSIONS AND FUTURE WORK
4.1 Research Objectives
The first of the proposed research objectives, to test the feasibility of using feature
tracking software on moderate resolution satellite imagery to verify whether it can
determine ice surface velocities on Harding Icefield's outlet glaciers, was successfully
achieved. COSI-Corr' s frequential correlator successfully produced accurate velocity
fields for Tustumena and McCarty Glaciers using 30-meter Landsat-5 TM image pairs
separated by one year. This success opens the door for future exploration into the ice
dynamics of Harding Icefield's outlet glaciers as Thematic Mapper data extend back
several decades and the opportunity now exists to correlate glacier movement with past
temperature and melt intensity data. However, there are significant limitations to the
application of feature tracking in southern Alaska. IMCORR could only produce
correlations when binary edge maps were provided, which are of questionable accuracy.
Satellite imagery must be restricted to one-year time spans, even with higher resolution
imagery such as ASTER, to minimize the effects of ablation. This last limitation will
make obtaining sequential, cloud-free imagery of southern Alaska difficult.
The second of the proposed research objectives, to determine the annual ice
surface velocities on Harding Icefield's outlet glaciers using feature tracking software,
was also successfully achieved, in part. Although only a few spatially extensive, accurate
velocity fields were produced, on Tustumena and McCarty Glaciers, it is expected the
4. CONCLUSIONS AND FUTURE WORK
4.1 Research Objectives
The first of the proposed research objectives, to test the feasibility of using feature
tracking software on moderate resolution satellite imagery to verify whether it can
determine ice surface velocities on Harding Icefield's outlet glaciers, was successfully
achieved. COSI-Corr's frequential correlator successfully produced accurate velocity
fields for Tustumena and McCarty Glaciers using 30-meter Landsat-5 TM image pairs
separated by one year. This success opens the door for future exploration into the ice
dynamics of Harding Icefield's outlet glaciers as Thematic Mapper data extend back
several decades and the opportunity now exists to correlate glacier movement with past
temperature and melt intensity data. However, there are significant limitations to the
application of feature tracking in southern Alaska. IMCORR could only produce
correlations when binary edge maps were provided, which are of questionable accuracy.
Satellite imagery must be restricted to one-year time spans, even with higher resolution
imagery such as ASTER, to minimize the effects of ablation. This last limitation will
make obtaining sequential, cloud-free imagery of southern Alaska difficult.
The second of the proposed research objectives, to determine the annual ice
surface velocities on Harding Icefield's outlet glaciers using feature tracking software,
was also successfully achieved, in part. Although only a few spatially extensive, accurate
velocity fields were produced, on Tustumena and McCarty Glaciers, it is expected the
124
methodology that was developed will work for Harding Icefield's numerous other
glaciers and a complete record of ice surface velocities for Harding Icefield's outlet
glaciers will be produced in time.
The third research objective, to study the spatial distribution of ice surface
velocity in and among glaciers and the glaciological implications revealed by the velocity
fields, was also achieved. The velocity fields for Tustumena and McCarty Glacier are
spatially extensive and accurate enough to allow examination of the variability in ice
surface speed along the length of each glacier, between glaciers and across time. The
velocity fields also allowed determination of each glacier's chief mechanism of flow and
illuminated the effects of surface slope and reverse-dipping moraines.
Future work could involve computing the velocity fields for numerous glaciers
during previous years using Landsat-4 and 5 TM data (1980s and 1990s) and ASTER
data (2000s) to determine whether the glaciers have experienced an overall acceleration
or deceleration, and then attempt to correlate changes in speed (if any) with changes in
temperature and melt intensity. The inclusion of the remaining glaciers in Harding
Icefield and Grewingk-Yalik Glacier Complex would also aid in determining whether
regional influences such as climate have a greater control over ice velocity or whether
local physical conditions such as basal topography, slope, aspect, and terminus type exert
control over ice velocity.
4.2 Changes in Methodology
Throughout the course of this research, the methodology was revised to
incorporate what was learned enroute. For instance, the decision to forego image-to-
image georeferencing after it was learned the systematic offset between sequential
methodology that was developed will work for Harding Icefield's numerous other
glaciers and a complete record of ice surface velocities for Harding Icefield's outlet
glaciers will be produced in time.
124
The third research objective, to study the spatial distribution of ice surface
velocity in and among glaciers and the glaciological implications revealed by the velocity
fields, was also achieved. The velocity fields for Tustumena and McCarty Glacier are
spatially extensive and accurate enough to allow examination of the variability in ice
surface speed along the length of each glacier, between glaciers and across time. The
velocity fields also allowed determination of each glacier's chief mechanism of flow and
illuminated the effects of surface slope and reverse-dipping moraines.
Future work could involve computing the velocity fields for numerous glaciers
during previous years using Landsat-4 and 5 TM data (1980s and 1990s) and ASTER
data (2000s) to determine whether the glaciers have experienced an overall acceleration
or deceleration, and then attempt to correlate changes in speed (if any) with changes in
temperature and melt intensity. The inclusion of the remaining glaciers in Harding
Icefield and Grewingk-Yalik Glacier Complex would also aid in determining whether
regional influences such as climate have a greater control over ice velocity or whether
local physical conditions such as basal topography, slope, aspect, and terminus type exert
control over ice velocity.
4.2 Changes in Methodology
Throughout the course of this research, the methodology was revised to
incorporate what was learned enroute. For instance, the decision to forego image-to-
image georeferencing after it was learned the systematic offset between sequential
125
images is linear, was a direct result of many trial runs of the postprocessing methodology.
Once discovered, it was deemed important enough for the accuracy of the velocity fields
to make a change in methodology midway through the research. Exclusion of image-to-
image georeferencing allowed more accurate quantification and subtraction of the
systematic error while simplifying preprocessing of the imagery. Although it may seem
counter-intuitive to exclude the georeferencing step because it is logical to think the
images must be referenced to one another as precisely as possible before correlation is
attempted in order to find accurate offsets, the correlation algorithms were originally
developed for georeferencing. Therefore, when the vectors on stable land are analyzed,
the results represent the misalignment between the two images, and in effect,
georeferencing is being performed when the systematic error is quantified and subtracted.
IMCORR' s parameter space had to be modified late in the research as a result of
what was learned enroute. This modification represented a major change in the
methodology, but it too was justifiable to achieve accurate results. The use of different
reference area sizes, different kernel sizes in directional filters, and different angles of
directional filters all led to EVICORR finding different magnitudes of offsets at the same
pixel location between separate runs. Because this caused unrealistic inconsistencies
within the resulting velocity field, IMCORR' s parameter space had to be reduced to a
single, consistent reference area size and the use of only 3x3 kernels in directional filters.
This reduction in IMCORR' s parameter space led to a reduction in inconsistencies within
the velocity field, but also a reduction in the overall number of correlations found on a
glacier and a sparse vector field, and it did not entirely eliminate the inconsistencies in
velocity. IMCORR' s failure to produce consistent results when run with different input
125
images is linear, was a direct result of many trial runs of the postprocessing methodology.
Once discovered, it was deemed important enough for the accuracy of the velocity fields
to make a change in methodology midway through the research. Exclusion of image-to-
image georeferencing allowed more accurate quantification and subtraction of the
systematic error while simplifying preprocessing of the imagery. Although it may seem
counter-intuitive to exclude the georeferencing step because it is logical to think the
images must be referenced to one another as precisely as possible before correlation is
attempted in order to find accurate offsets, the correlation algorithms were originally
developed for georeferencing. Therefore, when the vectors on stable land are analyzed,
the results represent the misalignment between the two images, and in effect,
georeferencing is being performed when the systematic error is quantified and subtracted.
IMCORR's parameter space had to be modified late in the research as a result of
what was learned enroute. This modification represented a major change in the
methodology, but it too was justifiable to achieve accurate results. The use of different
reference area sizes, different kernel sizes in directional filters, and different angles of
directional filters allIed to IMCORR finding different magnitudes of offsets at the same
pixel location between separate runs. Because this caused unrealistic inconsistencies
within the resulting velocity field, IMCORR's parameter space had to be reduced to a
single, consistent reference area size and the use of only 3x3 kernels in directional filters.
This reduction in IMCORR's parameter space led to a reduction in inconsistencies within
the velocity field, but also a reduction in the overall number of correlations found on a
glacier and a sparse vector field, and it did not entirely eliminate the inconsistencies in
velocity. IMCORR's failure to produce consistent results when run with different input
126
parameters implies the program is very sensitive to its input parameters and its
performance is neither predictable nor stable for Harding Icefield glaciers. Even after
hundreds of trial runs, it is not clear what set of parameters will produce the most
accurate and spatially extensive results.
A third change in methodology implemented midway through the research was
the introduction of the feedback loop and variable window size used to remove
anomalous vectors. This change greatly reduced postprocessing time while solving a
chronic problem: anomalous vectors immune to automatic removal by neighborhood
analysis. The success of this method eliminates the need for the subjective, manual
deletion of outliers and ensures that all vectors that are plotted on a glacier are the result
of an unbiased selection process via dynamic, localized, self-adjusting thresholds.
Future methodology modifications may include automating the preprocessing or
postprocessing procedures.
4.3 IMCORR and COSI-Corr
Of the three correlator engines used in this research, COSI-Corr' s frequential
correlator produced the most spatially consistent and accurate velocity fields on the
glaciers, while both statistical correlator engines, IMCORR and COSI-Corr' s statistical
correlator, produced velocity fields with more spatial inconsistencies in velocity and thus
less reliable results.
Overall, both of COSI-Corr' s correlator engines proved to be more robust than
IMCORR. COSI-Corr can produce vector fields on a glacier using a wide variety of
images: high passed, low passed, median filtered, PC A, or ASTER band 3N. COSI-
Corr' s ability to derive accurate velocities when given only a single unfiltered, non-
parameters implies the program is very sensitive to its input parameters and its
performance is neither predictable nor stable for Harding Icefield glaciers. Even after
hundreds of trial runs, it is not clear what set of parameters will produce the most
accurate and spatially extensive results.
126
A third change in methodology implemented midway through the research was
the introduction of the feedback loop and variable window size used to remove
anomalous vectors. This change greatly reduced postprocessing time while solving a
chronic problem: anomalous vectors immune to automatic removal by neighborhood
analysis. The success of this method eliminates the need for the subjective, manual
deletion of outliers and ensures that all vectors that are plotted on a glacier are the result
of an unbiased selection process via dynamic, localized, self-adjusting thresholds.
Future methodology modifications may include automating the preprocessing or
postprocessing procedures.
4.3 IMCORR and COSI-Corr
Of the three correlator engines used in this research, COSI-Corr's frequential
correlator produced the most spatially consistent and accurate velocity fields on the
glaciers, while both statistical correlator engines, IMCORR and COSI-Corr's statistical
correlator, produced velocity fields with more spatial inconsistencies in velocity and thus
less reliable results.
Overall, both ofCOSI-Corr's correlator engines proved to be more robust than
IMCORR. COSI-Corr can produce vector fields on a glacier using a wide variety of
images: high passed, low passed, median filtered, PCA, or ASTER band 3N. COSI-
Corr's ability to derive accurate velocities when given only a single unfiltered, non-
127
transformed band (ASTER 3N) reduces preprocessing time and data storage requirements
appreciably. IMCORR could only produce a vector field if binary edge maps were
supplied to the algorithm, and it failed to produce any vectors on a glacier using filtered,
transformed, or unfiltered images, whereas edge maps increased the amount and
magnitude of velocity inconsistencies for both of COSI-Corr's correlator engines.
It is now clear the correlation algorithms are more sensitive to the amount of
morphological ice surface change that occurred between sequential images and the
amount of ablation across the region than the spatial resolution of the images. More
accurate and spatially extensive velocity fields were produced for Tustumena and
McCarty Glaciers using Landsat-5 TM data with 30-meter spatial resolution 1 year apart
than were produced using 15-meter ASTER images 2 years apart. The successful
application of COSI-Corr to the 30-meter Landsat-5 TM data allows future studies to
reach back to the early 1980s using Landsat-4 and 5 TM data to produce a multidecadal
time series of ice surface velocity measurements.
Because COSI-Corr' s frequential correlator is robust, produces spatially
consistent results using minimally processed images, is significantly faster than the
statistical correlators, provides offset measurements to within 1/20 pixel or better, and is
confirmed to be accurate by comparison with visually calculated velocities and using
streamlines, it is the preferred correlation technique for future investigations.
Figure 4.1 illustrates the recommended preprocessing chain for Landsat TM
imagery before insertion into COSI-Corr. To maximize variability within the images, the
first principal component is calculated using the green, red, and NIR bands; the blue band
is omitted because of potential radiometric saturation. If the images contain scan line
127
transfonned band (ASTER 3N) reduces preprocessing time and data storage requirements
appreciably. IMCORR could only produce a vector field if binary edge maps were
supplied to the algorithm, and it failed to produce any vectors on a glacier using filtered,
transfonned, or unfiltered images, whereas edge maps increased the amount and
magnitude of velocity inconsistencies for both of COSI-Corr's correlator engines.
It is now clear the correlation algorithms are more sensitive to the amount of
morphological ice surface change that occurred between sequential images and the
amount of ablation across the region than the spatial resolution of the images. More
accurate and spatially extensive velocity fields were produced for Tustumena and
McCarty Glaciers using Landsat-5 TM data with 30-meter spatial resolution I year apart
than were produced using 15-meter ASTER images 2 years apart. The successful
application ofCOST-Corr to the 30-meter Landsat-5 TM data allows future studies to
reach back to the early 1980s using Landsat-4 and 5 TY[ data to produce a multidecadal
time series of ice surface velocity measurements.
Because COSI-Corr's frcquential correlator is robust, produces spatially
consistent results using minimally processed images, is significantly faster than the
statistical correlators, provides offset measurements to within 1120 pixel or belter, and is
confirmed to be accurate by comparison with visually calculated velocities and using
streamlines, it is the preferred correlation technique for future investigations.
Figure 4.1 illustrates the recommended preprocessing chain for Landsat TM
imagery before insertion into COSI-Corr. To maximize variability within the images, the
first principal component is calculated using the green, red, and NIR bands; the blue band
is omitted because of potential radiometric saturation. If the images contain scan line
128
Landsat
Image 1
Landsat
Image 2
PCA (G,R, NIR)
Destripe
Orthorectify
Crop glacier
image
Initial input
parameters
PCA (G,R, NIR)
Destripe
Orthorectify
Crop glacier
image
COSI-Corr frequential
correlator
Refined
input
parameters
Displacement
data
Postprocessing steps. See
Figure 2.5.
Figure 4. 1. Preprocessing steps for Landsat imagery.
128
Lond," /
Image I
/ Lond,,, /
Image 2
PCA (G,R, NIR) I PCA (G, R, NLR)
!
Dcstripe I Destripe I
Orthorcctify Orthorcctify
Crop glacier Crop gl acier
image image
I I
Initi a! input
COSI-CorT frcqucntial
parameters
I(
eorrelator
Refined
D"p[,,,moo/
input
/
oarameters
data
Postprocessing steps. See
Figure 2.5.
Figure 4.1. Preprocessing steps for Landsat imagery.
129
banding, it is removed using a customized EDL program based upon the method described
by Crippen (1989) (Appendix G - Destripe Image.pro). If the images are from different
satellites, for example one image from Landsat-4 and the second from Landsat-5, then
orthorectification will be necessary; if the two images are from the same satellite, then
the difference in the viewing geometry between the images is minimal and any error
introduced by the difference in viewing geometry is likely less than would be introduced
by orthorectification using a DEM with potentially larger errors (Dowdeswell & Benham,
2003; Kaab et al , 2005; Mayer et al., 2008; Scambos et al., 1992). Additionally, some
Landsat images are processed to level IT, meaning terrain correction is applied, so the
effects of topography are already accounted for upon receipt from USGS. A smaller,
cropped image of the glacier is taken from each Landsat image and inserted into COSI-
Corr' s frequential correlator and run with an initial set of parameters (window size, step
size). Because there is no optimal set of input parameters that can be used for every
image pair, trial runs are necessary to adjust the input parameters specific to the location,
geometry, illumination, and dates of the imagery. Subsequent runs will include refined
input parameters based on the output of the previous run until an acceptable result is
obtained. The preprocessing chain for ASTER imagery is quite simple: orthorectify band
3N images using COSI-Corr' s orthorectification module, crop images of the glacier from
the orthoimages, and then run the frequential correlator on the cropped images. The post
processing is the same as described in Chapter 2 and illustrated in Figure 2.5, except the
output from the neighborhood analysis will not include IMCORR' s parameter space.
129
banding, it is removed using a customized IDL program based upon the method described
by Crippen (1989) (Appendix G - Destripe Image.pro). If the images are from different
satellites, for example one image from Landsat-4 and the second from Landsat-5, then
orthorectification will be necessary; ifthe two images are from the same satellite, then
the difference in the viewing geometry between the images is minimal and any error
introduced by the difference in viewing geometry is likely less than would be introduced
by orthorectification using a DEM with potentially larger errors (Dowdeswell & Benham,
2003; Kiiiib et aI., 2005; Mayer et aI., 2008; Scambos et aI., 1992). Additionally, some
Landsat images are processed to level 1 T, meaning terrain correction is applied, so the
effects of topography are already accounted for upon receipt from USGS. A smaller,
cropped image ofthe glacier is taken from each Landsat image and inserted into COSI-
Corr's frequential correlator and run with an initial set of parameters (window size, step
size). Because there is no optimal set of input parameters that can be used for every
image pair, trial runs are necessary to adjust the input parameters specific to the location,
geometry, illumination, and dates of the imagery. Subsequent runs will include refined
input parameters based on the output of the previous run until an acceptable result is
obtained. The preprocessing chain for ASTER imagery is quite simple: orthorectify band
3N images using COSI-Corr's orthorectification module, crop images of the glacier from
the orthoimages, and then run the frequential correlator on the cropped images. The post-
processing is the same as described in Chapter 2 and illustrated in Figure 2.5, except the
output from the neighborhood analysis will not include IMCORR's parameter space.
130
4.4 Positive Degree Days, Time Span, and Location
It is clear from the positive degree day (PDD) data that the continental subarctic
climate that exists in south-central Alaska causes difficulties for application of feature
tracking methods. The amount of ablation due to low elevation, subpolar latitude,
washing of the ice surface from frequent summer rains, and moderate temperatures
compared to the locations of many other glaciated alpine environs mandates selection of
imagery no more than a single ablation season apart. With the propensity of Harding
Icefield to be cloud covered, this can make finding sequential, cloud-free images one year
apart difficult, or impossible, during some years. However, because the correlator engines
are more sensitive to the time span and amount of ablation between sequential images
than towards spatial resolution, imagery with 30-meter spatial resolution, such as
Landsat-4 or 5 data, can be utilized to generate velocity fields. This allows future studies
more choices in imagery other than the standard 15-meter ASTER or Landsat-7 ETM+
data sets.
4.5 Tustumena and McCarty Glacier Velocities
The velocity fields and longitudinal profiles of Tustumena Glacier show the ice is
moving with speeds routinely between 150 and 200 m/yr, while some parts move over
250 m/yr. There is an overall trend in both the 2006/07 and 2007/08 vector fields with the
ice moving fastest upglacier while being dominated by basal slip, and the ice moving
slower in the lower half of the glacier with both basal slip and internal ice deformation
significantly contributing to movement. Similar to Tustumena Glacier, McCarty Glacier's
ice movement is due mainly to basal slip upglacier, and a combination of both basal slip
and internal deformation downglacier. This may be a coincidence, or it may be the first
130
4.4 Positive Degree Days, Time Span, and Location
It is clear from the positive degree day (PDD) data that the continental subarctic
climate that exists in south-central Alaska causes difficulties for application of feature
tracking methods. The amount of ablation due to low elevation, subpolar latitude,
washing of the ice surface from frequent summer rains, and moderate temperatures
compared to the locations of many other glaciated alpine environs mandates selection of
imagery no more than a single ablation season apart. With the propensity of Harding
Icefield to be cloud covered, this can make finding sequential, cloud-free images one year
apart difficult, or impossible, during some years. However, because the correlator engines
are more sensitive to the time span and amount of ablation between sequential images
than towards spatial resolution, imagery with 30-meter spatial resolution, such as
Landsat-4 or 5 data, can be utilized to generate velocity fields. This allows future studies
more choices in imagery other than the standard IS-meter ASTER or Landsat-7 ETM+
data sets.
4.5 Tustumena and McCarty Glacier Velocities
The velocity fields and longitudinal profiles of Tustumena Glacier show the ice is
moving with speeds routinely between 150 and 200 m/yr, while some parts move over
250 m/yr. There is an overall trend in both the 2006/07 and 2007/08 vector fields with the
ice moving fastest upglacier while being dominated by basal slip, and the ice moving
slower in the lower half of the glacier with both basal slip and internal ice deformation
significantly contributing to movement. Similar to Tustumena Glacier, McCarty Glacier's
ice movement is due mainly to basal slip upglacier, and a combination of both basal slip
and internal deformation downglacier. This may be a coincidence, or it may be the first
131
glimpse of a regional trend in the dominant mechanisms for ice movement on Harding
Icefield. Velocity fields for McCarty and Tustumena' s many neighbors are needed to
verify whether this is a regional trend or a simple coincidence.
The 2006/07 Tustumena velocity field shows the influence of a reverse-dipping
moraine along the center line while the 2007/08 velocity field does not. The influence
seen in the 2006/07 velocity field is likely caused by the images' acquisitions later in the
summer after more ablation has exposed more of the upglacier portion of the moraine.
Both velocity fields also show a deceleration of the ice as it approaches the dead end side
valley compared to the velocity along the glacier center line, with the 2007/08 velocity
field showing the greater negative velocity gradient as ice approaches the dead end. The
2007/08 velocity field is spatially extensive and accurate on HI2, while the 2006/07
velocity field for HI2 is incorrect. The failure seen in the 2006/07 HI2 velocity field may
be caused by increased ablation due to image acquisition later in the melt season and a
southwesterly aspect, or a lack of distinct features in the ice that would allow proper
correlation between the images. It is clear that the results seen in both the 2006/07 and
2007/08 velocity fields are sensitive to the timing of image acquisition. Interpretation of
annual velocities, and year-to-year changes in velocity, must account for the image
timing and the potential difference in the amount of ablation that may have occurred
during the time spans. Minor changes in annual velocity may be undetected by
acquisition dates early in the ablation season, while later dates may falsely give the
impression of velocity changes even though none have occurred when compared to data
derived from earlier dates. Images should be chosen as close to the same date as is
possible to minimize these potential errors.
glimpse of a regional trend in the dominant mechanisms for ice movement on Harding
Icefield. Velocity fields for McCarty and Tustumena's many neighbors are needed to
verify whether this is a regional trend or a simple coincidence.
131
The 2006/07 Tustumena velocity field shows the influence of a reverse-dipping
moraine along the center line while the 2007/08 velocity field does not. The influence
seen in the 2006/07 velocity field is likely caused by the images' acquisitions later in the
summer after more ablation has exposed more of the upglacier portion of the moraine.
Both velocity fields also show a deceleration of the ice as it approaches the dead end side
valley compared to the velocity along the glacier center line, with the 2007108 velocity
field showing the greater negative velocity gradient as ice approaches the dead end. The
2007108 velocity field is spatially extensive and accurate on HI2, while the 2006/07
velocity field for HI2 is incorrect. The failure seen in the 2006/07 HI2 velocity field may
be caused by increased ablation due to image acquisition later in the melt season and a
southwesterly aspect, or a lack of distinct features in the ice that would allow proper
correlation between the images. It is clear that the results seen in both the 2006/07 and
2007/08 velocity fields are sensitive to the timing of image acquisition. Interpretation of
annual velocities, and year-to-year changes in velocity, must account for the image
timing and the potential difference in the amount of ablation that may have occurred
during the time spans. Minor changes in annual velocity may be undetected by
acquisition dates early in the ablation season, while later dates may falsely give the
impression of velocity changes even though none have occurred when compared to data
derived from earlier dates. Images should be chosen as close to the same date as is
possible to minimize these potential errors.
132
The velocities for both Tustumena and McCarty Glaciers are within the range of
speeds measured for other glaciers around the Gulf of Alaska. Some glaciers, such as
Hubbard and LeConte, move at speeds up to several kilometers per year, while other
glaciers, such as Bench Glacier, move as slow as 11 m/yr. The range of speeds for
Tustumena and McCarty Glaciers falls between these extremes and most closely match
the speeds of Grand Pacific Glacier (158 m/yr), Mendenhall Glacier (172 m/yr),
Worthington Glacier (73 m/yr), and Matanuska Glacier (80 m/yr).
4.6 Combining Velocity Data with Climate Data
If a complete ice surface velocity history could be generated for Harding
Icefield's many outlet glaciers, it could be correlated with meteorological data to search
for climatic influences on glacier movement. Do warm summers or warm winters
coincide with acceleration of the ice? Does winter or summer precipitation correspond to
increases in ice velocity? Any correlations discovered between climatic data and ice
surface velocity could be used to estimate the response of glaciers to predicted climate
change and whether the glaciers will increase or decrease their contributions to sea level
rise. If no correlation between climate data and ice surface velocity is found, then do
local physical conditions such as glacier aspect, slope, terminus type, or basal topography
dictate ice surface velocity? Answering these questions through future studies will further
address research objective three.
132
The velocities for both Tustumena and McCarty Glaciers are within the range of
speeds measured for other glaciers around the Gulf of Alaska. Some glaciers, such as
Hubbard and LeConte, move at speeds up to several kilometers per year, while other
glaciers, such as Bench Glacier, move as slow as 11 mJyr. The range of speeds for
Tustumena and McCarty Glaciers falls between these extremes and most closely match
the speeds of Grand Pacific Glacier (158 mJyr), Mendenhall Glacier (172 m/yr),
Worthington Glacier (73 mJyr), and Matanuska Glacier (80 m/yr).
4.6 Combining Velocity Data with Climate Data
If a complete ice surface velocity history could be generated for Harding
Icefield's many outlet glaciers, it could be correlated with meteorological data to search
for climatic influences on glacier movement. Do warm summers or warm winters
coincide with acceleration of the ice? Does winter or summer precipitation correspond to
increases in ice velocity? Any correlations discovered between climatic data and ice
surface velocity could be used to estimate the response of glaciers to predicted climate
change and whether the glaciers will increase or decrease their contributions to sea level
rise. If no correlation between climate data and ice surface velocity is found, then do
local physical conditions such as glacier aspect, slope, terminus type, or basal topography
dictate ice surface velocity? Answering these questions through future studies will further
address research objective three.
APPENDIX A
COSI-CORR_TO_IMCORR_FORMAT.PRO
PRO CosiCorrJo_IMCORR_format, event
;This program takes data output by Cosi-Corr, in the form of an ENVI file, and produces
;a text file in the same format as IMCORR data so that the Cosi-corr data can be
;processed using IDL programs previously written for IMCORR data. This eliminates
;the need for writing an entire suite of IDL programs exclusively for COSI-Corr data.
;COSI-Corr ENVI files have 3 or 4 bands:
;Bandl is east-west offsets (x direction) with positive x to the right
;Band2 is north-south offsets (y direction) with positive y to the top (counter to
;IMCORR's reference coordinate system)
;Band3 is the Signal to Noise ratio, which ranges from 0 to 1 and which will be used in
;lieu of correlation strength.
;Band4 is the window size used for each correlation, this band is not present if statistical
;correlator is used.
filename=envi_pickfile(title-Choose Cosi-CORR data file to convert',filter='*.hdr')
envi_open_file, filename,r_fid=rfid,/no_realize
envi_file_queiy,rfid,nb=bands,ns=columns,nl=rows
hdr_position=strpos(filename,'.hdr')
;fmd position of '.hdr' so it can be removed in next command
filename=strmid(fllename, ,hdr_position)
;remove '.hdr' ending from filename
openr, ,filename
. 5{< ^1 ^jC >(C >|i ^ ijc i^S i|c ^jC ifc ^Jc ifi >JC ijt ^> >fc ^fi ' i* "t* 'J* 't* 'J* ^t* ^J* "4^ 't* ^* *H
cosi_corr_array=fltarr(columns,bands,rows)
;cosi-corr creates ENVI files with bil interleaving which places
;data in the following order (columns, bands, rows)
;Frequential correlator creates 4 bands, statistical creates 3 bands
APP"-"DlX A
COS!.coRR _ ]OR.\tA T.PRO
PRO C ... iCo rr _'" _1.\! COR R JOmu t ..... "'"
;TIn. _ Won dol. o..lpul bye .... """"'. ,n lilt f...",or .. IC"VI fil<. ord producn
;0 ,." m. ,n ,1>0 ......, _ .. NCORR data., lIw ,I>< Cooi->t'l' data be
.procnood .. P"'IP"'" pm """,Iy " 'n!"'" !'or l\lCOIUI; data, Thi 10 ... , .......
"be ..oed ror "'"''011;''' ""to", .. ". or pn>gon\S .. ol"';I,.ly !'or rOSI"""", data.
;COSI.(".., 1;.\ VI m .. ho,,, ,I or 4 bands:
.Bandl .. """'-" ... offoou I' d,,,,,""')" ,Ill _""0 , '" Illc n&hl
.Bar.l2 i. oonh .... ,h olf .... (y d,ra.;"')" ,Ill pOSi'''. Y 10 ,be lOp ('",,"''''' 10
.1\lCORR', .. oo"h ..... ) ....... )
" II>< S,gnallO ,",0,,, ""0 ... hh ""'1<$ f""" 0 '" I an.! .. hJ<h ",II be "01 '"
,hco of "",",I." ... o<rrnlP-it,
.SanJ.I " lbe ","""'" .. ,. _ for oao;h ><nlaJ.""" Ilus bAnd .. "'" rrnrn' ,r " .. ,,,.1
"""",1.."-,, _
hdr J>OIi'ion .. ' "..... fi I""", . ',Ildr')
.nod """" ... ,,(',heIr' JO " .an ... mno-ool on ... " """,mand
fil<narrlt>-, ""id(filename.'lJIdtp,ion)
'.IMl( cn<ion, fuKn fil......,.
. .... r. ll .filename
<fnl'" [). \'1 file> .. nh b,t mtal ,,", "h,eh
;dill. ,n lho fo>tloll onIer I col"""", Iw>oh. "'".)
,F""'JU""! .. I """"I."". .rnt .. 4 bands, .ut,,,.i """"n J bands
134
readu, ,cosi_corr_array ;read envi file into array
params=widget_auto_base(title-Enter parameters for conversion',/xbig)
list=['step size:','window size:','spatial resolution (m):']
vals=[4,64,15]
output=widget_edit(params,uvalue='parameters',/auto,prompt='Enter new
value',dt=2,list=list,vals=vals)
params_result=auto_wid_mng(params)
?
?
grid_spacing = pamms_rGSu\t.parameters[ ]
;scale factor for changing size of displayed image,use values 1.0 or larger
initial_window_size = params_rQSu\t.parameters[ 1 ]
;scale factor for changing size of displayed arrows
resolution = pa.mms_resu\t.parameters[2]
;spatial resolution, used to convert offsets (pixels) to velocity (m/yr)
outfile=widget_auto_base(title-Select location of UNSIFTED folder for output',/xbig)
output=widget_outf(outfile,uvalue='output_fileVauto,/directory,xsize= 5( ,prompt-Enter
name of output file (.txt)')
outfile_result=auto_wid_mng(outfile)
openw, : ,outfile_result.ow/p^/z/e,/append
;this is the IMCORR-style text file which will be processed with ;other IDL programs.
inform=['Converting to IMCORR format....']
envi_report_init,inform,base=percent_complete,title='Converting Cosi-CORR
data',/interrupt ;begin % complete widget
for i=0] , columns-1 do begin
;For loops to create the 9 data columns which mimic an IMCORR data file
for j = , rows- do begin
x_coor=i*grid_spacing+( *initial_window_size)
;x coordinate, taking into account grid spacing
y_coor=j*grid_spacing+(0.5*initial_window_size)
;y coordinate, taking into account grid spacing
'"
_ " HI,,, _a ut bOJ<'('i'Ie-'En .... pormncI<D fOr <o,,,,,,,,,,,,,'/xbia)
li .. ""\ ..... .. u:', "",ndow .... 111.,"" (m):1
valP\4,/>U <]
O"'POI ... idl ... odU(Jwams.uvol ......... ., ....... 'J.lIlIO.prompt-'Ernor ......
vaJU<.d'- 1.1i ....
__ ,""I, . .. ,,,. " 'Id_ma r(panmo)
arid _ SpaOi n. -pannu _ rcsult,pa,a_enI 0]
"".Ie r""tor for ..... sm. "' of ,m>1/< ...... ,11 ... I.U Of I""",
initiaL window . ti><: - panm._...,.ult,pa"' .... II
_",.Ie fo<tor fOr chanS'", >I,. of dl'llI.)'Cd ami'"
!'<SOlu,ion - paratJII. """1,,,,,,,,,,"<1<,,111
"""tJai n:ooIut_ uood 10 ron,,'" orr", .. (p"olsllO ,<""'") 1m. )T)
outfit..... id,.,. a.,o)'aw(ritl ... S.Iec, 10<';"" ofUl"SII'TED Ii>Ida for outpU.'JxbiIJ
011'1"" '" kI".. __ ' /{ oulfi\e.u',.lu ... oulp\l'. fi Ie' j"utoJdi=tory ,uiz ... "lI ,prompt"Enlor
name of outp'" lile , .1>.1)1
ou.1i Ie _ resuk .... '. _ " 'Id _moll"'" fiI.)
....... ,! ! "",.fi 10 _ J oppend
.. II .. 'e>! r,1o "koch ,II bt pro<e$Ol ",uk .",he! IOL .
inrorm-!-c"" ... ru",10 L'>ICORR romw., ... 1
'I_rtpo"U .I' Jnfonn.b", ... " ... u:<'mpl ..... ill .. -Co' ... en'''I Ccci-CORR
dw'jinl ..... p' oomplel< ",djICI
ror .oolum ...... 1 do bqJ
.for loops to =_ ,he: <) daIa ""Iwnns ""Iu<:h m,m", on I\1CORR data file
ror jo(ll ,,,,,,,.,.. 1 do bql
_ cooo-i ' grid _ <paCi"ll*( 0, < ' inilial _ wir>ilow _lizo)
.x ..... , .... on,o _001"II p,.t """'"1
L ooor-j ' grid _ op><i .... --I 0.:; ' ini.ial _ wir>ilow _ oi<o)
.y <OO<'d'naIC. ''''''lI on'O _""", and """,'"il
135
tot_disp=(sqrt((cosi_corr_array[i, ,j])
A
2+(cosi_corr_array[i, ,j])
A
2))/reso!ution
;total displacement, divide by resolution since cosi-corr
;output is in meters, converts to pixels
corr_str=cosi_corr_array[i, ,j]
;SNR will be used as the correlation strength
flag=
;all entries will have flag=l because all entries are correlations
x_offset=cosi_corr_array[i, ,j]/resolution
;offset in x direction, divide by resolution to convert to pixels
y_offset=cosi_corr_array[i, 1 ,j]*(-1 )/resolution
;mult. by -1 to change to y coordinates to match IMCORR's, divide by
resolution to convert to pixels
x_error=0.0 ;x,y error are set to 0 so each correlation will not be
;sifted due to large error, Cosi-corr
y_error=0.0 ;does not give x,y error, just SNR
printf,22, format='(2I5, F10.4,F15.6,14,
4F10.4)',x_coor,y_coor,tot_disp,corr_str,flag,x_offset,y_offset,x_error,y_error
IF (i mod 100) EQ 0 then begin
envi_report_stat,percent_complete, i, columns-
updates percent complete widget with each cycle of outer for loop
endif
endfor
endfor
envi_report_init,base=percent_complete,/finish
;end percent complete widget
close, 11
c!ose,22
fmished=widget_au toJbase(title-Program Complete!!',/xbig)
done=widget_string(fmished,/auto_manage,uvalue='complete',prompt='Successful
conversion to IMCORR format^default^PROGRAM COMPLETE',xsize=50)
result=auto_wid_mng(finished)
end
101 disp-( "'I n( (eo.; _ COlT _ """y[ lY'! ., eo.; _ <OIT _ OITlIy[i. 1 J lY' Z)V , .... QI. ,10
IOIaI d,<ploc"",,,,u. """,," by raol",_ OInt< """-lIT
'OUIpod " ,n moIcr&. <",,,"". 10 p"cl.
OOIT _...-.:osi _ OOIT _ """y[ i.l J I
;S" R ,,' n "" """'" .. "'" """"l.u"", """'i'h
..... '
"U ",,'n .... ,1I1u\< I b<aus< . 11 ""tn .. "'" "0<TCl .. ,,,,,"
_ "ITi<t-rosi _ con _ amoy[ i."JV,,,,,I., iotl
:orr .... ," , d,,...,,,,". d""", by ....,1",,,,,, to <.",,"" '" p".,u
Y _ "ff ... -rosi _COlT _ amoy[ i , 1 JI"(-I Y,..ol"'''
mul', I>)" -I 10 <han"" 10 Y COOl1ho .... 10 ","",h I\t(,ORR .. "".de by
!raoIutioo 10 a",,"" "' p""I
",,, 0<).0 ) """'.,.. ... '" 0 1(1 _h """"l.u"", .. ,11 not be
... nod due 10 IUJO rn<>r. C .... ..,""
y_" ,,,,...o.U ;00.. "'" &1"0 <,}' <m><.J"" S"R
pri.,r.n fonna1-,(21!, FlO FI 5.6. 14,
4F I 0,.)' .. _ _ disp.con _ Olr .fl .... _ <>ffset.y _ <>ffie!.. _error.y _ emJ<
W(i _ '(0) [Q 0 ,b .. l>oal
,ij.porl_.t.l.pero .... u'omplOl i. col""' .... l
;up.bt .. pero<>u rompkt< a Hlget ",th ca.ch <)"CI< of ""lOr r", loop
0.,1_ .. port J . il.b.. ,.,rt:mt_ >mplOloJ finioh
;tn<l f!O"'t"'" O<>mrlOlo ",dlll
fioi<l><d- " 'ldlt" _ "" 10_ b.O<j liU ... 'l'rojp"o<n CompI""" '",htbiil
_ 'IdK<I_>lriot\fini>b<dJ ... ,,,_,,,",,",ge."val uc-'romplc<e,promp,- 'S,,,,,,"""'1
c:o<!, .....,., ... ll>tCORR r.",.,..'.dof. ul,-'PRQGRAM CO.\t PUTE',xsize-'-C)
.au ,.- . " 10_ " 'Id _ ...
.. ,
APPENDIX B
DIRECTIONAL_VECTOR_SIFT.PRO
PRO Di recti onal VectorSi ft, event
;This program sifts imcorr vector files to keep rows of data with good
;matches, those with flag^l, and which
;do not have NaN in the correlation strength column, and which have a
;total displacement greater than 1 pixel
;and which have total displacement greater than x or y error and which
;fall inside the glacier, and it places these
;good vectors in a separate file.
;The second portion of this program sifts the data again to keep
;matches with total displacement less than 3 pixels
;and which fall outside the glacier, and it places these in a separate file
;The last part of the program outputs an image with IMCORR flag values
;for use in analyzing IMCORR parameter space
;This program prompts the user to enter the direction of sifting
;(n,s,e,w,nw,sw,se,ne), a name for the glacier
;and an estimate of the georeferencing error between the two images
;used to produce the IMCORR data. This
;estimate should be obtained by viewing the two co-registered images in
;ENVI and flickering between the two
;to visually estimate the offset (in pixels). If one can visually see a
;2 pixel jump when flickering between
;the two images, then a good estimate to enter into this program would be 2 or 3.
;Lines of code surrounded by ****************
a r e
\ {
n e s
which may need
;paths/filenames updated for each glacier
;EACH GLACIER WILL NEED THE FOLLOWING FILES FOR THIS PROGRAM TO
;RUN PROPERLY:
;1) a file called 'runlist.txt' which contains paths/filenames of all
APPENOIX B
,n. .. """"'" "n. ,"',,,,,, ,.",,,,, file> 10 "" .. of data" "h p><I
'''''''<11<0.. .-""h n. 1 . ...-..1 "h,<h
.00 "'" 11.1'0 ,." on lhe: """"I .. ion <lrmG'h ."Iumn . ...-..I "'h",h ""'<
tot.ol JIII'I",......." tpnt<r tIwll 1'''01
;ond "h"'h "",.< 100.1 Jospl"'om<nl ......... 1hu , y em>< ond "h,ch
,r.1I ,rISk!< ,lie: .iA< ..... ond II pboI:<S lhc:oo
.ijO<Id 1"'" ,n. oopar>t< [0 ...
,Th< ""'''on "flil" pr<>g<am .. n. !he ..... "PI" to
.""'1 ....... ,III tot.ol Uospt.rnmnl 1<>$1 .... l p".1i
,ond f.1I ,,..,,.,J, the Ji""CT. ond " 1'\.0;: .. lIIn< on .. _< [0 ..
;Th< ..... p>tI uf,he: ptOg<om ""'pu" .., ''''"II<''' "h "I("ORR nOM , . .l_
.f UK on "",,1)'''"111\\("ORII; p<Iram<O 'I*<
;Th" P">IP'" 1"'>'""l"> 1iI< ...... 1O rn"'" iii< d,r'''''' of "O,oM
.. o." ..," .... ...,.11<1 I\UJ"oC rOf iii< Jio<>CT
;ond "" .... ,""". oflil< ""'" _<ell lhe ""0 , ........
0>0d 10 f"O<I"'" ,lie: I\tCOII;II; o!;,i:a no ..
, .. "",.1< Ihoukl be obwnod b) "''''''''11 ,ho ,,,0 <o-.. ,_ on
,E.' \'1 ond fl" ....... ,l>c! .. = iii< 1"0
.10 ....... 111 ... ''''"'< ,lie: oIT"" (00 l'"d'l. Ir Oft< 0 ... " .... IICO
:2 1'''''' Jump ""!w:n n,<k"""Ill><t".,...,
.,he: '''0 u"oga. l!w:n 011""'1"'=, ,o ... ltt ,"10 ,h .. ""'lIfO"'< .. : Of 1 .
. w .... of xl< ......,..."w by ..., 1, ....... hh .... y II'<l
.""'h$.fi .......... "",,",I f <a<h Jioo;
.L\('lI (;LA(IHt "'ED THI, lOU.OWI'\(; mil; TIllS PRO(;RA \t TO
.RL''II PRDi'FRI r
137
;the IMCORR output files to be sifted, check to see that
; the drive letter and pathnames are correct for each use.
;2) a mask created in ENVI in which the glacier has values of 1 and
;surrounding terrain has values of 0, in JPEG2000 format.
;3) a file called '<glacier_name>_sifted' in a folder named 'sifted' to
;receive the output of the 1st sifting process,
; these are good vectors inside the glacier which will comprise the
; vector field for the glacier.
;4) a file called '<glacier_name>_accuracy' in a folder named
;'accuracy' to receive the output of the 2nd sifting process,
; these are vectors outside the glacier which will be used to
;calculate error/accuracy statistics for the vectorfield.
;5) a file called 'paths' in the 'accuracy' folder to recieve the good
;vectors and their paths/filenames
;template which puts data into a structure with 1 string array consisting of 9 columns
restore, 'C:\Program Files
(x86)\ITT\IDL708\products\envi46\save_add\sift_template.sav'
;template to read the file which contains list of path names for
; IMCORR runs/vector files I wish to sift
restore, 'C:\Program Files
(x86)\ITT\IDL708\products\envi46\save_add\list_template.sav'
restore, 'C:\Program Files
(x86)\ITT\IDL708\products\envi46\save_add\paths_template.sav'
;open template to read ascii vector files
ascii_path=envi_pickfile(title='Find runlist.txt in UNSIFTED folder',filter='*.txt')
ascii_list=read_ascii(ascii_path, template=list_template)
;read list of path names/vector files; structure with 1 field
runli st=ascii_li st .pa th [ * ]
; move list of path names/vector files out of structure and into 1 dimensional array
a=size(runlist) ; get size of runlist
b=a[ I ] ;get number of lines in runlist
i=0 ;index for the following while loop
.,he II.lC"ORR ""1"" flkI '" be: "ned . hod 10 >c< ,tw
"'" dme ""'0< on<! p,o<hnarneo or< ><T<>O' (Of .-",h ....
Z) ...... crmed In EX\-) ,n ... hoch .1It Iloe, .. has ,-.I.,.. of I and
;lW1'OIIndUlI lCfmn ..... '"""'" oro. '" lPEG200.) rom..,
.J) r,1e <oIled '- ,1.;, .. ,,,,,,,,,-, .. nod' In (oldrf rwn<d ' .. /kd" 10
,!'tt<:". ,hc ""'JIU' o(,he I .... Rln"" ... H,
_ .... p><>d '''''or> ,ntid< ,ho lV><,er .. ruch ,,,II >mpnl< "'"
, .. ",,,,,focld (Of ..... "''''', ....
fir.: calk<! '. ,1.;'01" name' """"""1 In . named
'">"""Y 10 """''' tho ou,,,,,, oft ... !nd .. n,"lI proc_
, .......... '-l<n ""' .... e ,1>0 III..,' .... ",<h ",II be 0>l1O
",.ku''' ........ '''' .. Ul.<y ... " .. ; .... r.,.. "'" ,<XIOrii<l.1
.S). me C211ed 'paIbo' ,n "'" 'ao:<.-)' fQld<r to """"'-. !he..,oo
.",;!"n ..... ,I\cir palh. fli<nom<o
.'emp'OI. "-h,,,h 1"'1< <1> .. ,nlo. _'''''' ''''h I ..,.,ni amy ,,(,,,",,,,,, of9 <olurn ....
' .. '0 .... 'C:\Pn>pom Files
(.86 )'JTT'IIOL 10S\p<0duo:to _ ft _""""tat .......
. ,<mjI, .... to read tho r,I< "b<h rooLll .... )", of poth ........ for
",("ORR ",,.'\ o<'or fI'.,.. I "'-"'10 "n
' .. '0 .... 'C-","","", Fil ..
(.&6 PTTIlDL 70S'1pmdac: ..... .,""""', . _ .. _ "'mp ...........
, .. 'o .... 'C,'1'ropwn Files
(dt> ),J11'\IOL 70S\p<0d1>Ctll-_vi46 .. ,-. _ odd''fMl/>I_,emp ..........
;open '..",plal. '" ..... OK" '0<..". (,1 ..
oociUi....-nd _ . ... If( .sci; -.J>I1h. lempatc-lisUempw<)
,tea! h .. or J1h _ .'0<..". fok>; """"un: nh I fi.ld
J
, mo,. I ... or p;oIh ......... '..,lOr nlco .... , of ............. and ,flto I limy
m
138
glacier_mask_path=envi_pickfile(title
=,
Find glacier mask (jpeg2000
format)',filter=**.jp2')
glacier_mask=read_image(glacier_mask_path)
;read glacier mask, must be jpeg2000 format
land_mask_path=envi_pickfiIe(title='Find land mask (jpeg2000 format)',firter='*.jp2')
land_mask=read_image(land_mask_path)
;read glacier mask, must be jpeg2000 format
reversed_mask=reverse(glacier_mask, 1)
;reverse mask so y coordinates are transposed and output is oriented correctly. This is
;necessary because IDL and velview have different coordinate systems in which the y
;direction is reversed.
glacier_image_path=envi_pickfile(title-Find glacier image (jpeg2000
format)',filter='*.jp2')
glacier_image = read_image(glacier_image_path)
;read jpeg2000 image of glacier
how_big=size(glacier_image)
columns=how_big[ ]
rows=how_big[ ]
flag_array=intarr(columns,rows) ;create array to receive flag values
flag_array[*,*]=0
filled_flag_array=intarr(columns,rows)
;create array to receive enlarged, color-coded flag values
filled_flag_array [ *,*]=()
glacier_directory=widget_auto_base(title='Select folder containing SIFTED and
ACCURACY subfolders',/xbig)
output=widget_outf(glacier_directory,uvalue='output_directoryVauto,/directory,prompt=
'Select folder',xsize=75)
directory_result=auto_wid_mng(glacier_directory)
get_name=widget_auto_base(title='Enter name of glacier')
output=widget_string(get_name,uvalue='glacier_name',/auto_manage)
name_result=auto_wid_mng(get_name)
Ii"";" _ mW;..J>aLb_ ,'I-pkkrll ,i.l.-'Flnd Ii""'''' mask (jpoJlOOD
fonnoI).(olt ....
&I",i _ mask-<.a.d _I ... _ muk JWh)
...... .. "' .... "" JPOg..'OOO ronn..
land_maskwn-od
, ..... P'''- ........ "' .... be ronn..
='.....,J nusI;- r.,.r!.t(&lad ... ou.sI<. l )
... '.,.. Ru.sk to y <OO<'lJ,,,,,",, .. ,......,.,..,. and ""'IK'I os on ... ,Ij <.......,lIy Th .. os
;nc<0IMr)' t>oc ..., IDL and ,01",.,... ba,.., d,lTCI'<fII oooN""" ')'>I<mO on ... h,ch ,he: )'
;dlJ'<C''''''''' ""..-I.
11,,,,,1..-_ irnall< J>"" ..... ,j, J<o-' Find ..... , ... ,_ (jpoJ2(lOO
fonnoI r. /ilta-'" .Jpl')
s.t .. d ... )"'"iC - . .. d_I"'I gJoci .. jmaitJlath)
:mod JP<J1((I(\ ''''''w: of .........
bow _ bir-u&l . dor
ooiLllllllt"how _ biii l ]
1'0""'_ big[ 2]
n.i.. ..... )"'I., r(oolum.....,"" .) :<=>'. amy 10 ",e',". n,, ......
nOLorray[ . ] ....
6Jlod_ lllL ...... yoi .. n"jcolurnno.row. )
ltTII.y 10 ",,1"'11<01. eoIoo-cod<d .. ,...,.
m led _1IaL amy[ . )0041
gla<:icr _ dir:IOfy->' _ '0_ b.><,(titl..-'Sclcct folder oonwn.inl SIFTED .....
ACCURACY ... bfold<ro' ,!l:J:>;il
D.
OU!pll,-.. ldttl_o'llil",,;er_di""'tor)'.u, .. lueKOUIpU!_dire<1ory',1au1oJdirectory.promp'.
'Srl. fe_.xsi .... " )
idK"_"U,o_bUli' le-'En!rr _ of p;<r')
oulp"' ... Id,... _ ''''ollgel_ nam . u"" ..... J/X,... namt' ,Iou,o _1IWllIg<:)
rwnc: _ ru.I, to _ " kI_ ... 11:(11<1 _".",.)
139
openu, 11, directory_result.outputjdirectory +'\siftedY + name_rQS\x\tglacier_name
+'_sifted.txt',/append
;open file to receive results of sifting process
openu, 22, directory_resu\t.output_directory +'\accuracy\' + name_resu\t.glacier_name
+'_accuracy.txt',/append
;open accuracy file to receive results
openu, 33, directory_resu[toutput_directory +'\accuracy\paths.txt',/append
;open file to recieve pathnames of vectors
openu, 55, directoryj:QS\x\t.output_directory +'\accuracy\georef_stats.txt',/append
;open stats file to receive direction
>
get_error=widget_auto_base(title='Estimate georeferencing error',/xbig)
output=widget_param(get_error,xsize=
q
f>,uvalue='error
,
,/auto,dt=2,prompt='Enter
estimate of georeferencing error in pixels')
error_result=auto_wid_mng(get_error)
estimate=error_result.error
get_flow=widget_auto_base(title-Enter ice flow direction',/xbig)
flow_output=widget_string(get_flow,/auto,prompt='n,s,e,w,ne,nw,se,sw',uvalue='flow_d
irection',xsize=50)
flow_result=auto_wid_mng(get_flow)
dixQiion=f[ovjj:QS\i\i.flow_direction
printf, 55, nzmG_res\i\t.glacier_name
printf, 55, direction,' is direction of sifting'
printf, 55, 'Sifted using ',estimate,' pixel estimate for georef error'
vectors_in_glacier = OL
num_long_vects_outside_glacier = OL
while (i LE b-1) do begin
; while loop runs for each entry (vector file path/name) in runlist
;open vector file using generic template
5
imcorr_results=read_ascii(runlist[i], template=sift_template)
;opens each entry in runlist into a structure
;with 1 field which is a 2-D array
imcorr_array=imcorr_results .field 1 [ *, * ]
'"
op . .... II . di=tOf)'_,"ult''''''I''',_di"",'''Y ' '-ift,.!'-,' + n&m<_,"ult.gla";., _ "","e
.. '_ .. fted ... r Jopper>d
;Open (,I< '" ""'< ... .r .. n'rIlI .,.0<'"
01' . .... n , di""'tor)'_""ult."",p'" _ di"""")' ' 'Iac.'''"''y'' + name_"""'o8l"d." _""'"
o'_""cIII'Xy, .. r Japprnd
;0f>0n """"'""Y fJk '" ""'c". """I"
op<." .. n . ditt<:1ory _ resul'.ow/M jirtoOl"'Y .. 'Ia<c.,..y.p.rho.bl" / appmd
;"""" (ok '" """e.' of "t<l<JI'S
..... u. , d;r<>ctoryJ"ult.owptd_dilW'tory .. r_ ........ o Oppend
''''''''' """ (ok 10 ...,n,.
1I<"_,,,,,. .... !dt<'l . ... ,._ b.w(titl ... E.MW .-.r......,'nll ........ Aloia)
output .... ill I" Jlonm(s _em><.> ;""'oAI- ) ,pWnIPI-'Eo,et
__ Df ...,...r"""""11 """'" '" I""eb')
o:rmr _ tUIll ... olo _ ,,-kI _ .... 1:(5'" _<ITO,)
... im.,."" '<M _....we...,.".
s<'_"",--Id, ... . . ,o_".b<i,i" e-'Enoa;"< !\ow d,=t"",'hbil:l
now _"'"pu,' '' id,.U ' rI.a(go<_Ilo"'Jauto,prompt ................. .-........ .,. ..... uc-'f1ow_d
,""'ion ... i ....... )
flo ... _ rd.I,- ,0_" id _ ",.x(gcUk>w)
dir..-tion_/low _ .... hp _ _ di""ti""
prl.'f. oarnc_ .... h,gl",,"" _"'''0'
prlalf. di=tion. . i. d,t:!_ or .,111118'
prl.,f. , 'S,fted Idi .. ,<>Iim&1C.' ",001 to. """",f <nor'
>'1OfS)n...JIaoi., _ 01
nwn _lonL v:lS _"""ide ...JIacior - 01
.. 'bit. (i LE 11- 1) do bqiII
"'h,l< loop fUlIlI to< _" miry hmor fII< pW>!WII<) ,n runh<l
,open ,,:,"'" fi.., Wi'ng 11"1>" K 1<'Inp 1.>10
irncorr _ resu l,.. .... d _ runli,,! i J. ",",pi"""; ft _ ""'pl ... )
:oo,><nS OIICh on'IY ,n "'nil .. ,nt<> ... ""', ....
, .. "h I fidd .. h"'" ... 2D"",y
140
;move data out of structure and into array for easier use
print, runlist[i],' is currently in progress'
n = size(imcorrarray) ;get size of i mcorrarray
m=n[2] ;get number of rows in i mcorrarray
inform=['Sifting Vector Data....']
envi_report_init,inform,base=percent_complete,title='Program is working',/interrupt
;begin % complete widget
for j=0L, m-1 do begin
if imcorr_array[4,j] EQ ' 1' then begin ; does row of data have flag=l?
if imcorr_array[3,j] NE 'NaN' then begin
; does row of data have correlation strength = NaN?
tot_dis = imcorr_array[2,j] ;get total displacement
x_error = imcorr_array[7j] ;get error in x direction
y_error = imcorr_array[8,j] ;get error in y direction
if t ot di s GT xer r or AND t ot di s GT y_error then begin
; is total displacement greater than x and y error?
x_beginpt = imcorr_array[0,j]
;get x coor. of beginning point for vector
y_beginpt = imcorr_array[ ,j]
;get y coor. of beginning point for vector
x_endpt = x_beginpt + fix(imcorr_array[ ,j])
;get x coor. of end point for vector
y_endpt = y_beginpt + fix(imcorr_array[ ,j])
;get y coor. of end point for vector
if reversed_mask[x_beginpt,y_beginpt] EQ 1 then begin
;is beginning point of vector inside glacier, ie. do x,y
coordinates correspond to a value of 1 in mask?
if reversed_mask[x_endpt,y_endpt] EQ 1 then begin
;is end point of vector inside glacier?
pri.,. I'IInliSl[i] ;. outm'Illy in .. Oj> .. "
m-n[! ) :goo number ofro"'" ,n tm>IT ""'Y
infonn-('SiR,"lI Vector rw.....1
,.,-1_ pon J .I,'; nfonn.boo. """' .... _ compl .... lillo-'Propam ....ru .... .rlnl<mlp\
;!>qm oo.upkt. ",Jgcl
for j"" I . m 1 do boll.
If ;!I'IroI'T _"",y(lJl ;<;!: 'NL"- I.H boll.
; Joa "''' of.., .. """e <."...1"".,. .. ,.''-''
'''' di, - ;m>rr .,.,..}P.i] 101.1
- -
X_<ITO!" - im<:oor .,.,..y[ 7d] ;goo COTOr ,n , d,,..,..,,,,,,
Y_<ITO!" - imo:= _ a:ny[ 8j] <ITO!" ,n y d,,..,..,,,",
It IOUji. CT X_<ITO!" A. .... D ,,"_di. CT LCOTOr l.n boll.
; '.lOUl d'orl..,......." 1jl'eO<<t ,hon , ..-.l Y <m>r"
"_be&iopl - im<OlT_amy[OJ)
:a<I' J<J<. ofbqmmnll pO,", r ... <tor
1_ ... 1Ii .... - imton" _ a:ny[ 1 Jl
"'" y >0<. pOI"' r ... , .. tor
, endp' - . be&inp' - 11>(;""""," amy[ <JJl
:"".oo<. of..1;)pO,.,r ... - , .. tor -
Londp' - y_ ... iPnPt - l1>(imoolT_ """Y[ "JJl
:1'" Y <1)01"_ of ..... pOI"' r", ,.",,,,,,
If ='....a_mask[x_be&inpLY _ "'i1"1"] I:Q 1 tlo'.boll.
:;, Oo,run"1l pO'"' of"""'" "",..., Kl><''' .... do . y
,,_'''', .. '01'''''''ol '" 1"" <If I '" ma/;'
If K<'....a_mulr.[. _cndpt.y_mdp<] [Q 1 ,b boil
" <:nil pO,nt of''''''''' , .. ode &1><'"
if direction EQ 'n' then begin
if imcorr_array[c>,j] LT 0 then begin
; is y displacement negative? ie., northward?
printf, 1 S, format=*(2I5, 2F10.4,14, 4F10.4)', imcorr_array[*,j]
;print vectors inside glacier to file mccartysifted
printf, ^ I, format='(2I5, 2F10.4,14, 4F10.4, A115)', imcorr_array[*j], runlist(i)
;print vectors and paths/directory to separate file
vectors_in_glacier = vectors_in_glacier +
endif
endif else if direction EQ V then begin
if imcorr_array[6j] GT 0 then begin
;is y displacement positive? ie., southward?
printf, 11, format='(2I5, 2F10.4,14, 4F10.4)', imcorr_array[*,j]
printf, , format='(2I5, 2F10.4,14, 4F10.4, Al 15)', imcorr_array[*,j], runlist(i)
vectors_in_glacier = vectors_in_glacier +
endif
endif else if direction EQ 'e' then begin
if imcorr_array[5,j] GT 0 then begin
;is x displacement positive? ie., eastward?
printf, 1 i, format='(2I5, 2F10.4,14, 4F10.4)', imcorr_array[*,j]
printf, , format='(2I5, 2F10.4,14, 4F10.4, Al 15)', imcorr_array[*,j], runlist(i)
vectors_in_glacier = vectors_in_glacier +
endif
endif else if direction EQ W then begin
if imcorr_array[5,j] LT 0 then begin
;is x displacement negative? ie., westward?
printf, 11, format='(2I5, 2F10.4,14, 4F10.4)', imcorr_array[*,j]
printf, 33, format="(2I5, 2F10.4,14, 4F10.4, A115)*, imcorr_array[*,j], runlist(i)
vectors_in_glacier = vectors_in_glacier + 1
endif
endif else if direction EQ 'nw' then begin
if imcorr_array[ j ] LT AND imcorr_array[ ,j] LT then begin
If ............ r.Q ... tII .. 1><P
110-. lm){'\iI I.TO ....
n)...,pj. ........ _,.' ........ .....
prla,f, II . bmM-,\ll'. 2nU. U. 4FIUr.. ,_ .... )f. J]
.1"'''' , ....... _ ............ " .. ''''.'Y .,1I00I
p<1 r. n , bmaI-'(llJ, '4, . 1'10 ..... A IlSr ......... _ .... )'[. runliot(ij
,I"''' '<n>B an<! '" O<!'"""< m.
,t<n)nJlocicr - ,',",'''''. iDJiKia + I
If : _ _ ... )\ 6JJ CT O110 ..
," yd,,'I ........... _,,,.'
,"",f, II, """"",,lLli. HIO.' .
porI>'f. '\' """"", .. ,W'. HIU
.......... _ .............. .. ' ....... _m..sJacia'+ I
.. dtf
.. .ur_wdin>cUon [Q'f! .... MtIoI
If i..-. ...... l'I . j] CT 0 ..... lq,.
,'" du,pi ... "".M ........... -..1"'
prJoU, 11. lbmw-1m. 21'10.' . I'. 41'10.4)" im<OlT ........ l'\ JI
prl."r. " . formal-'(l l'. 21'10.' . 1-'. ' 1'10.' , AI ur. i""""'_ ...... l'I JJ. "",Ii<l(,)
v10f'0j "..al""ior .. _ton_ inJla<ier + I
dlr
.. dif .... If dittetlon F.Q 'w' ...........
1t ......... _ ..... l1 jJ LT O ....
.n. "'.IL ............... ' ........ "...,.
,n_,r, II , ....,.215. 21'10.' , ", ' F10A1'. ; ",_ ... )'\, JI
"..',. " . """--lm.1F10.' , ", ' Flu.,U ur. - _ .... ..... I.-(i)
, _ _ .. ....-.. ,_ .. ""-""" ... 1
-,
mtt.t1f 4in>:tiool [Q_ ., ..........
""i"." ...... _ .... 0 imoon"_"""yJJ LT Q . ... bttll
'"
142
; is x negative and y negative?
printf, I I, format='(2I5, 2F10.4,14, 4F10.4)', imcorr_array[*,j]
printf, 33, format='(2I5, 2F10.4,14, 4F10.4, A115)', imcorr_array[*,j], runlist(i)
vectors_in_glacier = vectors_in_glacier + i
endif
endif else if direction EQ 'sw' then begin
if imcorr_array[ ,j] GT 0 AND imcorr_array["\j] LT 0 then begin
; is x negative and y positive?
printf, i I, format='(2I5, 2F10.4,14, 4F10.4)', imcorr_array[*,j] printf, 33, format='(2I5,
2F10.4,14, 4F10.4, A115)', imcorr_array[*,j], runlist(i)
vectors_in_glacier = vectors_in_glacier + ?
endif
endif else if direction EQ 'ne' then begin
if imcorr_array[ j ] LT AND imcorr_array[ j ] GT then begin
;is x positive and y negative?
printf, , format='(2I5, 2F10.4,14, 4F10.4)', imcorr_array[*,j]
printf, 33, format='(2I5, 2F10.4,14, 4F10.4, A115)', imcorr_array[*,j], runlist(i)
vect or si ngl aci er = vect or si ngl aci er +
endif
endif else if direction EQ 'se' then begin
if imcorr_array[ %j] GT 0 AND imcorr_array[5,j] GT 0 then begin
; is x positive and y positive?
printf, 11, format='(2I5, 2F10.4,14, 4F10.4)', imcorr_array[*,j]
printf, 33, format='(2I5, 2F10.4,14, 4F10.4, A115)', imcorr_array[*,j], runlist(i)
vectors_in_glacier = vectors_in_glacier +
endif
endif
endif
endif
endif
endif
11 . f""",, -'(1IS. lfllH. 14. 4F10.4),. i"""""_arra}i JI
"rI.,f. " . _ -,(liS. lfIO.4. 14, 4FW.4. All S). i"""""_array( JI. runlisl(i)
''1O<I)n..JU!oi., - _'o<s)nJlaci., + I
.. dif
,.dlf <l .. If dirtClion EQ ...... III,. b<V.
" imcotT _array(bJ) CT 0 ....... 0 i""""" _ ..... yJI l T U I b<-j:1
. i. , 'l<lI'''' ond Y
142
prilllf. II . f""",, -,(2IS. 2f1M. 14. 4FI0,4y. i""""" _ ..... y( . JI prl f, " . form>t-'(lIS.
lFIO.4. 14. 4FlO.4. All S). i"""'IT_array( .il. runJist(i)
... . I
.. dlf
If T O .0.:0>0 imc:orr_arrayJ) CT U btli
IS , poo,u>o """ y n<p1"."
prl.lf. II . format-'{llS. lFIO.4, 14. 4F10.4)'. imcorr_array( JI
prl f. H. fomw-'(lIS. lFUH. 14. 4FIO.4. All sr. imcotT_.",.y( j). JUllIist(i)
."'IOtI)nJlaci., - vcc"","_inJlaoier + I
.. dlf
" i"""""_ ..... y(bJJ CT 0 .0.:0>0 imcorr GT 0 I ... b<zl.
; " , POO''''(, one! Y """",."
prl., f. 11. form .. - ,!IS. lFlo.4. 14. 4fIO.4Y. imcOfl'_orray[' jl
prl.or. " . format-'{llS. lFIO.4. ", 4flOA. "II sr. i"""""_array( .iJ. run)ist(i)
,'IOtI_ iDJI.d., - ''CCIo<s_in.Jlaci<r + I
.adlf
dlf
dlf
,.dll
dlf
endif
;******commands to populate IMCORR flag array************************
if reversed_mask[imcorr_array[ ,j],imcorr_array[ ,j]] EQ then begin
;is beginning point of vector inside glacier, ie. do x,y
coordinates correspond to a value of 1 in mask?
if imcorr_array[ ,j] EQ then flag_array[imcorr_array[ ,j],imcorr_array[ ,j]]=
if imcorr_array[4,j] NE 1 then begin
if flag_array[imcorr_array[ ,j],imcorr_array[l,j]] NE 0 then begin
if flag_array[imcorr_array[ ,j],imcorr_array[l,j]] EQ 5 then begin
flag_array[imcorr_array[ ,j],imcorr_array[ ,j]]=imcorr_array[ ,j]
endif else if flag_array[imcorr_array[fi,j],imcorr_array[l,j]] EQ 4 then begin
flag_array[imcorr_array[ ,j],imcorr_array[ ,j]]=imcorr_array[ ,j]
endif else if flag_array[imcorr_array[ ,j],imcorr_array[l ,j]] EQ 2 then begin
flag_array[imcorr_array[ ,j ] ,imcorr_array[ ,j ] ] =imcorr_array[ ,j ]
endif else if flag_array[imcorr_array[ *,j],imcorr_array[ ,j]] EQ 3 then begin
flag_array[imcorr_array[ ,j],imcorr_array[ ,j]]=imcorr_array[ ,j]
endif
endif
if flag_array[imcorr_array[ ,j],imcorr_array[l,j]] EQ u then begin
flag_array[imcorr_array[ ,j],imcorr_array[ ,j]]=imcorr_array[ ,j]
endif
endif
endif
IF (i mod 100) EQ 0 then begin
envi_report_stat,percent_complete, j , m-1
;updates percent complete widget with each cycle of outer for loop
endif
endfor
envi_report_init,base=percent_complete,/finish
;end percent complete widget
;****end commands to populate IMCORR flag array************************
.oonutWIds Lo """,,1>1< I.\ICORR Ib& om)' .. .. .... ..
If ="ened_ma<k(im<:orT_arTlIy(OJ].imc:OfT_orr.I)'[ ' .il1 [Q l ib,. btti
. 11 I><onn,"i 1"""' OfHdl)t ,"""" ""',, ... .. do '.y
;>O<du'Ia'" 0"" ..... 1<1 '0' ' .. , .. of 1 In !1IUk.,
If im<Olf_ ...... EQ I ' h n.&..amy(im<Olf_ ...... ytOj].i"""""_aml'l l jll- '
lr imtOlT_ ..... y[4j] /OiE l ib ...... '.
Ir n.LarTlIy(imcorr_ ..... y(OJJ.im<OlT_orn.y( l ,ill Nt: 0 . b t..,:iIo
If llaL .... l1imco"'_ ..... )'[Ojl.imoon_arTlIy( l,ill [Q btf;1.
flaK. orn.y( im<:OlT _""YI gJ) .imc<IIT _ ..... y( 1 jJJoUncOOT _""")'[ J J
.. dlr .... It 14L ..... y(imtOlT ...... Yl nJ].;""""" aml'l l jll , ... !>oJ1.
flax.. amy( imoorr _ amol'l OJ I,i';;""" _ ..... y[ I jl _ om. y[ 4,j J
.. dlf .... If llaLarTlIy(imrorT_"""YlOJJ,im<OlT_ ..... yP,ill [Q l , b b<j::u.
II>L _ImIYl4jj
dlf .... lr lla&..amy(im<On'_ ..... 1 .. 11 [Q \ .h btt;1.
lias.. arTlIl'l imcorr _..,..y\ OJ ),imrorT _""l'I 1 Jj)oUnco!T _ omoy( 4jj
.dlf
.. dlf
If fto.a..arTlIy{im<olT_arny(Oj].imrorT_OlTlIy( l jl] [Q U '.'.1><'&1.
f\ax..am.y[imcorr ..... y( OJ),imcorr ..... y( l jll.;m<OIf ...... y[. j]
- - -
.Adlf
.",I_ .. j. m l
'"pd:n<o P<'I"onl <:OmJ'leIe" id"", ",II. oath of".. ... (0< loop
dlf
droc
...
,end rompl<tc .. td&fl
I\ICORR n ...... ) .. .. .. .. .. .. ..
'"
144
;***begin commands to sift vectors outside gi
a c
i
e r
**************
:
reversed_land_mask=reverse(land_mask, 1)
;reverse mask so y coordinates are transposed and output is oriented
;correctly. This is necessary because IDL and velview have different
Coordinate systems in which the y direction is reversed.
for j=0L, m-1 do begin
;begin process to sort out small vectors outside glacier
if imcorr_array[4,j] EQ T then begin ; does row of data have flag=l?
if imcorr_array[3,j] NE 'NaN' then begin
; does row of data have correlation strength = NaN?
x_beginpt = imcorr_array[ ,j]
;get x,y coordinates of beginning of vector
y_beginpt = imcorr_array[ j ]
x_endpt = x_beginpt + fix(imcorr_array[5,j])
;get x,y coordinates of end of vector
y_endpt = y_beginpt + fix(imcorr_array[6,j])
if reversed_land_mask[x_beginpt,y_beginpt] EQ I then begin
;are x,y coordinates of both beginning and end of vector
;outside glacier? ie, do the coordinates correspond to values
;of 0 in the mask?
if reversed_land_mask[x_endpt,y_endpt] EQ 1 then begin
if imcorr_array[2,j] GT estimate then begin
num_long_vects_outside_glacier = num_long_vects_outside_glacier +
endif
if imcorr_array[2,j] LE estimate then begin
; does row of data have displacement less than georef error estimate?
printf, 22, format='(2I5, 2F10.4,14, 4F10.4)', imcorr_array[*,j]
;print vectors outside glacier to file
.. _ ',-__ -1--.. .. .... .. .. ..
, ''".,. -_. .
.... "ftNd.. Iand.. mt1 ... tnO(land_1IWl. ! )
................. ' .................. , '
_.",1) Thoo .. _ ,I> " IDL ..... 'rn ....... " ... "'"'"
.: .'.",)'" _, ... ...... <n<d
roor i-I" . ",. 1 ... b<oJIII
.btJ>" p'"" ... 10 _ "'" ...wI
If Imcorr EO '1' ... boJI . <loos ""'- ur ""I.< ha 1"
IF i_. amYl ' JI Sf: '1<; ... '- .. bqI.
,<!un "'" ofd>!, ha'H""" ........ 1IIfm&Ib ".V'
-
""".)-......011><.", .. 01,_
- K M'", li>(imcorr_lmIrl <JI)
""''-\ ........... ' .... of .......
LcndpC . y. lIqinpI * O>(in .... , _ ..... y( . Jl)
U",'ftNd.. \and. masl<!. ) ,cpnp!.y)qi",,1 [Q 1 ",", boal.
, .... '.Y roon! ....... ofbolh bcsIm' ...... end Or I.''' ....
;""","", 51""'" oc. 110 , .... toQtI.!,,,,,, .. 10 ,.h ...
.of Il ,n the "'"""
If Imcorr. am)'\! JI CT <01;""'. 1waI.
"""'_1oaL __ . ",.'i<l<...sIacicr . ........ ............... .......... ..Jb<i 1
il lmtOn". "'111JI LE ati ..... , .... 1IqIo.
.do>a ..... oidlu ..... cd"" ... ,,= ..... _,...,..rl ........ _,
prio.r. ll, _ -lllS, ' FIUr. imcorr."'Y( JJ
""' .. '"'" ... ,.to p><r 10 iiI<
145
endif
endif
endif
endif
endif
endfor
i=i+l ; iterate index for while loop
endwhile
printf, 55, num_long_vects_outside_glacier,' = number of vectors longer than ',estimate,'
pixels outside glacier'
close, 11
close, 22
close, 33
print, 'FINISHED SIFTING VECTORS*
printf, 55, vect or si ngl aci er , ' = number of vectors in glacier'
print, vectors_in_glacier,' = number of vectors in glacier'
close, 55
;******* *commands to create IMCORR flags i
ma
ge********************
flag_base=widget_auto_base(title-Output IMCORR flags?',/xbig)
list=['yes','no']
sb = widget_base(flag_base, /row)
wt = widget_toggle(sb, uvalue-toggle' , list=list, /auto,xsize=35)
widget_result = auto_wid_mng(flag_base)
IF widgQt_rQsu\Uoggle EQ 'yes' then begin
window,4,xsize=columns, ysize=rows, retain=l ;scale display window
loadct,0 ;load grayscale color table
tvscl, glacier_image
loadct, 13 ;rainbow color table
device, decomposed = 0
dot_x=intarr(l) ;create 1 element arrays to hold x,y values to be plotted below
dot_y=intarr( 1)
for i=l I , columns-3 do begin
.odlf
.. dlf
.. dlr
rodif
.. dlf
Mor
'"
prJ.,f, <c. num. \ooi.. ,oclS. ouuideJl""i<r, * numbo< of V<C1O<'S than .... inute.'
OIl""," JI-:, ....
1<1><. 11
"OM, ll
prl." 'fINISHED SlFTr..:G VECTORS'
prlntf, '<, "oclOrS)nJlocier, - numb oh..,."," in Jloci ....
prlol , .oclOr1_'nJl"'ier, ' - llUmba .tv..,.,.. in tJaojc(
<10M
. .. .. rommmd>IO<rrak .mage .................. ..
RaL!>ase-'IdItt,. o.,o) l<'(ti,I ... 'Outpu< IlolCORR !lap?' Jxbi(c)
li01-1')'et'.'no1
sb - .... lrnw)
,>1 _ " 'idlttUoulab. "VlIl ..... li>I- l i ... I.UIO.xsiz ... .. )
widlllJe, ull - '.'0. " 'Id_ ... ... )
.. 1."" .. . 4,x.i<e"Wlum ... ysi ....... "' ... retain- ' .sea'" d' S{lla)' Indo ..
lood<t,O ,IN<! J9'lIY'<'>,e <0",," ""'I.
wlCl "",iOf. imag_
""'dOl, 1.\ ..... n_ >"" ,..".
do.'ltt, d""""posod - 0
dot. x- '." ' r( I ) :<r<ak I .lm>rnI """)""" mid <.y .. 1"",, to b< ploued belovo
doIf l.,.r" l )
;for loops to color-code and fill array to be plotted
for j =l I , rows-3 do begin
if flag_array[i,j] EQ 5 then filled_flag_array[i-l:i+2j-l:j+2]=5
if flag_array[i,j] EQ 4 then filled_flag_array[i- :i+2 j - 1 :j+2]=
if flag_array[i,j] EQ 3 then filled_flag_array[i- :i+2j-l:j+2]=3
if flag_array[i,j] EQ 2 then filled_flag_array[i- :i+!,j-l :j+2]=2
if flag_array[i,j] EQ 1 then filled_flag_array[i- :i+ , j - :j+2]=l
endfor
endfor
filled_flag_array=reverse(filled_flag_array,2)
for i=01 , columns-1 do begin ;nested for loops cycle thru all pixels
for j=01 , rows-1 do begin
dot_x[ ]=i
dot_y[ ]=j
if filled_flag_array[i,j] EQ 5 then begin
statements to plot and color-code flags
!p.co/or=250 ;red
plots,dot_x,dot_y,color=color,psym= ,/device
endif else if filled_flag_array[i,j] EQ 4 then begin
!p.co/or=200 ;yellow
plots,dot_x,dot_y,color=color,psym= ,/device
endif else if filled_flag_array[i,j] EQ 3 then begin
\p.color=5() ;blue
plots,dot_x,dot_y,color=color,psym=
1
,/device
endif else if filled_flag_array[i,j] EQ 2 then begin
!p.co/or=150 ;green
plots,dot_x,dot_y,color=color,psym= ,/device
endif else if filled_flag_array[i,j] EQ 1 then begin
\p.color=25 ;purple
plots,dot_x,dot_y,color=color,psym= ,/device
endif
endfor
endfor
annotate, wi ndow- ;
, .... Ioopo ... __ ...s 611 ..... ...... pIo>dod
'.,;-11 .......... ' ... ....
If 1IIL .... y(iJJ [Q < ..... 6Ikdjl ..... arny(i- 1 :i l .j-lti l t-"
1t 1llL ..... y(iJJ [Q . dono 6Ikd)1 .......... y(;" I:i. l .j- l :,i' 1)al
If ''''''Y(iJl [Q 1 .....
II , .... y(;JJ EQ I .. fiU"'UlaLomIy(,. 1 :;.l J. 1
,., 1-1'1 coI.....,.. 1 ... 1tqIot ;.-11'0< Ioopo <)<1< """ 011 p,,<lo
,., jooI'I .......... ' ... 1Mt;ioI
dooA"J-i
dooJl" J-j
lI filkd)L,,_ ..... y(ijJ [Q< dono ......
",. 11 ... """'- ond __ 1lop
I .. .tel. - ) .... r<ol
pIoI>.dot_".dooj'"",......,Ior.po)'lllVdnicc
.. [Q. , ..........
Ip.>I ..... : .. I .)oI .....
plol dot_,Aotj'.ooloPcolot.PI)'IIIVdo-vi
.. dlloh<lf filled_noLlmo),(iJJ [Q \ , ..........
Ip . ...,,'"" - <) .bl ..
pIot.,dooJ.,dooj'.colofoooo\or .... )'III-V4evit:
.. dlf ... 1f fillod_lla&..orr:oy(ijJ [Q ! _botbt
- 1'10 'f<CtI
pl ' ... doo_.,dooj' .... ,. __ .... )m. V40vicc
.. dil ... lt ftl1cd_IIIL ... y(ijJ [Q I , ...........
,
"-" ok p .. LL . I'
,I " .. "_ ..... .,,.-"'1" w .... .poyno-V*'"'"
-
_ ..
-,-
... 01.' ..... """", ..
147
save_base=widget_auto_base(title-Save this display?',/xbig)
list=['yesVno']
sb = widget_base(save_base, /row)
wt = widget_toggle(sb, uvalue-toggle' , list=list, /auto,xsize=35)
save_result = auto_wid_mng(save_base)
;save_result.toggle[0] = 0 ....yes
;save_result.toggle[0] = 1 ....no
if save_resulUogg7e EQ 0 then begin
display = tvrd(true= )
rotated_display=reverse(display,3)
>
write_tiff, dirQctory_vQSu\toutput_directory + '\sifted\flag_image.tif ,rotated_display,
orientation^
endif
endif
fmished=widget_auto_base(title-Program Complete! !',/xbig)
done=widget_string(finished,/auto_manage,uvalue=
,
complete',prompt='Successfully
sifted correlations',default='PROGRAM COMPLETE',xsize=50)
result=auto_wid_mng(finished)
end
save_hOI: .. I._I>"", ,;,.....sa,-...... """,. i" I . bi&)
li"-! 'yes'.'no1
... - .. _b .. .. , .. _Nst,Irow)
.. , "Mlt"_' ouJt(ob. li .... 'i ... 11U'O..<.i .....
.. ,' __ row" - ".'0_ .. 1d_maJ("'-"_bue)
;SO' . .... ll!Oglcj OI 0 -)'00
,"' . rm.luopk[0l I , no
If .. ,'._ .... 'uOUle t:Q 0 I 1><1:'.
d;spllY - ''''d('''' .. , )
'"
".1 _ , If(. direct<>ry _ .... 1 ....... ,1"" _ ,i;"""",), OW fIod\1IAL imaJe.u r ,rowod _diSplay,
onenwionoo(!
.......................................................................
nd'f
.ad'f
fo nish!. .... Idl" _. " t. _bow( ,ille-'PI Oji .Ii Complete'
_ .. ....... _ItI.,pn>mPl 'S"""_l'ully
IInod COl>tPLETE'.:"i_ J
..... 1' . .. '0_ .. Id_molt(' rmished)
...
APPENDIX C
RESIDUALS.PRO
PRO Residuals, event
; This program sorts vectors using the standard deviation of the angle
;of all vectors within a specified window size.
;A vector with an angle which exceeds the standard deviation threshold is not plotted.
;Arrows are plotted and color-coded according to correlation strength.
;A similar routine sorts according to vector length as well.
; This program will accept as input '<glaciername>_accuracy' found in ;the 'accuracy'
;folder. This file contains a list of vectors outside the glacier used for
;georeferencing accuracy calculations. When this data is run through
;Sort_Arctans_Plot_Arrows, and the mean x and y are calculated,
; then the output is the residual displacement left over from the
;error adjustment. The total displacement of the residual represents the accuracy of the
;vectors inside the glacier.
;Outputs are systematic error and residual error tifs, placed in the 'accuracy' folder.
; This program will call IDL's annotation widget which allows the user
;to label/annotate the displayed
; vectors and glacier image with appropriate title and parameters.
;A saved version of the annotation is
; found at \vectors\<glacier name>\<glacier name>_annotate.dat. The program gives the
;user the option to save the annotated display, which is then saved in the 'sifted'
; folder.
; Scroll to bottom to be sure the output name for this is set to your
;glacier name.
;Tiff files are used to preserve floating point values.
5
restore, 'c:\Program Files (x86)\ITT\IDL708\products\envi46\save_add\sift_template.sav'
C
RESIDUALS.PRcO
PRcO R .. iduol " .. ,
n".,,,,,... .. ,, SOIU ,..,.".. .. ,I><......tan! de,'"""", or .... ""!!Ie
",foil ""lOB .. "h," lj><C,fia! .. ,"""" .. "',
:A """lOI .. ,,," an ""II" .. ruch .. <ec<I> ...... ondon! .... '.""" IS "'" plol,a!,
.... ood .o.."...,oda\ O""''"K 10 rom:l>I"'" ....... ",11.
:A "m,l .. "'"" .. """ .'''''''"'"8 ,,, "C<1M imp .... <II
nu. P"'CR'" .. ,II aoc<pl .. '"P'" ", pocmomc:" "':cu .... )' f-.d '" .,1>< '"""""",),
.'oldcf, Th,. me <00"" ... hoi of""""," ""!$Ide .... ,I"" .. w.al r.,.
__ f<=1<,,'111 ",,,....,y <.kul .. ions. Wh<:n 'h" "" .... ",n !II"'"!Ih
Son .Am .... Pk>< """"" ..-.I ,he """'" , ood y..., .. l<uIOl,-,I
lh<n .... ""<pilI ...... r=duol <10",1"<l1><li1 kn O'<r from II><
.orror ""I"""""'. TIlt toLIl d""lac<m<nl 0' .... reo"'''''' oq>rn<nt> the ocnua;;)' ,,[,he
.'''''lO<'> ,..,<1< lilt "'"',..-
.(lu,,,,,,, 1111: '1sm.". orror ..-.I r<S>duol orror "r .. pl""a! ,n ..... ""<"""')' folol ...
, 11,,0 pn>FWII .. ,II <011 IDL '''''''0'''''''' .. ,de<' "hlCh oil,,, .. <he USCf
.10 \abet onnota<c tilt d''I''.)<aJ
, '11" ..-.1 g!a<, .. ,mall" "i!ll ..... "'ni ... ,ill. """
:A ""a! ,,,,,",,, orthe "'"""-'1I0Il"
: found", ,e<,,,..', .. ,!!1"",<r ....... " 1lJ..:,<r........, , lII\nOUl<.daI., TIlt P"'i'V"1"'oo ....
, ..... the ",'"'''' 10 .. ,.,he ann<Malal d, ... ... h .. h " ,...., .. ,cd ,n lilt .. n .....
. roldcf
: Setoll 10 bOil_ 10 be .......... ""11>'1' ...... for lh" ...... 10 )OW'
:alIC,a """",,,
:Tiff moo at< wal '" "".se,,,. n"""na ""'"' ,.Iuco.
' .. ' 0 ... "c; \l'rop1llll Files (d6)' .!TT\IDL 708 '.." ,4/> ___ _odd"'; ft _ ..",pl" .... ,-
, ............................................................
149
siftedj3ath=envi jickfile(title="Find <glacier_name>_accuracy.txt in ACCURACY
folder',filter='*.txt')
sifted_vectors=read_ascii(sifted_path,template=sift_template)
;read list of path names/vector files; structure with 1 field
sifted_imcorr_array = sifted_vectors./ze/<l/[*,*]
;move data out of structure and into array
q=size(sifted_imcorr_array)
columns=q[ ]
rows=q[2]
glacier_path=envi_pickfile(title='Find glacier image (jp2 format)',filter='*.jp2')
glacier_image=read_image(glacier_path)
params=widget_auto_base(title-Enter parameters',/xbig)
list=['spatial resolution (m):','time (years):']
vals=[l 5,1.0]
output=widget_edit(params,uvalue='parameters',/auto,prompt='Enter new
value',dt=2,list=list,vals=vals)
params_result=auto_wid_mng(params)
i
resolution = params_result./?araraeter,s
,
[0]
;spatial resolution, used to convert offsets (pixels) to velocity (m/yr)
years = params_result/?araraeter.s[ ]
;time between sequential images in years, to convert offsetst to velocity
;if calculating residuals set arctan threshold to 180 so it will not
;sort out vectors, but instead keep all
;all vectors outside glacier for calculations. Also set length
threshold to 100 for same reason
scale = 1.0 ;scale factor to magnify display image, use values 1.0 or
;larger, values less than 1.0 prevent
;small arrows from being plotted and make vectorfield appear more
;sparse than it really is.
arrowlength = 50.0
'"
..... <p,er_ name>-__ wvy,txl In ACCURACY
foldor' .fillor-'" .1>.1'
";fIed _ v",,,,,,,, ... d __ J>&'h.mpw ..... II_l<mpat.)
:I'<*l h .. of fIaIh ".."... """lOr fiks; """"""' ,,10 I field
i lied Jm<:OIT _array - .iftod _ o'..,lOCS,r ... 1d I ['. oJ
"""". d.aLo "'" ofIlrU<'"'" ODd Into ..... y
q iu(. iftedJ m<:OIT_ ..... y)
columns-q[ , ]
"""'"",,-11 J
.. i ... fllh .... ...." ... ''''''It (jpl fonnal)',fil,"""
JI .. i ... _im.aV"r ... fllh)
HOl -( .... hol ..... h.lbOll (m):',' ,me (yo .... ):1
".10-( I
output .... HlK"_"'I' (panm . .. to,prt>IIl!Il>""En1cr_
,-.lilt' ,dl- l ,liOl- liSl, ".1 ..... 1.)
.. lI .. _"""'h .... ! o_
"",l"tion _ J>OlV'IO_reoul'.po>"'''''''<Nj O]
;op>!'.) ....,1"10.,.., .....t to .... wen offSCl$ (p",ol., 10 ,.Iocoty (m,),)
ye .... - P"fOI"$_ reoullJ"' .... """ , ]
.11 .... Sj""""ol ,,,,.,.,. ,n ) ....... to <"." ... OffOOUlIO "loclly
, ..................................................................... .
,( oakura",.. n:oOduaa oeI ..."." ,h.....,kllO 180 00 " "'U
;00<1 oul ,,,,,ton. .. , j"" ..... hcp "u
,oil ''''' ...... ""tsHlo clo,,,,,, f,.. tal<"Wi<>Ro. 10'00 oeI
."'''''''''KI to 1(0' rOf""'" onoon
",01. _ 1.0 ,,,,",, (..,lOr 10 ",,,,,,ury di>pby """S". "'" "1Il .... 1.1) or
,"""', 1.'Ueo .... ll\;lrll ,0 pm ......
""",II from bems plot,.". and mok< Icctorfu,i .. ..,...... """"
"'"" u ",al,y II.
""",wlength -
150
if origin_result.fogg7e EQ 0 then data_origin='i'
if origin_result.toggle EQ I then data_origin='c'
arctan_array = fltarr(glacier_image_columns, glacier_image_rows)
;create new array same size as image
corr_str_array = fltarr(glacier_image_columns, glacier_image_rows)
;create separate array to hold correlation strength
x_displacement = fltarr(glacier_image__columns, glacier_image_rows)
;length of arrows, use this to stretch or shrink arrows for visual clarity
arctan_threshold = 0.75
;multiplier for standard deviation of angles ;within box defined by wi ndowsi ze
totdisp_threshold = 0.75
;multiplier for standard deviation of total displacement of vectors within box2
st dvl i mi t = 10.0 ;minimum stdv for arctangent below which vectors are ;not removed,
;ensures good vectors in uniform
;flow field are not eliminated during iterative process.
; if the grid spacing used in IMCORR is 4 then wi ndowsi ze must be ;larger than eight
;or else the following FOR loop won't find any vectors inside 'box'.
; window size should be a even multiples of grid spacing + 1, for ;example if
;grid spacing is 4 then good window sizes might be....
;4x2+l = 9
;4x4+l = 17
;4x6+l = 25
;4xl0+l =41
s=size(glacier_image)
;these commands will get the size of the grayscale jpeg2000
glacier_image_columns=s[l] ;get size of grayscale jpeg
glacier_image_rows=s[2]
origin_base=widget_auto_base(title='Origin of data?',/xbig)
list=['IMCORR','Cosi-CORR']
sb = widget_base(origin_base, /row)
wt = widget_toggle(sb, uvalue='toggle', list=list, /auto,xsize=35)
originresult = auto_wid_mng(origin_base)
;origin_result.toggle[0] = 0 ....IMCORR
;origin_result.toggle[0] = 1 ....Cosi-CORR
.kngth of ""''',,''' UK 'h" to 1Cm'" or .hfUu.. Iml .... r ...... , .... 01 "only
am.!_threshold
.mu"'pl , .. for IIW>daI'OJ "",,,","'" "r "n!lJ<$ .... ""'n box d<f,O<d ,ooJ,o ... "'e
lotdiop_threshold _ O.
.m.H,p"., for oundonl de"",,,,,, ;d,..,,"' ....... ' ohe<:tOflt ... ,th," bo,l
1td"Jimi' - 10,1) "",mmum ltd, r .... Ott""irn, bolo ...... h"'h ",''''''' .... """ 0'<1'lI0\<<1.
,<mil'" JI"O" ,.""""" ,n ",uronn
.no ... r..ld.,. ..... ohm""'ed ,' .... ,,,. "...,. .. .
, ................. , .................. , ............................... .
. ,flllo IPld <l'*m'..cd ," I\lCORR If 4 ,torn .. ,1I<lcn< .". n'''' bo .Iat'Jf ,han ngh'
.or .1", lIIo fol""" FOR loop .... "'" n .... Illy \ ""ton ,,,.,d< 'be,'
\I ,1I<lcn<' W' shoo .. bo II m.l"pln of &ri<t """'"11 I. r .... ""amp," ,f
$HI <1'*'"11 " 4 ,hat JI"O" ... ,1I<lcn< at,", m,ght boo
.4,2_1 9
.4,4+1 17
;4,6.1 25
.4.,0'1 41
1lIes< '"",m ...... " ,II &<1 ,ho: at" of,,,.
,,,", "" of "",,:><.,. JP'll
.,'" i., _imall" _",....-s( ! I
oriain_h.. "kll .. _ .. .. n <>f data?' .lxbig)
li"fl\lCORR."C ooi-CORR1
<to - .. klROI_ trowJ
..., - "klleUoul<to , . ., .... 'touk'. li>Ilin. ' o.to.,,,,eo" )
oriain_ ..... " - 0.'0_ .. id_maa(origin J'_J
;0011'" 0 0
:OO'" f'eOItit.I<>llllIoiOi I
l\!CORR
C_-{"ORR
If origin -,",ult.,oule EQ Q lb "''''_Main'';'
If oriain_r<lUluOUle EQ 1 ,b . . ..... _MiUI- .
Otttan _ ...... y - Dlo' r(.,,,;,,, j mllll<" _ oolurnl\ll, ., .. i.,Umoge _ "''"'''J
;,,,,ale",,,,, ""Y IIamc ." ...
oorr _ w _.".y - 01. r alaei ... j _ "",'um:\$, &loti ... _ im>S" _ ",.. .. )
",...,. _,.""y 10 ..,IJ """,,1;0'1<", """'I"
151
;put x displacements into separate array
y_displacement = fltarr(glacier_image_columns, glacier_image_rows)
;put y displacements into separate array
total_displacement = fltarr(glacier_image_columns, glacier_image_rows)
;put total displacement into separate array
arctan_array[*,*] = 200.0
;populate array with large value to discriminate within FOR loop
corr_str_array[*,*] = 200.0
total_displacement[*,*] = 200.0
print, 'Begin populating arctan array with angles'
FOR j=0L, rows-1 DO BEGIN
;this FOR loop calculates the angle of movement for the
;x,y coordinates of each vector in ' si ft edi mcorrarray'
;and places the angle into the proper location in ' arctanarray'
x_coor = fix(sifted_imcorr_array[
i
,j])
y_coor = fix(sifted_imcorr_array[ ,j])
x_disp = sifted_imcorr_array[5 j ] ;populate x displacement array
y_disp = sifted_imcorr_array[ ,j]*(-l) ;populate y displacement array
total_disp = SQRT(x_disp
A
+ y_disp
A
2)
;populate tot. disp. using x and y disp. calc'd with mean errors
IF arctan_array[x_coor,y_coor] EQ 200.0 THEN BEGIN
corr_str_array[x_coor,y_coor] = sifted_imcorr_array[3,j] ;populate corr. str. array
x_displacement[x_coor,y_coor] = sifted_imcorr_array[5,j]
;populate x displacement array
y_displacement[x_coor,y_coor] = sifted_imcorr_array[-: j ] *( - 0
;populate y displacement array
total_displacement[x_coor,y_coor] = SQRT(x_displacement[x_coor,y_coor]
A
+
y_displacement[x_coor,y_coor]
A
2)
;populate tot. disp. using x and y disp. calc'd
angle=
(ATAN(y_displacement[x_coor,y_coor],x_displacement[x_coor,y_coor]))/!pi* 180.0
;calc angle in degrees
arctan_array[x_coor,y_coor] = angle
;arctan_array now has angles at all the beginning x,y locations
.pul , do",,, ,,,,,,,,,,, ,nto J<TUfI.I ...... y
Y _ <Ii",'",,<m<n' - n" nUI""i'" _ imaac _ c<>IWl'InS, ilK'''' _ iO'\a& _ ,.,"",)
.pu'Y do""""......., .. Into >q>am< omy
lOIllI. _ "" ' !iil"";cr _ imaac _ oolulTUd. ilK;'" _ i.nag _ "''''',)
.pul tDl.lll d''I''><<m<nt ,nto __ te otn}
an:w>. """y( ' ,. j _ 201'1.0
,pop."". orray '" ,11110/]1< , ... "" to d.",,,,,,,,,,,,.,, ,.run fOR loop
<OI'1"_ .... _ ..... y[ . I _lOO.O
lOlal. di"""""",e,ut . ' ] - 100.0
ro,",',, ' 00 8 F.C1S
.,h ... "OR ""'" <o'c."'<o the: ""31< of m<Wcman ( ... ,he
",y oooo.l, ..... of..,h ,tor In ' .. nod 'moo<T omo)"
;and ""''''&1< Into lhe p<opc< 10< .. "", In 'at<'\JUI ..,..y
' . ""'" - n.(oill<d)moon-. """y!OJll
Y _"""If - fl.( oiflUmcorT _ ...... y[ l,i])
, . dull - tiftcd. ,moon" . ..... y[<jJ ,_'Ole, d,<plactmrnl ..... Y
Y. diop lifted . i""""'" . ..... y[0JI(-I ) .p"p" ..... Y d ."txcmrno amy
total disp _ SQItT(. disp" l+ y disp'! )
- --
,"""", ... tOO d,,,, .si,.., and y d,'l' cak'd ""m mean rn'<Ir1
I .. ""'.." . ..... )'( """'.1. """'1 [Q 100.0 T il E.. ... 8t:GI:"o'
OO<'r. w . ..... y[ """'.)'."""'j - oifted)moon" . ...... y[ ' j] .""",,1= <OtT . ..... """Y
di"""""" .... [. """",Y coorl - Iifted im>rT 1mI.y[ <JI
.populate, d,"'l>r:.....,." ..... y
y _ displ .. ,cmalllx _ """".y _coo< J - si ftljJl""," _ amyl) J JOH )
,popol.,o y d"l'lo<<m<nI ..... Y
"mt di splo<emont[. _>Of [ - SQ IIT(, _ disp looemon,[. _ eoot,y _>Of]h!
Y _ di",l.a<:omall,[ x _ >Or .1-';0 r ! )
.popoboo lOt. d"" ""'''>1' and )' d,,,,, <:ok'd
.....
(AT Al' (y _ di",\acan,,"[ _coo<.y _ eoot 1.'_ di",IOC<ITIontj. _ OO<J<, Y _ eoot I ))I!pi III(l,U
:<ok an&k ,n Jov-
....,..
_tan OrTII)'...," has angles '" .n Iho beginning y local.,....
'"
152
ENDIF ELSE BEGIN
IF arctan_array[x_coor,y_coor] NE 200.0 THEN BEGIN
;if arct anarray at x_coor,y_coor is already populated, then compare
correlation strengths of the
;two overlapping vectors. The vector with higher corr. str. is kept.
IF corr_str_array[x_coor,y_coor] LT sifted_imcorr_array[ ,j] THEN BEGIN
corr_str_array[x_coor,y_coor] = sifted_imcorr_array[ ,j]
;populate corr. str. array
x_displacement[x_coor,y_coor] = sifted_imcorr_array[ ,j]
;populate x displacement array
y_displacement[x_coor,y_coor] = sifted_imcorr_array[ ,j]*(- )
;populate y displacement array
total_displacement[x_coor,y_coor] = SQRT(x_displacement[x_coor,y_coor]
A
? +
y_displacement[x_coor,y_coor]
A
2) ;populate total displacement array
angle=
(ATAN(y_displacement[x_coor,y_coor],x_displacement[x_coor,y_coor]))/!pi* 180.0
;calc angle in degrees
arctan_array[x_coor,y_coor] = angle
;arctan_array now has angles at all the beginning x,y locations
ENDIF
ENDIF
ENDELSE
ENDFOR
arct anarray = reverse(arctan_array,2)
;reverse arrays so they will plot right-side up
cor r s t r ar r ay = reverse(corr_str_array,2)
x_displacement = reverse(x_displacement,2)
y_displacement = reverse(y_displacement, )
total_displacement = reverse(total_displacement, )
z=size(arctan_array)
zcolumns = z[1 ]
zrows = z[ ]
FOR i=01 , zcolumns-1 DO BEGIN
E:<iDlF ELSE BECI:<i
IF "", ........ YI. ooorl :<iE 1ClO.O TII F.:<i 8 1;CI:<i
- - -
.If ..., ......... y at. <_.y lOt' to populot<d. ,hcm """'II"<'
.""",,101_ .. ""'gt,," oft ....
. '''0 "'<rJar\tI"8 "lOtS. The '-""'0< ",(/0 hIgher COOl' _ at. IS
IF c:<>I'T ...... LT , ift<d_imcorT _omtYl ' J] T II[:<i 8 ECI:<i
COlT _ ... _ omYl' _ <""'.y _"""'I . .. 1Iod _ im<arr _ om)'(
,popula'e Cllft_ "'_ """Y
x _ dhlpl""<m<nt/. _ coor.Y-',o"'1 - Ii fI<d _ imcOlT _ om)'( <J1
.populOI. , d ....
y _ d;.plxoment]"_ 000f.)' _ """'] - .ifl<d Jm<:OIT _ om)'( 1)
;populOI. V .... ,-
I0I2l_ displ .. .....",". _ <OOr.y _"""'1 - SQ RT(. _ ,_lOt' .Y-''''O< )' 1 +
y_displ""emen<[x_<OOr.)'_"""'I' l ) ._ ..... IObl d,>plocornen' uny
(AT A:<i(y _ displ"".",...'] X _ ooor.y _COO< IJI_ di ..,I""emen'] X _ <OOr.y _ >Of))'!pi' I 010.0
;col. ""!Pc on
arctan_om),(,_""",.y_OOOf] _ UIjI_
,""WI "'"')" no .. !tao"IIi" all tho brstMI"lI y local,,,,,,
ESDlF
ENDlf
I: NDI:LSE
arctan_amy _ , ... n""tan ..... y. l )
;t<' ..... lhoy ,,-,11 pk>< n"" _ ..... "P
OOIT_ ... _ ...... y - ""n""",_",_orny.l)
_ ..
y_disploc..."en, _ ..... -.<><"(y_di ...
1OIal_ d;.pl"""""",, - ... ' n.c{!OI.aI_ d, '1'1"".",...,.1)
. ... i.ot(..", .. _ ...... y)
"'""". .Il)
fOR iooOl " >ro1...",... 1 00 BEGI S
153
;put NaNs in places where there are not valid angles, instead of 200.0
FORj= , zrows-1 DO BEGIN
IF arctan_array[i,j] EQ 200.0 THEN BEGIN
arctan_array[i,j] = Wahies.f_NaN
corr_str_array[i,j] = ! Values f_NaN
total_displacement[i,j] = IValues./^Afo/V
ENDIF
ENDFOR
ENDFOR
print, 'Finished populating arctan array with angles'
iterate='y'
while iterate EQ 'y' do begin
good_flow = WHERE(arctan_array GT -181.0, num_good_flow_pix)
;get indices (x,y location) of angles and place in array 'good flow'
;number of angles is equal to 'num_good_flow_pix'
keep_angle_vect = lonarr(num_good_flow__pix)
;create array same size as number of angles in arctanarray, this is
;the number contained in 'num good_flow_pix'
print, 'Searching for good vectors using arctangents'
inform=['Sorting Vector Data by Neigborhood']
envi_report_init,inform,base=percent_complete,title='Program is working',/interrupt
;begin % complete widget
FOR i=0L, num_good_flow_pix-i DO BEGIN
;loop runs number of ;interations = number of indices in 'num_good_flow_pix*
IF (i mod 100) EQ 0 then begin
envi_report_stat,percent_complete, i, num_good_flow_pix-!
;updates percent complete widget with each cycle of outer for loop
endif
fOR j "'lll =", .. 1 00 BECIN
If attlan_ ..... y(ijj tQ lOO.O TItEN 8CIN
orctm_omoy(ij) _ iVaJ_L NaN
ootr_su_arraYliJl -
toQI_dii!ploc<m"'''li,i] - !VaJ_L Na,v
ENDIF
[NDFOR
f. ..... DfOK
"bllt i'<r.I.I< [Q Y do 1M1J.
jOOd _ f\Qw WUt: Rt:(OttWl_"""Y CT . , 1.0. nurn JQo,UIo"" Jli. )
.geI ,001<<1 I',r 1o<ation) of .... co ond plio '" no..'
.numb<r of ... ""Iuol to 'n"", go<><! n.,,, "'po.-
keep_anp_ vee! . ..... ro1numJOOd_fIow...JIix)
.<rnI< """Y _ ."e. ntm'lb<r of "&los ,n """ .. _ ..... y. Ih .. "
;!IIt n"mber >n .. ,r>al,n '''''''' .i:<JC>d ,PI>'
IntOrm,,\"S<>rt"'i VOCIQ< ilII:I by
'1 Jtport _,.11, infonn.b... .... ,iU ... 'l'1 "'" ." " ........ ,,,.. /interrupt
,begin 0", romp'''''' .. ,dg<1
f OR i-01 . numJOOd_IlowJli'. 1 00 8.:(;11'
,..,.". rune nwnbot of n ..... '_ "omb of ,,.j,en on 'hum...,.t nov. _pl<'
IF (i mod 10() EQ Q tb btll
"' _ ... port _ " . , .pcr<alU:ompl<l<, i. nwn JOOd _110 ... "'pi ,
."pd""S Jl'<I'Cft" oompk1." ,d& ,,,lh _h <)I:'o .. r oolOr for loop
.. dif
'"
154
pixs = ARRAY_INDICES(arctan_array, good_flow)
; create 2-D array (list) of subscripts contained
window_size=51
width = fix(window_size/2)
while wi ndowsi ze LT 50 S do begin
;while loop to create variable window sizes
box = EXTRAC(arctan_array, pixs[(),i]-width, pixs[ ,i]-width, window_size,
wi ndowsi ze)
; create subset of arct anarray which will be
;analyzed, size and location of box is defined
;using pixs and wi ndowsi ze variables
box2 = EXTRAC(total_displacement, pixs[' ,i]-width, pixs[l ,i]-width, window_size,
wi ndowsi ze) ;subset totaldisplacement as well
good = WHERE (box GT -181.0, count)
;array 'good' contains indices of angles within 'box'
IF count LT 9 THEN begin
window_size=window_size+20
; if more than 8 vectors within 'box' then statistics will be calculated,
;otherwise window size is increased to encapsulate more vectors.
endif else if count GE 9 then begin
window_size=501
endif
endwhile
stats = MOMENT(box, /NaN, sdev=stdv)
;calc statistics on angles inside 'box', if standard deviation of
;angles is less than the threshold declared above, then the vector at
coordinate i of ' goodfl ow' is kept and placed in the array called
;'keep_angle_vect'
stats2 = MOMENT(box2, /NaN, sdev=stdv2)
;calc stats for total displacement as well, to sort via length
mean_arctan=stats [ 0]
mean_tot_di sp=stats2 [ ]
pi a ", KIt,\ ' _" Dlct:s(aretan_l/TIIY, goo,U1" ... )
, <""'. 2D omoy (10 .. ) of ....... nl". <00'''1'1<0
",,; _ _
",',dill . n.(..;.oow. lizo' l )
.. -hi" window. riz. LT 0;01 do 1><1;1.
, .. hIt. ""'" '" errol< ... ,,01> .... Indo .. ""eo
box :XTlL\ C(UCWl . ...... y. pixs[ UJ] ... idlh, "i .. .. idlh. .,i _ _ .i .....
.. indow_li.c)
........... """ of "",WI array .. hi<h .. ,11 be
"""ly,a;I. OIl< and 1o,,,,,,,", of bro. " defined
..... "11 p ... and ",,.Jo .. _ '''e ,-..,obles
'"
boxl _ [ XTlUC(tot.Cdi..,laoemML pi .. pixs[ l ,.)widlh. -';ndow""u.
window ."e) ...... l>otIlotal ",.11
JOOd Wm :Rf:jb<>. GT 181.0, """"'J
"""'Y '1I<""d' """"" .... ,f>d-= of ""Wn "" th," '1>0.'
Woount ' .T 9 TItEN .... 1.
window _oi ..... 'i _ _ ....... 19
. ,f..-" !han 8 ''''tors'' ,tho. 'bo,' 111M "'''-'''''' ",.11 ... cak"l ......
;ot/>er>o-; .. ""_ 10 co ... , .... I ... """" ,..,oors .
IIr. ... If <OWl' GE q .. I>oJl.
""indow I
.. dir
.... . MO'l F'T(bo IN .. '1 ......,dv)
;cak ... b .. ,<, "" ongko; ,_ '1>0,', If ....monllk> ,"',.," of
.. loss lh>n II>< ......,...,id Ik<Iaml abo: ..... u.... "'" ''''''Of at
;<0<>1",.,. 'of'gOOd no .. ' " and 1'1><"" , n ,II< ...... y <>Ito<!
;'\;:p angle ".1'
ows2 - \ 10.\lf' T (box2.1N .. " d...-..d>'2)
,<ok <IAl> fOr toI.al du;plac:u ... ", .. 10"'" '.0 lon,h
m<alI_arctan-""'(OJ
""""'_lOI_di_osl{OJ
155
if stdv LE st dvl i mi t then begin
keep_angle_vect(i) = good_flow(i)
;keep_angle_vect will contain indices of good vectors/angles
ENDIF ELSE
IF (arctan_array[pixs[ pixs[ 1 ,i]] LT arctan_threshold*stdv + mean_arctan) AND
(arctan_array[pixs[ ,i], pixs[ ,i]] GT mean_arctan - arctan_threshold*stdv)THEN
BEGIN
IF (total_displacement[pixs[ ,i], pixs[ ,i]] LT totdisp_threshold*stdv2 + mean_tot_disp)
AND (total_displacement[pixs[ ,i], pixs[ ,i]] GT mean_tot_disp -
totdisp_threshold*stdv2) THEN BEGIN
IF (i MOD 100) EQ 0 THEN PRINT, stdv, ' = arctan standard deviation'
IF (i MOD 100) EQ 0 THEN PRINT, stdv2, ' = displacement standard deviation'
keep_angle_vect(i) = good_flow(i)
;keep_angle_vect will contain indices of good vectors/angles
ENDIF
ENDIF
ENDFOR
envi_report_init,base=percent_complete,/flnish
;end percent complete widget
print, 'Finished searching for good vectors'
;the array ' keepangl evect ' will have empty rows due to sorting
;process above, so these are removed as follows:
good_pix = WHERE(keep_angle_vect GT 0, count_good_pix)
;the array 'goodjpix' contains indices from ' keepangl evect ' which
; contain valid angles/vectors
keep_angle_vect_short = lonarr(count_good_pix)
;create new array of correct size to house indices of good angles
keep_angle_vect_short = keep_angle_vect(good_pix)
;use indices stored in 'good_pix' to populate ' keepangl evect short'
koep .iJ - 1I""'I_1Io,,1ij
;I;<eq> artxl< 'I "',II =""n ,ooos of KOOd ''''''''t''angIes
ESDII' F. Ul I:
' t' ("",,",,_array[pixo(O.ij. pi .. ! I,ill l. T """"'_Weshokl ' <ldv" m ... _"",ton) AND
(am""_""")'\"i"I0.iI. GT moan_amm . Ill:WI. IhlahoId 5Idv)TlIr.:oo
BECI N
'"
W (toUo' _diopL"'''''''''''[piu(Q.ij. pi"'! I.ill 1. T lOIdi""_thn:ohold .... v2 .. m<&n_"". diop)
AND (tot>J _displx.",enltp;.",O.i). pi .. , I.ill GT ""'an_to'-d;",
toIdiOp. W<shold' "dvl) Tin:;\" 8ECI1"
II' (i MOD 1(0) EQ 0 TlIE"'- PRIIIo,., OIdv, - om. SIOI>Ilard d""oUoo'
II' (i MOD 1(0) EQ UTILEI' PRI1<o'T. ruM!, , _ d"P..., .......... oM .... <Iev,Ilioo'
' ''''''_art$!<"_ "iJ - 1P""'I)1" .. "(i)
.k""" uW< 'OC' .. ,II conWl> IndfUI of KOOd 'O<''''''"''H''''
[ I'DI "
t:sDl r
[ :" OFOR
' . "'_"'pon_,.I'.b". percen' complete/fini."
.M<! percatl """",1= " ,Jgc1
.Ih<..."y,. ........ JIIo "",<, ",11 ho", """"y ""'. due 10 _'1Ij
.proc .. abo,-.. '" !IIesc .... mno>I .. folk ....... ,
j<>Od.J>i. -- WJlEII(l::otp_",,&I<_ ,..." GT 0, COUn'_jOO,tpixj
,w ..... y'JIOO<l ,",' """ ....... ,n<l", .. from '\;<q> angk: ,-,' ""hr<h
,<oo";n ".1..1 ..
k<q> __ """" __ ",:,_ """" -- ..... ", COWlt J<IOd JliI )
,erato: """,' >mI)' "fcO<TC<' we to hous< ,,..jotQ ofJ<>Od onJk's
k<q>_anp_ ,",,_short . k<q>_",,""_ '''''t(aoo<tpix)
,"'" ,,..jo< .. <10.'<1 ,n 'p>od -'po.' to po>pUl >10 'l<q> """< ,OCI """"
156
;with indices of good vectors
;the array ' keepangl evect s hor t ' now contains only indices of good
; angles/vectors from the original array called ' arctanarray'
good_arctan_array = fltarr(glacier_image_columns,glacier_image_rows)
;create new array the size of the glacier image which will contain good ; vectors
good_x_displacement = fltarr(glacier_image_columns,glacier_image_rows)
;create array to hold good x and y displacement values
good_y_displacement = fltarr(glacier_image_columns,glacier_image_rows)
good_arctan_array[*,*] = WAUIES.FNAN
;populate new arrays ;with Nans (instead of zeros) so VELOVECT will not calculate
good_x_displacement[*,*] = ! VALUES.
;vectors with zero displacement at every pixel without a valid vector.
good_y_displacement[*,*] = ! VALUES. F_NAN
good_indices = array_indices(arctan_array, keep_angle_vect_short)
; goodi ndi ces will contain list of indices in arctan _array with good vectors
how_big = size(good_indices)
x_good_indices = how_big[ ]
;get number of good indices contained in ;good_indices, this represents number
y_good_indices = how_big[2]
;of good vectors to transfer into goodar ct anar r ay
FOR i=0L, y_good_indices-1 DO BEGIN
x = good_indices[0,i]
y = good_indices[ ,i]
good_arctan_array[x,y] = arctan_array[x,y]
;use indices stored ;in
,
keep_angle_vect_short' to place good vectors
;new array in correct x,y locations
good_x_displacement[x,y] = x_displacement[x,y]
good_y_displacement[x,y] = y_displacement[x,y]
ENDFOR
U = fltarr(glacier_image_columns,glacier_image_rows)
;create arrays ;to hold x and y displacements to be used to plot arrows
,Ib ,00 ..... "f p><><l '.''''H,
;,.,. ...... y 'k<q) ""Ilk .. el. ohon',.,,,, ...... ' .. ""Iy ,ooOces of p><><l
from ,.,. ""JIM! ...... y callal ' ''''tan om)'
p>d _ .... on _ ...... y - n'.rr(;1aoicr )",ai< _ _ im.llJl' _ "",.-,)
"'<ale 11<'0' ...... y ,.,. iUC "r,he lI<'cr """go> "hoch ",II "on' .. o p><><l,,,,,,'''''
p>d _x _ disp Ia=ncn, - n' Ii"""i ... _ ilDaJ<' _ ool.mns.lllocia _ ilDaJ<' _ "''''' J
.<mI'e amy 10 bolol p><><l. IItId Y d.."lournen' I>h ...
p>d_""...,_ ...... y( . , ' ) - tV ALUES,Fj"AN
new arraY' -.:.,..[,,..,<><1 "f'<rool "" H LOV<CT ",II no! c.It.I...,
fIO'ld_, _displloC<nlc,nl , ' J- tV ALUESF_NAN
.''''''''' "tlb '''''' .d",I'Io<m>on, ., "'''')' pox.1 ",!hoot. ,-.I,d ,1<>1",
good jOOicos - ...... ) -'ad it<o.( "" ... _ array, keep _""ii' _ vt _ ohon)
; fIO'ld ,nd"",." ,II con'OIn I", of ,00,,;<1 In .. ,""" ...... y ""h fIO'ld '''''''''
how_big - .1ZfIO'ld _indi<esJ
xJo",Undiocs - how_billl ' J
'JCI nwnhc!- of good ,nd""", OOIIl.:o.Inod 'n.flO'ld ,OO,ceo. 'h., n.m1hcr
1Jo"'I)""io .. - how_billl l J
,or.,oo ,,,,ton '" Ir2ftOf ... tnlO p><><l .,.,tan ..... y
good_ate"" _ omty(x,yJ .,.,1>n_array(x,yJ
, .... ,,..],<es"""'" "o"eep """" ,, ohon" o pia: good ' ........
;new amy ,n """"'" y Ioc.""""
p>d_. _displ""crn",ul' ,yJ - . _displ"".......,'( y)
fIO'ld..y _ disploc"",en'(. ,y I y _ disp'"""",en' !' ,r J
[ ,sOFOR
U - n, liilocicr j'''''II" _ oolWll1tf4locier _image _ """"J
,=alo """YO ;10 Ioold IItId r d,-II"""""""''' 10 he """" to plol ..,..,...,'
157
V = fltarr(glacier_image_columns,glacier_image_rows)
good_total_displacement = fltarr(glacier_image_columns,glacier_image_rows)
good_corr_str_array = fltarr(glacier_image_columns,glacier_image_rows)
FOR i=0L, glacier_image_columns-l DO BEGIN
FORj =0L, glacier_image_rows-l DO BEGIN
IF good_arctan_array[i,j] NE 'NaN' THEN BEGIN
;if the indice holds a legitimate value and not NaN, proceed
U[i,j] = good_x_displacement[i,j]
;transfer x displacements into array TJ'
V[ij] = good_y_displacement[i,j]
;transfer y displacements into array ' V
good_total_displacement[i,j] = sqrt(U[i,j]
A
+ V[i, j]
A
)
;transfer total displacement into separate array
ENDIF
ENDFOR
ENDFOR
FOR 1 = , glacier_image_columns-l DO BEGIN
;for loops to transfer corr. str. and parameters into new arrays
;at locations of good vectors
FORj =0L, glacier_image_rows-l DO BEGIN
IF ABS(good_total_displacement[i,j]) GT 0.0 THEN BEGIN
good_corr_str_array[i,j] = corr_str_array[i,j]
ENDIF
ENDFOR
ENDFOR
rotated_U = reverse(U,2) ;rotate so tiffs will display properly when ;viewed in ENVI
r ot at edV = reverse(V,2)
U = congrid(U, glacier_image_columns*scale, glacier_image_rows* scale)
V = congrid(V, glacier_image_columns* scale, glacier_image_rows*scale)
v .. lIIarl'(JlKier . ..... coh ....... ' ....... ....... ....... ,
JO>Od_ ..... .. .... rrUJaci<t. u.... col........p.;.,. . ...... ....... )
...... _-._ ... _ ..... ...... _ .... ....... _ ....... l
. pci<r. ima&<_ "",' ... 1 DO I tCIS
1f ..... lOr. 'l<; ... :CI."
If .... 1Rl".., hoIdo . l<a>lll>II!c ,01"" oN .... ,.,. po"""'>!
U(IJJ " ......
.lrMlf .. , d, ... lo<nenu ,,,.., amy 'Iv"
V(ijJ ..
.. ylhoplo __ any'\"
....... ...... .... u.-_li,iI - ... n(U[iJt'l . V\iJrl )
,.,.. .......... " rI .. eli..". """ __ amy
L"DfOR
L"DfOR
FOR ,0111 00 :CI:-'
,10< toopo ......... fer.....,. .... on;l ....... .en """ _ ..... )'1
, .. __ ..
fOil j .. 11 .1I .. icrJ",aSC. "","5- 1 DO 8.:(; l i'I
If AIIS(II'>ocUoUl. diopl .. emm'I'J)) GT 0,0 Or.C::: I;Ii
...... o.....,.o ... _orTlIy[iJJ .. lIT .Itr . ..... )'[ij]
r..sml'
t:.:'ilWOR
_ u .. ,"ono(U.! ) .-.. brio .. ,II ,"' "') .. !lao " .... cd '" ',-'01
_ rV . ...... ny.l )
u" _1rid(U, ........ ima&t. cohm\DI ....... ...., .... _"-_ ....... onIt)
V .. .... rloI(V. pier. ima&t. coIumDo' .rn., &Ioricr. inIafo. - .. ..... ,
'"
158
good_corr_str_array = congrid(good_corr_str_array, glacier_image_columns*scale,
glacier_image_rows* scale)
!order=0
;set display coordinate system to match convention used in
;ENVI, image is drawn from top down
window, 2 ,xsize=glacier_image_columns*scale, ysize=glacier_image_rows*scale,
retain = I ;open display window of ;correct size to hold image of glacier
loadct,0
;black and white color table , uncomment this command
;when using grayscale pea image as backdrop for arrows
5 >t
he following commands can be used to display the grayscale pea bandl ;jpeg2000 image:
enlarged_glacier_image = congrid(glacier_image, glacier_image_columns*scale,
glacier_image_rows*scale, )
;change size of jpeg2000
tvscl, enlarged_glacier_image ;display jpeg2000
device, decomposed = 0
; foreground (plotting) color value is interpreted as an index value of a color table
print, 'PLOTTING VECTORS'
;*****the following commands are a stripped-down version of VELOVECT***
s = size(u)
t = size(v)
missing = 1000.0
mag = sqrt (u
A
+v
A
)
nbad = 0 ;# of missing points
x = flndgen(s(l))
y = findgen(s( ))
good = where(mag It missing)
ugood - u(good)
vgood = v(good)
JOO<l oorr _<It _ .... y - ..... k ,jd(good_ torT _." _ amy. MIlICi ... )malle _ oolurn",,' scal .
sloe;or _image _""",' 11<&1<)
,-
;XI d,,,,loy <oon!in;W: ')'II<m to mal<h ron, m1ioo ullOd ,n
",toV!. ,nuB'" ......... " f""" top <10 .. n
"i ........ l ... ... _ im>&e_""Iumn$' ocal .. .
main - L ;open d,..,I.y ", ......... or $i,. '" Mid '""'S< of &I""'"
....
,bloc ..-.J "h". <010<....... . ...-"",..., ,hI, """"""'"
." hrn "'''I ",,)'X_Ie pc> ' ....... bo<:kdrop for "'""""
'"
...................................................... .1
h< fol1o .. onw com...ooo om> "" ""'" to d,,,,loy.he ..... pc> _I
tnlar-sl Jio<icr Jmas< - ... nvid(gI""ier )""8<. sloe; .. _ imase _ <olurnru' ",.Ie,
ila<i ... _'m&&< _ rows' scole. 1)
'" .... 11< sO or Jp<'J1000
enlargodJloc; .. j ..... . d''I'lo)' )p0s2000
d.-'itt. dccomp<><! - 0
fOn: ..... nd (pl"'''ns) color "IL>< " .... ,00", .. III< .. r. coIor..tole
'l'LOTTING VECTORS'
," .... "'" f<>lkw. '"II com...-. ""'. S1nPl""'l.Jo"," , . ........, ofVELOV 1;(,. ...
' - ' !u1:u)
miss,,,, - 1000.0
x - I ))
y
ugood - u(1P""i)
,-p>d - v(1P""i)
xO = min(x) ;get scaling
xl = max(x)
yO = min(y)
yl = max(y)
x_step=float(xl-xO)/float(s( ))
; Convert to float. Integer math
y_step=float(yl-yO)/float(s( ))
; could result in divide by 0
maxmag=max([max(abs(ugood/x_step)),max(abs(vgood/y_step))])
sina = arrowlength * (ugood/maxmag)
cosa = arrowlength * (vgood/maxmag)
;len of arrow head
;Angle of arrowhead
;sin 22.5 degs * length of head
large_num_pts = n_elements(good)
loadct, 13 ;rainbow
\p. thick = i
r =. 45
angle = * !dtor
st = r * sin (angle)
ct = r * cos(angle)
if dat aori gi n EQ 'i' then begin
; commands to color code vectors from IMCORR process....
for i=0L, large_num_pts-1 do begin
if good_corr_str_array[good[i]] LE 2.0 then begin
\p.color=25 ;purple
xO = x(good(i) mod s(l))
dx = sina(i)
xl =x0 + dx
y0 = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[x0,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,yl,yl-(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
.0- _0(0) tKo/,.
01 - .. >(.)
yO . MIoI(y)
yl u (y)
_ ..... IIeMI.l-.0yr.o( 0( 1))
, ( -_"" 10 n.. InlcF "'"'"
y _ oaop-lINI(yl-)OyllMl(o(
. ....... mool, on do,.:It b) II
mumar ... ([_ .. .. .... (oboI. VJI>OdIy_"""')J)
.... . ........ 'I<nJih . (up>4lmumq)
.... - _Imjph (vllQOd/maxmq)
r . '
anjI. ll.< !dtor
.. - r ' .,.( ...... )
.. . r ' <'Oo/.onp)
-., 1.1 ; t 'w
Ip.I_-'
,1m of"""" head
of....."., bead
;SO" l! , oklo 1m .... of ......
If ..... GriP r.Q 'i' _l>ftIo
. " 10""" <:<:de '0CI0n f""" I\tCORR .......
f.r i -tfl ...... . um.JU- 1 do b<tIo
If JO<><I. -,". IIJ. ornYlaood(iJI l l.O . ... .... ,.
!p.co/",..l< ,purpk
.O- x(p>d(i) _ 0( 1
oS< ' ''lII(i)
xl _ .O d>:
)'11 - )(pId(i)1 0( 1))
dy . coa(i)
r1 ,o <ly
"'"'.- ,..,_ ...
pIoo.J oil.>: 1 J< Hot S
.1 .. J.(ct <hIxd .... S
[)'O.yI,yI..j<t dylj<l ... ".M) )'d.. S
yl.yl-(OI dyIyd ... 4l!xd) )<I). S
color=color, /device
endif else if good_corr_str_array[good[i]] LE 4.0 then begin
lp.color=50 ;blue
xO = x(good(i) mod s(l))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[x0,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[y0,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] LE 6.0 then begin
!p.co/or=100 ;aqua
xO = x(good(i) mod s(l))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[x0,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[y0,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] LE 8.0 then begin
!p.co/or=150 ;green
xO = x(good(i) mod s( 1))
dx = sina(i)
xl =xO + dx
yO = y(good(i )/ s(l ))
1 ...... " "0 _
do - rino(i)
xl - xO+dx
to - )(p>od(i) I 0( 1))
dy - oooa(i)
yl - )O+ dy
.d .. _ .....
)'d-y_Jlq>
plob.[. o,.. l,x!.( <1' <h/xd.Jl dyl)'d) xd. $
x I ,xl.(cI dm;d ... dyryd).d). $
[)O.yl.yl -(<1dyl)d .... .w. d) )'I. s
yl.yl.(CI dylyd-II <h/xd) )Id). s
<0100 .loti\l<."",
!p.' 10<1 _
.0 - o(p>d(iJ _ 0( I ))
" - rino(i)
)0 - )(J<>OiI(i) I o( l ll
dy - oooa(i)
yl - )O.dy
.d .. _IIq>
)<I-y_"q>
ploto.!. o,..l ,x 1-(<1' <Wl<d-O!' dyl)'d)' ''''' S
,xl.("' dxhd ... S
{)O.yl.yl-(C! dyI)Id ... <h/xd) )d, $
yl.yl.(",' dyfy<Hl <Wxd) yd). S
<0* ''*>oJ<k>i<x
.0' o(p>d(i) _ 0( I ))
<b: - rino(i)
d-.O "
)0 - )(J<>OiI(i) I 0( 1))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] LE 10.0 then begin
lp.color=2()0 ;yellow
xO = x(good(i) mod s(l))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,xl,xl-(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] GT 10.0 then begin
!p.co/or=250 ;red
xO = x(good(i) mod s(l))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots, [xO,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
dy - <OII(i)
1
1
- ,0
04
1
,,1,,",_0Iq>
---
pIob,jxO .. S
.1 .. l-{ .. .w.d .... d)1yd)".dJ.S
5
11 .11-("" d)1yd-" ' 4xIld)' )':I J. S
""Iao-coIorJ&vi<c
.. dirt ... It i<'Od. OOtr. At . ...... J1fOOd[ill l : 10,n ......... 1.
ip"""' ..... IOO .)'0110 ..
O- .(toOd(i) _ 0( 1))
<Ix _ lli,.i)
xl - .O * <
,0 - 1<Jood(i) I 0(1)
dy - <OII(i)
11 - ,0 * 41
...
)Ow)r. "<P
pIob,j.O.d .. I -(Cl<kJxd..a' dyf)d)*.uL $
.1.<I-("' oW>;d .. dyf)'d) .d). S
(yO,y1 ,yl-(""dyIyd"' dltIH)' yd, S
yl.yl-{,, dyf)d' Wxd))odJ, $
1" ........... ;'1\) .t<oI
. 0 - . (p>d(i) _ I( I)
do - oino(il
.1 - .0 .....
)'0 - )'(toOd(i) I 0( III
dy - <OII(i)
yl - }4Iody
.d ... , OIq>
",,,,, 1Up
pIob,j.O"I .. 11"' .w.d ... djiyd) .4, S
d .. I.("' oWxd"' dyf)<l)".dj. S
[)O.y1.yl-(<l dyl)'ll ... .w.d) )'Il $
yl,yl-(C'O' dyl)'ll-.. ' d",.d)' ,.t). S
coIor-<:oIo<Jdevicc
'"
162
endif
endfor
endif else if data origin EQ 'c' then begin
;commands to color code vectors from COSI-Corr process
for i=()l., large_num_pts-1 do begin
if good_corr_str_array[good[i]] LE 0.80 then begin
\p.color=25 ;purple
xO = x(good(i) mod s(l))
dx = sina(i)
xl =x0 + dx
y0 = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[x0,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[y0,y 1 ,yl -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color, /device
endif else if good_corr_str_array[good[i]] LE 0.90 then begin
!p.co/or=50 ;blue
xO = x(good(i) mod s(l))
dx = sina(i)
xl =x0 + dx
y0 = y(good(i )/ s(l ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[x0,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[y0,y 1 ,yl -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
-...
.. d., ..... If <laul_orip! EQ 'c' 1IIon-"';'
"" _ I<><OIar<Odo , ....... &.-COSI.("_,.,.z.
.p"'1>l
0 I (p>d(i) ...... 0( I))
<Ix . oW(il
01 -.0 ""
)'0 . ),(JO<>i) ' 0( 1))
dy - >P(i)
11 - )<1<1)'
- -""
)'11.,.- ",""
pIoto,(.O'd .. I-{ .. <Wxd .... dyr,d)".t4. S
.1 ... S
[}O.yl,yl-(<I' dyIyd"' dl!1d)")'<1 S
yL,yl-(<I ' dyf)d-sl' <Wxd)' ydJ, S
!p . ...".",...<O .bl ...
0 - .(JOOCI(i) ...... s( I
d:< aiDll(i)
.1 -.0'"
)0 . )(tood(i) I 0( 1
dy . <OIII(il
11 - "o ' dy
''''''-ooqI
)'II.,._1ICp
pIot",.o.. I", J.(ct <Wxd .... dylyd)' .<4. S
d .. 5
[)O.yl,yJ.(CI"dyIyd .. " <!loh;d)' )'4. S
yl,yl-("' dyl)d-"' <Wxd)' ydJ, 5
cob"""""""
'"
endif else if good_corr_str_array[good[i]] LE 0.92 then begin
!p.co/or=I00 ;aqua
xO = x(good(i) mod s(l))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] LE 0.94 then begin
!p.co/or=150 ;green
xO = x(good(i) mod s(l))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,xl,xl-(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] LE 0.98 then begin
!p.co/or=200 ;yellow
xO = x(good(i) mod s( ))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
dlf ..... If ...... _ ..... _ .... LE ......
" !1In.-
.0 - >(.,.,..,) _ 0( 1))
<III - aao(i)
.1 - . 0 d>;
)0 - )(1JOOd(i) 1 0( 1))
dy - >0004')
yl - )O - dy
.r.. . .....
)"1->'. "'01'
plo ... [. O .. l .. l-{ct dxIlcd .. dylyd) .d, $
.1 .. 1-{C'I' oW'.d'''' dyl)'d)' ,dl. S
()Q.yl.yl.( .... dylyd ... dxIlcd) )d, S
Y l.y I of <1' d)'fyd ... dxIlcd)' )'d I. S
ooIor-<oIor J,,",itt
.. dl' ........ ...... corr ......... ){JQOCII,1l LE D. ... , .........
I .......... ' '10 'lJ='
. 0 . s(p>d(i) _ oi l })
... - 0UIII(i)
. 1- . 0+d:<
)'0 - rtJ<>od(il / oi l ))
dr ........ ')
y1 - )O-dy
06 ... .. .,.
)'<I'y.llop
plob. [.o,..l " '-(<l' .w.d-Sl' dyl)"l)" d, S
,I .. HC1 ' .w,d""dyf)'ll)' ,dj. S
()<I.yl.yJ.{ dyl'yd ... dxIlcd) }II, $
yl.yl -(<1 dylyd ... dxIlcd) )'II[. S
<Olot-<:oIo<Jdmcc
.. dUn.. w ............. _ IIr . ..... Jlp>OdfiJJ L[ II. .......... 10
!p"',',
. 0- x(p:od(i) _ 0( 1))
l1li ' 1Iino(i)
d - . Od>;
)Q - )(......--i) I 0( 1 I)
dy - OOA(i)
yl - )'II' dy
'"
164
if iterate EQ y then begin
xd=x_step
yd=y_step
plots,[xO,xl,xl-(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] GT 0.98 then begin
!p.co/w=250 ;red
xO = x(good(i) mod s( 1))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif
endfor
endif
iterate_base=widget_auto_base(title='Iterate the process again?",/xbig)
list=['yesVno']
sb = widget_base(iterate_base, /row)
wt = widget_toggle(sb, uvalue-toggle' , list=list, /auto,xsize=35)
save_result = auto_wid_mng(iterate_base)
if save_result.fogg7e EQ 0 then iterate = y
if s2LVQ_rQsn\ttoggle EQ I then iterate = 'n'
;save_result.toggle[0] = 0 ....yes
;save_result.toggle[0] = 1 ....no
.. dlf
fldf ..
pIoU,(xO"I .. Hct dVxd ... d,.ryd)..t, $
d .. l-(ct d>J1<t>tI d,.ryd)".>d). $
()O.yl.yl-(ct <)'d ... dVxd) yoS, S
yl,yl-(ct d,.ryd .. dVxd) )'d). s
CIJb ,>Icw/ _
tp....,.....B4I .rOO
. 0 ' . (p>d(i) mod 1( 1))
d.< lino(i)
xl . O d.<
)'11 )'(J<I<'d(i) I 0( 1 ))
II>' ' '''''';i)
yl')(I'dy
---
pIoU,(.o.. I .. l-(ct 4xh;d ... ' dyIyd) ..t, s
.1 ... Hct dVxd ... dyf)'d) .>d). s
()O.yl.yl-(ct dyfyd .. dVxd)"yd, s
yl,yl-(ct dyf)'fl. .. dVxd)")'d). s
...... ,Dloo';.se...,.
i' ...... _ .. lcIl.C "'0_ baou, ..... l .......... "' ........... Abi&)
h .. -{'yco' ..... '
ob ......... _.o.o(i""""'_ .... _)
" . . .. 1cIl'H '-"<01>. ...... 'IoiIk'. li01-liM, l..w.J.oize- t<)
a"., ....... .,o_" id __ d i _ __ )
If a" ...... EQ 0 III .. ia<nu .. Y
lf a _, "_'ak EQ l lktr ia<nu ' ,,'
M'. 41 ... l"'"
"'t Po -.It(O 1 __ __
165
arctan_array=good_arctan_array
total_displacement=good_total_displacement
x_displacement=good_x_displacement
y_displacement=good_y_displacement
adjust_base=widget_auto_base(title='Adjust thresholds?',/xbig)
list=['yes','no']
sb = widget_base(adjust_base, /row)
wt = widget_toggle(sb, uvalue-toggle' , list=list, /auto,xsize=35)
adjust_result = auto_wid_mng(adjust_base)
if ad}xist_resu\Ltoggle EQ 0 then adjustment = 'y'
if adjust_result.fogg7e EQ 1 then adjustment = 'n'
;adjust_result.toggle[0] = 0 ....yes
;adjustjresult.toggle[0] = 1 ....no
if adjustment EQ 'y' then begin
thresholds=widget_auto_base(title='Edit thresholds for neighborhood analysis',/xbig)
list=['arctangent threshold','total displacement threshold'/arctangent limit']
vals=[arctan_threshold,totdisp_threshold,stdv_limit]
output=widget_edit(thresholds,uvalue='thresholds',/auto,prompt='Enter new
values',dt=4,field=2,list=list,vals=vals)
thresholds_result=auto_wid_mng(thresholds)
arctan_threshold = thresho\ds_resu\t.thresholds[ ]
totdisp_threshold = thrQsho\ds_rQSu\Lthresholds[ ]
stdv_limit = thresho\ds_TQSu\t.thresholds[ ]
print,'Current arctangent threshold is: ',arctan_threshold
print,'Current total displacement threshold is: ',totdisp_threshold
print,'Current arctangent limit is: ',stdv_limit
print,'New arctangent threshold is: ',arctan_threshold
print,'New total displacement threshold is: ',totdisp_threshold
print,'New arctangent limit is: ',stdv_limit
endif
endif
endwhile
annotate, window=2
print, 'FINISHED PLOTTING VECTORS
om." _ lmI-rJOCMl _ .......... _amy
tot.al. _ tot&I. dioplac<:rnenl
_ displ..,emtn'- OO<l. ' _ di.., iaoemen,
ad)"" _base-.. klt<C '.'0_ boot(.i 11.-" MJ'" Ilu'nhoIdJ" I . bi&)
li .. -!')ft' ...... '
... . .. _b.so(odj"SI-"as irow)
WI - " 'idt<Uoult(ob. ", .. I..-'loulo', iiSl- liSl. la.,o.xsi,e-.")
odj ... _ ...... k .. 00'0 . .. kI. m.lI(adjOlSl),w<j
If adj.sU .... 1uOUle EQ 0 ,_ adj...",.", .. Y
If adju<uuuluaggle [Q I I adj"""", - ""
;adJ." 11._ Y"
:""Jus.! I .no
Ir adj.s""",,, [Q Y l b btt:l.
IhresI>oJdo ... '!dl<C "'0. b*'<ili,le-1idlt lhrtsholdo anaI)'S',' ,lxbiB)
li .. -('1rC\aIli"'" tInshold' .'Iotal dllplooa"""l lhrallold'._aent hm,,1
. olP(""""'. lhrcobold.lOldisp. lhrcoboklstd" . limill
""1"',.,.,'1<1 . .. _ 11.( /lulo.;>"""P'- 'En'.,. ..,..
......... d' ..... n.ld- l .li .... li ... , .. I.-vaI.)
Ilu'nholds _"""It 10_ .. 'Id . 1II01t( Ihrnh<>tds)
II1< .... U"'ahold - _ld,. resuluh",,/Joids(0J
totdi .... Ilu'nhokl - lhrtshokb _ rem 1,_,h,..,!Joidr[ I]
.IdY. limil - lhreshokl.J .. uluh,..,. ....... Jsj l ]
pri." .. ......... ..
prl.','CIImnl arcanl""l lllresholcl if: ' ,an:lM_llnsl>old
pri., .'Cumm l<IU! di'l' .... ...,..,. _1<1 i<: '.lOldi'l'_lhreshold
pri.';C""""] arcan""" 1"""'0: ',tid. _Iimil
pri.,; ..
pri.,.'N ... on:tanpt IS: ' rcwuhreabold
'New IOI.t dl'l']"" ........ Ihreabold il: .lQIdiop _lhreshold
p".'.'New ""'tanp1 Itm" '" ,tIdv Jimil
.. .. .. .. .. ...... ........ ..........
dlr
tadi'
pri." 'FINISHED PLOTTING VECTORS'
'"
166
. j ^ * * * * * * * * * * * ^ ^ ^ sorting vectors, now save display******
picture_base=widget_auto_base(title='Save this display?',/xbig)
list=['yesVno']
sb = widget_base(picture_base, /row)
wt = widget_toggle(sb, uvalue='toggle', list=list, /auto,xsize= )
picture_result = auto_wid_mng(picture_base)
if picturej-esult.togg7e EQ 0 then picture = y
if picture_result.togg-/e EQ 1 then picture = 'n'
;picture_result.toggle[0] = 0 ....yes
;picture_result.toggle[0] = 1 ....no
IF picture EQ 'y' THEN BEGIN
display = tvrd(true= )
rotated_display=reverse(display,3)
;rotate display so tiff image will orient correctly when opened in ENVI
;rotation is about y axis, which is signified by 3 in this instance
;while color band is 1, x axis is 2.
accuracy_directory=widget_auto_base(title-Select ACCURACY folder for output
files',/xbig)
output=widget_outf(accuracy_directory,uvalue='output_directory',/auto,/directory,promp
t -Choose folder to hold systematic error and residual error images',xsize=50)
directory_result=auto_wid_mng(accuracy_directory)
write_tiff, directory_rQsu\t.output_directory + '\systematic_error_vectors.tif,
rotated_display, orientation^ , /float
endif
print, 'FINISHED WRITING TO FILES'
;*****calculate systematic error, write to georef_stats file *****=
rotated_total_displacement=r everse(good_total_displacement, 2)
mean_systematic_error=mean(rotated_total_displacement,/nan)
mean_velocity=mean_systematic_error*resolution/years
stdev_systematic_error=stddev(rotated_total_displacement,/nan)
stdev_velocity=stdev_systematic_error*reso!ution/years
mean_x_systematic_error=mean(rotated_u,/nan)
Ion Mldttl_ .. l0_b .. ojti' .... S.,. "", dilfllay?' ; .big)
ob - b.'pi<""",_bale, ho ... )
... - " ' IdK'UouJ<{ob, Ii _ Ii .. , 1""1"",.i, .. , ")
- '.' 0_ MId_ .... ru.kt""'_ bale)
If pi"""'_t'eSII ll.'ou/e [Q 0 " .. pi,,_ - Y
If pi""",_r=lII,toggle I:Q 1 I . .. P"""'" - .. '
.pecl....., ....... "_lOIIIlo{OI 0 .JU
'1'""_ ....... 1' IO\W<iOl I no
If pk.,,", [ Q Y THEN B.:GI ....
display " ..-rd("" .. , )
,0 .. ui_displ' Y-U" ' ndisplay . ' )
.""". d'SpI.y SO "rr '"'"II" ,II on",,1 0001",1) "i>:n oprncd In \ 1
JOIal!Oll to _)' "-'''. "h,eh II "'i",ft<tl by 3 In
."h,,,, ",lor t..nd " I. , ",. "
""",,-y _ dit<CK>ry-M idJ<'_'. 1._ b.ot( litle-'Stll ACCUIlJo,CY folder for ouq>ut
fil .. '/ltbig)
OIIlput-"Id."_O.,/l",,,,"""y_dircctory vu . .. '''''lpUl_diR01o<y'JautoJdiroctory.promp
1-0- folokr to hold .)'SltmalI< ...... 0IId l'OS>du.ol ...... """ges' ... i . ..
dit'<Clory ,,'Id .... ((""".,...,y dit'<Clory)
- - - -
,,n to_, m. dit<Ctory_ ..... II'OOUp"'_Ji"""ot)' .. 'I&)'SltmalI< _ ...... "o<toB.tir,
routed_ disploy. ori ....... ionOO. moat
.. dlf
pn. ,. 'Fl:-:ISHED WRITING TO FILES'
," ''' .. ",.Iak 'Icm.ol'" cmt<, "nl. to i<'>"'f ...... fi", ........
mean _. yolcm.otk _ em:>t"- .... "'( route. UotoJ _ disp '"".."""tJlWI)
m.an _ vok><:ity-mcan _. )'SO ...... ;., _ cmtr" ',""
otdev_,yotomatk_w'''' . ' ldd,, (rouIOd_1OtJJ_displ.a=nrntJlWIl
otdev ".k><:i1)"'ot" ..... yotnnat'" ."",.. ,..,.1.,10. " .. "
- - -
mun _, _ .yot ...... k _ ..,..,...m .. n(rot'led_ uJlWI)
167
mean_y_systematic_error=mean(rotated_v,/nan)*(- )
;rotate to account for difference of coordinate systems
openu, 99, directoryj:es\x\t.output_directory + '\georef_stats.txt',/append
>
printf, 99, 'Systematic error analysis:'
printf, 99, 'Mean total displacement (systematic error) (pixels) = ',mean_systematic_error
printf, 99, 'Mean total displacement (systemtatic error) (meters/year) = ',mean_velocity
printf, 99, 'Standard Deviation of total displacement (systematic error) (pixels) =
', stdev_systematic_error
printf, 99, 'Standard Deviation of total displacement (systematic error) (meters/year) =
',stdev_velocity
printf, 99, 'Systematic error in x direction (pixels) = ',mean_x_systematic_error
printf, 99, 'Systematic error in y direction (pixels) = ',mean_y_systematic_error
close, 99
write_tiff, directory_resxx\t.output_directory + '\systematic_error_data.tif,
rotated_total_displacement, orientation= ,/float
>
print, 'FINISHED WRITING TO ERROR FILE'
fiTH.sh.cd c3.1cu.letting s^y stcmcttic enror"^
. * * * * * * *
r e m o v e
systematic error, plot residual error
v e c
t
o r s
* * * * * * * *
u = rotated_u - mean_x_systematic_error
;remove systematic error in x direction
v = rotated_v - (mean_y_systematic_error*(- ))
;remove systematic error in y direction
u = reverse(u,2)
v = reverse(v,2)
rotated_total_displacement = sqrt(u
A
2 + v
A
2)
!order=
;set display coordinate system to match convention used in
;ENVI, image is drawn from top down
window, 1 ,xsize=glacier_image_columns*scale, ysize=glacier_image_rows*scale,
retain =
;open display window of correct size to hold image of glacier
mean'y _. yslenwi< _ .."".._ ( fOWcd_ v.lnall) (. I )
,""",c "' """""nllOr d,lfcrcnco of "oorom",< syoocm<
'"
0pHIU, 9\1, diI'tClOlJlJesull_'"",ji.wt<>ry '
prl f. 9'1, 'SIrnud1< em>< anal,....:'
pri.,f, "", 'Mean IOIal d .... 1a<emenI (')'S\CnU1ot om>r) (p ... ,.) '.m.",_.ys,ematk_"",,,
prl.,r. 'l'I, 'M .... ..,.... diop...",O .... d (.)'SICIII ..... cnOf) (m<nI)U&') - ',m=_ velocity
poi.,f, 9'1, 'S ......... o.,'w- o,toto! dllplar:m=I (')'lIeIDa1I< ....,.) (pixels) .
',sukv _')'SI<mlIic _om><
pri.,r. <)01, 'S1mdard ne. ... .,., gftotal dupl""...,.." (oystcmllH: em><l [ __ 'ytor) -
',SIdeY _ "elocity
poi_If, 1>'1, 'SysI<llWi< em>< m din:"1>oOl (pIXelo) a ' ,JJ\UII_' _' )'S1<n'1atio_tn'Ot
pri.,r. 9'1. 'S)'IIOII1.IIJ< entII" ill Y dJlOCUoII (p",eb) .m<aIIJ_,) ......... ic_<rn>r
' ...... 99
,.-<1,._ ,nr. dim:tory _ ruul,,,,,,pu'_ d;"",,"'Y ")"I""""'''' . ""'" _ dala.uf.
routed _ touI_ ori<nt>t;on-.()/fIoa,
pn . 'FINISHED WRITING TO ERROR fILE'
............ (,"uhal <ok. 'O"ng ')'SI""'O"< <rn>r"" ............... .
.... ... 'mO .. ')_1< cnvt. p"" _dual ......- ''IOf> ........
" - __ " m"""_' _'ysIetnal;"_<m>'
;remo .. ,):M<t'I'I."" ......- ,n
,' - _ _ v. (m'''''J_.ytt,ornatk_<rn>r''(-l I)
:r=>O\o >)111""""1< ......- ,n d'''''''IM
- .. ,'. !'>t(u.l 1
v _ r .. .
1'OtlI""Uoutdi"'Ioc ........ ' - lqrt(u" l + ""'1)
'onl..-o
, ... d"" .. <oonIt ..... 'Y<O"'" to ITW<h "",'",,'1M .sed ,n
.E." VI. ,mal ... ""''''n from top do .. n
"I_d"... ! _'mag<: _ coI\IlIUlS' "'01". yJi.z ... _ int.oge _ <010.
main _ 1
"'1'<'1 d,..,I.y ,,.jo,,' o( >rrt<t .. " !<> IIold ''''''I;< of IP><'''-
168
loadct, 0
;black and white color table , uncomment this command when
;using grayscale pea image as backdrop for arrows
tvscl, enlarged_glacier_image ;displayjpeg2000
device, decomposed = 0
; foreground (plotting) color value is interpreted as an index value of ;a color table
print, 'PLOTTING VECTORS'
;***the following commands are a stripped-down version of VELOVECT****
s = size(u)
t = size(v)
missing = 1000.0
mag - sqrt (u
A
+v
A
)
nbad = ;# of missing points
x = findgen(s(l))
y = findgen(s( ))
good = where(mag It missing)
ugood = u(good)
vgood = v(good)
xO = min(x) ;get scaling
xl = max(x)
yO - min(y)
yl = max(y)
x_step=float(xl-xO)/float(s( I ) )
; Convert to float. Integer math
y_step=float(yl-y0)/float(s( ))
; could result in divide by 0
maxmag=max([max(abs(ugood/x_step)),max(abs(vgood/y_step))])
sina = arrowlength * (ugood/maxmag)
cosa = arrowlength * (vgood/maxmag)
r = .45 ;len of arrow head
angle = 22.5 * !dtor ;Angle of arrowhead
st = r * sin(angle) ;sin 22.5 degs * length of head
ct = r * cos(angle)
Iolodrl , U
.bl><k ar>il "hM colo< .., ... 0II<0IIUtI<Il' 'hI' o:onurund " .....
,U"nl Jp'-soal< PC' image: as Nol<drnp fa ........
.... 1. dooompoood _ n
: colo< ,-.1 .. IS ,"<rpmed .. .., ,0<10. , .. J .. or", colo< 0Ib'"
pri . 'PLOTTISG VECTORS'
- 'iu(uj
, Iu(v)
.bad _ 0
-
y . .. {o( l )
good - .. "'m&jI l' mi..mil
"good - uo(goocI)
vgood - v(good)
. 0 - mlo(.) ;JCI ,.,.hns
.1 -.... .)
yO - mio(y)
yl _ m .. (y)
_ "cp-Ro" I' ). (I)ltknt( 0( I))
: Con,,,,, Lo n....l. 1m .... rrwh
y _ step- """ IY I -yO)lIIoOI( 0(
: "",,101 ,...,1, ,n dll Kk by 0
OWJNl" m (! .... .. (. M(vgoodly_....,))])
.ina - arro,,-Imgth (up>dlnwnllaa)
cooa - a"""1-1"'gt/I 1'"good!"""maA>
, -
anll< !d.","
.. - r ' 01_(""31<)
<1 r roo(ong1e)
..... of arrow ......
;lin&!< or anti" 1>00<1
;>m 22.5 dcp Icnll'h ofhnd
large_num_pts = n_elements(good)
loadct, 13 ;rainbow
Ip.thick = 1
if dat aori gi n EQ V then begin
; commands to color code vectors from IMCORR process....
for i=01 , large_num_pts-1 do begin
if good_corr_str_array[good[i]] LE 2.0 then begin
!p.co/or=25 ;purple
xO = x(good(i) mod s(l))
dx = sina(i)
xl =x0 + dx
yO = y(good(i) / s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots, [x0,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[y0,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color, /device
endif else if good_corr_str_array[good[i]] LE 4.0 then begin
\p.color=50 ;blue
xO = x(good(i) mod s ( l ) )
dx = sina(i)
xl =x0 + dx
y0 = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,xl,xl-(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
-.. ,1 .... _
Ir ",,",_oripn .. botI
............. '" 0010< <ode 'octon rrom I\I("ORR I .........
rO' ;-1" . !ar)jc_nwn...J>U- 1 doiM1;l.
Ir 1P',,,U;,H"T_ .... _ ...... l1p><!li)) 1.1: :.0 ,_ .. botI.
','.'.--' -
.. -..
0 - _ 0( 1))
... - ......:.)
.1 -.0 ...
)'0 - 1 0( 1))
dy - .-(I)
yl )'O ' dy
Ild .... _*"
yd-y-",",
pIat>.j.(UI .. I .... .w.d ... dJ"yd)"1ld. s
.1 .. H<t ...,.d ... S
.... dylyd'"tl d>.Illd) yd. S
yl.yI-{ .... dylyd ... Wlcd) ydl. S
co_Ior. loo;.,
.. dlhto.e If IIOOd ton" II< ..... Ylaood/ill ... : ._ iM1;I.
- --
.0- .(p>o5(i) _ 0( 1))
cb - Ii ..... )
d-.O'"
,0. Nood(il 1 0( 1))
dy - cooa(i)
yl ,o dy
)'II-y_ .....
.. I .. H .. WlcoHl dyIyd) .oS. 5
. 1 .. ,-{ .. dxIxd ... dylyd) .d). $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] LE 6.0 then begin
!p.co/or=100 ;aqua
xO = x(good(i) mod s(l))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[x0,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[y0,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] LE 8.0 then begin
\p.color=\50 ;green
xO = x(good(i) mod s( 1))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots, [x0,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,yl,yl-(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] LE 10.0 then begin
!p.co/or=200 ;yellow
xO = x(good(i) mod s( I))
dx = sina(i)
xl =xO + dx
[)O.ylJHOI dy/)'d ... lW);d)"yd. S
11.yliOl d)'lyd ... $
"""'_A\t<Ii
.. dlr_W ..... ... 1.1: U .........
!p.LUIoo all_ ;aquo
.0 - '(Jood(i) _ 0( 1)
l1li - 1iDo(i)
.1 - . 0 l1li
)0 - )'(fOOd(i) I 0( I))
d1 - _'(
yl - yO.dy
.d-'. IIq>
)'I,),.1!q>
plo .. .,(.O"I .. I-{OI <Il<h:d .. d)'lyd) .d. S
xl .. Ii 0I .ww--. $
[)(\,yl.yHOI dy/)'d ... <Il<h:d) jd. S
yl.y Ii 01 ' d)'i)<l' II ' <WlId)' )'I 1. S
""'" wkwJ<koicc
...ur_w ...... oorr . .... OIn)'fFOdlill LI! '.<1 , ........
... -
xO - .(JOOd(i) _ 0( 1))
<Ix - .. no(i)
.1 - . O<Ix
)0 . )'(fOOd(i) I 0( 1))
dy - <OU(i)
yl - yO ' dy
xd-'. "q>
)'1')'. "41
pI<Ms.(.O"I .. liOl<Il<h:d ... d)'i)<l) .d. S
, I .. Ii 01 . <WlId..,. dyf)'d)' :uI), S
[)O.yl.rHOI d)'f)'I ... <WlId) yd. S
l' J Ii 01' d)d)od.-ll <Il<h:d)' )'I), S
cokl '_'J"",
!p .. "r
. 0 - .(JOOd(i) _ 0( 1))
<Ix - Iina(i)
xl _ xO <Ix
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,xl,xl-(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] GT 10.0 then begin
!p.co/or=250 ;red
xO = x(good(i) mod s(1))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif
endfor
endif else if dat aori gi n EQ V then begin
;commands to color code vectors from COSI-Corr process
for i=01., large_num_pts-1 do begin
if good_corr_str_array[good[i]] LE 0.80 then begin
\p.color=25 ;purple
xO = x(good(i) mod s( 1))
dx = sina(i)
xl =x0 + dx
y0 = y(good(i)/s( ))
.. dlf
M ...
,0. )'( ....... ) 111( 1
01)' . ..... ,)
yl - yO+dy
..... _ ...
)'II.,.. IC<P
I JI. I .. ' dyf)od)'.ul $
.1 .. 1.(0\ _ ... S
!)O.yl.yE -{ .... d)'l)d .... <b.I.W) )d, s
yl,1H<t' dyl)'d-st' dxhd)' ydJ, S
... .......,.,tor/<k>'ice
Ip"""",,":<11 ;Z<'d
. 0 '(JOOd(i) _ 1(1 II
ib. - oino(i)
d 0 "'"
yO - }'(Jood(i) 111( 1 I)
dy - cau(i)
yl - ,o - <I)'
.d->.. A<i'
)<1.,..-.,
pIob,(.o,..: I J< I -(<!' dxJxd ... ' dy/)d)" >cd. S
.1 .. 1-{<I <Wxd ... S
()O.yl.yl-{OI dyl)'ll ... dxhd)yd. S
yl.yl-{<I dylyd .... S
>kr<olor J"'" 'ice
n<llr .... lf dMo. on.m [Q<:: I .... 1HtiII
;<GO .... IO>Ioreo<l<.C<1On from P""''''
""' ;004'1 ....... -..JIII-1 .. t..,p.
'"
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
p!ots,[xO,xl,xl-(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,yl ,yl -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color, /device
endif else if good_corr_str_array[good[i]] LE then begin
\p.color=50 ;blue
xO = x(good(i) mod s(l))
dx = sina(i)
xl =xO + dx
yO = y(good(i) / s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,xl,xl-(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] LE 0M2 then begin
\p.color=\00 ;aqua
xO = x(good(i) mod s(l))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
dy - """':IJ
yl - )'O.dy
'-_""'P
"'"'-'"
pIob.{.o..l .. Hct' ohhd-oo' d)'f)o:l)' .<I. 5
.1",1 S
(,o.y1.yl.( .. dyf)'d .... <Wl<d))d, 5
Y I.yl ..(CI' d)7'yd .. ' 4x/J:d)' )':1 J. S
oolofoo<kw. 1d<Yi<:<
Ip .... ,bl ...
0 _ '(P>i) _ 1(1))
<l< - oinoCi)
d .G ...
)'0- )'(JDOd(i) I 0( I ))
dy - cau(i)
y1 - ,o - <I)'
._-*"
"'"'-'"
...... 0.1.0..1 .. 1 {ct<W1d ... d)O')d) .-d, S
.l .. l..j .. <hfuj .. dyf)'d) .d). 5
()'II,yl,yl {CI dyfyd .... obh;d) )d. S
y1.yl S
!p.roIoo- l (IQ oaq ..
0 - x(aoodIil _ 1( 1)
d oina(i)
.1 IO+dx
)0 - )(Jood(i) / 1( I))
dy - ccu(i)
yl - )'O.dy
.d-1_OIq>
)'11"1 __
pIoI.J.\l,>:l .. HCI dxIXd ... d)'Iyd) .4. s
.1 .. l{ .. d>hd .... d)1')d) .dJ. S
[)'O,yl.y 1.( <t' d)'>')d'" dxhd)' )'Il. S
yl ,y1 (O!' dyryd-A d>.h;d)' )<I), S
'"
color=color,/device
endif else if good_corr_str_array[good[i]] LE 0.94 then begin
\p.color=l50 ;green
xO = x(good(i) mod s(l))
dx = sina(i)
xl =xO + dx
yO = y(good(i) / s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] LE 0.98 then begin
\v).color=2Q() ;yellow
xO = x(good(i) mod s(l))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,xl,xl-(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] GT 0.98 then begin
lp.color=250 ;red
xO = x(good(i) mod s( 1))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
1,..-,',-1" _
.Fod(i) _ 0( 1))
<b - sino(i)
,1- ,0'''''
)41 - )1JOOd(i) I 0( 1))
dy - IA/i)
yl - )4)+4y
. d"". ""'I>
)'11-,. ....,
pIoI .. (.o .. l.xl-{' dxl>d", d)1)od)' . d. S
xl", I -(<1 ' <Ix/xd ... .1)'>')'<I)' .d I. $
()O.yl.yH"' dyf)<h"' <Wlcd)' yd. 5
yL.yl -(Cl' d)'lyd-"' <W>d)' yd1. S
__ J<I<\i
!IM" :ot
.O- l(Fod(i) _ 0( 1))
<b - tiBo(il
01 - .0_ ...
)4) - )1pd(i) I 0( 1))
.1y - ooo.o(i)
.1 ..... ....,
yd-y. step
pIoo' JxO.x 1.xl-{OI dIh.d ... d)'lyd) .d, S
xl .. I -(Cl ' <Wxd_' d)'i)<l )' ,.1 I. $
[)O.yl.yl-{OI' dyfyd.' cb<h.d)' yd.. S
yl,y 1 .. d)'iyd ... <Wlcd)' )'d $
wIoo_.IdM<c
!p.<-.r :raI
. 0 - >Uood(i) _ 0( 1))
... - .u,.(l)
. I_.o<b.
- )'(1'>'>;) I 0( I))
dy - eooa(i)
'"
174
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,yl,yl-(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif
endfor
endif
annotate, window=2
residual_base=widget_auto_base(title='Save this display?',/xbig)
list=['yes
,
,'no']
sb = widget_base(residual_base, /row)
wt = widget_toggle(sb, uvalue-toggle' , list=list, /auto,xsize=35)
residual_result = auto_wid_mng(residual_base)
if residual_result.fogg7e EQ 0 then residual_image = 'y'
if residual_resulUogg7e EQ then residual_image = 'n'
;residual_result.toggle[0] = 0 ....yes
;residual_result.toggle[0] = 1 ....no
IF residual_image EQ y THEN BEGIN
display = tvrd(true= )
rotated_display=reverse(display, )
write_tiff, dirQctory_rQs\x\t.output_directory + '\residual_error_vectors.tif,
rotated_total_displacement, orientation=^ I,/float
5
endif
mean_residual=mean(rotated_total_displacement,/nan)
mean_velocity=mean_residual*resolution/years
stdev_residual=stddev(rotated_total_displacement,/nan)
stdev_velocity=stdev_residual*resolution/years
mean_x_residual=mean (u,/nan)
mean_y_residual=mean(v,/nan)*(- )
tdfo,
dlf
yl _ yO + dy
xd""_SIq>
yd-Y. SI<I>
p ..... [. O .. I.:<).(.' dxI.d..., dylydj.d. $
. 1.xl.{' Wxd"" ' d)'l)d)' ,dj. S
[yO.yl.yl S
yl,yl-{ot' dylyd4l' dxlxdj' yd]. S
color-rolor Jd .. i""
... id.al ,,",. .. b.w(.;,Ic-'Sa,'. tha dupl.f" J>;big)
li,,"'I)'<o', '1101
>II .. . ddl.t. h.uc(""'id ..... baoe. lro .... )
WI _ .. UI'U .... 'Ioglt'. hn- li.., /au1O ..........
.... ;'hw. """I' - "'0. " 'kI. "",t(raidual. bue)
If residual. l'OOUll.loule .:Q 0 . ... resid ..... intai< .. Y
ir UI I t. =dual. ,m"8" - '.'
,-.l .. 1 .-1I."'8II<'IO[ 0 _ )'00
.. 1 """U.logI<{OI I ""
I F EQ y
di""lay " 'n<l("'-I )
'"
.. rlI". , jff. dir<>C1"'}'J .. ul'.O .. lp"Uf;, .... ,ary "'"'dual. ""'"
rotal"U0IaI. di""""ement, ori ...
mcan_fdid .. I- ..... (roIalod_1Ot2I_di ...
mean_ .. _<esidual '....."uU ... ) ."
SIdov _ .... idual .. 'ddt> (T<>laIcd _1OIa1_ di<placcm""l/nan)
.. <kv _ ,'<Io<:i'y-<tdcv _ reoidual' ,,,..J., ton ' .. "
m=I_ ... id..J' '''' (wnan)
",.... J _ .... idual ...... ( .. ' nan )0(. I >
175
;rotate to account for difference of coordinate systems
openu, 99, directory_res\i\Loutput_directory + '\georef_stats.txt',/append
>
printf, 99, 'Residual error analysis:'
printf, 99, 'Mean total displacement (residual error) (pixels) = ',mean_residual
printf, 99, 'Mean total displacement (residual error) (meters/year) = ',mean_velocity
printf, 99, 'Standard Deviation of total displacement (residual error) (pixels) =
',stdev_residual
printf, 99, 'Standard Deviation of total displacement (residual error) (meters/year) =
',stdev_velocity
printf, 99, 'Residual error in x direction (pixels) = ',mean_x_residual
printf, 99, 'Residual error in y direction (pixels) = ',mean_y_residual
close, 99
i
write_tiff, dirQctory_rQSu\t.output_directory + '\residual_error_data.tif,
rotated_total_displacement, orientation ,/float
print, 'FINISHED WRITING TO ERROR FILE'
print, 'PROGRAM FINISHED'
fmished=widget_auto_base(title="Program Complete! !',/xbig)
done=widget_string(finislied,/auto_manage,uvalue='complete',prompt='Successfully
computed residuals',default='PROGRAM COMPLETE',xsize= )
result=auto_wid_mng(finished)
END
'"
Ot><u. 9'1, dim:lOIY _ rau 1,._"",. dir"""", .,...,..C owo-tx .. / oppend
p<i.,f, OIl, R....tual ............ )1>s:
po1 f , '1'1. 'Mean lObI d>splooemttll (teOidoai ..",..) (pi ls) - '.m<anJ esid...t
prJ.,f, 'I'l, 'Mean ,o<aI dlspla:c ... ", (mid .... cm>r) (m<I<nIjUf) - ',mem, " Io<;'Y
prlalr, '1'1, 'SW>danIIkvI .. _ "ftotal d.lspl ...... U1. (teOid.w error) (p .cal -
..,d .. _""'idtW
plio'f, '". 'SW>ohrd o.:v.ouon "flObl disploccmcnl (rWdu.al cmw) (moIerlI)ur) -
.. 'dc, _vcloc;ty
prl.,f. '19, 'Resld .... ....,., in. d"""tioD (p".Is, - ',moan".fnid .. 1
prlDtf, "". 'ReI1dI.mI ...". in y d=""" (p, I.) - 'J>!'''' -.Y_ resi<lLl1l
. ....... '1'1
,nl,. _'iff, din<:l<Ky _ """ le"",,..,, di,....,ory + "\ta.Iduai _<nOr _ dau.!I r.
"""11_ total. di >placement. ori..,t.llion-o/fIoaJ.
'FINISHED WRlTING TO ERROR FILE'
'PROGRAM FINISHED'
ronished_ .. _ _ bHIill<-1' '<>i'_b Compl ... ! L' ,lxbis)
dono- _,,"all: r,uiollodJ"'" _ "'_lI<,U '.I .... 'tompJ ... ,prompl 'Suoceoafidly
"""'p.,td ruid..alr'.d<fo. h-1'ROGRA."'I CO."'I PLETE' oi> ...
10_ .. Id _moll: ftnished)
END
APPENDIX D
SORT_PLOT_ARROWS.PRO
PRO Sor t Pl ot Ar r ows , event
; This program sorts vectors using the standard deviation of the angle
; of all vectors within a specified window size.
; A vector with an angle which exceeds the standard deviation threshold is not plotted.
; Arrows are plotted and color-coded according to correlation strength.
; A similar routine sorts according to vector length as well.
; The user is prompted to enter x and y errors as computed using the Residuals program.
; This program takes as input the file called ' <glaciername>sifted' found in the 'sifted'
; folder for the specified glacier. It also inputs an image of the glacier to be used as a
; backdrop for the plotted vectors, this image should be a grayscale pea bandl jpeg2000
; image.
; This program outputs files named 'x_displacement.tif and y_displacement.tif into the
; <glacier_name>\sifted folder, and which are used as inputs for the Convolve
; Displacement ;program.
; This program also will optionally output the total displacement and
; correlation strength arrays to files called 'total displacement' and ' corrstrength' within
; the 'sifted' folder.
; Scroll to bottom to make sure the correct drive letter/pathnames are entered.
; This program will call IDL's annotation widget which allows the user to label/annotate
; the displayed vectors and glacier image with appropriate title and parameters.
; A saved version of the annotation is found at \vectors\<glacier name>\
; <glacier name>_annotate.dat.
; The program gives the user the option to save the annotated display, which is then
; saved in the 'sifted' folder.
; Scroll to bottom to be sure the output name for this is set to your glacier name. Tiff
; files are used to preserve floating point values.
; Variables which can be manipulated by the user and files which may
APPENDIX D
SORT]LOT_ARROWS.PRO
nus I""IP'" _. I tors ... ,,& "'" lI>ndonl dol ""_ of"'" OIls!<
of.1I ' .. :', ... " "h," Si"',r,w ",nolo" ","
A ,,,,,,or,, "h an ""jII" "h,," ",.oro. "'" >IOndanl deI,.hm Ihn:shokl " _ plotll
A""", ..... p"",,,,1 .,,,1 ... , ........... W .,...".,Ionc 'n ,,,....1 .. "'" " ..... ",10
A o;m,lor ""'"II< -. ..-.J,nllO ""!Of icngoh .... ell.
, Th,. f""II'M' ,0/;"' .. '"P"' ,he fik <.Ilod '. jlllI<l<'fIlAm<" .,nw' found '" ,he ' .. ft,-.I'
foklo< for ,he ..-,fiw p"", 11 aloa "" .. n, In ''''"11< or"", P'''' '0 he .... -.1 ...
b>dd"", for ,he plo"w ''CC ...... tin, ,nul!< """'kl he "")'"",1. pea Oand I ,1""111(100
''''''II<.
n, .. proarom ""t",,1S fit", Ram,-.I"' >nd y '"'0 "'"
<.jII""'''' ....... ,'.,01 fukkf ...... "h,." on: UKd .. ''''''' .. for !he C .... 'ol,.
Ot'l'I ... nK'" ;"""'""',
Th .. 01.., ,11 "I"""lOlIy ""'''''' ,he d,,,,),,, ....... ar.l
>rul",,,,, 10 fiks 11.-.1 '0<01 d'!IJ'I .. >nd'>IT ",,,h,n
"'" '" flod' folder
Scroll 10 ""'In", 10 maJ,.< IfU1< "'" CO<TO<f Jm. I"'er "",hnamn an: <fIlen:d
, Th" pnwam .... 11 11 IDL', _ .. "'" .. "hioh .110 ... ,he UIiOf 10 1 .... 1 """"'"'
. the <fu!>bye.l , ;lors..-.! JII",,'''' ,null<" ,," :oppropn ... "tI. >nd JUI2If>CIrB,
, " .. ,,-.I 'on_ of'l>o _'oon " r"""" .. '0<\(1<$ < gb<,'" """'" .
; .jII"",afWflO' .. _.,<""-.
: Tho ptollB'" '1>0 ...". '1>0 "1""'" 10 "". II>< _>tl ".""Loy. "h",h " '''''''
, ",'1 ,n """,iOl' fokla-
, Scroll '0 ""',"'" to "" IfUfO "'" ou'PU' ""'"" for "n. " '0 )""' fWf>< T,ff
fit<> .... UKd 10 1'<',111 ,al"<s.
177
; need their drive letters or pathnames updated are surrounded by******************
restore, 'c:\Program Files (x86)\ITT\IDL708\products\envi46\save_add\sift_template.sav'
sifted_path=envi_pickfile(title-Find <glacier_name>_sifted.txt in SIFTED
folder',filter=
,
*.txt')
sifted_vectors=read_ascii(sifted_path,template=sift_template)
;read list of path names/vector files; structure with 1 field
sifted_imcorr_array = sifted_vectors./ze/d7[*,*]
;move data out of structure and into array
q=size(sifted_imcorr_array)
columns=q[ I ]
rows=q[ ]
glacier_path=envi_pickfile(title='Find glacier image (jp2 format)
,
,filter=
,
*.jp2')
glacier_image=read_image(glacier_path)
?
5
scale
:scale factor to magnify display image, use values 1.0 or ;larger, values less than 1.0
;prevent small arrows from being plotted and make vectorfield appear more sparse than it
;really is.
arrowlength = 50.0
; length of arrows, use this to stretch or shrink ;arrows for visual clarity
arctan_threshold = 0.75
;multiplier for standard deviation of angles ;within box defined by window size
totdisp_threshold = 0.75
;multiplier for standard deviation of total displacement of vectors within box2
st dvl i mi t = f 0.0
;minimum stdv for arctangent below which vectors are not removed, ensures good
;vectors in uniform flow field are not eliminated during iterative process.
'"
, .. ,oro. '. :IPro_ Files .>86 )'JTI\lDL .. ",",'t46\a.\'C _ odd\&i ft _ lnnpwuav'
,,;fted.JUlll""<o" tpkkfilt(titl<-'Find "' .... :O .. _name.> _"fled"" ,n SIfTED
fuldcr'. fiI' ..... .. '1
oifle<l_ v<o:lOfS" .... d _ ftl J'3Ih,lOmp w....; fUcmpl ... )
,mod hSl of 1'>aII>tS"''''l<Jr filcs, olh I neld
oifl<d jmcQI'T _ ..... y ';fI",,-,-morsf<ddl(' ,' ]
,mo,. _ ObI or """"ufO and on'" """1
q .. lu( oi ft UrncOtT _ "'"'Y)
col""' ..... [ll
""'P'<I(l )
iJacicr ..J>Olh ..... '1 Jll<kflltilJe-'FiDII JI"",e:r unage (Jpl fumw.)'. fiI' ...... j pl,
Jlbei ... _ i"'"iC"""" imol" li.d ... yoI/l)
..,al - 1.0
..... Ie ("'lOr '" moSlllfy d,,,,,I.y ''''"i''. "'" \OIL ... 1.0 or .Iors ... I .... Ie", (Un 1.0
''''''''m! itIIOll atm", from bc,"II plo>tkd make "","'eM ....,.,.,- ....... ...-lll.tn ,(
.... .ally".
_
. Imglh of."",, .. \de lb,.,,, ..m," or shnnk fo ........... elari(}
otClan_"""""'ld -
!i>r "'->Il<Ianl de"",I1'" "f."SIcs ." uh,n bo, defined b) ",ndo" Ol'<
lOldi'P_LhresboId -
;",ulnphCT!Or ota!>dw de""""" "flou.! ;d,."Ia<.....,.( "h1O<> ",thin bo,l
OIdv-'uni( - 10,0
J",ru",um .. d, for II'<tanll""( bclool "h!Ch .ee("" "'" "'" """"'I. ......... jOO<l
.'tors ,n ""'f""" 1\0>1 r..ld .... "'" d,mllutal du,,"11 U"';;""e 1""<"",
178
; if the grid spacing used in IMCORR is 4 then wi ndowsi ze must be larger than eight
;or else the following FOR loop won't find any vectors inside 'box'.
; window size should be a even multiples of grid spacing + 1, for
;example if grid spacing is 4 then good window sizes might be....
;4x2+l = 9
; 4x4+l =17
;4x6+l - 2 5
;4xl0+l =41
s=size(glacier_image)
i
;these command will get the size of the grayscale jpeg2000
glacier_image_columns=s[ 1 ] ;get size of grayscale jpeg
glacier_image_rows=s[2]
i
xy_errors=widget_auto_base(title-Enter systematic x,y error from GEOREF_STATS
file*)
list=['x error','y error']
vals=[0.0,0.0]
output=widget_edit(xy_errors,uvalue='errors',/auto,prompt='Enter error
values',dt=4,field=2,list=list,vals=vals)
errors_result=auto_wid_mng(xy_errors)
mean_x_error = errorsresult.errorsf ]
me a n y e r r o r = errors_result.error^[ ]
origin_base=widget_auto_base(title-Origin of data?',/xbig)
list=['IMCORR',*Cosi-CORR']
sb = widget_base(origin_base, /row)
wt = widget_toggle(sb, uvalue='toggle', list=list, /auto,xsize=35)
originresult = auto_wid_mng(origin_base)
;origin_result.toggle[0] = 0 ....IMCORR
;origin_result.toggle[0] = 1 ....Cosi-CORR
if origm_rQs\i\ttoggle EQ 0 then data_origin-i'
if origin_result.togg-/e EQ 1 then data_origin='c'
t ot al error - sqrt(mean_x_error
A
+ mean_y_error
A
2)
arctan_array = fltarr(glacier_image_columns, gl aci er i mager ows)
;create new array same size as image
. ,fthe ",d .' ..... '"11 oscd,n I).tCORR ,,4 lIH:n ",.oov. .k. mo", be !..ger lIIan ';h'
,or ., .. 'I>< (0'10\\ FOR leo!> find any "O<1OfS iosi<l< 'be,'
. "'_ . U" o.hookl be. ",'en m"'upl<. of 1Ifid ipOCmg' I. fOf
' <"''''1''< "-'"11 " . ..... JIOOd '" ,ndo .... ",. mi&h' be .
. 4,2' \ 9
17
. ,6'\ lS
41
'"
,Ihno oonunand ",11 J<I (II< "'" of It.. I"'y",.k JP'IIlOOO
g1""icr. iml8<. c<>Iwnns-II( I J 'IV" .. t< of IVI'I-":.'< JP<iI
glad"')1Mi< _ roWJ-./ ! 1
IdK .. _ .. ... , ystcmalH: y <m>r from GEOREF _STATS
file')
Ii.., .. <na<' .')' <m>t']
OUIpu1 .... .. _ NlI'(.y. ="".h .... ..."...'/alJto,prompl -'EJller...".
... 11 ... .<11-.1 .field- ! Ji .. - li>l, vaa-v.J.)
..."... _ =u't_,. '0_ " 'Id _ ma eb _..."...,
meln. ' . aror -
mean -.y_...". - """",_mull ... I J
oriain _ "-"kI.rloo.' ". b"<j'i'le-'Ori",, ofd ... '" ,!l<bia)
'iSl"'i'!lo1CORR'. 'C"" -C01Ul ']
.., - .. _ bOW(origin), .... /row)
WI - .,..Jao-\oiIIe'. ); .. - )101.
'0_ "kI_"'dllorigin_bllS<)
.ori)lln ,.,...1t.101IlI10I01
'origin ",..,It lOzxl<!OI
O. 1\t('ORR
"C.,.;.cORR
If origin_"""h,tqj;gl. [Q 0
If origin _"""II./<>ggI. [Q I , data _ origi .... ".
O/'CWI_ orn.y _ n 1.'lilll",l.,. )!nai" _ cohon/\$. gI .,;.,.)!nai" _''''''')
,<t .. k ""'" """Y sam< we 1","#
corr_str_array = fltarr(glacier_image_columns, glacier_image_rows)
;create separate array to hold correlation strength
xdisplacement = fltarr(glacier_image_columns, glacier_image_rows)
;put x displacements into separate array
y_displacement = fltarr(glacier_image_columns, glacier_image_rows)
;put y displacements into separate array
total_displacement = fltarr(glacier_image_columns, glacier_image_rows)
;put total displacement into separate array
arctan_array[*,*] = 200.0
;populate array with large value to discriminate within FOR loop
corr_str_array[*,*] = 200.0
total_displacement[*,*] = 200.0
print, 'Begin populating arctan array with angles'
FOR j=0L, rows-1 DO BEGIN
;this FOR loop calculates the angle of movement for the
;x,y coordinates of each vector in 'sifted imcorr array'
x_coor = fix(sifted_imcorr_array[ y] )
y c o o r = fix(sifted_imcorr_array[ 1 ,j])
xdi s p = sifted_imcorr_array[ ,j] - me a n x e r r o r
;populate x displacement array
ydi s p = (sifted_imcorr_array[ ,j]-mean_y_error)*(- )
;populate y displacement array
total_disp = SQRT(x_disp
A
2 + y_disp
A
)
;populate tot. disp. using x and y disp. calc'd with mean errors
IF total_disp GT total_error THEN BEGIN
IF arctan_array[x_coor,y_coor] EQ 200.0 THEN BEGIN
corr_str_array[x_coor,y_coor] - sifted_imcorr_array[ ,j]
;populate corr. str. array
x_displacement[x_coor,y_coor] = sifted_imcorr_array[ ,j] - mean_x_error
;populate x displacement array
_ _ OlJ'_ .... ya Rt.rr(sJacief col ...... p .... _ ...... __ .. )
__ ....... ) .. _ ..... ,._ .. ah
' adio:>h- ... - n rt1Jia<ieta"'-_col_ sJacief) ...... a- .. )
..... ,.1 ,,_, ...... '
n ... _co'_ sJacief)""'''a-'''
...... _oony
lOUJ_di.,wa".". - n ntJla<:ia"_irna .. aco._ piU"_irna .. _",...)
.f'II! IOUl d'.oplac .. ' ...... ''''''''''-'''"''''Y
ortPan_"""Y( ' .' I _ lUO.G
.""""l",. omy".Ph lor"" ,oJ"" '" do ... nm' .... < ""h,n
con"aOC!"a"""y("' ' 1- 100..
lOUJ_di.,.l .. , ,><Mi". I-
..... 0. 'Bop. ' ... __ ... y .. ""..p.o'
I"()Kj '"" I """.: DO BEe.:"\"
.,h. HJIt loop < __ kala Ih< .... or _ ........ ;;" ,..
......... ,_ ..... , no, '
__ - n\l._) ........ _ ... y(JlI
y __ - th(. _ _ ;.......,_ .... y( l JlI
' adio:> - .. _),,_, O<n)j <JI' - a' _""'"
.f"'I!'UloI< , d,.,.l",,,,,.'" ..... y
Ya di.op a (oj ftl).....,.. _om y( bj I ...... J' _ ...... ). f 1 )
.""""l.p. Y d."'lac.....,,' omy
..w_w", _ + y_di",' l )
.popo .... lOt. d,,!,. _ ... ' ond) doS(I nk;"d ..
'r _ _ .... y(.a_.ya_1 EQ BI:Cll'i
_ _ Ar_ .... y(.a_.)'a_1 a .1Itd_ ;""""_ompy( ' JI
.-105<_...- .... )
"_6.,""u o]o'a-.)'a-I a .IItd) ......... _ ..... yJI - a"a""'"
._I0I0, dll\ll .............. )
180
y_displacement[x_coor,y_coor] = (sifted_imcorr_array[' ,j]-mean_y_error)*(-1)
;populate y displacement array
total_displacement[x_coor,y_coor] = SQRT(x_displacement[x_coor,y_coor]
A
2 +
y_displacement[x_coor,y_coor]
A
2)
;populate tot. disp. using x and y disp. calc'd
angle=
(ATAN(y_displacement[x_coor,y_coor],x_displacement[x_coor,y_coor]))/!pi* 180.0
;calc angle in degrees
arctan_array[x_coor,y_coor] = angle
;arctan array now has angles at all the beginning x,y locations
ENDIF ELSE BEGIN
IF arctan_array[x_coor,y_coor] NE 200.0 THEN BEGIN
;if arct anarray at x_coor,y_coor is already populated, then compare
correlation strengths of the
;two overlapping vectors. The vector with higher corr. str. is kept.
IF corr_str_array[x_coor,y_coor] LT sifted_imcorr_array[ ,j]THEN BEGIN
corr_str_array[x_coor,y_coor] - sifted_imcorr_array[ ,j]
;populate corr. str. array
x_displacement[x_coor,y_coor] = sifted_imcorr_array[ ,j]-mean_x_error
;populate x displacement array
y_displacement[x_coor,y_coor] = (sifted_imcorr_array[ ,j]-mean_y_error)*(- )
;populate y displacement array
total_displacement[x_coor,y_coor] = SQRT(x_displacement[x_coor,y_coor]
A
2 +
y_displacement[x_coor,y_coor]
A
2) ;populate total displacement array
angle=
(ATAN(y_displacement[x_coor,y_coor],x_displacement[x_coor,y_coor]))/!pi* 180.0
;calc angle in degrees
arctan_array[x_coor,y_coor] = angle
;arctan_array now has angles at all the beginning x,y locations
ENDIF
y _ disp x _>OI",y ___ ] - (lifl<d)1TICOI'T _ ..... y( J' _ cn"Or)" (. I )
'_"". Y do.""",,,,,,,,, ..... t
to!al_ d x _ <OOI".Y _<00< J _ SQ RT(. _ displac<"",,,,! x _"""9_ coorJ' 1 +
Y _ di..,locement(. _COO<.1 _>Orr 1)
;popu1>1. toL dul'. , ord )" d,"1' .ak"J
... -
( AT I\.s(y _ d;<placernen1[ x _ .-.y _ coor I .. _ diopl><ornen'] x _ coor.U:o"" J)Y! '" " 111G.U
,oal< "'111< on
""' .... _ ..... l'Ix_toOO'.y_coorj - ""lIe
'""'_ """ ... onglts _ I II ,I>e boll""""1 '.ll<>c>'_
[,sOIF ELSE Bt:GI:'i
IF "",Ian amYl. coor,y >Or] Nt: lOO.n Til ES OrCIN
- - -
.If om ......... y "', <OOI".Y <001" ... I ..... y_I."'<I. 'htn>mp>n:
;""",,1 ....... """'i'lis of,...,
.'''''' 01 ."Iop,,,", ,""' ..... n.. 'lor "h h'lI/!<"! <011" ...... " kept
COI'T_W _",",)'\x_>OI".1_000<] - . ifl.,UmcotT_orny! l jJ
._I .. OIT . .. t o ...... y
x_displ..:emen,(x_coor,y_coo,[ - lift<djmCOlT _ ..... y[. JImean_ ._ .......
. 1'0, ,,01,1<, J,<pl"'<mm' """)"
y _ di..,I""cm<D1[ x _<001",1_<001"] - (";111 )"'<<<U"I'>)'\ bj].mun J _ "",,,). (-1 )
.""",,1 ... Y d,spl""" ..... ,,, """Y
I0I&l_ displo<:anrnl[ x_toO<,y _ coor] - SQ RT (x _ displ",omen'l. _toO< ,r _ <00< J'!
y_di'l'I.I<emm1(x_coor.y_coor]'l) .""",,!.Jo. """I d''fIioc''m<'" ..... Y
"",-
( AT ""';(1_ di'l'I"'ernmt( x _0001".1_ coorJ,x _ di'l'I><<m<nt[ x _ I<>r.U'.(lfJ))I! pi 18U.O
.oak onjlle ,n <1<_
ortWt_ ..... )'(x_OOOI".)'_"""') .
:arctan ...... ). """ ha .. ... n ,I>< "",nn,"J '.). Ioca'"","
ESDII'
ENDIF
ENDELSE
ENDIF
ENDFOR
arctan_array = reverse(arctan_array,2)
;reverse arrays so they will plot right-side up
cor r s t r ar r ay = reverse(corr_str_array,2)
x_displacement = reverse(x_displacement, )
ydisplacement = reverse(y_displacement,2)
total_displacement = reverse(total_displacement, )
z=size(arctan_array)
zcolumns = z[ ]
zrows = z[ ]
FOR i= , zcolumns-1 DO BEGIN
;put NaNs in places where there are not valid angles, instead of 200.0
FOR j = , zrows-f DO BEGIN
IF arctan_array[i,j] EQ 200.0 THEN BEGIN
arctan_array[i,j] = \YaXues.f_NaN
corr_str_array[i,j] = Wahies.f_NaN
total_displacement[i,j] = ! Values f_NaN
ENDIF
ENDFOR
ENDFOR
print, 'Finished populating arctan array with angles'
iterate='y'
while iterate EQ 'y' do begin
goodf l ow = WHERE(arctan_array GT -181.0, num_good_flow_pix)
;get indices (x,y location) of angles and place in array 'good _flow'
;number of angles is equal to 'num_good_flow_pix'
keep_angle_vect = lonarr(num_good_flow_pix)
;create array same size ;as number of angles in arctanarray, this is the
E.."iDlr
E. ... DEI.5t:
[SOl'
_ ........ y ....... .-..("""""_am.y.! )
_ ......... Y' .. Ihcy .. ,U pIoI nJbl_ ..
cort_ .. __ ..... .. _ .... y.l )
K_dill'laI:emenI .. ...... f>f(. _dUplao ......... l )
y ... dioploocm<nl .. .... .-..(y _ displal:ornent. ! )
'o ... Ulitpl......",' .. ... <n .o.at ditp'''''emenI. I)
... I.!o(artlan _ omy)
>1"""" .. >( 1 J
"""' . .. . Il)
."Olt "' il . """_1 00
.puI "" .. pI.o<a .toa.: """' __ hol
fORj-CII . ".,..1 DO
" ......... \'IiJI [Q roo . TIIL ... 8ECIS
_ _ .... \'IiJI ..
"""_ .......... y\i,il !v"'-IJ,'aN
_ ... ditplKomonI(iJJ .. rVoJ_,-NaN
[SOfOM
...-y
.. _IIt _ r.Qy ........
1f>CWI. ... 1Iow .. \\ ... :Rt:( _ _ ..... y GT - 111 .(1. _ ..... '.'-'1" ........ '
.... .-' .. ' . y-..l"' .......... plo ..... )""'" f\o<o'
_, ... ,or ............... ""_...,., no.. po,'
bop ......... _ .. '" .. .... ar.,-"""'..JOOC!)lo .. .,Pi.'
,<tnI< om)....... ,," '"" """,b<r or ....... In .,1>01 ...... ) .. lh" .. Ibr nounbcr
'"
182
;contained in 'num_good_flow_pix'
print, 'Searching for good vectors using arctangents'
inform=['Sorting Vector Data by Neigborhood']
envi_report_init,inform,base=percent_complete,title='Program is working',/interrupt
;begin % complete widget
FOR i=0L, num_good_flow_pix-l DO BEGIN
;loop runs number of ;interations = number of indices in 'num_good_flow_pix'
IF (i mod 100) EQ 0 then begin
envi_report_stat,percent_complete, i, num_good_flow_pix- I
;updates percent complete widget with each cycle of outer for loop
endif
pixs = ARRAYJNDICES(arctan_array, good_flow)
; create 2-D array (list) of subscripts contained
;in goodfl ow which reference good vectors in arctan array
window_size=51
width = fix(window_size/.' .' )
;while loop to create variable window size based on # of
;vectors within window
while wi ndowsi ze LT 501 do begin
box = EXTRAC(arctan_array, pixs[, i]-width, pixs[ ,i]-width, wi ndowsi ze,
window_size)
; create subset of arctan_array which will be
;analyzed, size and location of box is defined
;using pixs and wi ndowsi ze variables
box2 = EXTRAC(total_displacement, pixs[ ,i]-width, pixs[ ,i]-width, window_size,
wi ndowsi ze)
;subset totaldisplacement as well
good = WHERE (box GT -181.0, count)
;array 'good' contains indices of angles within 'box'
IF count LT 9 THEN begin
inform-{'Soru"l V_ !>ala by
'1_ po'" _ '" II.inform.b" ... L<<Il'_ """'pine" i' .... 'Pro ...... i ... "0111 ,n,' Jin\Ol"rUPl
;1q.uI 0", >mpk1c ",ds<"
FOR ;0(>1 "wnJOOd_fIow Jli.- I [)(I Bf.CI S
:i00i> ""'" n ......... oL,n,.".."""" numtM:t of ,nd,oa ,n"'um gOOd I." .. ,p'"
It' (i mod 100) f.Q 0 I.,. btli
"IJtport_" o,.p<t<<n'_"""'pl", i. numJOOd_Oow-Pix. l
_"""', .. pm:cn. ,omp"". ""ds<' ""Ih <ach cl"'le of ou'" lOr loop
dlf
pi" - ANItA \ _1' IIICt:5("",tan_am.y, S""'<I_I1ow)
""'"'" 1-0 OJn)' (11)11 of <ul:>s<npl. """,,",<>I
," gOOd no... .. hleh ",form gOOd ",<1"", In arctan ....... y
"'ir>d<;w._.i>. .... ,
,,';dln - n'("'indow li.dl )
,,,Me loop 10 c,.,.,. \ oriAbk ",ndo .... n basOO "" of
.''''''''''' .. "run .. ,,>,10,.
box tX lRAq"",tan_"""y. p'xs(O.i]-width. pi. s( I,i)_width, ... indo", _me.
",i<>dow iii",,)
........ of."" ....... y,,"l<h " ,II be:
;moI)<cd. ",. ond Ioc ... "" ofl"" "dcfinl
:"""11 P'" ond "'.....".. II'" , .... obl""
bo<2 - f. .\TI{,\C(1WJ pi .. ro.i]-"'idlh. piul l .i]-"id!h. ,",'iodow Ii ...
",i_ .i.e) - -
;<ut>otllOl.1 d'<pIOl:<mrnI" "dl
gOOd - Wllt;ltt:(box GT 181.0. COWIl}
;arnoy ...,.r ronlaJlII ,00"'" of OII",," ,Ill," '110,'
1 f """'" t. T TIlL," i><1Il.
'"
183
window_size=window_size+20
;if more than 8 vectors within 'box' then statistics will be
Calculated, otherwise window size is increased to encapsulate more vectors.
endif else if count GE 9 then begin
window_size=501
endif
endwhile
;end of while loop which creates variable window size
if count GE 2 then begin
stats = MOMENT(box, /NaN, sdev=stdv)
;calc statistics on angles inside 'box', if standard deviation of
;angles is less than the threshold declared above, then the vector at
Coordinate i of' good flow' is kept and placed in the array called
;'keep_angle_vect'
stats2 = MOMENT(box2, /NaN, sdev=stdv2)
;calc stats for total displacement as well, to sort via length
mean_arctan=stats[ ]
mean_tot_disp=stats2 [ )]
if stdv LE stdv_limit then begin
keep_angle_vect(i) = good_flow(i)
;keep_anglejvect will contain indices of good vectors/angles
ENDIF ELSE
IF (arctan_array[pixs[0,i], pi xs[ l ,i]] LT arctan_threshold*stdv + mean_arctan) AND
(arctan_array[pixs[fi,i], pixs[l , i]] GT mean_arctan - arctan_threshold*stdv)THEN
BEGIN
IF (total_displacement[pixs[^,i], pixs[f ,i]] LT totdisp_threshold*stdv2 + mean_tot_disp)
AND (total_displacement[pixs[ ,i], pixs[ ,i]] GT mean_tot_disp -
totdisp_threshold*stdv2) THEN BEGIN
IF (i MOD 100) EQ 0 THEN PRINT, stdv,' = arctan standard deviation'
IF (i MOD 100) EQ 0 THEN PRINT, stdv2, * = displacement standard deviation'
window _ si, .. ,.,i...oov.,_ si",. 20
;If"""" ,han 8 ,..,,,,1'," ,0,," '\>0,' '1>00 _,>loa '''"\>0
:<>l<u'atO<l, OIh<f,', .. "",- ""c .. In<rnsa! 10 rn< ..... """" ' .. ..".,
.. dlf .... If coo"' Gt: 1>tt;1.
",-i.-.dow _" ' 0-"01
... <llI
........ 11
...... or", loop "hoch <1'<'>1" \'onab le" I...oov. .. ,.
If >Un' GE I .... !>oJ1
.. ." (00 . INaN.
.<.k ... " .. "'" <III ... sJ<s ,_ '1><>,', ,r otancWd do".""" of
:"'JIII i ..... trw. ,lit ,hrnl>ol<! do<t.mJ >!>ole. ,lion '"" ,-ee,,,, at
I of'SOO<! flo" ' ,, k<pl ond pix'" In ,he """y.all ...
;\!I "&I< 'ocr
"",112 - \10\1 F."I'{bo.2. m. s. od ..... ,,,d,'2)
:cak $U1I for toW d",,'ac,n><c.l .. "cll. 1000<1 \ I ..
me"" _ .,<tan ... ,otsf OJ
.,.." _""_ disp-stol.2( U]
koep_ ""s" _ ,'ee.,i) l!",,"Uk .. ,,(i)
.k""" ""II< ,.:eo" til Con"'," ",d,<c' of jlOOd ,,,,,,on.. .. 1jI<r.
I F ,,,,,,,an_arTlIyfpiXl(O,i). p, uP.ill l. T arctan_Ihr<$ho!d,,,d m<>Il_arctan) ASO
(amm _ orny(pi .. [O.il. piull.ill (IT "",.n _0t<Wl arc,an_,hrnbold',l<MTm ;N
BEGI N
'"
, .. (tolll_ pi"l l ,;]] I.T m'''''_'OI_d;..,)
A:"P (lOW_diop'""cmc",[piu(U.ij. 1.'11 GT mean_'OI_di<p.
'otd1l!uhrcoOOld >ldvl) TIIEN BEGIN
U' (, IOU) EQ O THES PItI ST, IIdv, _ arc ... 0IMdatd devimo<!'
IF (i ,\100 1(0) F.Q 0 Til [S PIII .''T, "d>'l, - .undard dtvial_'
184
keep_angle_vect(i) = good_flow(i)
;keepangle_vect will contain indices of good vectors/angles
ENDIF
ENDIF
ENDIF
ENDFOR
envi_report_init,base=percent_complete,/finish
;end percent complete widget
print, 'Finished searching for good vectors'
;the array ' keepangl evect ' will have empty rows due to sorting
;process above, so these are removed as follows:
good_pix = WHERE(keep_angle_vect GT 0, count_good_pix)
;the array ;'good_pix' contains indices from 'keep angl evect ' which contain valid
;angles/vectors
keep_angle_vect_short = lonarr(count_good_pix)
;create new array of correct size to house indices of good angles
keep_angle_vect_short = keep_angle_vect(good_pix)
;use indices stored in 'good_pix' to populate ' keepangl e vect short '
;with indices of good vectors
;the array ' keepangl e vect short ' now contains only indices of good
;angles/vectors from the original array called ' arctanarray'
good_arctan_array = fltarr(glacier_image_columns,glacier_image_rows)
;create new array the size of the glacier image which
;will contain good vectors
good_x_displacement = fltarr(glacier_image_columns,glacier_image_rows)
;create array to hold good x and y displacement values
good_y_displacement = fltarr(glacier_image_columns,glacier_image_rows)
good_arctan_array[*,*] = ! VALUES .FJSfAN
;populate new arrays ;with Nans (instead of zeros) so VELOVECT will not calculate
;vectors with zero displacement at every pixel without a valid vector.
good_x_displacement[*,*] = WALUES.F_NAN
good_y_displacement[*,*] = ! VALUE S.F_NAN
k<q>_""gIc:_ . ""I(i) - ....... _"""(i.
,k<q> ..,gk ,I" LII ron";n 'nd>e<o of ....... '""lOt<'anJln
I::-;Im'
F.:-;DJr
F5DlF
' '1_ .. ' pe .... ,,I_ temp 1=,Ifonish
.on<! pen""" <omplclc" ,4Jj01
.,he: ...... y 'keep ""Ie "",<, ",II h .... <mp'y ""'. due Lo ..... '''lI
.prt>C> o/xe .... the$< ... ......,.<'<\ .. folio",.
lI""'i"'pi. - \\' UI: IIE( k<q> _ ,'",t CT 0, cOIIn'JOOd"'pi. )
.the ..... Y , ........ "'p,,' ""',., .. mdied ""'" \\1 .. ,.",,' "'h,<h '''''''m
.""JPe<I'Ion
koq, _0"111._ "I_shon - lo .. r<ou",JOOd.,pi. )
.''''''. 00. orny of "",I >ll< Lo ....... ,ndlCeS of.,oo ... gIa
. oq,_""I#_"I_shon - k<q>_",,Ie_ .""I( ....... -"i. )
,"", " .. ,hen """"" ,n'jOOd p,,' Lo _I",. \<q> angle ".,t ihort
,,,,,h ,ndocn of JOOO ",,,LoB
.tII< ...... y'l.<q> ""gIe: , :! ihort' """ COllI .... <XII}' 'ndicn of .......
,:angJeo!"""",, from the ongo,w ..... y "'lied '"",!;.n ....... }'
aood _ .,,""" _amy - nto' r(III"d", _ imall" _ ool"m"41""i", -'01.11"_"''''')
,<r<al. IlCYo"""Y the W' oflhc gJ""oe, ''''"gO "h,'"
.,.,11 con'''. IP>d '''''''''
OO<i _ _ displ"" ., .. , nt. 'r(lIlaoi'" -,m ... _ oolum"4:I"",,,, _ im.ge _ "'" .
" ...... .... y Lo hold OO<i , and Y d'sploc<mrn' ."1",,,
JOOO_"'."Ml_ ..... }j . I 'VALUES.F_NAN
._l>t ............ )'O ,,,,(h ' ..... 1"" VELOVECT ",11 _cakub"
".,"on ""h ,,:rtI d''I'lAc.:mcnt ., "'ery p".1 ", ...... t ... loJ .",Lot.
JOOd_, _displ""<malt[ . 1- !V ALUES.F_NAN
....... J _displ""<1I1ent[, ' 1- 'V ALUES.F_II'AN
185
good_indices = array_indices(arctan_array, keep_angle_vect_short)
; goodi ndi ces will contain list of indices in
;arctan_array with good vectors
howbi g = size(good_indices)
x_good_indices = how_big[l]
;get number of good indices contained in ;goodindices, this represents number
;of good vectors to transfer into goodar ct anar r ay
y_good_indices = how_big[2]
FOR i=0L, y_good_indices-l DO BEGIN
x = good_indices[ ,i]
y = good_indices[ ,i]
good_arctan_array[x,y] = arctan_array[x,y]
;use indices stored ;in'keep_angle vect_short' to place good vectors in
;new array in correct x,y locations
good_x_displacement[x,y] = x_displacement[x,y]
good_y_displacement[x,y] = y_displacement[x,y]
ENDFOR
U = fltarr(glacier_image_columns,glacier_image_rows)
;create arrays to hold x and y displacements to be used to plot arrows
V = fltarr(glacier_image_columns,glacier_image_rows)
good_total_displacement = fltarr(glacier_image_columns,glacier_image_rows)
good_corr_str_array = fltarr(glacier_image_columns,glacier_image_rows)
FORi =0L, glacier_image_columns-1 DO BEGIN
FORj =0L, glacier_image_rows-l DO BEGIN
I F good_arctan_array[i,j] NE 'NaN' THEN BEGIN
;if the indice holds a legitimate value and not NaN, proceed
U[i,j] = good_x_displacement[i,j]
;transfer x displacements into array 'U'
V[i j ]
=
good_y_displacement[i,j]
IDOd indic .. .m,' !.dino( ... _."""y. kcq> ....... . ..... )
JOO<I """," .. ,II " _ ..... . <s.
_ mo) ..... .-1 ' ........
how.""
,....,.,.,jOldi<a . _ ..... 1]
"" .. 5 ...............
.f.-l ,;\<In Po ....... """Y
YJ_VOIdk .. . _J"dl ]
H)II; i .. 51. YJO'.UndiO<s- 1 DO lI EGIN
,oo<Ijr.licn('5j]
Y ,oo<Ijadicn( l oi]
.-I. _ . "",,)i'.)'J _ ."",,)i ' .)'J
........ _ ... l.cq> ..... ,.,;1 ..... Po ........ ,oo<I'<"<tO!$
.... wno, "'_, '.l ...... _
1.J . ... - 1...4-" I",," '0[,.)"[
,00<1.1_ 4''''1ao .... '''''''''] - Y. r ; 1a:""''''''.1]
u n,o.rtlJlo<i.,. jmal".""I""",,-laoi ... jm&JC. """O)
."'""'" 50 "" .. , or.! Y .. "'". ..... Ie plol """,,0
OJ . n5o.rtlll.d ... <:olum"'-iI.d ... im,, """ 0)
J<!O<I. IOI.I. 4i..,10C<m0,,, m. ' <1&1",i .... irna",. ",,1untna..Pa:''''. imal". "",,'oj
Jr3O'I. <On" ... , . .... Y .. n'.<>1 ...." .... im.a ... ""Iu""""",,, iOf jmallC. _,,)
FOR ;"'1 ...." ... j ...... !IunuJt. , DO BECI'1
FORj"" . p .... j_._".. , 00 BECI ....
JDOd. _.lrTlIrtij] SE " ... ' TlI.'1 BECI'
,."'" ....... ,.\ r e::aI
U[iJJ Jr3O'I.". tlisplomeftljiJI
" ... I'cr , 4""1ao"",, ....... .-ny"\:
186
;transfer y displacements into array ' V
good_total_displacement[i,j] = sqrt(U[i,j]
A
2 + V[i,j]
A
2)
;transfer total displacement into separate array
ENDIF
ENDFOR
ENDFOR
FOR i = 0 L , glacier_image_columns-1 DO BEGIN
;for loops to transfer corr. str. and parameters into new arrays
;at locations of good vectors
F O R j = 0 l , glacier_image_rows-i DO BEGIN
IF ABS(good_total_displacement[i,j]) GT 0 . 0 THEN BEGIN
good_corr_str_array[i,j] = corr_str_array[i,j]
ENDIF
ENDFOR
ENDFOR
r ot at edU = reverse(U, 2)
;rotate so tiffs will display properly when viewed in ENVI
rotated_V - reverse(V, 2)
U = congrid(U, glacier_image_columns*scale, glacier_image_rows*scale)
V = congrid(V, glacier_image_columns* scale, glacier_image_rows* scale)
good_corr_str_array = congrid(good_corr_str_array, glacier_image_columns* scale,
glacier_image_rows* scale)
! o r d e r =0
;set display coordinate system to match convention used in
;ENVI, image is drawn from top down
window, 2 ,xsize=glacier_image_columns* scale, ysize=glacier_image_rows*scale,
retain =
;open display window of correct size to hold image of glacier
loadct, 0 ;black and white color table
enlarged_glacier_image = congrid(glacier_image, glacier_image_columns* scale,
glacier_image_rows*scale,3)
;change size of jpeg2000
1I""'I_""aI_disploc<m<1l1(iJ) - "Irt(U!i,jj'l +
.tnII>fcr 'OIlII d'spl"".",..", ,nlo ..... y
[l'; OW
[ NDFOR
[NDFOli
fOR , ..... 1 . ilacier_i""F_oo1umno- l DO Bt:GlN
.forloopol<>lnn>f ... ron <Ir . ....t _ ...... '010 ........... )'0
;01 I0<0I __ of 11""'1 '.,,, ....
FOR j"'1 ilaci ... _i""F-''''''''' ' DO B.:GlN
If " lIS(lI""'I_toW_dJ<placemcnlliJll GT O.U Tllt:N BI:C IN
1I""'I_<On"_ .. ,_ ..... y(ij) ron" _il'_ ..... y(ij)
[:'lDlf
1:!'iDfOR
ENDH)R
rou'O<I_ U ""D<'( U.l )
;"">1, 00 "If." ,II "'SPlay f'IO]><rly ,,""" ".,.. '" ,n ['>VI
roul<d _V . ...... . D<'(V.1)
U - >._rld(U. ilociorJ""F_oollL/llJlll'oc.I<. ,I. d ...
V _ "aci ... Jnug,_>l umn"",.I,. ""'i ... ... ,,,.k)
11""'1_ COlT _'" _ ..... y - <ool rld( 11""'1_ ron" _ii' _ ..... Y. il..,; ... _im ... _ Ilu"",.' ",.k.
,loci ... _im.go _ "", .. ' ",.1,)
,-
;><1 d'splay <oonl, .. '. ')'0"'" 10 .....,h 1,,,.<111_ u!Oll on
.EXVI. "n.go i. dra"" ""'" ''''' ...","
",.do,,. .' ,i ... "..,i .. _ im' jI< _ olumn> ' o<.k. )'Oi .... "o<'<O" J '""jI< _ ""' .. '5<>1
=io - I
_ d,,,,I.)" .. ,nolo" of.,.,..,.", .,,' 10 I>olol ",_ of K""""
lo.drt. 1I ;blKl;....t "hll" 0010< ,abk
.. largO<! ..al..,i", _image - ,00 _ri<l(]I.Ia<:i", Jonag<. "oeier Jm.,. _columns ' onlo.
ilaciu J ..... _ ",." .' oc.ld I
;<k.n .... '. of JPCIl1I.1O()
187
s = size(u)
t = size(v)
missing = 1000.0
mag = sqrt(u
A
+v
A
)
nbad = 0 ;# of missing points
x = findgen(s(l))
y = findgen(s(2))
good = where(mag It missing)
ugood = u(good)
vgood = v(good)
xO = min(x) ;get scaling
xl = max(x)
yO = min(y)
yl = max(y)
x_step=float(xl-xO)/float(s( ))
; Convert to float. Integer math ; could result in divide by 0
y_step=float(y 1 -y0)/float(s(.))
maxmag=max([max(abs(ugood/x_step)),max(abs(vgood/y_step))])
sina = arrowlength * (ugood/maxmag)
cosa = arrowlength * (vgood/maxmag)
r = .45 ;len of arrow head
angle = 22.5 * !dtor ;Angle of arrowhead
st = r * sin(angle) ;sin 22.5 degs * length of head
ct = r * cos(angle)
large_num_pts = n_elements(good)
loadct, 13 ;rainbow
\p.thick= I
tvscl, enlarged_glacier_image ;displayjpeg2000
device, decomposed =
; foreground (plotting) color value is interpreted as an
;index value of a color table
print, 'PLOTTING VECTORS'
""'1. ".,,"" OJ'" -
.... e. "'lpIoa ... lcoIur, ..... napmm.,,
""""' ,_ 01 ....... .-
,Fl 'PI..01TThG VECTORS'
1.10< 01
- . l-oI(v)
mi .. inll - OI.U
- n. " ,.-joC I ))
Y - IIodtt*/oC ! ))
*"",, - .. IN-ro( ..... "'......,
.....,d 11(*"",,)
, . ..,., . , .(...,.,)
.0- .0100( .) $looaI ....
1 _ ... (x)
yl _ " " (Y)
""1""80 I . Op I ... 0( 1))
. ('on, ... 1<> Il<>0l, In! ..... : >uk! ....,1, ,n d" ,do (I
Y I I)
1I'W ......... ([ ... >(.I>s("llOOdI. _ .. .... I "... 1fOC>III1_ .. cpl)J)
..... - ....,.,.'1enJth ( ...........
<000 - ....,.,.'lenilh (' ... "" inw.mav
. -
"",," _ !l.'
.. . r t-Ioo( onsJe)
<1 - ' .-.0(-,")
100lI<l. 1' .... _
1
.!<nDr __
........ "r ....... _
.. lnoaIIool_
if data_origin EQ 'i' then begin
; commands to color code vectors from IMCORR process....
for i=0L, large_num_pts-i do begin
if good_corr_str_array[good[i]] LE 2.0 then begin
\p.color=25 ;purple
xO = x(good(i) mod s(l))
dx = sina(i)
xl =x0 + dx
yO = y(good(i) / s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[x0,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[y0,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color, /device
endif else if good_corr_str_array[good[i]] LE 4.0 then begin
\p.color=50 ;blue
xO = x(good(i) mod s( I ) )
dx = sina(i)
xl =x0 + dx
y0 = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,xl,xl-(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[y0,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] LE d. O then begin
It _ _ on"" loop.
,.... _ ... .->do< ,rcI<IR f __ I\\(.'ORR p"""'"
!p ............ ;jNfJIk
x{p>od(l) mod 0( I
d.-.i ..... i)
.1 - .{l+d,
yO _ 11( 1))
dy - <OSa(i)
.do, ... ",
)'<1-, .,
..-..! . 0...1-, L ........ dyo')od)".>4. S
. 1.d.(O\ d.,.d .. S
l)O.yl.yl-{CI dyI)d .. <h,1d) )d, 5
S
eo: ,<>Ia<. 60\;'"
Ip,""-""I ,hi ...
0 ' (lIOO<l(i ) mod s( I ))
d Ii""'i)
. I - . O-d.>
)0 - )'(JD<><l(i) I 11( 1))
dy . <OU(;)
yl - j(l dy
.. 1"". ,,<1'
yd' Y, ",""
(I>Iob.j "Ul .. I-(CI dx/1d .. J)dydI J<d, 5
.1-"H<t <hf>;d .. 5
bo.yl,yl-("' dylyd .. -d>lxd),yd. S
yl.yL-(<t dyl,.... .. 5
<OIuo "'<oIor , de> >
.u
189
\p.color=\00 ;aqua
xO = x(good(i) mod s(l))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,xl,xl-(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,yl,yl-(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] LE u then begin
!p.co/or=150 ;green
xO = x(good(i) mod s(l))
dx = sina(i)
xl =xO + dx
yO = y(good(i) / s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] LE 10.0 then begin
!p.co/or=200 ;yellow
xO = x(good(i) mod s(l))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
lpn' 1111' _
.0- . (Jr>Od(i) _ 0( I ))
do - llina(i)
., . O-do
)<I . )'(""""10) I 0( l )l
dy . ..... ;)
yl )<I4y
.d-.._ .. <p
)'I"'_"<p
plo" .(.o..l .. 1 {ct<hhd ... dj7')d).d, 5
., . ,.jct d.lxd .. dy!)d) 'd]. S
[,o,yl ,yl.j<ldyl)'l+,,d>.lxd) yd, $
yl ,yl.jctdj7')d ... dohd) )d]. S
dlf .... lf aood_a>n"_ ... _ ...... yjJO<><l[ill l.E .... , .... IMtI.
I,.. 1 .. ..... _
.0- ><tpod(i) _ 0( I ))
do ...... i)
d ltOdo
,0 . )'CJOOd(i, I 0( I))
dy . ..... i)
YI ,o . dy
.I- , _ .. <p
)d. y "<p
plo",[.O,' l .. , .jct d<I.I ... dyl)d).d, $
.1 .. 1.j<IdxI.d+,,dylyd).dJ, S
[,o.yl .yl {ct dyl)'l . .. d.,.d) yd. S
y1.yl.jCIdylyd-Ol .w.d)ydJ. S
l ...... ra-. !'OO. )d .....
0 - .(JOOdIi) _ 0( 1))
do - oiBoCi)
. 1 . Odo
,0 . ),(JOOdIi) I 0( I ))
dy e _i)
yl )<I.dY
yd. y_"<p
plots,[xO,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] GT 10.0 then begin
\p.color=250 ;red
xO = x(good(i) mod s(l))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif
endfor
endif else if dat aori gi n EQ 'c' then begin
;commands to color code vectors from COSI-Corr process
for i=0Ilarge_num_pts-1 do begin
if good_corr_str_array[good[i]] LE 0.80 then begin
!p.<%>/or=25 ;purple
xO = x(good(i) mod s(l))
dx = sina(i)
xl =x0 + dx
yO = y(good(i) / s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
;I!
. 0 _ .(JD<><I(i' ...... '" 1 I)
d, - "l\O(i)
.I - . Od.
yO - )'\p>d(i' I '" I))
dy - co 1iI
yl - yO.dy
.d,",,_1ICJI
)'II-r_1ICJI
.. Hct' <hI.<kI' dy'yd)".d. S
.1,1I-{ct'''''Xd-s!'d)O')<l)',d). S
r yO.yl,yl -{ ct' d)'f)'ll .. ' <hIId)')'II. S
y I ,y 1-{ct' d)7'yd ... d>h.d)' )'II). S
_ 11k-Yo:<
dlr 01 .. Ir dou._oriJin t:Q '" ' . H ......
".,,,,,,, ...... '0 ""lor cod< '''''ton from (OSI.{'.,.,.
,,..,..
. 0 - I(JD<><I(') _ "' I))
<b. _ ... i)
,.o - )(JD<><I(i} "' I ))
yl - ,.o.dy
.d",,_1ICJI
)'II-r_ .....
plots,[xO,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color, /device
endif else if good_corr_str_array[good[i]] LE then begin
\p.color=5() ;blue
xO = x(good(i) mod s( I ) )
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,xl,xl-(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,yl,yl-(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] LE . then begin
lp.color=\()() ;aqua
xO = x(good(i) mod s( 1))
dx = sina(i)
xl =xO + dx
yO = y(good(i) / s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] LE CI.94 then begin
!p. co/o/-l50 ;green
pIob,[ .o..l .. I-{<I"lWJdSI' d)'i'yd)".d. 5
d .. I-{ .... <hIXd .. S
[)O.yl ,yl-(<I'4yly,t. .. '<k!xd)")d. S
S
.............. '.f<k,.i<e
..... lr_l( pld_a>l'T_ .... _ .... )'\.,...q'11 U: ...... dI .. bttIo
........
0 'hlood(iJ _ 0( I II
d. .iTlO(.j
yO .. y(1IOOd('1 I 0( I II
dy . a>sa(i)
),I - )'O-d),
.d-x_"",,
pIoI>.j.O"'l .. l-/a ,w,d .. d,o'yd)".d. S
.1 .. 1-{ .. .... S
()O.yl,yl-(ctdylyd .. .t...d)"jd. S
)'1.yl-( .. .. <h1:o:d))'6). 5
<ok c>lorJlk-i
1.....-'-I'Q ;aq ...
0 '(fI'>Od(i) _ .1:1 I)
d . .. oil'lll(i)
,1 _ . O+dx
yO " y(good(i) I 0( 1 II
dy " """')
yl-yO_d)'
.d-, . "<P
yd-Y. II<JI
pIoItJ d) I",H .. ' lWJd.., ' d)'iyd)"d, S
d .. L-{.' .. cWxd-.. d)lf,..)" .... 5
()O.yl.rl-(<tdy'yd .. <hIXd)")'Il. s
yl.yl-{ .. d,t,.kllWJd))'II). s
...... . ...... /dni<e
'"
xO = x(good(i) mod s( 1))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy - cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] LE 0.98 then begin
\p.color=200 ;yellow
xO = x(good(i) mod s( 1))
dx = sina(i)
xl =xO + dx
yO = y(good(i) / s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,xl,xl-(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if good_corr_str_array[good[i]] GT 0.98 then begin
\p.color=250 ;red
xO = x(good(i) mod s(l))
dx = sina(i)
xl =x0 + dx
yO = y(good(i) / s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
<b - ..... i)
.I - , Ood.
,.0 - )'Ip>d(iJ / 1( I))
<Iy - m
yl - ,.oody
. d.,._",""
)'01-,._ .....
pIoU..{.o-, I .. H<I dxhd ... S
.1 .. I-(CI d>tl.d .... dyl)'d) .dl. 5
(,.o.yl.yJ.{ctdylyd ... .w.d) )d. $
yl,yl-{c, ' dyl)'dSI' d"hd)' ydj. S
tldlf oto< it IIOod <OfT IU ...... rlsoocllill u: 0.'>11 .... 1MtIII
- - -
, 0 - t(pcI(i) _ 0( 11)
d> _ ..... 1))
.1 -.0 ...
)<1 - )'(aood(;) / 0( 11)
dy o .-(i)
yl - ,.oody
.d .. _OltP
)'1"'-"<11
plolo./oo..l .. Ho(' W.d' '' ' d)'''yd)''d. S
.1 .. 1-(<1 dxlxd ... dyl)'d) .dj. S
(,.0,1'1,1'1 -(CIdylyd ... d."'d) )'I. S
yl.yl-{CI dylyd ... d. h d) ydj. S
ro.......",lorjdc:vicc
-"'"
. 0 .(JDOd(i) _ 0( 1))
"" . oUIo(,)
,.0 ' )'( ...... il l 0( I
dy o ooa(i)
)'1 - ,.o-dy
.1 .. _...,.
)'d-Y_.CII
P'""'-l' 11.< I ... I -{ CI'd<!xd .. dylyd)'.-d. S
'"
193
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif
endfor
endif
iterate_base=widget_auto_base(title=Tterate the process again?',/xbig)
list=['yes',
,
no']
sb = widget_base(iterate_base, /row)
wt = widget_toggle(sb, uvalue='toggle', list=list, /auto,xsize=35)
saveresul t = auto_wid_mng(iterate_base)
if save_resulUc>gg7e EQ 0 then iterate = y
if save_resu\Uoggle EQ 1 then iterate - 'n'
;save_result.toggle[0] = 0 ....yes
;save_result.toggle[0] = 1 ....no
if iterate EQ y then begin
arctanarray=good_arctan_array
total_displacement=good_total_displacement
x_displacement=good_x_displacement
y_displacement=good_y_displacement
adjust_base=widget_auto_base(title=
,
Adjust thresholds?',/xbig)
list=['yes
,
,'no']
sb = widget_base(adjust_base, /row)
wt = widget_toggle(sb, uvalue='toggle', list=list, /auto,xsize=35)
adjust_result = auto_wid_mng(adjust_base)
if adjust_resulU6>gg/e EQ 0 then adjustment = y
if adjus^result./og^g/e EQ 1 then adjustment = 'n'
;adjust_result.toggle[0] = 0 ....yes
;adjust_result.toggle[0] - 1 ....no
if adjustment EQ ' / then begin
thresholds=widget_auto_base(title='Edit thresholds for neighborhood analysis',/xbig)
list=['arctangent threshold','total displacement threshold','arctangent limit']
vals=[arctan_threshold,totdisp_threshold,stdv_limit]
.. dlf
.. dif
x I.' I iC1' d, I,d'S!'dyl)'d)' ,d). 5
()O.y1.yHCI*dylyd+st*dxhd)*yd. S
yl.yl-t<1 dyl )'d .. d,o"'d) )'II). s
"" lor*<:ol<>< J<kvic
it= __ ldttl_o.,"_ boSO(.;,Ie-'ll<nIC.he: ,""" LS. lJOin1' )J:biSI
1i>l'1'yu','no')
... .. ...... _Nst. /fOW)
,,' .. . 'idt<UOUlf(ob, " .... li .. ... ,\<)
",-c" res.l, w .. to . .. ld. mD i' ...... " No.1
If .. "._ ..... EQ 0 the. it ...... .. y
If ",'c. """luOUle [Q I , ht. it""" . .. 'n'
",,'C ruull.tOSllIefO) () )ft
,"' 1 no
If ite,.,,,. EO Y lh 1><1:10
"""an_ ..... ...... y
l .... _di..,lo<.." ....
, _ diSplaccmenl,..oo _. _ displa<cmenl
Y _ d isplacm>enl- lI<"'d J _ disploc.", .. '
adju'U,asc-" au 10_ ht> till .... Adj ... tbreshokb1' Jxbijll
'i,,-('yes',""'"]
sb .. " 'i<Ig<C
'" .. . 'ldl". "'Ulab. u,'lll...-'loW.. lioI_li". lo.,o.x,u ... '<)
O<!j ... -,,,wit .. "'0_" kU'UlJ( odjUSlJ'''.)
If adjUSl_lUUluoul< [ Q II adjlUlJllcnl .. Y
If adjuSI. l'<SUluoggl. [Q I , ... adj ust"""" .. 'n'
:a..lJOSI.fUUlcU>iIIIc{O] (), ) ...
,odJUSI mull,louklO] I" no
'"
.. _ 10_ b.",'i,l.-'&li' thrahoId< !'or nail""" hood ... lyoio'Jxbig,l
I i >!-('....,Ian..,." 1hrooho1d'. 'toto.I <Ii","""""" Ihrnb<>kf. vn.n1F'" IIm,r]
"., .. [ orcu.n _llIr<sII<>ld.lOIdi", _'hresl>old.>ld __ Ii mil]
194
output=widget_edit(thresholds,uvalue=
,
thresholdsVauto,prompt='Enter new
values',dt=4,field=2,list=list,vals=vals)
thresholds_result=auto_wid_mng(thresholds)
arctan_threshold = thvQsho\ds_TQSu\tthresholds[ ]
totdispthreshold = thresholds_resulU/zras/zo/tffc[ 1 ]
st dvl i mi t = XhrQsholdsjrQSu\t.thresholds[2]
print,'Current arctangent threshold is: ',arctan_threshold
print,'Current total displacement threshold is: ',totdisp_threshold
print,'Current arctangent limit is: ',stdv_limit
print,'New arctangent threshold is: ',arctan_threshold
print,'New total displacement threshold is: ',totdisp_threshold
print,'New arctangent limit is: ',stdv_limit
print,'****************************************************
endif
endif
endwhile
annotate, window=2
print, 'FINISHED PLOTTING VECTORS
picture_base=widget_auto_base(title-Save this display?',/xbig)
list=['yes','no']
sb = widget_base(picture_base, /row)
wt = widget_toggle(sb, uvalue='toggle', list=list, /auto,xsize=35)
picture_result = auto_wid_mng(picture_base)
if picture_result.fo.gg7e EQ 0 then picture = 'y'
if picture_vesu\ttoggle EQ I then picture - 'n'
;picture_result.toggle[0] = 0 ....yes
;picture_result.toggle[0] = 1 ....no
IF picture EQ y" THEN BEGIN
display = tvrd(true= i )
rotated_display=reverse(display,3)
;rotate display so tiff image will orient correctly when opened in ENVI
;rotation is about y axis, which is signified by 3 in this instance
O\I'pu .... Id,..' _ ... J",'o.prompl-'Enl<T new
val .... A,.o.I .r..1d- 1.1iSl- 1 iSl, val.-.,.I.)
Ihre>bold, _ """I,C"" ' 0_" id _ mn II( Ihre>bokb)
......... ,hrnholdo _ rcsu [
'OId;>JI _Ihr<ohold - Ihr<oho 1<11 _l'<OIIluh"""""'d.r[ , ]
Sldv Jimi' Ihre>bold'-" .....
p ... , ....................... ...................................... .
p". ,.'Cu=nI .-.:...".,.., thrahGld io: .or<WI_lhre>bold
p ... '.'C ....... 'IOIalIli>JIiom<m thrahGld io: .'OIdisp _Ihr<ohokl
P".'.'CurTen, '-':tar\Jtn, hmll iI: .>I<Iv -"mil
p ... , ..................................... ......................... .
p ... I,'N .... amanl""'lIuahoId it: ' ,lttial IIns/IoId
p ... ,.'N .... 1OW dllp,",,= thrahoid io:
p ... I,'N ..... oman,"", hmll IS: ."rlv _Iimil
p ... ,,' .......................................................... ..
.. dif
.odlf
p".'. 'FISISHEO PLQITlSO VECTORS'
picl"n: _ bu " Idl"_' . 1._ b. ... ,i,l..-'S.u tIu. dl>JIlay?' h biV
li"-i'yoo. 'no1
... - ,,'1<1, .. _ bAI<1:ri"''''''_Nk,l"",' )
.. , . .. idl .. _'OUI ..... ,' aluc-'lolJl<. li .... lis1. I..,"' .......
P",'""'_ .... ult _ ""'0_ .. ld_moJ(pi.'un:_Nk)
If EQ U lb pic,.", ''1
If pi ....... _ ..... EQ 1 tb pic' = _ .,,'
.pIC'U'" , ..... 1' ",",<\0) 0 _yeo
:piOl .... rcsulll<>ggl<[O] I .no
If pi.'U", EQ Y TH 1::-' 61:GlS
display . " 'rdllnie'" ' )
roI.,I _ diSpla y-r., <.-..( di", lay , .1)
:rou,. dlopla)' 10 "IT i .... ll"" ,11 on ... ' .. h<n op<n<olln \'1
:roul."" .. ....,,11 y ....... hICh " ",V"fiool ) 'n 'h., .R>I....,.,
195
;while color band is 1, x axis is 2.
sifted_position=strpos(sifted_path,'\siftedV)
;find position o f .hdr' so it can be removed in next command
sifted_path=strmid(sifted_path, ,sifted_position)
;remove '.hdr' ending from filename
write_tiff, sifted_path + '\sifted\vector_field.tif, rotated_display, orientation, /float
endif
rotated_total_displacement=reverse(good_total_displacement, )
;rotate about y axis to plot correctly
rotated_good_corr_str_array=reverse(good_corr_str_array,2)
rotated_x_displacement=reverse(good_x_displacement, )
rotated_y_displacement=reverse(good_y_displacement, 2)
write_tiff, sifted_path + '\sifted\total_displacement.tif, rotated_total_displacement,
orientation= , /float
write_tiff, sifted_path + '\sifted\corr_strength.tif, rotated_good_corr_str_array,
orientation=0, /float
write_tiff, sifted_path + '\sifted\x_displacement.tif, rotated_x_displacement,
orientation- , /float
write_tiff, sifted_path + '\sifted\y_displacement.tif, rotated_y_displacement,
orientation= , /float
print, 'FINISHED WRITING TO FILES'
print, 'PROGRAM FINISHED'
fmished=widget_auto_base(title-Program Complete! !',/xbig)
done=widget_string(fmished,/auto_manage,uvalue='complete',prompt='Successfully
plotted vectors',default='PROGRAM COMPLETE',xsize=50)
result=auto_wid_mng(fmished)
END
IlIII J>OII;,j.,.,.." poo.( si ned -.POoh. ";I\f' 1
:fo tld .,.,.,10"" of' hdt '" " <>n be: In ''',,' oomrrw-.::l
oiftedyallo " ' mld(.iOed ..... oh." ... n"'U'<>Si'ionj
:mt><>'-o ' _hdt rndm, from filrnam<
roI1II_ total_ di spl"""""" -n> .nJiOOI! _1012.1_ ispl..,,,,,,mLl )
."""'. m.;.., y "' .. '" p,"" corro<lIy
", .. ,ed JOOd_ OOIT _<1,_ orr.> )"''''''''''l JiOOI! _ >IT _ ." _ ..,..y.l )
", .. ,ed _x _ d t r>JiOOI! _. _ displ""""""L! )
", .. ,ed y _ di ",'lI<em.",- '''' rw(JiOOI! J' _ di.., laccmcnLl )
'"
, ... 1,,_ Uff . i Oed fl,h "\oj ft..r """,_ displa"."""".llf. rol"cd _ total_ d, spla<anrnl,
ori"" .. ,jon-tJ. !nOlI
... II,,_, lff. , iftod fl,h 'Ioifl<d\to<T _W'tIlJIh.hf. rowedJOOd_<OIT_Ilr_ ...... y.
ori"" .... iono4l. lf\oa'
" -rift _11fT, 'il\cd...P",h + .... illed''''_dIsplaoemenl.lif. "" .. 1_"_ d isp' ocem",,'.
ori .... 'ion ...... ltIoaI
.. rlt, _'lff, siflod...J>lth . .... ,!bod'y_d'spt.;""' ... LUf. ro'''''''J_displ""emen,.
ori .... ' ;"n-tI. lf\oo'
prJ.,. 'fINISIlEO WRITING TO FILES'
prlol 'PII, OORA.\1 fiNISHED'
nn; obed . .. id..., ... uto _ boWi \itle-'l't OIP .m Compl.,.! ,. /lC bill)
oJonto .. ldt .. _.,rlnt( fin;sh<d,I.""' ......... s<.u.-.hH' ..
,'...,.,....<kf.ult-'PRQGRAM
reo"i. . u to .. " ill .. mDt( f, nish!)
APPENDIX E
CONVOLVE_DISPLACEMENT.PRO
PRO ConvolveDisplacement, event
; This program takes x and y displacements (point data) and produces
; x,y and total displacement
; rasters by applying a kernel (weighted inversely by distance) using
; the CONVOL command.
; It also outputs a tiff image of the glacier with arrows spaced at
; regular intervals and
; allows use of IDL's annotation widget to add text to the tiff image
; to keep track of parameters
; A saved version of the annotation is found in the 'rasters' folder
; under \vectors\<glacier name>_raster_annotate.dat
; This program takes as input a grayscale pea bandl jpeg2000 image as
; backdrop for the vectors,
; a glacier mask (also jpeg2000) (glacier mask has Is inside glacier
; and Os outside),
; and xdisplacement and ydisplacement tiffs which are the outputs
; from the "Sort_Arctans_Plot_Arrows.pro" program.
; The user supplies values which can change the size of the displayed
; image, the length of the arrows,
; the kernel size used in the convolution process (which directly
; affects computation time), and the
; arrow spacing in the displayed plot. (See below)
; Commands surrounded by******************** may need drive
; letters/paths updated for the program
; to work properly
; The program sends the following output tiffs to a folder called
; 'rasters' in the /vectors/<glacier_name> directory:
; convolved_x_disp.tif
; convolved ydi sp. t i f
PItO ('''''OhO lIIop'oto ..... , """,'
n". 1""111"'" w. .. , III><l Y d,,,,I..,cmcmllfk" " ""." .. ,,:.
,.) ..... ""'"
kcmc:II' .. :' .,cd ,",o ... .......,ju .....
;
I' ..... ' , ."IT_oflllt ....... ""."" ...... aI ..
. ..... ,.-. ... -
...... , ...... Is , ... """1<\, ....... , .....
; 10 kaop ".d ,,( ... " ... "
A ... ..a,.-of .... .... is....., .... ......
u .. doI
''''''J ... __ .............. .t(nJ ......
; Ioocl.drop "' .... 'o<IOtO.
.""' .......... ' ..... JPOJ2I._.H .... > ....... hooh .... 1 'I '
""" .. 'I, .... ,,),
onJ, dt"l'I.o<<m<nt.rod) d,spto<_ "If ... ho<h If< lilt rn ....
1'''''' .... "\011 An: .... Plot A ...... ,I'"I"pmarom
The u'" "'f'I'lie> IUd .. hi<h <WI "'" .... crlllt d''I'lajcd
.......... .... """" ..
lilt k<fl'o<l 0; ""'<d ",!he con'Q""_ ptUC ..... '"I*:h d'M'l,
_IT.,. ... , I m
__ .... III tho tIi.p")cd plot ISee bclt>wo,
, - t .. ac.ledlo) ....................... ,..-lon..
_'pIIIao"d"' ........ ..
.... oo-k .. I ,I)
The,"" ___ ................ l1fh"'._""""
-t ...... "" ...... "'11.<1 ... _ - d .. ", .. ", :
... I,cd,
_,ohcd ) d,'I' "r
197
; convolvedtotal_disp.tif
; convolved vectors.tif (arrows color-coded according to total displacement)
; convolved_vectors.jp2 (arrows color-coded according to total displacement)
; IMCORR uses a 9x9 array centered on the highest correlation values
; within a search area to compute
; correlation strength, therefore the base of the 3-D correlation peak
; used in correlation strength
; computations is 9x9 pixels. Based on this info, the most appropriate
; kernel size for spatial
; interpolation is a 9x9 kernel. The justification is basically
; this...if IMCORR uses a 9x9 array
; then so should this program.
params=widget_auto_base(title-Edit parameters for interpolation',/xbig)
list=['image scale:Varrow length:Vkernel size (pixels):Varrow spacing:','spatial resolution
(m):' ,' time (years):']
vals=[l,20,9,5,15,1.0]
output=widget_edit(params,uvalue='parameters',/auto,prompt='Enter new
value',dt=2,list=list,vals=vals)
params_result=auto_wid_mng(params)
scale = pamms_resu\tparameters[ ]
;scale factor for changing size of ;displayed image,use values 1.0 or larger
length = pamms_res\i\t.parameters[ ]
;scale factor for changing size of displayed arrows
kernel_size = pzrams_rGsu\tparameters[."]
;should be multiple of 4, plus 1 gives extent of square kernel, IMCORR uses 9x9 array
arrow_spacing = params_result./rarameters[ ]
;spaces arrows so program ;does not draw arrow at every pixel in raster
resolution = params_result.parameters[4]
time - params_result.parameters[5]
; Kernel Size =17 takes several minutes
; Kernel Size = 13 runs quickly, takes a few minutes
; Kernel Size = 9 runs fast, takes a minute
glacier_imagej3ath=envi_pickfile(title-Find glacier image (jpeg2000
format)',filter='*.jp2')
glacier_image = read_image(glacier_image_path)
'"
''''''01,1 toloi d .,.."r
.".".*1 1_0 '" 10,,,.1 01,,.,1..::"" .... 0
oonml,cJ """on.JP2 (..,.,v", rolor-<:o.lal .. conlmll'0 101,1 d .,.]"" ........ "
(\!CORM ...... '1>9 """Y <rnl<mil "" ,I>< 1IIxt><a """",.,,"" , .>1 ....
,,,till" "......,h ..... 10 rompu'"
<:0<1'<1.11011 ,,=I(Ih. l!Iet<f.,.. 'I>< ... or, .... 34) """""""'" pal.
u..:d '" ''''''' .. ,,'''' suenglh
"""""til"""" " P"'''' s-.l on lh" Info. ,I>< """" """"""'.,.
.. ,. r<lf .",>!,.I
'"'orpola""" " 9>.9 \; ...... 1. H,. J, "r".""" .. bu .... lI}
tho<, ,fI\t,OIUI. .... .
,hen '" """"Id "'" '" "'" "IO
.. _ ,. _ bOJ<{Ij.!eoo'Edl1 porm>oI<B for imcrpolauon'/xbiV
)iSl-{\ .... oo:tie:', __ .... &th, "''''''''' .... (p ..... ): _ """""lc',-opaI'" reoo/lIUoIl
(m);", 'l,me (ye.".):')
'-olP\ l ,10,9. <.1
.. _"'II(porams,u,.I .................. .....
,"1100:' ,d'- l .li_li ...... l.-val.)
par2II'IO _l'OOUlt 10_ .. 'Id _ m.lIpar2rno)
..................... , ............................................... .
oeale - parm\lI. result.pd""""'m! " I
,lICIt. foclOr fOr dunS'"!! w< of .d.", .. ) ... ," .. 11\' ..... , ... .,.. I.U <J< wlI'"
- par2II'IO. fdUl' .... ",""'m! I)
.... k r..,tor lOr chan",n,.". of dl'l'loyaluro""
kemetli - patamSJeoull,pa", .. ",mp]
.sho.>old" ntuillpicor 4. plu, I or_ ....... I.I\I("ORR .",,9,<lom)
am>W _"""ina - potmU _l"e$IIlt"",,"''''''m( \ ]
.space< "",," .. 0 program .-not ... ", orr"", .. 0\0f} p".' In ..........
resolu,ion - 41
,;me -
Kcmcl S,n:
K...,.,I S".
K ....... ' S"
17 .... '" II<'rntl mmuta
Il """ qUId;!}". I2kcs f ... m,n ....
9""" r"" ..... cs. nIlnut.
s*ier -,mogo ..... th- ... 1 fi ltitle-'Find .1"" .... I"..,. (jpq.lOOO
_r.fil .......
198
i
i
glacier_mask_path=envi_pickfile(title=Tind glacier mask (jpeg2000
format)
,
,filter='*.jp2')
glacier_mask=read_image(glacier_mask_path)
>
x_disp_path=envi_pickfile(title='Find x displacement in SIFTED folder (tif
format)',filter='*.tif)
x_displacement = read_image(x_disp_path)
sifted_position=strpos(x_disp_patll,'sifted
,
)
;fmd position of ;'sifted\x_displacement.tif so it can be removed in next command
filename=strmid(x_disp_path, ,sifted_position)
;remove 'sifted\x_dislacement.tif ending from filename
ydisplacement = read_image(filename+'\sifted\y_displacement.tif)
openu, 55, filename+'XaccuracyVgeoref^stats.txtVappend
x_displacement = reverse(x_displacement,2)
ydisplacement = reverse(y_displacement,2)
howbi g = size(glaciermask)
columns = how_big[ 1 ]
rows = how_big[ ]
kernelsize= [kernel_size,kernel_size]
;create kernel of size: kernel size X kernel_size
kernel = REPLICATE(0.0,kernel_size,kernel_size)
;populate entire kernel with zeros
half^size - fix(kernel_size/ )
kernel center = half size+
&looier, nwk ..JI',h ... ,t jll<knl.( ,i'le-' FiIKl al"" ... nwk (Jp",,>{lOO
formaIr.fi l' ......
&Io<i .. nu.sIc_r d 1 .... 1r(&l"' i ... orasI;JO'h)
x, di'l'JO'h ... ,t" l<knl ullc-' FiIKl , d'Opioc<menl,n SIFTED foldet (I,f
formaI)',r.I...-.li f')
' , d"l'looo111<1" - ............. I . diOpJO'h)
oifted..JlO'ilioo-.lrpoo( . , disp..Jl'llo.'oiftcdl
.find p<>SI'"'" of ;'"ned x uf"" " ..... b n:mo,ed '" ",,' 'Of11mand
fil<n&me-l lr111Id(X, diOpJliUh.O .. iflod...JlOOitioo)
.1anO'C .. fled , d .. loccmrnu,f from fiknamc:
y di."I""""",,' - r_ 1"'.I r.Icno.rnt> ..... ftcd',y
fiI .......... __ f..uIU.tJoppend
x.<Ii"".",..,....., - r ...... .
y. di'l'I"'<mmt - ... .... t(y, displ ..
ho", , big - .1u(gI",itr. nwk)
oolwruu _ ho", . bill ' J
"''''. - how .billl l ]
hmel,i_ [komel. w .komel. "',.eJ
,c"",,c of "'. suo.\ komol w<
k ..... l _ R.: PLl c ... n :(u.OJ<.,.,..I. oi ... k ..... l. lU.)
,poptJla'. """'''' ...... I ",th I"""
199
FOR i=0L, kernel si ze-1 do begin
;put weights in kernel for interpolation scheme below
FORj=0L, kernel si ze-1 do begin
IF i EQ kernel_center AND j EQ kernel_center then begin
kernel[i,j] = 1.0 ;kernel center gets weight of 1.0
ENDIF else begin
di st ancet ocent er = sqrt((kernel_center-i)
A
+ (kernel_center-j)
A
2)
kernel[i,j] = * /distance_to_center
;weight of each location in kernel is inversely proportional to distance from center
ENDELSE
ENDFOR
ENDFOR
convolved_x_displacement = xdisplacement
;create array with original displacement values and which will receive results
;from convolution process
convolved_y_displacement = ydisplacement ;same for y
nan_array - finite(x_displacement, /nan)
;create array in which Nans are replaced by 1 s and 0s elsewhere
pixels_in_glacier - where(glacier_mask EQ 1 AND nan_array EQ I , count)
;create list of pixels which are inside glacier and populated by Nans
empty_pixel_coor = array_indices(x_displacement, pi xel si ngl aci er )
;create list of indices of empty pixels inside glacier
print, count,' = NUMBER OF EMPTY PIXELS IN GLACIER'
print, 'BEGINNING CONVOLUTION PROCESS'
inform=['Interpolating Vector Data....']
envi_report_init,inform,base=percent_complete,title='Program is working',/interrupt
;begin % complete widget
FOil ;"' 1, t ....... 1 do .... ,
. fIII' ",,,,, .. In r... '''''''fIOI.",,,, "'tI<m< \0<:"",
k ..... l[ij) . 1.0 <""leT 11<" "'''''' of UI
ENOl F .1>< t.qp.
k ..... l[ij) .
lox"",. ,n " on'.."...)y "'''' .. 1 ...... 110 f,.".,.. oIt.,.
r.:O; OF. UiF.
L"OFOR
[SOFOR
.e ............ y .. tin 001'",.1 ,J"rl""rnI<Il' ond .. h"h .. ,11 """";'-c rn..l ..
from """'01 ... "", proc ...
"""_ ...... y . 1naII)
;<rnt<..,...) ,n" loch t ......... npl",,,,d by 10 """ 0. d"",!>ot<
pixds)n_pder . ... _masl< EQ I A:."U 1WI_ ...... y I:Q I,count)
""",,,to I,,, ofp".I, "h"h .... ,"""" Ill"" ... ond popul.,<oJ hy :. .....
emply..J>ixel_"""" . .... , _I"dio(>:. _ d;opl""."",nL pix<lo_in Jlx;")
"mi. I", of,I'>II" .. of OMJIly p".I, ,,,,ode
prloL <QUIlL ' . OF E!'l i'TY PIXEts IN GL.\CIER'
prinl, 'BEGIS:."I);O CO);'VOurrIOS PROCESS'
infonn-{'lnt"'flOIaI"" vcc .... 0.... .. ,1
,-,_ ... ",,"_1.1 Linform,ba, pen: "'_ """'pl .... l;' te-1'm&nm It ,,,'orInn&, Jinl<mlp'
,boogon % romp"". "'d
200
FOR i=0L, count-1 DO BEGIN
IF (i MOD 100) EQ 0 THEN begin
envi_report_stat,percent_complete, i, count-
updates percent complete widget with each cycle of outer for loop
endif
xbox = EXTRAC(x_displacement, empty_pixel_coor[ ,i]-fix(kernel_size/ ),
empty_pixel_coor[ I ,i]-fix(kernel_size/:), kernel si ze, kernel_size)
;create subset of xdisplacement which will be analyzed, location of
;box is centered at empty_pixel_coor[] and size of box matches kernel ;size
ybox = EXTRAC(y_displacement, empty_pixel_coor[o,i]-fix(kernel_size/ ),
empty_pixel_coor[ I ,i]-fix(kernel_size/.1), kernel si ze, kernel_size)
;same for ydisplacement
vectors_in_box = WHERE(ABS(xbox) GT 0.0 and xbox NE \VahxQS.f_NaN,
numve c t or s i nbox)
;get number of displacement values in box
IF (i MOD 100) EQ 0 then print, num_vectors_in_box,' = vectors in box'
IF num vectors in box GT 0 THEN BEGIN
;make sure there are values in box to prevent division by zero in convolution process
vect or i ndi ces i nbox = array_indices(xbox, vect or s i nbox)
convolved_xbox = CONVOL(xbox, kernel, missing=!Values./^Afo/V, /center,
/edge_truncate, /Nan, /normalize)
convolved_ybox = CONVOL(ybox, kernel, missingHValues./^Vo/V, /center,
/edge_truncate, /Nan, /normalize)
x = empty_pixel_coor[ ,i]
y = empty_pixel_coor[ ,i]
a = fix(kernel_size/ )+
; horiz or vert distance from upper left corner to center of box
convolved_x_displacement[x,y] = convolved_xbox[a,a]
;places value at center of convolved xbox into appropriate location in
H)II. i""l . ",.u,,,1 00 81:(; IS
IF (i 100) f.Q 0 1><1:'.
o. "IJopof1. ot" .j>OtCtn,. oompl .... i. ooun,, 1
.updates p<n:rnl oompkl. ""h .a<b of 001<1" for \<KIp
oadlf
xbox - I: XTII. M' ( em", y..Pi. eI. >O<j O,i], n l ).
.... p'y Jli I. >O<j I.il' n,(kernel kernel. liz k<meI. Iiz<)
:.",Ol .... _ <>f, d,,,,I,,,, .,.,., "'h,,,b .. ,ll bo .... 1),1. 1ocaI, ... of
:1><"" <a1'''''''''' <IIlply p,,<l <O<Jj ond Ii", ofllO, "'.,.""" kernel "".
)kIo> EXTIlAC(y em"'Y.JIi ! <O<>I'j o,i].n,(kernel
<mp'Y.JI"<l. <O<>I'j k<m<L'iz k;""'I. "'<) .
,...". for Y dlsplacemrn,
"'"'torS. to. bo. - \\' It f. IU:(AlIS(xbo. ) CT 0.0 d . bo. :'iE !VoJua/. NoN.
nurn._J".IIO.)
'i'" num ..... of d .. "Ia<<IIlOO>\ ,.1 ... In bo.
IF (; ."Oll l()1l f EQ U prl.t. "Urn ,1OtS in 110 ' ,',",,,," in box'
- - -
IF nwn. v:I""".in. box CT 0 TI .. :S Ht:(; IS
,nul;. """ Ihtfe .... \ xl .... In \>0, 10 pm ... ' by,,,.., on O><I'olu""" I""'"''
OO,,,,,"I. xbox _ COSVOI-l,bo kernel. m;";"!r'iV. I-I.I' QN. 1 .. ,,1<1',
lIge.\nI1IC"'. /Nan.InoITll.li..,)
"""'''''-..!..)'bo COS\OI'\)bo" mel. m;..;n!r"VoJL><S/. NaN. I= ter.
ledg \nI1ICOI /Nan. /norm. li ,.)
- .... P'Y.JIi tcoorjO,i l
y - .... ptYJli,.'. ooor[ I.il
(, ' (kernel.""': )+1
; !>o>rI, Of , . ..., <I ......... f""" uw<t len >mOt 10 .en'''' ofb<>,
201
;convolved x displacement array
convolved_y_displacement[x,y] = convolved_ybox[a,a]
;same for y values
IF (i MOD 100) EQ 0 then print, convolved_x_displacement[x,y],
convolved_y_displacement[x,y],' = values placed in x and y displacement rasters'
ENDIF
ENDFOR
envi_report_init,base=percent_complete,/finish
;end percent complete widget
convolved_total_displacement = fltarr(columns, rows)
. ***************commands to smooth interpolated d
a
ta********
infinite_array = finite(convolved_x_displacement, /nan)
;create array in which Nans are replaced by Is; and 0s elsewhere
good_list=where(infinite_array EQ 0, goodcount ) ;get list of locations with good values
good_indices=array_indices(convolved_x_displacement,good_list)
inform=['Smoothing Data....']
envi_report_init,inform,base=percent_complete,title='Program is working',/interrupt
;begin % complete widget
FORz=0L, good_count-S do begin
IF (z MOD 100) EQ 0 THEN begin
envi_report_stat,percent_complete, z, goodcount-1
;updates percent complete widget with each cycle of outer for loop
endif
xbox=extrac(convolved_x_displacement,good_indices[ ,z] -
fix(kernel_size/ ),good_indices[ ,z]-fix(kernel_size/ ),kernel_size,kernel_size)
ybox=extrac(convolved_y_displacement,good_indices[J ,z]-
fix(kernel_size/ ),good_indices[ ,z]-fix(kernel_size/ ),kernel_size,kernel_size)
convolved_x_displacement[good_indices[ ,z],good_indices[ ,z]]= mean(xbox,/nan)
; smooth data with mean values
convolved_y_displacement[good_indices[ ,z],good_indices[ I ,z]]= mean(ybox,/nan)
"""""I,'''' J _ di J - oon,,,lwd 31>0'(",, )
:an>< fOr) "I ....
IF Ii MOD 1(0) F.Q 0 I prl .
""",,,I,edJ'_d"l'l..,e,,,.,,,(x,r] . - val"... pi"" ... ;n on<! ydi"'I"" ....... , ...... '
[:"01."
[ :'ODFOR
,c .. porU . 1l.b.... p<ocen,_ <:<>mpl ... ; fini.h
,end pa<.." complclc '"..!xn
............ .. """'1JWI<!i1O """"'" 10''''1'''1.,,"<1 da .. .. ..
Lnlinit. _>my - II. ;'0( oonvolvcd _x _ lnan)
;cTn1o 1m)' In hleh S ...... ", ;>Iacl b)' 1>; ond 0. .!.co.hen:
'"
i""'iJi.,-..' hfrt(inf,rut<_"""y EQ $1 h>! oflo<>lions" IIh JOOld "I"""
good _ indieu-'no) _lodltn(c", ... "h'I _. _ di spl""emeI1t,good J ist)
infonn-{"Smoot/unl I)au. ... ;.,;.,=
t. ,-L rtpOrI _Iolt.inf""""... pe. ct,,, _-"1'1.,0,,;, _ a;rom .. """'\""Ii' fi nlOmlpl
,""KIn ..... pk:<c MIs
FOR roII l .1jOOd_00Wl1. 1 do 1><11.
IF (z .'101) 1(0,,) F.Q II Tit (..,; brJl
\'1_ ... port _ "".j><t<m,_ a>mpl .. c. z. JOOld _""""'. 1
."po\lIIOS pn<CIlI <0lI'l'1<1< ",dg<'l ,,"h each <)d., of oota for loop
dlf
. box" " nor( co,,,"ol,...J _x _ displirn<nt.ao<>d _ indK:es[ 0.>]-
11>(1<..".1_ .ilel:1 J.iood _indices( I .. )' I<(I: ...... L .iw .i .<,lcemel_ Ii .. )
)'bo' " '' " <011' '01"ocI J dirplocernon'.jlOO4 il>llkes( 0 .. 1_
_indices( I "I' n. (kerneC .ize/! ),lcemel_ . ittJeemel_ Ii .. )
<OII''Oh'l_. _ disploocmen,[aood j l>llices( 0 .. J.goo,Ul>llkes/ 1 .. JJ- ....... (. bo ./rwI)
."""",h """ .. "h mean ".IUd
convolved J _ displaum<1l'II""'Undkoo{ 0.. J.JIOOd _ indices/ I .. J J- "'''.()'bo. ) nan)
202
convolved_total_displacement[good_indices[ ,z],good_indices[l,z]]=sqrt((convolved_x
_displacement[good_indices[;,z],good_indices[ ,z]]
A
2)+(convolved_y_displacement[go
od_indices[ ,z],good_indices[ , z]]
A
))
ENDFOR
envi_report_init,base=percent_complete,/finish ;end percent complete widget
**********************g^^ commands to smooth data********************
rot at edxdi spl acement = reverse(convolved_x_displacement, 2 )
;rotate so tiff will plot right side up
rot at edydi spl acement = reverse(convolved_y_displacement,2)
rotatedtotaldisplacement = reverse(convolved_total_displacement, )
print, 'SAVING CONVOLVED X, Y AND TOTAL DISPLACEMENT RASTERS AS
TIFFS'
^J;- *^ ^t, ^ ^ ^* ^* ^* *;J^ J;^* ^*
5
writetiff, filename+'\rasters\convolved_x_disp .tif, rotated_x_displacement,
orientation , /float
writetiff, filename+'\rasters\convolved_y_disp .tif, rotated_y_displacement,
orientation^ , /float
write_tiff, filename+'\rasters\convolved_total_disp.tif, rotatedtotaldisplacement,
orientation= , /float
U = fltarr(columns,rows)
V = fltarr(columns,rows)
U[*,*] = \VAUJES.F_NAN
V[*,*] = \VALUES.F_NAN
FOR i=0L, columns-1, arrowspaci ng DO BEGIN
FORj=0L, rows-1, arrow_spacing DO BEGIN
IF glacier_mask[i,j] EQ 1 then begin
;points inside glacier are populated, arrows are spaced apart
;so VELOVECT does not draw arrows at every pixel in raster
U[i,j] = convolved_x_displacement[i,j]* resolution/years
;populate U and V arrays with regularly spaced values which are yearly
;offsets, convert to m/yr.
V[i,j] = convolved_y_displacement[i,j]* resolution/years
eoo,'" j,'ed_l<>Ial _displ""oment[!I'>o,Undices[O .. l,&<><>d_indices[ l.zl l-oqrt( <on,-",,-ed_"
_displ""<rn<nt[p><!_ indices[O"zl.JOOdj ndi<eo[ l .. W l }+{eoo",,I,'edJ_displx...,entlll"
od jndices[ o.zl,&<><>d _indioes[ I .. W
" .. .. .. .. md comrrunok toomooth thI ... .. .. .. ......
rot>ted_" _ displ""<m<nt
....... 0 SO t;(f",,1l plot ,,111>' ,,010 "I'
rot>ted J _ displat:<m<n< - '" ."" e<>n"<llved J _
rolat<,CI<>Ial_ displ""errI111 ..... <IV( e<>nV<llved _1<>Ial_
"SAVTh:G CO:o..'VOLVEOX, Y A<,\UTOTAL O!SPLACE.'>lENT RASTERS AS
TiffS'
..-rl ... _ tllf. filoname+""' .... I<:00 ..... lo'ed _. _ dosp.ur. rotated _x _
_ tllf. fil....,., .. "", ... I<:oo'-ol"ed J _ disp.ur, ""ated J _ displ""ement,
orienlati""o(l, Illoat
,"'rI'. _,I If, fi 1marne-"", ... ....,.,,,,,1,,0<1 _1<>Ial_ disp.tir, rolated _ IOIaL disp
ori ..... i"" . .... Ifloat
U .. , r(oolwnns..row. )
V nlO' r(ool"", ... fO\\"')
ul' , ' ) - iVALUES.F_N.fN
1,1[".) . 'VALUES.F_N.fN
FOR i.-H.,ool...",.. I, .....,..._"""'in' DO BEGIS
fOR )o(ll ,,,,,..... 1, Olrow_""",inl DO BEC)1i
IF gIat:i .. masl<!ij) I , .... 1.
,pO"" ",.,ok: P''''' .. p<Pp<tIO\ed. "",,'" on:..,.,-ed ..,""
, 10 VELOVECT docs ""' ...... """"" at co"')" p"c! on fUI<T
U( iJ ) - ,n"
.1"'1"'1..., L- an<l V """YO ",110 ","l ... ly..-otI ,alueo "'-ho<h .... ycm)
,"rr ..... <""''''' 10 "'-yr_
V(iJJ - oonvolvedJ _displooccmaoqi jJ ,,..,.,I"li .. , .. ro
203
ENDIF
ENDFOR
ENDFOR
U = congrid(U, columns*scale, rows*scale)
;scale U and V to larger size for easy viewing
V = congrid(V, columns*scale, rows*scale)
!order=0
window, 2, xsize=columns* scale, ysize=rows* scale, retain=l
loadct, 0 ;loads grayscale color table
enl argedgl aci eri mage = congrid(glacier_image, columns* scale, rows*scale)
;enlarged_total_displacement = congrid(convolved_total_displacement,
;columns*scale, rows*scale)
tvscl, enl argedgl aci eri mage
wset,2
loadct, 13 ;rainbow color table
device, decomposed = 0
print, 'PLOTTING VECTORS'
>
; commands to color code arrows according to yearly displacement
s = size(u)
t = size(v)
missing = i 0000.0
mag = sqrt(u
A
+v
A
)
nbad = 0 ;# of missing points
x = findgen(s( 1))
y = findgen(s(2))
good = where(mag It missing)
ugood = u(good)
vgood = v(good)
:->Olf
:->OfOR
u - col""""' sc .... """ .. SC".)
"".10 L: ..-..t \ 10 W"Jot"'" r ........ ) ,.,.., ,"It
V ' ""lrId( V. columru sc .... "', .... "'.1.)
onlorpl Jloci<r _ imoi . . ..... -'m.,., columns >coie. rov.',' ocoJ.)
;cnloooa! """I d,,,,,I,,,,.......,, oonjjn .... coo'Glla! ,OU]
;oI"",os'..,..lo. """,sc.le)
..... 1.1
1 .r:unbow rolor lable
d .. 'I. d<compOSC<l - n
pri "PLOTIING VECTORS'
Il")
,-,bot_'
x - fldl . (I(I ))
y - fl ndK (I(.!))
"good - u(good)
-good -
;. ofrn .... "i points
204
xO = min(x) ;get scaling
xl = max(x)
yO = min(y)
yl = max(y)
x_step=float(xl-xO)/float(s( I))
; Convert to float. Integer math
y_step=float(yl-yO)/float(s( ))
; could result in divide by 0
maxmag=max([max(abs(ugood/x_step)),max(abs(vgood/y_step))])
sina = length * (ugood/maxmag)
cosa = length * (vgood/maxmag)
r = .45 ;len of arrow head
angle = 22.5 * !dtor ;Angle of arrowhead
st = r * sin(angle) ;sin 22.5 degs * length of head
ct = r * cos(angle)
large_num_pts = n_elements(good)
large_num_pts = long(large_num_pts)
loadct, 13 ;rainbow
\p.thick =
printf, 55, 'Purple is LE 10 meters per year'
printf, 55, 'Blue is 1 to 35 meters per year'
printf, 55, 'Aqua is 35 to 60 meters per year'
printf, 55, 'Green is 60 to 85 meters per year'
printf, 55, 'Yellow is 85 to 110 meters per year'
printf, 55, 'Orange is 110 to 135 meters per year'
printf, 55, 'Red is GT 135 meters per year'
for i=0L,large_num_pts-l do begin
if mag[good[i]] LE 15.0 then begin
!p.co/or=10.0 ;purple
xO = x(good(i) mod s( I))
dx = sina(i)
xl =x0 + dx
yO = y(good(i) / s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
IIWmar ... (( .... o(bt(UjP<ML'_ .. .... .. "I'J)
tina - .... "" (u....,.vmumaal
""" - .... "" ( ...,.sIlIWIm"ll
.-
oo&lc -ll' - ldlO<
.. . . . . 18(0011<)
<t - . ' toO(onp)
.1<>1 .. r.....,. hood
.AnV<of __
"'" 1.H dop kr J'h .. rhnol
.... __ JIII
.... __ JIII . .... I:t...,._-JIII)
-"" 1' ''''_
...... . ,
p"'"f 'P'urpk .. LE 10_ pet"""
poi.,f. u. 111 .... 1 '" l' -... pet ,.....
,....If . .. , Aqua .. )5 ... 60 ........ pet ,.....
prl.,f . . .. 'CftcD .. 60 '" JJ 1II<Ien pet"""
prl.,f. ". "'1'01\00. .. ., '" 110 ........ por ,.....
prl.lf. . -0... .. It 110 10 I), ........ pet"""
p.I.,f. , 'Red" GT IlS ........ pct}"OW
If rnaa{1""'lI.ll U: 1 do .. L:><c'"
=10.0 """""
.0' -c".,'(i) _ 0( 1)
.... ....... ,)
xl "" ....
,0 - y(Jood(i) I 0( 1
<Iy - <Ooo(i I
yl - ,o . dy
.d""_ .....
)'6"-_""1'
205
plots,[x0,x 1 ,x 1 -(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[y0,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color, /device
endif else if mag[good[i]] LE 35.0 then begin
!p.co/or=50 ;blue
xO = x(good(i) mod s(I))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots, [xO,xl,xl-(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,yl,yl-(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if mag[good[i]] LE 60.0 then begin
!p.co/or=100 ;aqua
xO = x(good(i) mod s(l))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,xl,xl-(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if mag[good[i]] LE 85.0 then begin
p.o .. JxO .. I .. i1""' dxh:d .. djiyd) >.<t, S
d .. I.( .. S
[)O.yl.yi1""' dyf)'ll ... dxh:d)"Jd, S
S
10: ::I..-.,*,'icc
..... Ihloo 1t' mq[.,...qi11 u : "_,, ,lMoIlH1:Io
tp._.Mo<
. 0 - o(lI"O'I(i) !DOd 11( 1))
'" - .iN(i)
dy - <OOo(i)
.d ... _"",,
)'II."'Y_IUP
pIoU.,j.o..l .. H"' dxh:d ... djiyd)".d, S
xl .. 1 .( .. , 4>tII<d-s! S
()O.y1.yl-<"' dyI)'II. ... <Wxd)"Jd, s
yl.yl.( .. S
.. 10, <oIorJok\ .....
I p""""","," 1(10 ' ......
0 - .(aood(i) !DOd 0( 1)
d. - tiN(i)
- )iflOOd(i) I 0( 1))
dy . <OOo(l)
.<I->t_1OtP
""'-""
pIoU.,jxo.x I .. l.(,, dxh:d .. ' djiyd)" >.d, S
d .. I.("' <Wxd ... djiyd)".ul1. S
S
S
..... . ........ -Jdeo.'icc
\p.color=\50 ;green
xO = x(good(i) mod s( 1))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,xl,xl-(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if mag[good[i]] LE 110.0 then begin
!p.co/or=200 ;yellow
xO - x(good(i) mod s(l))
dx = sina(i)
xl = xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,xl,xl-(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,yl,yl-(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if mag[good[i]] LE 135.0 then begin
\p.color=235 ;orange
xO - x(good(i) mod s( J))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
1 ...... 1' ' I ~ _
I O->(Fod(1) _ 0( 1))
<be - ."",1)
I I_ IOo<be
)0 - )(aood(i) / 0( 111
dy - coa(i)
yl - )Oody
.d""_1Up
yd"'Y_1Up
pJol' J.O,ll1 ,lIHa cWlcd,, d)'iyd) ,d. S
xl,llI-(CI cWlcd", dylyd) .d). S
()O.yl,yHct dylyd.., cWlcd) yd. S
yl.yl-(", d)'lyd,,, dxhcd)"yd). 5
",,_Jdcvicc
!,....,.,.....! ' )-.1"'"
. 0 - .t(pMI(i) _ 0( 1))
<be - oiooo(i)
.1 - I O ...
)0 - )(aood(i) I 0( 1))
dy - coa(i)
yl-)O'dy
,d",,_1Up
yd"'Y_1I<JI
pJoloJxo.:.l,lI Ha"cWlcd''' ' d)'iyd)"xd, S
.1,llI-(n cWlcd ... dylyd) xd). S
()O.yl.YHct dy/ydtsl"dxhcd) yd, S
yl,yl-(CI d)'lyd .... cWlcd) yd), S
",,_J<Im
.. dl ..... lf moallPOd!ill u 1. ... 0 ..... 1M-JI.
!PAl ' !"""
0 . 1(JIood(i) _ 0( I))
... . ....... il
., .0'''''
)<I. )(p>d(i) I 0( 1)
dy- cooo(i)
yl)<Idy
,''''''_".,
yd.,-- "."
207
plots,[xO,xl,xl-(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[y0,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif else if mag[good[i]] GT 135.0 then begin
!p.co/or=250 ;red
xO = x(good(i) mod s( 1))
dx = sina(i)
xl =xO + dx
yO = y(good(i)/s( ))
dy = cosa(i)
yl = yO + dy
xd=x_step
yd=y_step
plots,[xO,xl,xl-(ct*dx/xd-st*dy/yd)*xd, $
xl,xl-(ct*dx/xd+st*dy/yd)*xd], $
[yO,y 1 ,y 1 -(ct*dy/yd+st*dx/xd)*yd, $
yl,yl-(ct*dy/yd-st*dx/xd)*yd], $
color=color,/device
endif
endfor
close, 55
annotate, window=
;brings up annotation widget to place text in display and save it
print, 'FINISHED PLOTTING VECTORS'
save_base=widget_auto_base(title-Save this display?',/xbig)
list=['yes','no']
sb = widget_base(save_base, /row)
wt = widget_toggle(sb, uvalue='toggle', list=list, /auto,xsize=35)
save_result = auto_wid_mng(save_base)
;save_result.toggle[0] = 0 ....yes
;save_result.toggle[0] = 1 ....no
.. dlf
.. dfM
plo".[xO,xI.xl-{ct' dxI. d-,, ' d)'iyd)"d, S
. I.xl {<t' cWxd""' d)'lyd)"xdj. S
[y(l.yl.yl (<l dyl)<l ... dxhcd) yd, S
yl,Y1-{<t' dylyd" , dxfxd)')'d]. S
<:o1o<-co1or / <lo\ic:
dlr .... lf masjJOOdlin GT Ib ... MlIo
,...J
.0 - . (good(i) mod 0( I ))
dx - sino{i)
xl - . 0 0 d;:
,.0 - y(p>d(i) I 0( I))
dy <000(1)
yl - yO _ dy
xd-x. "<p
1'10",(.0 .. l,xl{<l' <b</.d.,, ' d)'iyd)' xd. S
,1 .. 1 {CIdl<hcd .. dylydj .d]. S
[yO.yl.yl.{cl dyf,.......CWXd) yd. s
yl.yl{CI' dylyd" ' dl</.d)' yd]. S
ooloP<olorj oSovio
'"'
d o ...
".0'0" , window-l
;boinp up annoIal"", ,,,dg '" 1'10<. I." on d...,b.} ..-.t "'e ,I
"ri.,. 'FISISHED PLOTTING VECTORS'
.. "._bast-.. , 0_b .. . thi, dllP'_)"?' /xbill
li .. "f.,..,. .. ""'l
sb - "ldJ',. b0i",'eJ,ase. /roW)
v" _ "' .... .. li ..... i ... lau,o,x,iz_.t<j
_ .. ... ,,_but)
,"" (I .. ycl
,"'. ,.,...It.<<>uI<'!01 no
208
IF save_result.fogg/e EQ 0 THEN BEGIN
display = tvrd(true=l)
rotated_display=reverse(display,3)
write_tiff, filename+'\rasters\convolved_vectors.tif,rotated_display, orientation= 0, /float
ENDIF
finished=widget_autoJbase(title-Program Complete!!',/xbig)
done=widget_string(finished,/auto_manage,uvalue=
,
complete',prompt=
,
Successfully
interpolated velocity',default='PROGRAM COMPLETE',xsize=50)
result=auto_wid_mng(finished)
END
display - " ' r<I(U'-l )
" 'rlo< _ Cltr. filenameo'lroll ... _,..,I,,,,,,_ ve<IOn.Uf .rotaled _ displ. y. IfIoaJ.
ENDIf
finished' " .. _ 0" to _ bo.t( tiU .... Projnm C""",r...'! I . bill
"",,",," _ "rI_a( r.nish<d.lOUK> _ ......... "'" ......... nplel<' ,prompl' 'S1>CS01Id1 y
.... ,JIO ... ed .<10<;"),, .d<r ... I,.."ROGRA.\I COMPLETE' .x.i ...... "')
"",,1,' .. '0_ " 'Id _ m.a( firushed)
END
APPENDIX F
CROSS_SECTION_GENERATOR.PRO
PRO CrossSecti onGenerator, event
; This program produces longitudinal or transverse velocity cross
; sections from rasterized
; data output from the ' ConvolveDisplacement' program. The user
; employs the cursor to interactively
; select the points in the raster which will be the beginning,
; intermediate and end points
; of the cross section. Up to 3 line segments may be drawn to
; delineate a cross section
; in a glacier which may be curved.
; Use the left mouse button to select the first (beginning) point of ;the cross section,
; also use the left mouse button to select any intermediate points ;(2nd or 3rd points).
; Use the right mouse button to select the final point (end point) of ;the cross section.
; The user can comment/uncomment commands below to choose whether to
; place a first cross section
; witin a glacier velocity field or to place a second cross section
; across an existing one.
; Cross sections are plotted in m/yr vs. meters (south to north, or
; west to east). When drawing line segments
; to delineate extent of cross section, the beginning point should
; either be in the south or west extent of
; glacier (depending upon the orientation of the glacier) otherwise
; the coordinate manipulations within the
; program may not work. In other words, draw the line segments from
; south to north, or from west to east.
; Longitudal cross sections will have vertical dashed lines showing
; positions of inflection points along
; the cross section. If a transverse cross section requires more than
; 1 line segment then it should be created
; as if it were a longitudinal cross section because the transverse
; cross section portion of this program has "
-
-
.
,
!
l
H
n
.
.
n
.
.
.
.
.
.
s
-
r
l
l
l
h
'
i
E
:
i
{
-
.
!
-
!
2
i
f
=
I
I
'
.
I
;
,
r
A
"
i
l
l
<
!
I
g
,
.
.
,
.
.
.
.
h
:
n
:
;
;
'
s
-
i
,
I
'
,
I
"
'
O
!
[
,
g
'
-
i
t
"
h
l
"
h
i
i
5
I
i
i
f
H
:
;
:
-
<
-
I
i
I
'
.
.
.
.
.
:
:
i
j
o
.
f
i
l
i
f
n
i
i
l
.
,
"
-
;
;
-
.
.
1
I
"
,
.
-
i
f
'
"
H
I
!
j
'
!
,
1
,
,
I
,
j
\
I
I
:
0
;
a
1
1
/
I
I
I
.
"
a
_
_
X
I
I
I
"
!
!
i
'
,
,
'
t
.
i
l
"
i
!
.
i
f
!
!
[
!
"
"
&
"
'
"
!
'
-
p
i
f
;
;
.
!
"
"
i
!
,
i
"
!
.
.
'
;
"
.
.
.
.
;
"
l
.
:
i
i
f
i
'
i
H
!
!
;
!
!
i
l
i
.
.
.
"
-
f
"
I
a
.
Q
,
-
.
"
.
.
:
1
B
.
F
.
i
"
,
-
,
'
'
'
2
.
1
1
_
"
"
-
,
,
i
-
a
_
d
n
;
q
,
,
;
210
; no provision for drawing vertical dashed lines to show inflection points.
; Commands surrounded
D
y ******************* may need drive
; letter/pathnames updated to work correctly
; One bug has been found...when creating north/south trending cross
; sections, if a line segment is perfectly
; vertical (no deviation in x direction) the program will not work
; correctly. Line segments should have some
; slope in them, if only slightly.
;used to scale image with vectorfield to fit on screen, so cross
;section location annotation can be placed properly
windowscale=l .0
?
vectors_path=envi_pickfile(title-Find convolved_vectors.tif file in RASTERS
folder',filter='*.tif)
vectorfield=read_tiff(vectors_path,red,green,blue,interleave= )
vectorfield=reverse(vectorfield,2)
;reverse image to display right-side-up
i
totdisp_path=envi_pickfile(title-Find convolved_total_disp.tif file in RASTERS
folder',filter='*.tif)
totaldisplacement = read_image(totdisp_path)
total_displacement=reverse(total_displacement,2)
;reverse to display properly
how_big=size(total_displacement)
;get size of total displacement array
columns=how_big[ 1 ] ;# columns
rows=how_big[2] ;# rows
for a=,columns-1 do begin
;nested for loops to change Nans to 0.0 in total displacement array for sorting ease later,
for b=0,rows-1 do begin
by ... y "..,.,Jdn,.
'<1,..,. ... ,-..co Upl"cd 10 "'''''' <or=.ly
One Iw ""'" four.! .... """ "'n"", """h '_Ih
""'ion<. If. II .... O<p><nl .. p<fr.ly
\ ,<rt,cal (no <k> '011<,. In \ d"", 1100) th< I""IP"'m ",II "'" .. or\.
"""",,,'Iy. 1.111< "",",kI t..'c oomc:
......., In !hem. If ooly . lIghtly .
'"
....... to .... 1. ''''''S< .. ,til "",on,.'" to rot on .'"".", SO'fl)U
:s<ct.,., 10"'''00 0""""""'" ",. t>o r''''cd ,"_,Iy
win<IowlCale- l.O
l"1otS "'p>1h-<."t pkUIlt( ,i, le-'fil><l <0111'011'1_ V10fl.l; f fil. In RASTERS
fohl ..... fill cr-'" Ill)
\"1otfield r .. .. , '<"" l )
'"100f,.Id-"" ....... ",etorfi<Id.)
'm .... ,mop: ,u durl.y
toIdi", Ii,leoo'FiDd "","vol,'ed _1DtaI _<Ii ",.lir fil. '" RASTERS
rokler',m' ..... .lif)
toW_di",la:ancm . , .. d im' l toIdiop-P'th)
... " < ......
."',......., '" d,,,,uy properly
_ biro luftoW_ di",I"""","",)
.11<' we of ,",., d'''''>e<men, "",,)'
columns- _ bill(l] o. <olun,,,,
"',, ... bow_bid) ] ;_"",'s
fo< ooo!l.columns- I do bqI
1><$IO<l f ..... k>opo to <)gnp: ,,,'" '0 (0,0 '" "".1 d,'!'I..,,,,,,",,, arr.y 'or __ I"",.
fo, 1>-0 ......... , do b<J:1o
211
if total_displacement[a,b] EQ Wahxes.fnan then begin
total_displacement[a,b]=0.0
endif
endfor
endfor
how_large=size(vectorfield) ;get size of vectorfield image
tvcolumns=how_large[ ]
tvrows=how_large [ 2 ]
xpix=intarr(columns)
;create array of pixel numbers from zero to # of columns
ypix=intarr(rows) ;create array to hold y pixel locations
z=fltarr(columns*rows)
;create array to hold values of total displacement to be plotted in cross section graphs
z[*,*]=-l 000000.0
;set all values in z array to -1000000 so good
;values can be sorted later in a 'where' statement
x_position=intarr(4) ;create arrays to hold x,y coordinates of cursor ;clicks defined
below, maximum of 4
y_position=intarr(4) ;points to delineate 3 line segments
trend = widget_auto_base(title='Trend of cross section?',/xbig)
list = ['West to East', 'South to North']
we = widgetjpmenu(trend, list=list, uvalue-trend' , /auto,prompt- Select
direction',xsize=50)
trendresult = auto_wid_mng(trend)
;trendresult.trend = 1 ...south to north
;trendresult.trend= 0 ....west to east
direction=trendresult.?reJ initialize variable
window, ,xsize=columns,ysize=rows
;create window of proper size to ;display total displacement array
tv,total_displacement ;display total displacement array
if direction EQ 1 then begin
;if glacier is oriented N/S then proceed....
If ,oul_displooementr .. bj F;Q TVlI ..... L ""n I ........ 1.
total _ di""la=ncm( a,b )-(J,Q
Mldlf
.. dfor
.. dfor
"""'_Iarge-oiz, -,orI",old) ;JI<I .u. of ,,.".f,oId Im>j,'<
'vcolwnns- how _1"'110[ I]
, ...,.. .... _ Jargq1j
' pil- I.,,,,, rolwnns)
","'ale"""y of p,,<1 numb<D from 'm> to' ofro1umJII
... 0' " '(00)""''''' ""'-0)
'"
;<",.t. amoy t" Mhl of' .... ' .d,$pl ............. ' 10 be: pi""'" ,n ctOU <toOll p:op/II.
'ro, ' ) "')('lOOIOO.U
;>CO all '" , """I 10 )( .()OOO) .... ..,.,..
. \ ,I .... on be _I , .. .,. In ' .............. emen.
' ..J!OSi,ion- ln,.r r(" ) ;<re.le """)'110 hold y ooool, .... ' .. of ourtO< ddiO<d
"",-"mwn of.
y.JX>Oi'ion- I .... :1"0'0" to <lelo".,.,., 3 hoc "'lV" ....
U'a'Id - 'o_ b">Il' lt-"Tfmd of ""'"' 0,""''' /l<big)
li .. . [' WOOl '" Eoor, 'Soonh to Northl
",,'. " .. HlK"'Jlm ... (Itend, Ti .. - li .. , .'.I...........r.I.""'.P<Ontp,-'S<-lc<t
4i"""on ....
............. , "'0.
.It<1><l,,,,,,h.trtnd I ,O<>U1h ,0 oonh
.,rendldulurmd 0. "<01'0<001
... nd .,rutl.h,. an"'!'
.. I. do..-.1,x.l<00'C0IUI1Ul$,ysize-row.
:<rnl. "",,00.. or""""" u,. '" .d''P'ay totaJ dlSPla.<<rn<1I("""Y
If dim:,icm EQ I .... 1>0&1
. tf i1><'" """<'11'00 " S , ..... pro<""L
212
;use left mouse button to click on points delineating cross section
;use right mouse button to pick final point and end process
cursor,x,y,/device,/down ;get points to define cross section
x_position[0]=x ;place x,y mouse coordinates into array
y_position[0]=y
print,x,y
n=l ;iterator used within while loop
while (Imouse.button NE 4) do begin
;while loop allows collection of ;many points to define cross section
cursor, xl,yl,/device,/down
;get more points to define line segments if desired
plots, [x,xl],[y,yl],/device ;plot lines defining cross section
x_position[n]=xl ;place x and y mouse positions into array
y_position[n]=yl
x=xl ;current 2nd point becomes new 1st point of next line segment
y=yi
n=n+l ;iterate
print,x,y
endwhile
cross_section_length=0
initialize variables to define distance
;between successive cursor clicks (points which define cross section)
distance 1=0 ;this variable will hold length of 1st line segment
distance2=0 ;will hold length of 2nd line segment if necessary
distance3=() ;will hold length of 3rd line segment if necessary
linesegments = widget_auto_base(title-Number of line segments in cross section?')
we = widget_param(linesegments, dt=2, floor= ,ceil= % uvalue='segments',
/auto,xsize=50,prompt-Enter l,2,or 3')
segmentresult = auto_wid_mng(linesegments)
num_segments=segmentresult.segme/s initialize variable
if numsegment s EQ then begin
distancel=y_position[ ]-y_position[ ]
;calc length of line segment
slopel=((y_position[ll]-y_position[ ])* )/((x__position[ ]-x_position[l])*l .0)
""" left IDOUK bun"" to .hd OIl PO"'" dc:lineal,,,, emu _toon
..... rig/ll_l>un"" lO p><k r,,,,,, "",01 -.! end pnx<w
. u rso' .',yJ4c>'ico/oo..lI .11<' pOI"" to ""fir>< cn>SS <';00
.J>OSi'ion/O.... ;plM:< q ' _ <001, "", ...... )
Y..,POIi'""'fOM
pri . .y
. -1 ."onto< uoal ",.run .. luk loop
.. hi .. (!IIlOUK.bu/,,,,, do b ... ;1_
loop roll""""" of-many PO'''''' to ""fir><'f\>M !.',""'"
..0' , . 1.yl J<k>keJdo"'lI
'8<' ""'"' 1""""10 den .. I ......... k" ..
plo'" ( . .. I].[y,yl )Jde>icc ;plot h"", defio,,,, =>!ill ."'''"'''
.yosiliOfl/.)-.; 1 aNI Y "-'" P>O"""'" ""0 am)
Y -",,"ilion[ n J.oyl
. ... 1 ;<u=ot 1..J polnl boroma """ 1>1 poon. of ..... ' h"" IC,,""'"
"*11+1 .'lOJ"OOe
pri ..... y
d ..
oross _llOClion . length-o
,I0,,,.h,. \ .,.;obl .. 10 der. ... d'>l2n"
;br< .. """ _>On, <ono< <hds (poon"" h"h <kfi ... emu _'oonl
diOlall<:<) -O .,hi, ,-""obi ... ,II hold IMjl:lh of I .. 10"" $"11'''<'''
distanC<2.o(J .,,,11 !>old ""'KIll of 1 ... h .. sqmrnI If ....., ... rl
di5WKeJ-Il , .. ,II hold I""gth onrd h"" 0<gm<n1
Ii"" P"""" - .. ,o_b ... or I'n< kJti>mIS ID ........ _lion'")
.... . .. ... m(Iinn<"",",,'" floor- l.uil-.l, u\.l .... .. .. '.
, ... t"",.iu-'(l,ptOmPl"'E", ... l.l.ot l 1
o<gmcntrauj, .. ou,o. " id_mnl(:!in'''gmenlSj
If nwn_scgrncn .. F.Q l ib ... bttJ.
di.unc:ol --"""ili,,"[ 1]-Y J>OSilion[ 0]
"ale Icnglh of "nc scgrncn'
'"
213
;calc slope of line segment
y_interceptl=y_position[ ]-slope 1 *x_position[0]
;calc y intercept of line segment using 2 pt. formula
for i=i,distancel-I do begin
;this for loop determines the x coordinates of the line segment based
;up the equation of the line and the fact the glacier is N/S
;trending. Then total displacement values for the x,y coordinates are
;placed into the z array for plotting later.
ypix=y_position[0]+i
xpix=fix((ypix-y_intercept 1 )/slope 1)
z[ypix]=total_displacement[xpix,ypix]
endfor
endif else if numsegment s EQ 2 then begin
distancel=y_position[ ]-y_position[ ]
;get length, slope and y intercept of first line segment
slopel=((y_position[o]-y_position[ ])*! )/((x_position[ ]-x_position[l])*1.0)
y_interceptl=y_position[ ]-slope 1 *x_position[ ]
distance2=y_position[ ]-y__position[ ]
;get length, slope and y intercept of 2nd line segment
slope2=((y_position[ 1 ]-y_position[ ])* 1.0)/((x_position[ 1 ]-x_position[2])* 1.0)
y_intercept2=y_position[ ]-slope2*x_position[ ]
for i=n,distance 1-I do begin
;determine x,y coordinates along first line segment
ypix=y_position[ ]+i
xpix=fix((ypix-y_interceptl)/slopel)
z[ypix]=total_displacement[xpix,ypix]
;get total displacement values along 1st line segment
endfor
for j=),distance2-l do begin
;determine x,y coor. along 2nd line segment
ypix=y_position[ ]+j
xpix=fix((ypix-y_intercept2)/slope2)
z[ypix]=total_displacement[xpix,ypix]
;get total displacement values along 2nd line segment
endfor
endif else if numsegment s EQ 3 then begin
distance l=y_position[ I ]-y_position[ ]
.... ""',..;...-1' "" .... ...
-''''''''''', .................... 11''''00' "of".. _ ,booed
.oplloc .. =_of"'" b .. mol "'" r..... ""' .......... "
;.m>ilI"f n...o _I '" -= , ............. '.) "'">fIl, ........
,pl.-od , IIDIho: , """l fOr ploc,,",Ia&<f.
)'IIi .,. JIOI.i'ioni 0 1-;
. pi.- n. ( (WO> 'L inletUpll V ..".' )
oj)'pi .) ....... _ di",IamenI(xpiq 'pi. )
M ...
+"7 ... 2-y-",,"- ( I J
....... oIo. .......... ...
..... l"((y JOOiIiooll I h ..Jl<IOitioa(! U I,(.)I\( ...J"*Iion( ' I- .,POI"",",, !))" I .f'l
yJn ..... ; p2"'YPtioa( l }-tIope2 ..JiOiii'*'l ' ]
for ;"" ,<Ii.......,ol-1 de Iooz;'
,dc!<tTn, .. I.y >0<\1,,.., .. aIooI,IlnII,,.. ..... _<11
wU.,. ..J>O';.ion[ U]+;
1M' . n'Hwi. 'Lint<=p<! V,''''''' 1 )
>()pi. J...." .. _ di ... pi . )'pi.)
' """, , ....... ''''''. 'e ,,, .. ......
droc
'"
214
;get length, slope and y intercept of first line segment
slopel=((y_position[ >]-y_position[ ])* )/((x_position[ ]-x_position[l])*1.0)
y_interceptl=y_position[ ]-slope 1 *x_position[ ]
distance2=y_position[ ]-y_position[ ]
;get length, slope and y intercept of 2nd line segment
slope2=((y_position[ 1 ]-y_position[2])*l .0)/((x_position[ ]-x_position[2])* 1.0)
y_intercept2=y_position[ ]-slope2*x_position[ ]
distance3=y_position[ ]-y_position[ ]
;get length, slope and y intercept of 3rd line segment
slope3=((y_position[ ]-y_position[ ])* )/((x_position[ ]-x_position[ ])* )
y_intercept3=y_position[ ]-slope3*x_position[ ]
for i= ,distance 1- do begin
;determine x,y coor. along first line segment
ypix=yj3osition[0]+i
xpix=fix((ypix-y_intercept 1)/slope 1)
z[ypix]=total_displacement[xpix,ypix]
;get total displacement values along 1st line segment
endfor
for j=i ,distance2-l do begin
;determine x,y coor. along 2nd line segment
ypix=y_position[ ]+j
xpix=fix((ypix-y_intercept2)/slope2)
z[ypix]=total_displacement[xpix,ypix]
;get total displacement values along 2nd line segment
endfor
for k= ,distance3- do begin
;determine x,y coor. along 3rd line segment
ypix=y_position[ ]+k
xpix=fix((ypix-y_intercept3)/slope3)
z[ypix]=total_displacement[xpix,ypix]
;get total displacement values along 3rd line segment
endfor
endif
endif else if direction EQ 0 then begin
;if glacier is oriented E/W then proceed
;use left mouse button to click on points delineating cross section
;use right mouse button to end process
cursor,x,y,/device,/down ;get points to define cross section
.... "".-tb, ........ y of r"" 1_"", .....
oIcpt 1-(y ...... 1i ... I.' }-y .J .. In" ,ij)l((x JIOOIrioIII""-JCIOiIiooI I J)" 1 .11)
r _....-.'"')'...JIOOi!ioGIU] <I >jK I ....... """' ]
di ..... 2"')' ...... rioIII! h .... 'limo( l]
."" ..,- ' ... ) """'"flO of:..l h8t .......
oIopel-(y ..J!OOiriolll l}-y ..J!OOiriolll ! I)" , 1]' ...... rioIII !II' ".)
r _.....,.".,.,a. priolll i }-sIopol' I]
diaanoel"')' .J>OI'iriolll 1}-y.J>OOiriolll l I
JCI "'" til, 'o'oJ'<....t} """'"'" of ltd II ...... , ...
olopo3-( (y p,jon( I IY.J>OI'j' imI ' ])" 0)1((> .J>OOil""'1 I I. pilon( \ ])0 1 ,.)
Y_intM:qK3y.J>OOition[ IJ IopeJ .JIOOition[ l l
for jo(l.di_'1 do 1toJI.
,""''''''' ... \.) _. fino I .... "
)pix"')' ptioD[
''''''. II>I("' Y _ iDl=cpli Ydop<' )
>bp, JaoooaI_ <fop" ...... 1It >.pi>:.ypix I
......... . o\ucs ...... ht """ "" _ ...
.. dr ...
..... dj" 1. 1 401M1:lo
..... _ '.y""".-" !nd 1_ ,.",
ypix"')'..JIOIObon( I H
.pu.of\l(ypU..y)DI<n:qIt2)'o1ope2)
z/".} .. o CdiOf' aD<Ut(. pix.ypix]
......... ,." ......... :..1 w..'
.. df ...
_I( .... It .......,... t:Q 11 III .. .... ..
"f_ ... , .. ,.. ,ed E \\' ........... "" .
. _left _ .""'IO."<l .... p080<I< -"'",,*0<\:'_
._n"''' nb''''''''IO<n<ipoo<al
owr . YJd""I/ ..... .... p<>ml> 10 <l<f,,,,, ..- _
'"
215
x_position[0]=x ;place x,y mouse coordinates into array
y_position[0]=y
print,x,y
n=l iterator used within while loop
while (Imouse.button NE 4) do begin
;while loop allows collection of many points to define cross section
cursor, xl,yl,/device,/down
plots, [x,xl],[y,yl],/device ;plot lines defining cross section
x_position[n]=xl ;place x and y mouse positions into array
yjposition[n]=yl
x=xl ;current 2nd point becomes new 1st point of next line segment
y=yi
n=n+l iterate
print,x,y
endwhile
cross_section_length=0
intialize variables to hold total length of ;cross section line segments
distancel=0 ;length of 1st line segment
distance2=0 ;length of 2nd
distance3=0 ;length of 3rd
linesegments = widget_auto_base(title-Number of line segments in cross section?')
we = widget_param(linesegments, dt=2, floor=l ,ceil=3, uvalue='segments',
/auto,xsize= ,prompt-Enter l,2,or3' )
segmentresult = auto_wid_mng(linesegments)
num_segments=segmentresult.segme72te initialize variable
if num_segments EQ I then begin
distancel=abs(x_position[ ]-x_position[ I ])
slopel=((y_position[0]-y_position[ ])* )/((x_position[- ]-x_position[l])*1.0)
y_interceptl=(y_position[ ]-slope l*x_position[0])*l .0
for i=l ,distancel-l do begin
xpix=x_position[ -]+i
ypix=(slopel *xpix+y_interceptl )* 1.0
z[xpix]=total_displacement[xpix,ypix]
endfor
prioI' ''.1
_ I .lICr __ .. , .....
... 110 (!.'" ...... _ 1'0'[ ... """'"
, .. h Ie kq> , roll,_ of ..... ) ..... ""r" .. '-.... T'
"' ....... , xl .)'1 Jdcvi<cJdown
plol>. l ... ;plol hna; Jofinma."'" _I,on
oJ'OlltionjnJ ... 1 ,pia, and)' ........ P"t"""" '"") ..... )
. ... 1 .,orrenl lnd pol," I .. , ...... 1M poo .. of""" I ... Ap' ....
,-,'
..... 1 ,_
prioI' y
"""" ..
dip .. :2" .......... lnd
.... m) .. ....... h .... 'nI
I:' p''''>II " "ldl" __ .'o_ ofl_ Ap'''' ... ...-_1')
.... " " IdI"J ... mjlineocpneoir.. dt_l . f'oooro l ,<eil- ' ""'-...,......
1&UIO ... i'_ ' ..... b ... l.l .... l}
1<jpl'lC$l,,,,,.h "_.'0_ .. Id_ m. t\linesq:m .... )
for i-O.di. ...I ..... 1oqIoo
"PU"' __
ypix"lokopc 1 xpi>:0y_ )' I ,0
<I "pi>: t-ot ftisploc ..... <&( opi>:.ypix J
Ndf.,
216
endif else if numsegment s EQ 2 then begin
distancel=abs(x_position[ ]-x_position[ I ])
slopel=((y_position[
l
]-y_position[ 1 ])* 1.0)/((x_position[0]-x_position[ 1 ])* 1.0)
y_interceptl=(y_position[ ]-slope 1 *x_position[0])* 1.0
distance2=abs(x_position[ ]-x_position[2])
slope2=((y_position[ ]-y_position[2])*l .0)/((x_position[ 1 ]-x_position[ I])* 1.0)
y_intercept2=(y__position[ ]-slope2*x_position[l])* 1.0
for i=< ,distance 1-1 do begin
xpix=x_position[0]+i
ypix=(slopel *xpix+y_interceptl)* 1.0
z[xpix]=total_displacement[xpix,ypix]
endfor
for i=^,distance2-! do begin
xpix=x_position[! ]+i
ypix=(slope2*xpix+y_intercept2)* 1.0
z[xpix]=total_displacement[xpix,ypix]
endfor
endif else if numsegment s EQ 3 then begin
distance 1 =abs(x_position[ ]-x_position[ ])
slope l=((y_position[ ]-y_position[ I ])*! .0)/((x_position[0]-x_position[l])* 1.0)
y_interceptl=(y_position[ ]-slope 1 *x_position[0])* 1.0
distance2=abs(x_position[ ]-x_position[ ])
slope2=((y_position[ I ]-y_position[2])* 1.0)/((x_position[ 1 ]-x_position[2])* 1.0)
y_intercept2=(y_position[ I ]-slope2*x_position[ ])* 1.0
distance3=abs(x_position[ :]-x_position[3])
slope3=((y_position[ ]-y_position[3])*l .0)/((x_position[2]-x_position[ ])* )
y_intercept3=(y_position[ ]-slope3*x_position[2])*l .0
for i=v,distance 1- do begin
xpix=x_position[ ]+i
ypix=(slopel *xpix+y_interceptl )* 1.0
z[xpix]=total_displacement[xpix,ypix]
endfor
for i= ,distance2- do begin
xpix=x_position[ ]+i
ypix=(slope2*xpix+y_intercept2)* 1.0
_1f_1f _ _ ... " .. , .. t:Q ! I ....... ..
"i.p _1 .. bt( .JIOOiI>:III( "J- .J ... PI)
...... 1-(1T PIior(""".J">Sitioo( PJ)" P .0),(> ...J>OOi'ooa( vJ- ..,;>OP"1ior( 1 D' I .oj
y_iIIlaupol-(yplior( 'J d ,-I' ,plior("J),, 1 U
rOO" loo(!.di ...... do 1><'&1
pix->; ..J>OIIilioni UJt;
wi. -(.Iope P - . pi" y)ntrn:"I" I )' 1 ,G
z(.pi:< I"'!OW _ di ... pi:<.)'pi.1
61 ..
1M Ioo(P,d;"'n 2 1 cIo ......
pi>. .. ,J>OOi!i<>o( P}+i
)1IiJr-(oIopt 2' xpix..,. _ iIIlaupo2)' r .,
".pi>. J-td f rr 17 ...... oct . pi>..)pi>: I
.. _rOO"
di .... "d.bo( ..,JIOOition( r I' JIOSi'ioni ! I)
.1op<2"\ (Y"POIi'ion] I ].y ..,JIOOillon( 1 l)' r r I' "POIi'lon( ! ])- 1.0)
Y _i npor<epI2-(Y..J>OIIition( I )-o\op<2' ..,JIOOi,;on( r J)' r ,0
1M iooO,d"Im:oI , 1 boVz
.,.. ... ..,JIOOiri<oot., }+i
",:1),, 1.1)
I' ,i"'"('pi>..)1IiJrJ
216
217
z[xpix]=total_displacement[xpix,ypix]
endfor
for i= ,distance3-l do begin
xpix=x_po sition[ 2 ]+i
ypix=(slope3*xpix+y_intercept3)* 1.0
z[xpix]=total_displacement[xpix,ypix]
endfor
endif
endif
cross_section_length=distance 1 +distance2+distance3
;tally length of cross section based upon length of each segment
z_good_list=where(z NE -1000000.0, zcount)
;get locations within total displacement array to be plotted
tot_disp=fltarr (zcount)
initialize array to hold total displacement values to be plotted
for p=*M ,zcount-. do begin
;for loop extracts necessary values of total displacement array and
;places into t ot di sp array for plotting
tot_disp[p]=z[z_good_list[p]]
endfor
x_list=indgen(zcount)
;create array to use as x axis values of cross section
x_list=x_list* 15 ;multiply by 15 to convert to meters
print, ' zcount-,zcount
;print zcount and cross section lengths for comparison, these should be the same
print, 'total length-,cross_section_length
orient = widget_auto_base(title-Cross Section Orientation')
list = ['Longitudinal', 'Transverse']
we = widget_pmenu(orient, list=list, uvalue-orient' , /auto,prompt='Choose Orientation')
orientresult = auto_wid_mng(orient)
;orientresult.orient = 0.... longitudinal
;orientresult.orient = 1.... trans verse
orientation=orientresult.on'ew/ initialize variable
if orientation EQ 0 then begin ;longitudinal?
.( . pi:<)-.oW _ ,pi.,ypi. ]
.. M ...
fo.,-<t,di.tmtcl j do btt:1
pix .. J>O$ili<>n[ J.I
Wi.,,(sJo,>cJ ',pi. +y jn,mepO)' I .0
Z(' pix )_ .... _ dioplac<:rn ... o.[ .pi, .W"]
Mor
.Ddlf
.. dlf
cro. _ oe<:1ion _lMlPh-dittan<e 1 ,..jj$WIU1 .disunc.l
.... Uy ""'JIllI of <..,.. _"on _ ..".,.. I"'JIllI of...,h _,,"'tD'
.JOQd _Ii ... .. b .. " . ,<;[ . , 114''''"',0, <eo"')
_II'"' .... " ....... , .. ,,,,,j rl.<r, ............ , .... l ... I
101_ disp-n .. rr(:u;oun1}
.,..,,,10,. ..... 10 1>0'" , .... , d""I"".......,' ,.1 ... 10 I>< r""'c.l
f ... .w>UnH do ...... 1
. f".. loop t ".,.. OCSOao) .... flOl.1 d'spl""""""" """'l ..-.;I
;plilOcs ,mO tOl do." am)' f.,.. P""""J
'01_ di"PIp l-zl z ..II0o'Ui"'lp n
tadto,
x JiM- lodcu(Z<:OW1t)
,<<<ale array '" u>c .. , "-". ,-olu of .....,..1"""
li .. - . Iii,' " .m"jupl)' by I' 10 <On' .... 10 ..... ""
- -
pli . .. _ .... ,uouru
;pnn' ".<HII" ..... <ross s"on 10000h. f". coml""_. ""'"" """'kit.. u ........
prlol. 'IoIaIlmlPh'" ",,,,",,. section. length
on .. " - "ldtH _ _ booo<,;tl.-'C lOll Scc!iooI o.;<r\wiol11
Ii$! ['LoDjp.udtnaI', 'T'u .... n<1
m
"" , . .. .... lill- liS!. "'03ue-'on .... . I-'"I04'''''''P' 'O>ooo< 0ri<nI>n0n1
ori<nua.ll - "Id. mollori",n}
;oncn""",It.OOOll' (I, ,Ioo"too,,w
"' .... ,1Iraull ..... ""1 I".,..,,,. ..
If EQ 0 1N-r;I
218
tot_disp_max=max(tot_disp)
;get max of total displacement for use as
;max value in vertical dashed line in cross section
u=intarr(2)
;create arrays to hold x,y coor. of vertical dashed lines in cross ;section
v=intarr(2) ;u,v hold x,y coordinates of first vertical dashed line
uu=intarr(2)
vv=intarr(2)
;uu,vv hold x,y coordinates of second vertical dashed line
if direction EQ 0 then begin
statements to create x,y coor. of end points for vertical dashed lines
;in cross sections, these are for east trending glaciers
if numsegment s EQ 2 then begin
;for two line segments, draw 1 dashed line
u[0]=distancel*15
;create x,y coordinates for single dashed vertical line
v[0]=0.0
u[ ]=distancel*
v[l]=1000
endif else if numsegment s EQ 3 then begin
;for 3 line segments draw 2 dashed lines....
u=[distance 1 * ,distance 1*15]
v=[(),1000]
;create x,y coordinates for two vertical dashed lines...
uu=[(distancel+distance2)* \(distancel+distance2)* 15]
w=[0,1000]
endif
print,u,v,uu,vv
;print for visual clarification that program is working correctly
endif else if direction EQ 1 then begin
;these are for north trending glaciers....
if numsegment s EQ 2 then begin
;for 2 line segments draw 1 vertical dashed line
u[0]=distancel*15
v[0]=0.0
;create x,y coordinates for single dashed line
u[l]=distancel*15
.... .....
....... , ofkUI doopa..:..- lOr _
.... ,'_ .. , ... "' .... '1 ....... < ...... _
.....
;<lUI< .... ). 10>10:>l0I I.) ,-. oi,.....,.11 d
7z
M ...... en. :-ua.
....
Iot
ni! )
....... '.,.rr( l)
.UU." IIoIol IT} C<I<'IfIJ, ..... of 00<>d \ ... "'.1 .u.t.:.I h""
If di"","", [Q (0 ...... 1
... ".me .... '" "",< I,r'_ or..-.J po ..... {.,.. '1",01 doohaJ I,,,,,,,
.1" ...... O'K'"'' ......... for n>l1rmIJ,"I Il ......
It """' . ...... "'" [Q 1 1H1:I1
.b",obr .. 5 _ld"Wh ...
u( 'l-oIi ......
....... q for .... d 5"cd , ...... 01 r-
"'., ....
", I I r ......
01 ' 1-" OJ
_It ..... It """, . .......... EQ ' ...........
. 1 ll" ................... l"='''' 11 __ .
u-!diounccl ' l ......... I IJ
""'i",II' 'I
;or.". NOfl.I,1I>l<O f.,.. '''0 .... ",.1 da<h<d hnn
""-I (d; "onee' .1i .....,2 )" d,,,,,,,,.1 I' )
....-{O. IOO\OJ
.. ,If
pn., ........... w
.pnnI .... , ....... oI."rl<_ "'"' ........... <>R. -" .. t,
.. 'lftlotlf di, .. tioo EQ t _ .....
_ OR b _trm<I, ........ l-
If _ . .... p EQ l _"'"
.10< 21,.., .. ,,_"" __ 1 ,cruaI d w:41, ..
"'...-.. ' fo<Rll$kdahcd I ...
'" 11"dl......,.1 ' I<
'"
v[l]=1000
endif else if numsegment s EQ 3 then begin
;for 3 line segments draw 2 vertical dashed lines...
u=[distancel * , distance 1 * 15]
v=[0,1000]
;create x,y coordinates for 2 vertical dashed lines
uu=[(distancel+distance2)* >,(distancel+distance2)* 15]
w=[0,1000]
endif
print,u,v,uu,vv ;print to confirm program is working correctly
endif
window,4
device,decomposed=0 ;tells IDL color is indexed via a color table
loadct,0 ;black and white color table
plot,x_list,tot_disp,charsize= ,ymargin=[ , ], backgrounds ,color= ,thick= ,$
;plot x coor. and total displacement
charthick= ,xthick= ,ythick=
oplot ,u,v,linestyle= ,color= ,thick=2
;plot dashed vertical lines representing location of beginning and ends of
;the separate line segments which comprise the cross section
oplot ,uu,vv,linestyle= ,color=^,thick=2
annotate ;add text to image
save_base=widget_auto_base(title-Save this display?',/xbig)
list=['yes','no']
sb = widget_base(save_base, /row)
wt = widget_toggle(sb, uvalue='toggle', list=list, /auto,xsize=35)
saveresul t = auto_wid_mng(save_base)
;save_result.toggle[0] = 0 ....yes
;save_result.toggle[0] = 1 ....no
if save_result.fogg7e EQ 0 then begin
glacier_directory=widget_auto_base(title-Select folder for output files')
output=widget_outf(glacier_directory,uvalue='output_directory',/auto,/directory,prompt
'Choose folder to hold cross section file')
directory_result=auto_wid_mng(glacier_directory)
display = tvrd(true= 1) ;read tv display
rotated_display=reverse(display,3)
.. dlr.", ltoum .. gmcn .. t;Q 1, btli
. 1Or 1 I,"".....,...; .. 2 ,'en"ol d.a>hcd lul<O,
..-(diOW>c:<I " l <.diotanc.l " 1 <I
voo( O. H)OOI
,o!'eat. ".y .-d,natCS for 2 ,enlCol dashed 10 .....
"u"'l (distant< 1 +diSW>t< 2)' I distan 1 +diOW>c:.2)" I
.. dlf
.. v.U".,"" ;pnnt to """form pro ....... " "ori.<nll totm:tl}'
.. dlr
" I.d .....
d.,'ltt.decompoood-G ;t<1lt IDL ""lor os ,ncIc\od ,.,. color labl<
... do, .1! ;bl.d and "hu. color Ioble
PIot.x_tisLto'-'Ii'l'.chanl ....
.plot, ooor. and toUI
elw1hi<t- l lhieJ:oo 1. ylhi<J:oo!
op.... .. v."nest)1"- 1.co_.lhi<J:oo!
;plot dashed ,en", .. 1 hnes ofl><>"""" and ends of
.lIN: _ h"" "'gm<n1S .. hl<h <OIIIpn'" lII< 0I'0I0 >'_
Oplot .uu.."".linestyl..- l .co_ .lhicl<-!
........ . odd ,"" to ' .....
sa,. _twc-,,Idktl_" .'o_ba>t(ti, _.lhn di<pla)"" ""hig)
list"'l)a'.'no1
sb _ .. .. ",_Ns<. /roW)
.... - " idktUouJt{sb. u, .. I...-'1oUI<. li .. _h ... IOII1o siz ... , <)
.. "._ ...... 1' 0010_" " _IIlDl( ..
."' ....... 1','''"'<10)
"",. """11.",",,,,0)
o .. yes
I __ no
&I .. ia-_ ditccoory-..-idl"_' . '0_ btif(ti,Ie-'Sc:Ia:, Ii>Ida- ror OIl,,",' filcs,
oulplll .... idln __ , ItJla<ia-_ directoty.uval ..... 'outPII'_ <hr<etory ) ... to) directoty.promp"
"Choooe fold to hold ..-.. ,""'" file')
dir<e'ory _ .... 1'- ,. _ .. 'Id_ ... l(JIa<i ... _directory)
disploy ' , wd(,,,,,,", ' ) .m<! II' d,,,,i.ay
routed _ d""l.yo . ... < rw( display. ' )
220
;rotate to display correctly when opened in ENVI
write_tiff, directoryjresult.ow/pw_^Vecfory +
'\longitudinal_cross_section.tif ,rotated_display, orientation= , /float
i
endif
endif else if orientation EQ I then begin ;transverse?
window, I
plot,x_list,tot_disp,charsize= ,ymargin=[ , ],background= ,color= ,thick= ,$
;plot x coor. and total displacements
charthick= 2 ,xthick=2 ,ythick= 2 ,/ynozero
annotate ;add text to image
save_base=widget_auto_base(title-Save this display?',/xbig)
list=['yesVno']
sb = widget_base(save_base, /row)
wt = widget_toggle(sb, uvalue-toggle' , list=list, /auto,xsize= *)
save_result = auto_wid_mng(save_base)
;save_result.toggle[0] = 0 ....yes
;save_result.toggle[0] = 1 ....no
if saveresult.fogg/e EQ 0 then begin
glacier_directory=widget_auto_base(title-Select folder for output files')
output=widget_outf(glacier_directory,uvalue='output_directory',/auto,/directory,prompt=
'Choose folder to hold cross section file')
directoryj*esult=auto_wid_mng(glacier_directory)
display - tvrd(true= I) ;read tv display
rotated_display=reverse(display,3)
;rotate to display correctly when opened in ENVI
i
write_tiff, directoryj-esult.ow/^w/d/recfory +
'\transverse_cross_section.tif,rotated_display, orientation= , /float
>
endif
endif
""
crow.t<> di."tay """,,,'Iy .. ben opened on "\' 1
,,-rl .. _ IIff, ditt<:1O<)' _ .... 11-"",1""_ di_,,,,?,
'\Ion,''''''naI_ 0f0II_ r .1OWI_ display. ori""lationoO, IfIoaJ.
... dlf
dlhh< If on<ntatiOll [Q I ,b .. 1>tt;1 , .... ,erse'
plOl.. li ... to! disp.<l'Iarsite" t ,ym"'1i . -I6,o],ba<;kground
- -
.pklo , .-. on<l ,,,,.1 d"l'ia<cn>rnt>
cl\otllU<t! .. lIliek.!,ythkt '!J)'IIOJ:<ro
..... ;odd I,,,, '" ''''"3<
.... c_ ..... , ,,'111,"_""'0_ h.>.;' i..-'Slv. 110;. d'splJY" /lCbii,)
'i,,-['yeo','DO,
sb _ .. 1d1l .. _bo!. .. , -e_bue.lrow)
..... - .. ldl.UOUk( .... ", .. llK-'Iogale', li" liS1. IW'o ...
"'''J .. ul . . .. '0_ .. id_m .... v.J .... )
... ' ...... 1I,'ouI<lOj 0 -)'OS
;0.,. "",,11."'i$kfOJ' I DO
&JM;i .. _ dirt<tOI}'"" Idll<l _"u to_ boO<'( .itle-'Selec, folder for 00","' fi Ies')
ou!pU ..... klR<!_O"t l(&l .. ... .,..,to) ditKtory.proml"-
'Cbooo< folder '" hold OfOIIIeCI'OII file')
dirtClOI)'_ ..... I' ..... 'o_ "'Id ... _di....,.OI}')
dioplay - h' rd(ltUt"" I) ,tt'3<l I" d'opl.y
""",od _ dioplal"' ... ....-{ di opl.y, ' )
,"'""1010 d,op!>} <:O<T<CU} .. _ opmod ,n
.... , . mf, dirtClOI)' feSul' .... 'pui dirICory "
.ror.akd_dioploy, orienwion-ll, InNl
... dlf
dlf
221
window, 6, xsize=tvcolumns*windowscale, ysize=tvrows*windowscale, retain=l
;open new window to plot location of line segments delineating location of cross section
tv, vectorfield,true=3 ;image interleaved
tvcolumns=tvcolumns* 1.0
;convert integer 'tvcolumns' to floating point
columns=columns* 1.0
;convert integer 'columns' to floating point
scale = tvcolumns/columns
;calc scale factor with which to increase size of line segments to fit vectorfield display
x_position = scale*x_position
;scale x coordinates of line ;segments to fit vectorfield display
y_position = scale*y_position
;scale y coordinates of line segments ;to fit vectorfield display
If numsegment s EQ I then begin
;if statements to populate empty places in x_position and y_position and prevent plotting
;a line segment to [0,0]. Empty places (those with zeros) are given same value as last
;point in cross section, so effectively these will be overlapping points.
x_position[ .l]=x_position[ 1 ]
x_position[ ]=x_position[l]
y_position[ ]=y_position[ ]
y_position[ ]=y_position[ ]
endif else if numsegment s EQ 2 then begin
x_position[ ]=x_position[2]
y_position[ ]=y_position[ ]
endif
plots,x_position,y_position, thick= ,color= ,linestyle=,/device
;plot line segments which delineate location of cross section
annotate ;label display
save_base=widget_auto_base(title-Save this display?',/xbig)
list=['yes','no']
sb = widget_base(save_base, /row)
wt = widget_toggle(sb, uvalue='toggle', list=list, /auto,xsize=35)
save_result = auto_wid_mng(save_base)
.. I.d ..... , . ... i..-rv>lumns' wioo., ... ",m. )'Ii_,..".... windo,,lI<m. retai..-I
;open _ ",000" 10 plol k><>1,"" oflo". .. .,.....,'" dol""""", k><.""" of,,,," """"",
",'oolurnn.-lVrolumns I .0
:<0'" "" tn"- l1ooI,nl PO''''
. ..",'M ,Ol<,.er ,oh .. .,.",,,o no..'OI1IO'OI
1<ale " lvoolumns/ool"",,,,
",k 0<01. f..:lOt .. uh "h"h 10 inc,.,... "" ofl,,,. s<p...u. 10 (0, d'>pbt)
.,.POSilion .. ... I. .,.POSilion
.... 1< , 00<ml,...us ofl,,,. ,..,........ .. 10 fil 'O<1Offi.1d d .. pl.y
y..Jl<lSilioo .. ... I.' y.JlOSi1ion
.",01< Y rooru,""'" ofl,,,. oqpn<tUs. .1<1 fil ''''\Ofr.<ld d,>ploy
Uo"", 1<1P'"'''' f.Q I I . .. 1><1;1
,r .... c:men" 10 """"I.,,, ""ply pl..:cs on , lQ"''''' mel I po,,,,,,,, and fMO'''''' plol"lIj
'" h ... _<'III to (n.O). Empty pla<<:I (1_" uh ",""')...., ""<'11 ......, ,.1 .. as last
.pot"' ,n.""", >1,.,.,. '" orr""" ely' ...... " ,III>< O'oRapp,n, PO'"'"
x..Jl<lSitionf! }-> .. l,o.hion( I J
x "'position( 1}-> I J
dlhb< If nwn_sejpl><'''' [Q ! , t..aI
pIlon( l }-> .,.posItion( :J
y"'position( l M "'position( 2 J
.. dlf
plo" . thick-l ,color-l
.plot 1on< oq;mrn .. "hH:h dol,,...,o Iocol"'" of ...... >1"",
OnnO!a, . 1obe1di'l'loy
.... ". b.. bowj';lk-'So,'. Iht. <lioplay?" Abi&}
USlofya','Dol
sb " "ldV,. bo>ti .. ,'.-"ue. /roW)
,,' - .. u ... .. to,uiz<-' <)
..... ... 1d. "'.IlI",,,_base)
222
;save__result.toggle[0] = 0 ....yes
;save result.toggle[0] = 1 ....no
if save_resulU<9gg/e EQ 0 then begin
location = tvrd(true=l) ;read tv dislay
rotated_location=reverse(location, )
;reverse to display properly when opened in ENVI
write_tiff, directoryresxiltoutputdirectory +
'\vectors_with_cross_sections.tif ,rotated_location, orientation= , /float
endif
finished=widget_auto_base(title-Program Complete!!',/xbig)
done=widget_string(finished,/auto_manage,uvalue='complete',prompt='Directories and
files successfully created',default='PROGRAM COMPLETE',xsize= )
result=auto_wid_mng(finished)
print, ' PROGRAM FINISHED'
end
."'< rflUiuoukl0] {) ,)'CO
resuh.touJqOj I -'II)
Irs .. , ........ llJoggl" F.Q 0 ' b'.boI'a
localiOll - , nd(tru.,.l ) ;rnd" d ..
row<dJoc .. ion-.... rw(Ioc .. ;on. ' )
... , ...... to d'splty I>I'OP<fly " ..... opt!'IO<! ,n VI
m
,,'rI,o _'iff. dim;tory _ rflUI1.owlpul, di,....,"'Y
w,th _ en-_ -.-uons.hr".,..11 location. ori ... I2lion"", IfIoaJ.
adl'
r.ni_ .... _ . " 10_ boO", It-'P, ..... au , Complelt'" hbiK)
-"' klltt. " ri.l<finished./""'. man&I" v.lueoo'complctc'.prompl- 'Dim;IOO<I .....
r.In-=osfIJlly <_I' ,der.ult-'PROGRAM COMPLETE' ...
mult-a. 10_ "Id _ "'" t( fin; sIKd)
prlo . ' PROGRAM F1N1SflEO'
APPENDIX G
DESTRIPEIMAGE.PRO
PRO Destripeimage, event
; program to destripe Landsat 4 or 5 TM PC A images.
;rise and run should be determined in ENVI beforehand by viewing up close the north
;edge of PC A image and determining how many pixels the rise and run is.
;the kernels created in this program assume the rise is actually negative, that is
;for every so many pixels of run, the image drops 1 pixel southward, for example:
; ######
; ###### .
; ###### run= 6 pixels
; ###### rise= 1 pixel (+ downward)
; ######
; ######
filename=envi_pickfile(title-Choose data file to destripe',filter='*.hdr')
;fmd envi format pea file to destripe
envi_open_file, filenames_fid=rfid,/no_realize ;open file, get rfld #
envi_file_query,rfid,nb=bands,ns=columns,nl=rows,dims=dims
;get columns, rows, bands, dimensions (starting x,y)
hdr_position=strpos(filename,\hdr')
;fmd position of '.hdr' so it can be removed in next command
filename=strmid(filename, ,hdr_position) ;remove '.hdr' ending from filename
openr, ,filename ;open image into memory
image_array=fltarr(columns,rows) ;create array to hold image array
readu, I ,image_array ;read envi file into array
"'PPENOI)( G
. '" dean"" Londoal '" S T\\ PC' '" IrDajIlCl.
,n .. ond !WI ......... dct<mllnWln "'''\'I "f<>iwld by "1'" 'na lIP c""" tho "'"'"
;all<' ofPC'''' II'TlAj!< ond dctmnlm"f lfWIy ""cI"he: nO< ond "'n ,s.
,Ihe: crealcd In thi. P"'S"'" .. ,,,,,,,, the: no< II Ol1 ... lIy n<pI"c. th.ot ..
:for ""<ry'" m.lllY pI'"I. ofrun, lhe: '''''1[< I p",,1 f<>r " .. mpl<'
11411
,
_.
nm b p .. "l.
"" ..
me= I l",cll<
" I
"" .....
fil.nalr_ .. o:IaIa file 1(1 -.;pc'.flh ....... ttdr')
.rood "",., f ....... p<a fik: 10 deanpc
.,..rf"l,.n ... ....... I"I'O"''l,dims-cl;m
. [It! col"m"" ",... ... bonds. dllllmllOOS (OWl"', '.y.
ttdr--.POSil;"" .. ll'J>O'(fil....." . bdr')
.r. od POO'"'''' so " "., .. moo' cd In ".", """"""""
op<tl r, ll ,fiknarne .<>pII"'"I" ,''''' m<ftIOf)'
224
params=widget_auto_base(title-Enter rise and run',/xbig)
list=['rise (pixels) (+ down):','run (pixels):*]
vals=[l,4]
output=widget_edit(params,uvalue='parametersVauto,prompt=
'Enter new value',dt=2,list=list,vals=vals)
params_result=auto_wid_mng(params)
rise = params_rGS\i\tparameters[0] ;transfer rise out of structure into variable
run = params_resu\t.parameters[\ ] ;transfer run out of structure into variable
bv_threshold=2.5 ;set initial value to subtract from light bands
factor=0.15
;set initial value of multiplier for standard deviation within which bv_threshold is
subtracted
adder=0.5 ;set initial value which is added to bvt hreshol d outside factor* standard
deviation
iterate ='y'
while iterate EQ 'y' do begin ;start while loop for feedback loop
;create kernel to be applied along scan line banding direction
kernel_length=fix(101/run) ;width of kernel is 101, length of kernel is function of' run'
kernelsize=[ * ,kernel_length] ;establish size of kernel
kernel=replicate(0,101 ,kernel_length) ;populate kernel with 0s
for i=0,kernel_length- ,rise do begin
kernel[i*run:i*run+run-1 ,i]=l ;create pattern of 1 s in kernel to match rise/run of image
endfor
fl = convol(image_array,kernel, ,/center,/edge_zero)
;apply first filter which is a lowpass (mean) filter
;create kernel to be applied across scan line bands
kernelsize=[l,33] ;kernel width is 1, kernel length is 33
kernel=replicate(-1,1,33) ;populate kernel with - Is for high pass filter
kernel[ 16]=3 2 ;central value of kernel is given value which equals +sum of all - Is within
;kernel
.. _ .. 'o_baM(lil lt-'Ent ....... and "",'J. biB>
l itl-{'n .. (P ... lIH ...".."j,' ...... [pi.eI.q
'''IP{ I,'']
""'put .. _ NlI,(.,....."l,."" u.-'porarnoI<ts' ; OUIO,pn>rnp1-
'En .......... value' ,<It- Z.li .. - li ... val<-val. )
paI"ilII' ... result_ .. to _ ... HI ... male(panrn.)
ri .. ... parDlS. resull.para",,,,<'I'Z(0) ;nnsf..- rue 00' of """,,'u,,, mt" ,-"".hl.
""' ... paramo. l'eSull.pa";".",m'[ l] N" "'" of SIru<'u", Inlo ,''';:abk
Iw __ ,SOl ,"01,11 ".,,,,, '" ,ublrx, r""" light Nnd<
.001 ,n"'" ''''ue of ",ultlpher r".-. ... "d.vd ......... 11"" "hm .. h,<h", threshol<l"
.... bux'l.'\I
add" "'" ,0",;0) "I"" "h",h .. od<Icd to bv Ihrahold "",<HI< fac'Of"-..!anl
dc,-,,,,,,,,,
",rcale "m<lto be "!'Ph .... ..,an 10 .... Nnd,"i J,,,,,,,,",
'"
k ...... ,) ."gtlI n.(l Ol/runj ." \doh of ....... '" 101. IlFh of);cmel il runc,,,,,, of'" .. '
k ..... ls4e-[ IOI ):;...,.I.' .. &thl .""",It ... "'" on""""
for ,-(I,kand) ""gth. I .ri .. do MJI.
",ruo. ,,''''em of I. '" m.,eh n>e'"", of '".at<
odf'"
n ... >o'-oljirruo&e ..... I. 1 DI / ....... / odae .....,)
'''PI''1 fi", fil .... "Ii",h ., ""'"....,""' .. ) fill..- -
",reato kemel to bo: oppl'ro ocrooo """" I ... bands
kernel, ;"",, I. ' ' I .),<mol .. rdlh " I. );<mol ""'lI'h " .ll
kemel! I0j- '! .""" .. 1 ,01 ... of'."",1 " 1"'" ,.1 ... "Noh eq .. r. -",m of.n 1 ... "h,n
....... 1
225
f2 = convol(fl,kernel,/center,/edge_zero) ;apply second filter (high pass) to output of 1st
;filter
minf2 - min(f2,/nan)
f2=f2-minf2 subtract min negative value to get all + values in array
max2=max(f2,/nan)
f2=f2*( /maxf2) scale values in f2 array to be between 0 and 255
f3=f2 ;create f3 array which will receive values which will be subtracted from original
;image
f2mean=mean(f2,/nan)
2stdv=stddev(f2,/nan)
for i=01 ,columns-l do begin ;for loops classify O according to 2 mean BVs and Stan.
Dev.
for j=0L,rows-l do begin
if f2[i,j] GT f2mean+f2stdv*factor then begin ;BV outside mean and factor*st.dev?
B[i,j]=bv_threshold + adder ;add threshold plus extra value
endif else if 2[ij] LE (f2mean+f2stdv) AND f2[i,j] GE (f2mean-f2stdv*factor) then
begin ;BV between mean and factor*st.dev.?
f3[i,j]= bvj hreshol d ;add threshold
endif else if 2[i,j] LT (f2mean-f2stdv*factor) then begin ;BV less than mean?
f3[i,j] = 0.0 ;add nothing
endif
endfor
endfor
f4 = image_array - 3 + 128
subtract noise image from good image to get clean image, add 128 to help keep values
;positive.
window, 2, xsize=l 000,ysize=l 000
tvscl, f4 ;view destriped image to gauge whether to iterate again or accept.
iterate_base=widget_auto_base(title-Iterate the process again?',/xbig)
list=['yes','no']
sb = widget_base(iterate_base, /row)
wt = widget_toggle(sb, uvalue='toggle', list=list, /auto,xsize=35)
save_result = auto_wid_mng(iterate_base)
if save_result.fogg/e[0] EQ 0 then iterate = y
22S
1'2 - sond nit.,. ("'iIh p.aaJ 10 oo'J>II' of 101
.rol'<I"
minf2 - ml.(f2Jnan)
f2- f2mmf2 ._, min 1qI'l"" , .. II>< 10 F' an Hluco In ..... Y
muf2 ...... (f2Jnan)
f2- f2 ' {Z"6Irna:<f2) ,""" ... , ... ," 1'2 amy 10 "" "..".." 0 ..-.J lSS
0 - 12 ,nn'e 13 ...... y ... nlO" .... ' " =<1, ... I,," ... hlo" .. ,11 be ....,.....,11 f""" ""111'"
,-
12mcan- ..... (12Jnm)
12$ld .... ,dd .. {12/1W11
for i.,(" .colwnns- I do lM-K'o .ro. kIops olui!ify 13 aoronlmJ '" r. = B". ..-.J Stall.
, .. j oo(l l .ro-o .... , do ilqi
d'f .,,,, If l2[iJJ L[ (12m<an+12$ldv) A.. .. D G[ (12mcan12$ld,' f .. lOI) Ibo.
bord BV """'om mean and f.."",... ... oJe-?
D[i,i J- b,_'hrahoki
dif .Ii. " l2[i,ij l.T (I2moan l'2otdv' r"'''''J ,b'.lM-KI H\, .... ""'" ",.,..,'
l:I[i,i) - U.O ,Idolnollu"s
dl'
.. dfo.
,adro'
f4 - i"""'_ .... Y_I:I+
",ubnot no..., lmag< fiom ,m'lI< 10 g<I .Io." Im>go.1dol118 '0 IIolp \ .1_
4">JO
t
" ,
" I.dow . l .",i>.e- I ooo.)'Oi_l 00II
" ... f4 _nptd ' ..... 10 pus< .. .."I\cr '0 Il<rOIe "i',n Q{ ""'cpI
b .. ,i,le-"lltrlt< lbe IX"''' 1IPi .,. hbig)
li"; "ya' ."no'J
.., _ ... t._baoo. froy,.)
" 1- 'OU' .... ",'. , ..... ""'"'"". li5l- li5l. ' .. IO ... i .... ' ''I
.. .. kI_m.r( il<rOl<_bue)
EQ 0 ,h il ..... - Y
226
if save_resulUogg7e[0] EQ 1 then iterate = 'n'
;save_result.toggle[0] = 0 ....yes
;save_result.toggle[0] = 1 ....no
if iterate EQ y then begin
adjust_base=widget_autoJbase(title='Adjust BV to subtract?',/xbig)
list=['yes','no']
sb = widget_base(adjust_base, /row)
wt = widget_toggle(sb, uvalue='toggle', list=list, /auto,xsize=35)
adjust_result = auto_wid_mng(adjust_base)
if adjustj"esult.fogg7e[ ] EQ then adjustment - 'y'
if adjust_result.togg/e[ ] EQ then adjustment = 'n'
;adjust_result.toggle[0] = 0 ....yes
;adjust_result.toggle[0] = 1 ....no
image_array=f4 ;if image still needs more destiping, set newly created partially destriped
;image equal to original image and run process again
if adjustment EQ 'y' then begin
thresholds=widget_auto_base(title='Edit Parameters',/xbig)
list=['BV to subtract from light stripes','Scale factor for St.Dev. of BV','Value added to
BV outside St.Dev.','Mean of noise','St.Dev. of noise']
val s=[b v_threshold, factor, adder, f2mean,f2stdv]
output=widget_edit(thresholds,uvalue='thresholds',/auto,prompt='Enter new
values',dt=4,fleld=2,list=list,vals=vals)
thresholds_result=auto_wid_mng(thresholds)
bv_threshold=thresholds_result.^re5/i6>/J5[0] ;place new parameters into variables
factotthresho\ds_resu\tthresholds[\ ]
adder=thresholds_resulU/zras/2o/ds[ ]
endif
endif
endwhile ;end of feedback loop
map_info=envi_get_map_info(fid=rfid)
;get map projection and geolocation info from original file to use in header of output files
inherit = envi_set_inheritance(rfid,dims, /full)
;get additional header info from original file to use in header of output files
Ir .. " . . ...... IUO!l!'IO) [Q I , i'....,. -...
,sa,. """"'OSikIOJ '0 " yeS
,"" ..,..It_touIeI0j ' 1 __ 110
"'j" .. ... ,u'''. b.OC'(li" .... AdJ\lIIIIV J<biaJ
lioI-('ya"""'l
ob .. .. .. odj U'_' ",,",,'J
.. , - "ldl<UouIsb. .''''ue-'loJIIc', list-lill.
odj .... """II _ ""'0 . .. 1d. mDr{odj .... ) .... )
If odj"'U., .. IIJegg't[O) Q 0 til odj....".", - Y
If odj .. sUaoll,roal<\Oj EQ I t b odj..uncrn - ....
011)"" n:su1t ."'UkIOj-- 0 _ -l""
' ... , .... ...."" '''tlII1.{1I1 I ....
,,.
irna&<. arTlI)""f4 "r,m.", 1,,11 ...,.,.;. """" (\aI,p'''Io >eO n<>\ Iy <Iftlod fWU.lly deslnpal
"m"ll< "loa!,,, o<>d run phJSS.pn
Ih dj .. Im<tl' EQ Y '."boa"
P ......... jxbiil
li"",\'BV 1O...tKrxI ""'" l'aN ...,.,..','Scale: r..,,,,, Ibo- S',[)ev. or BV,'Vol"" _ 10
BV __ S'.o.:.- '.'M..., of no"". 'St.Dev . .. r.......,'
valP{b'",
ou'p .. '_Id .... !iI(_Ids. ..... ' ..... 'thresIIoId.'J ... ""p"""pI""EnIer .......
,111 ..... .<1<--'. field_ ! ,li". list. ".1 .... 111.'
thresholds _ rauh_ .. to _ .. Id _ mDr( Ilunhokb)
b. .ploc< I><" panmeI<n ,nt<> ,ariableo
fO<1oo-1tt!n/>olds _ I )
IN!> _in _ .'1..tt1_ "'. P J nfo( fid-rlid)
.... <Mp 1""')00""" and looloc.""n Info from ""SInai m .. '" .... In h<adocr of ou'pu, fit.:.
inIIcri, - ... ,1_ .. ,_ioktrl' trfid,dim.,lfull)
.,a odd,,,,,,,") hooJer 'nfo from onl!"'"l fik: "'''''' '" I><atkt of ou'pu, fit.:.
227
;write fl... .result of first filter which should have scanline means
envi_write_envi_file, fl,out_name=filename + '_fr,offset= ,nb= ,nl=rows,$
ns=columns,data_type=4 ,/no_realize,bnames=['scanline_means'] ,inherit=inherit,$
map_info=map_info
;write f2....result of second filter, should have noise and artifacts, no good data from
;original file
envi_write_envi_file, f2,out_name=filename + '_f2',offset= ,nb= ,nl=rows,$
ns=columns,data_type=i,/no_realize,bnames=['noise
,
],inherit=inherit,map_info=ma^
o
;write f3 will contain values which will be subtracted from original file to eliminate
; scanline ;bands
envi_write_envi_f!le, f3,out_name=filename + '_f3',offset=0,nb=l,nl=rows,$
ns=columns,data_type= 4 ,/no_realize,bnames=['subtracted_values'] ,inherit=inherit,$
map_info=map_info
;write f4....destriped image
envi_write_envi_file, f4,out_name=filename + '_destriped',offset= ,nb^ ,nl=rows,$
ns=colurims,dataJ;ype=4,/noj-ealize,bnames=[
,
pca_destriped
,
],inherit=iru^
map_info=map_info
print, 'PROGRAM FINISHED'
finished=widget_auto_base(title-Program Complete! !',/xbig)
done=widget_string(finished,/auto_manage,uvalue='complete',prompt='Successfully
destriped image',default='PROGRAM COMPLETE',xsize=50)
result=auto_wid_mng(finished)
close,! 1
END
n .,.,..1, of fi ... fih.".,,,,<h.,.,.,,,, ha, .. S<aIII" ... meano
t 't ,,-nit _ '1_ n k , n "",,,_ namc-fitcnam.: + '_ n' ,oI1kt-o.nb-1 .nl-rowlS
,..,..",1 .............. _'ype-lJrto _ rali ... bnatnrp('O<ml"' __ 1.inboritoinberit$
""II_tnr_Jnr.
, .. 'nl. t:! '""" of 0<C0nd filt .... "-... /Ia,-. ""' .. .,... on,f.,($. "" aood,bl. r"""
:on" .... m
.. ,1_ .. rI,._ ' _OI., f2.ou'_twne"fil<rwne + '_ IT .ol1kto(l.nb- I,nJ.", ... ..s
m
no-rolllDlllt,dat.o_,ype-I./m_rcalIU.bnamcs"\'no,.cJ.inhcrit..w..ril,rn2p_inr"""",,_ inr
"
.... nl. f3 .. ,II ron!> .. " ", ..... ho<h " ,II ... oubtDcll from onlP .... nI. '" .I ,m,""'.
:0<2111" ... ;_
1_ .. -rl,o_ ,'t m . f3 ...... _name-fi\ename + '_
no-rohunns.d.a .. _ t)'pe-Voo _ ..... i ... bnam..-( .. btr>< .... _ ".,u .. 1.inheri'-inh<rit.S
mop)"f_).f"
... nl< .dosInpro ''''"lI''
.... e ,,'rU<_ ,,_m ... + " "''''r-'' .<>If""' -<l ....... , .nl'""',,
...-ro1 .............. _, yp-.lJno _ rnI4<.bnam..-('pea _
nup _ info-rn.;Unfo
'PROORAM FlI'ISUED'
r",,>hcd_ _ _ b.W'( title-1'. "" am Compl<t.,,' "" bi il
done-.. klJt' _"'i .r(finisllodj."IO_II'IaI'>a&< , al ..... oompk1c',prompt-'S""" ... folly
dosInp<d ,,,,......d<fiuIt-'PROGRA.1.t COMPLTE',,"ize-<o)
resu_ .,o_ .. id_mnd fuUohed)
APPENDIX H
FLOW_LINES.PRO
PRO Fl owLi nes, event
;This program draws flow lines on a glacier to test the directional accuracy of a velocity
;field.
;The cursor is used, RIGHT click, to choose seed points which are traced along the
;velocity field
;and their course is plotted on an image of the glacier.
;Any number of flow lines can be plotted...
glacier_image_path=envi_pickfile(title='Find glacier image (jpeg2000
format)',filter='*.jp2')
glacier_image=read_image(glacier_image_path)
5
5
x_disp_path=envi_pickfile(title-Find interpolated x velocity in RASTERS folder (tif
format)',filter='*.tif)
x_velocity = read_tiff(x_disp_path)
5
rasters_j3osition=strpos(x_disp_path,'rasters') ;find position of
;'rasters\interpolated_x_displacement.tif so it can be removed in next command
filename=strmid(x_disp_path, i ,rasters_position) ;remove
;'rasters\interpolated x_dislacement.tif ending from filename
yvel oci t y = read_tiff(filename+'\rasters\interpolated_y_velocity.tif)
?
n
total_displacement =
read_image(filename+'\rasters\interpolated_velocity_magnitude.tif)
APPENDIX l!
.Th" JH"I'it"'" d,.,,, no,, \,,,.,. "" gboo,er '0 ' ... tilt d,rcc".,...1 of.
. f'old
.The: <uno< .. .....J. RIGHT <lI<k. "' <I>0000 Iftd PO'''''' "'luch "'" tro<ed ....
. '<loc"r ro.k!
.1Ind ,ho,,,, ..... ,,,, It piQued "" an ''''"< of 11", ,boo,cr,
"'nr numb<"r ofllo" lI",,an ho ploned_
...................... , ............ ................................... ..
gloc;er _imas< ..J",,,.,!pk tille-'find Ii""'" ;"'"< (JprslOOO
....
glri .. .. d .. _imal< j>Oth)
' _disp j>O ....... ' JlkUlllille-"Fino:\ ;nlOfllOlat\ . v<Io<:II1 in IlASTERS rokk< (tif
fonnaly.filter-"" .lil")
_velocity ",ad _ tliT(, _ disp JIOthl
rul ... ption .. , 1"fIO"(' _ disp JI>IlI. ........ ") .find polIt"'" or
, ......... ,"''''''''I''ed , d,,,,I""""""'t " f 110 "'on be "","""ed '" ... " """'nWld
r, I<name-otrmld( . _ disp J"Ih. J'O'Iilion) .,..."." .
,h ..... m'apoloted , di>iOmrn""r rnci,n m.... folrnamc:
y _ "oloci'y r.ad _ ' iiT( fi1<nam<->'Ins,,,,,,,,,crp>la,ed J ,doclty.l1r)
toUl_displOmrnl .
ad_I"'.g fi' .. ...,... ....... m\inoerpo ... ed_ ,.10<:"1 __ "ode.u!,)
229
j
total_displacement=reverse(total_displacement,2) ;reverse to display properly
x_displacement=float(x_velocity)
;convert byte to float...for some reason x,y velocity rasters open in byte format
y_displacement=float(y_velocity)
x_displacement=reverse(x_displacement,2) ;reverse to orient correctly
y_displacement=reverse(y_displacement, 2)
how_big=size(x_displacement) ;get size of displacement array
columns=how_big[ 1 ]
rows=how_big[2 ]
coords=intarr(2) ;create array to hold x,y coordinates of cursor-selected seed points
data=fltarr( ,columns,rows)
;create data array which will hold x and y displacement values for particletrace routine
data[0,*,*]=x_displacement ;put x displacements into data array
data[ I ,*,*]=y_displacement ;put y displacements into data array
device,decomposed=
loadct,0 ;load black and white color table
window, 4,xsize=columns,ysize=rows ;create window to display glacier image
tvscl,glacier_image
window, ,xsize=columns,ysize=rows
;create window of proper size to display total displacement array
tv,total_displacement ;display total displacement array
flag=0 ;set flag for the WHILE loop
while (flag EQ II) do begin ;WHILE loop to choose seed points and plot flow lines.
wset,2 ;activate image with velocity magnitude to pick seed point
cursor,x,y,/device,/down ;get seed point with RIGHT mouse click
coords[(),0]=x ;put x,y coordinates of seed point into array
coords[ , ]=y
seeds=[coords[ , ],coords[ 1,0]] ;array of seed points necessary for particle tracing
procedure
loadct, 13 ;load rainbow color table
"''''''"t1 bY'<' to lloal. '.y ..... on opm ,n bY'<' rom\&!
... t(y_ vclo<ily)
, _diopl""rnlan' ", .m ..... 10 on",,' ,,",wly
y 3isplac.,. .... '. ,., r>r(y _ dlsplaccmett,.) )
how_big-olu(. _displKClTlCDt} ;"" oi of d...,laca"a" ttny
""1= ..... 1>0 ... _billl l ]
"",,-.-how _billl l ]
""'''''$'''"to''11) ;Creal. """Y I" hold x.y """nIL .. , .. of .....,.ocloc'oo ..,..j pom,"
da\a. n'.''11.oohunnuo .... )
;crn/C d .... om)' .. h"h ",II hold oM y d'splMmt ... , , . 1 ... fOr pattldo ..... , nl<IIi ...
<bta[o,' .]-x_displa=non' '1"'" dlsplamrn .. 10'0 doto .... y
da,aI. 1.' .'] y-displ"".."..., ,pm y .. '"to daIa ..... )
d,,'kr,docompooedoO
... d<t.n ,load on..! ""h,1< """"" 1.>1>1
.. ,."' ..... ,odow '0 d,spl.y llxl<f lmoll<
"""'!.glacier image
I.do" .1,xliU"l:OIwnns.ysizeorov.'.
'",*"" ofp<op<r SIf, 10 d'spl ,.,..1 d,sp\acern<ftl ..... Y
,,".,oll.l_displMmt ... , ;dlspl.y '01,1 d,sp'-:<mrn' ..... y
"ag-(l ."'" n'lI f.,..,he WHILE loop
" 'bll< (n"ll F- Q 0) do 11<11" . WHILE loop 10 .bo<>o< S<ftI potnts ond ploo no.. hnos.
"' .... ) ".,,,,,..., 'mas< .. Ltlt ",Io<n)' mapitud< '0 P'" S<ftI PO'"'
,uroo, ,x.y; de>'i,,,,; doII .. JI<I ""'" I""n, ""It RI(;IIT _ .h.l
coor<b(O, O]-x ;put ' .y ..,.,ru,rwcs of""'" po,nt ,"'0 """Y
oooods/ l. "]-Y
Je<ili-{ooonloI. O,O).ooordsI 1,0]] , ..... yof 00<\l PO'"'' _<OAr)' (or I'l'l"k """'"'
,""""""
230
PARTICLE JTRACE,data,seeds,verts,conn,max_iterations=500
;particle tracing procedure
x_points=verts[ ,*] ;place x vertices of flow line into x array for plotting
y_points=verts[ I ,*] ;place y vertices of flow line into y array for plotting
wset,4 ;activate window with glacier image
plots, x_points, y_points ,color=l50,thick=2,linestyle= ,/device
;plot flow line using x,y vertices
choose = widget_auto_base(title-Plot another streamline?')
list = ['Yes', 'No']
we = widget__pmenu(choose, list=list, uvalue='choose', /auto,prompt='Choose another
point?')
chooseresult = auto_wid_mng(choose)
;chooseresult.choose = 0....yes
;chooseresult.choose = l....no
choice=chooseresult.c/zoo5e initialize variable
if choice EQ 0 then flag = 0 ;yes, choose another point
if choice EQ 1 then flag =1 ;no, end while loop, finished choosing seeds
endwhile
annotate, window=4 ;annotate glacier image with flow lines
save = widget_auto_base(title='Save display?')
list = ['Yes', 'No']
we = widgetjpmenu(save, list=list, uvalue-save' , /auto,prompt- Save this image?')
saveresult = auto_wid_mng(save)
;saveresult.save = 0....yes
;saveresult.save = l....no
saved=saveresult.5flve initialize variable
if saved EQ 0 then begin
streamlines = tvrd(true=l) ;read tv dislay
streamlines=reverse(streamlines,3) ;reverse to display properly when opened in ENVI
write_tiff, filename + '\rasters\streamlines.tif ,streamlines,orientation= ,/float
endif else if saved EQ I then begin
endif
finished=widget_auto_base(title-Program Complete!!',/xbig)
' ARTLCLE_ dolo ' .... U 'cnt,C<IIU'I,RWI_ileril' iono-<OO
,pani<: Ie tnoc, OJ proccdur<
x""poin"-"<I"III(Q.O] ;place. "<I"Ii< .. or no.. h"" ,n"" ..ray fOr pl""'n,
y..,POin..-."a't$( l . ] .place y ,'11< .. of no.. I,,,,, ,"'0 y ..... y for ploo"",
plo .... ..,.POin,,, Y""poiruJ .>kN- 1
:plolllo,,' II"" .""11 '.1 .. ",ees
.hooK - .. 'ldt<1_".,o_b".ojti,I ... 'l'Ioo ....,obcr
Ii" ,, (', ..... ')<;01
,,'e - " 'd' .. ..JI ...... (choooe. li"Eli ... u ... ono!IIet
,.,..,.,
01""' ....... 11 " ".'o_"Id_m"iI<hoooe)
;<"'-""'sull,ehoooe O._)"OS
;<1""'''' ..... 1',<1>000<: 1" no
If cho'" EQ U I " flag " 0 .)n <hoooe """' ..... fJO,m
If choit:. t:Q I I tbJ - 1 :00. rnd .. hik kIo!>. fimshed .""""""11 .......
.. ,'. - "'ldl"'_'.'O_ bOH(ti, le-'Savo display"')
lil1 - (' Y .... '1\;0' ]
we - .. Id, .. ..JI_".( .. ,' . liSl- li., . ,'.I ............. iI.lO.prompo-s.'. tIIi. ,.--n
,,"auul, - '.'0_ wld_mnil .. ' -e)
'''I<",""lua,. 0 .. ) ....
... ,'...,..lua,. I _no
Ir .. , cd t:Q 0 I><I'"
'ltUmlinos " n 'rd(we- I ) ...,..t" d .. l.y
I) ,r<' .... 10 d"l'l.y ",,,,,,,,Iy ,,""" ,n E'>:VI
_ rl1<_dff.filerwne + -...._li __
.. dirt ... If .. ,"Cd EQ 1
dif
231
end
done^widget_string(finished,/auto_manage,uvalue='complete',prompt=Tlow lines
fmished
,
,default='PROGRAMCOMPLETE
,
,xsize=50)
result=auto_wid_mng(fmished)
print, ' PROGRAM FINISHED'
...,.,.,....'ldt<U 1 rI. K( finisI>e<IJ&IIlO _1NI>I&" "al .... O>mplol .. .prompl-1'\Qoo" lineo
fUlUbod.d. faul ... 'PROGRAM COMPI.TE".xliz.-J)
~ I t " 10_" kI_ mol( finishod)
prl PROGRA.\I F1SISHED'
'"
REFERENCES
Adalgeirsdottir, G., Echelmeyer, K.A., & Harrison, W.D. (1998). Elevation and volume
changes on the Harding Icefield, Alaska. Journal of Glaciology, 44 (148),
570-582.
Anuta, P.E. (1970). Spatial registration of multispectral and multitemporal digital
imagery using fast Fourier Transform techniques, IEEE Transactions on
Geoscience Electronics; GE-8 (4), 353-368.
Arendt, A.A., Echelmeyer, K.A., Harrison, W.D., Lingle, C.S., & Valentine, V.B. (2002).
Rapid wastage of Alaska glaciers and their contribution to rising sea-level.
Science, 297 (5580), 382-386.
Arendt, A.A., Luthcke, S.B., Larsen, C.F., Abdalati, W., Krabill, W.B., & Beedle, MJ .
(2008). Validation of high-resolution GRACE mascon estimates of glacier mass
changes in the St Elias Mountain, Alaska, USA, using aircraft laser altimetry.
Journal of Glaciology, 54 (188), 778-785.
Ayoub, F., Leprince, S., & Keene, L. (2009). User' s guide to COSI-Corr. California
Institute of Technology Tectonics Observatory available at: http://www.
tectonics.caltech.edu/slip history/spotcoseis/index.html.
Bernstein, R. (1983). Image geometry and rectification. In R. N. Colwell (Ed.), Manual
of Remote Sensing (pp. 881-884). Falls Church, VA: American Society of
Photogrammetry.
Berthier, E., Raup, B., & Scambos, T. (2003). New velocity map and mass-balance
estimate of Mertz Glacier, East Antartica, derived from Landsat sequential
imagery. Journal of Glaciology, 49 (167), 503-511.
Bindschadler, R.A., & Scambos, T. A. (1991). Satellite-image-derived velocity
field of an Antarctic Ice Stream. Science, 252 (5003), 242-246.
Bindschadler, R.A., Fahnstock, M.A., Skvarca, P., & Scambos, T.A. (1994). Surface-
velocity field of the northern Larsen Ice Shelf, Antarctica. Annals of Glaciology,
20,319-326.
REFERENCES
Adalgeirsd6ttir, G., Echelmeyer, K.A., & Harrison, W.D. (1998). Elevation and volume
changes on the Harding Icefield, Alaska. Journal of Glaciology, 44 (148),
570-582.
Anuta, P.E. (1970). Spatial registration of multispectral and multitemporal digital
imagery using fast Fourier Transform techniques, IEEE Transactions on
Geoscience Electronics, GE-8 (4),353-368.
Arendt, AA, Echelmeyer, K.A., Harrison, W.D., Lingle, C.S., & Valentine, V.R (2002).
Rapid wastage of Alaska glaciers and their contribution to rising sea-level.
Science, 297 (5580), 382-386.
Arendt, AA, Luthcke, S.R, Larsen, C.F., Abdalati, W., Krabill, W.R, & Beedle, M.J.
(2008). Validation of high-resolution GRACE mas con estimates of glacier mass
changes in the St Elias Mountain, Alaska, USA, using aircraft laser altimetry.
Journal of Glaciology, 54 (188), 778-785.
Ayoub, F., Leprince, S., & Keene, L. (2009). User's guide to COSI-Corr. California
Institute of Technology Tectonics Observatory available at: http://www.
tectonics.caltech.edulslip history/spot_coseis/index.html.
Bernstein, R. (1983). Image geometry and rectification. In R N. Colwell (Ed.), Manual
of Remote Sensing (pp. 881-884). Falls Church, VA: American Society of
Photogrammetry.
Berthier, E., Raup, R, & Scambos, T. (2003). New velocity map and mass-balance
estimate of Mertz Glacier, East Antartica, derived from Landsat sequential
imagery. Journal of Glaciology, 49 (167),503-511.
Bindschadler, RA, & Scambos, T. A (1991). Satellite-image-derived velocity
field of an Antarctic Ice Stream. Science, 252 (5003), 242-246.
Bindschadler, RA, Fahnstock, M.A., Skvarca, P., & Scambos, T.A (1994). Surface-
velocity field of the northern Larsen Ice Shelf, Antarctica. Annals of Glaciology,
20, 319-326.
233
Bindschadler, R., Vornberger, P., Blankenship, D., Scambos, T., & Jacobel, R. (1996).
Surface velocity and mass balance of Ice Streams D and E, West Antarctica.
Journal of Glaciology, 42 (142), 461-475.
Bruckner, M.Z., Goetz, S., Ham, N., Strasser, J., & Lawson, D. (2005). Ice velocities near
the terminus of the Matanuska Glacier, Alaska, during an unseasonably
warm melt season. Geological Society of America, 39
th
Annual Meeting (May
2005)37(5), 83.
California Institute of Technology, Caltech Tectonics Observatory available at:
http://www.tectonics.caltech.edu/slip history/spotcoseis/index.html.
Copland, L., Sharp, M., & Dowdeswell, J. (2003). The distribution and flow
characteristics of surge-type glaciers in the Canadian High Arctic. Annals of
Glaciology, 36 (1), 73-81.
Copland, L., Pope, S., Bishop, M., Shroder, J., Clendon, P., Bush, A., Kamp, U.,
Seong, Y. B., & Owen, L. (2009). Glacier velocities across the central
Karakoram, Annals of Glaciology, 50 (52), 1-9.
Crippen, R. E. (1989). A simple filtering routine for the cosmetic removal of scan-line
noise from Landsat TM P-tape imagery. Photogrammetric Engineering and
Remote Sensing, 55, 327-331.
Dowdeswell, J.A., & Benham, T.J. (2003). A surge of Perseibreen, Svalbard, examined
using aerial photography and ASTER high resolution satellite imagery. Polar
Research, 22, 373-383.
Fatland, D.R., Lingle, C.S., & Truffer, M. (2003). A surface motion survey of Black
Rapids Glacier, Alaska, U.S.A. Annals of Glaciology, 36, 29-36.
Forstner, W. (1982). On the geometric precision of digital correlation. In Proceedings
I.S.P.R.S. Commission III Symposium, Helsinki, 24 (3), 176-189.
Fudge, T.J., Harper, J.T., Humphrey, N.F., & Pfeffer, W.T. (2008). Diurnal fluctuations
in surface water input, subglacial water pressure, stream discharge, and glacier
surface velocity, Bench Glacier, Alaska. Journal of Glaciology, 54 (185),
297-306.
Global Land Cover Facility available at: www.landcover.org.
Gray, A. L., Short, N., Mattar, K. E., & Jezek, K. C. (2001). Velocities and flux of the
Filchner Ice Shelf and its tributaries determined from speckle tracking
interferometry. Canadian Journal of Remote Sensing, 27 (3), 193-206
233
Bindschadler, R, Vornberger, P., Blankenship, D., Scambos, T., & Jacobel, R (1996).
Surface velocity and mass balance of Ice Streams D and E, West Antarctica.
Journal o/Glaciology, 42 (142), 461-475.
Bruckner, M.Z., Goetz, S., Ham, N., Strasser, J., & Lawson, D. (2005). Ice velocities near
the terminus of the Matanuska Glacier, Alaska, during an unseasonably
warm melt season. Geological Society 0/ America, 39
th
Annual Meeting (May
2005) 37 (5), 83.
California Institute of Technology, Caltech Tectonics Observatory available at:
http://www . tectonics.caltech. edu/ slip hi story/ spot _ coseis/index.html.
Copland, L., Sharp, M., & Dowdeswell, J. (2003). The distribution and flow
characteristics of surge-type glaciers in the Canadian High Arctic. Annals 0/
Glaciology, 36 (1), 73-81.
Copland, L., Pope, S., Bishop, M., Shroder, J., Clendon, P., Bush, A., Kamp, u.,
Seong, Y. B., & Owen, L. (2009). Glacier velocities across the central
Karakoram, Annals o/Glaciology, 50 (52), 1-9.
Crippen, R E. (1989). A simple filtering routine for the cosmetic removal of scan-line
noise from Landsat TM P-tape imagery. Photogrammetric Engineering and
Remote Sensing, 55, 327-331.
Dowdeswell, J.A., & Benham, T.J. (2003). A surge ofPerseibreen, Svalbard, examined
using aerial photography and ASTER high resolution satellite imagery. Polar
Research, 22, 373-383.
Fatland, D.R, Lingle, C.S., & Truffer, M. (2003). A surface motion survey of Black
Rapids Glacier, Alaska, U.S.A. Annals o/Glaciology, 36, 29-36.
Forstner, W. (1982). On the geometric precision of digital correlation. In Proceedings
ISP.R.S Commission III Symposium, Helsinki, 24 (3), 176-189.
Fudge, TJ., Harper, J.T., Humphrey, N.F., & Pfeffer, W.T. (2008). Diurnal fluctuations
in surface water input, subglacial water pressure, stream discharge, and glacier
surface velocity, Bench Glacier, Alaska. Journal o/Glaciology, 54 (185),
297-306.
Global Land Cover Facility available at: www.landcover.org.
Gray, A. L., Short, N., Mattar, K. E., & Jezek, K. C. (2001). Velocities and flux of the
Filchner Ice Shelf and its tributaries determined from speckle tracking
interferometry. Canadian Journal o/Remote Sensing, 27 (3), 193-206
234
Hall, D.K., Giffen, B.A., & Chien, J. (2005). Changes in the Harding Icefield and the
Grewingk-Yalik Glacier Complex, Proceedings of the 62
nd
Eastern Snow
Conference, Canadian Geophysical Union, Waterloo, Ont., Canada.
Harper, J.T., Humphrey, N.F., & Greenwood, M.C. (2002). Basal conditions and glacier
motion during the winter/spring transition, Worthington Glacier, Alaska, U.S.A.
Journal of Glaciology, 48 (160), 42-50.
Howat, I., Joughin, I., Fahnstock, M., Smith, B., & Scambos, T. (2008). Synchronous
retreat and acceleration of southeast Greenland outlet glaciers 2000-06: ice
dynamics and coupling to climate. Journal of Glaciology, 54 (187), 646-660.
Hunter, L.E., Powell, R.D., & Lawson, D.E. (1996). Flux of debris transported by ice at
three Alaskan tidewater glaciers. Journal of Glaciology, 42 (140), 123-135.
Jackson, M., Brown, I., & Elvehoy, H. (2005). Velocity measurements on Engabreen,
Norway, Annals of Glaciology, 42, 29-34.
Joughin, I. (2002). Ice-sheet velocity mapping: a combined interferometric and speckle-
tracking approach. Annals of Glaciology, 34 (1), 195-201.
Joughin, I., Abdalati, W., & Fahnestock, M. (2004). Large fluctuations in speed on
Greenland's Jakobshavn Isbrae glacier. Nature, 432, 608-610.
Kaab, A. (2002). Monitoring high-mountain terrain deformation from repeated air- and
spaceborne optical data; examples using digital aerial imagery and ASTER data.
Photogrammetry and Remote Sensing, 57, 39-52.
Kaab, A. (2005). Combination of SRTM3 and repeat ASTER data for deriving alpine
glacier flow velocities in the Bhutan Himalaya. Remote Sensing of Environment,
94, 463-474.
Kaab, A., Lefauconnier, B., & Melvold, K. (2005). Flow field of Kronebreen, Svalbard,
using repeated Landsat 7 and ASTER data. Annals of Glaciology, 42, 7-13.
Kaab, A., & Vollmer, M. (2000). Surface geometry, thickness changes and flow fields
on creeping mountain permafrost: Automatic extraction by digital image
analysis. Permafrost and Periglacial Processes, 11 (4), 315-326.
Konig, M., Winther, J., & Isaksson, E. (2001). Measuring snow and glacier ice properties
from satellite. Reviews of Geophysics, 39 (1), 1-27.
Krimmel, R.M., & Vaughn, B.H. (1987). Columbia Glacier, Alaska: Changes in velocity
1977-1986. Journal of Geophysical Research, 92 (B9), 8961-8968.
Hall, D.K., Giffen, B.A., & Chien, J. (2005). Changes in the Harding Icefield and the
Grewingk-Yalik Glacier Complex, Proceedings of the 62
nd
Eastern Snow
Conference, Canadian Geophysical Union, Waterloo, Ont., Canada.
234
Harper, J.T., Humphrey, N.F., & Greenwood, M.C. (2002). Basal conditions and glacier
motion during the winter/spring transition, Worthington Glacier, Alaska, U.S.A.
Journal of Glaciology, 48 (160),42-50.
Howat, 1., Joughin, 1., Fahnstock, M., Smith, B., & Scambos, T. (2008). Synchronous
retreat and acceleration of southeast Greenland outlet glaciers 2000-06: ice
dynamics and coupling to climate. Journal of Glaciology, 54 (187), 646-660.
Hunter, L.E., Powell, R.D., & Lawson, D.E. (1996). Flux of debris transported by ice at
three Alaskan tidewater glaciers. Journal of Glaciology, 42 (140), 123-135.
Jackson, M., Brown, 1., & Elveh0y, H. (2005). Velocity measurements on Engabreen,
Norway, Annals of Glaciology, 42,29-34.
Joughin,1. (2002). Ice-sheet velocity mapping: a combined interferometric and speckle-
tracking approach. Annals of Glaciology, 34 (1), 195-201.
Joughin, 1., Abdalati, W., & Fahnestock, M. (2004). Large fluctuations in speed on
Greenland's Jakobshavn Isbrae glacier. Nature, 432, 608-610.
KiUib, A. (2002). Monitoring high-mountain terrain deformation from repeated air- and
spaceborne optical data; examples using digital aerial imagery and ASTER data.
Photogrammetry and Remote Sensing, 57, 39-52.
KiUib, A. (2005). Combination ofSRTM3 and repeat ASTER data for deriving alpine
glacier flow velocities in the Bhutan Himalaya. Remote Sensing of Environment,
94,463-474.
Kaab, A., Lefauconnier, B., & Melvold, K. (2005). Flow field of Krone breen, Svalbard,
using repeated Landsat 7 and ASTER data. Annals of Glaciology, 42, 7-13.
Kaab, A., & Vollmer, M. (2000). Surface geometry, thickness changes and flow fields
on creeping mountain permafrost: Automatic extraction by digital image
analysis. Permafrost and Periglacial Processes, 11 (4),315-326.
Konig, M., Winther, J., & Isaksson, E. (2001). Measuring snow and glacier ice properties
from satellite. Reviews of Geophysics, 39 (1), 1-27.
Krimmel, R.M., & Vaughn, B.H. (1987). Columbia Glacier, Alaska: Changes in velocity
1977-1986. Journal of Geophysical Research, 92 (B9), 8961-8968.
235
Larsen, C.F., Motyka, RJ. , Arendt, A.A., Echelmeyer, K.A., & Geissler, P.E. (2007).
Glacier changes in southeast Alaska and northwest British Columbia and
contributions to sea level rise. Journal of Geophysical Research F: Earth Surface,
112(1).
Leprince, S., Barbot, S., Ayoub, F., & Avouac, J.P. (2007). Automatic and precise ortho-
rectification, coregistration, and subpixel correlation of satellite images,
application to ground deformation measurements. IEEE Transactions on
Geoscience and Remote Sensing, 45 (6), 1529-1558.
Leprince, S., Ayoub, F., Klinger, Y., & Avouac, J.P. (2007). Co-registration of optically
sensed images and correlation (COSI-Corr): an operational methodology for
ground deformation measurements. IEEE International Geoscience and
Remote Sensing Symposium (IGARSS2007), Barcelona.
Li, S., Benson, C, Gens, R., & Lingle, C. (2006). Motion patterns of glaciers in the
eastern Wrangell Mountains, Alaska, seen on ERS-1 SAR interferograms.
Eos, Transactions, American Geophysical Union, Fall 2006, 87 (52).
Lucchitta, B.K., Mullins, K.F., Allison, A.L., & Ferrigno, J.G. (1993). Antarctic glacier-
tongue velocities from Landsat images: first results. Annals of Glaciology,
77,356-366.
Luthcke, S.B., Arendt, A.A., Rowlands, D.D., McCarthy, J.J., & Larsen, C.F. (2008).
Recent glacier mass changes in the Gulf of Alaska region from GRACE mascon
solutions. Journal of Glaciology, 54 (188), 767-777.
Mayer, C, Lambrecht, A., Hagg, W., Helm, A., & Scharrer, K. (2008). Post-drainage ice
dam response at Lake Merzbacher, Inylchek glacier, Kyrgyzstan. Geografiska
Annaler, Series A: Physical Geography, 9 (1).
Meier, M.F., Dyurgerov, M.B., Rick, U.K., O' Neel, S., Pfeffer, W.T., Anderson, R.S.,
Anderson, S.P., & Glazovsky, A.F. (2007). Glaciers dominate eustatic sea-level
rise in the 21
s t
century. Science, 317 (5841), 1064-1067.
Meier, M., Lundstrom, S., Stone, D., Kamb, B., Engelhardt, H., Humphrey, N.,
Dunlap, W.W., Fahnestock., M., Krimmel, R.M., & Walters, R. (1994).
Mechanical and hydrologic basis for the rapid motion of a large tidewater
glacier 1: Observations. Journal of Geophysical Research, 99 (B8),
15219-15229.
Molnia, B. F. (2007). Late nineteenth to early twenty-first century behavior of Alaska
glaciers as indicators of changing regional climate. Global and Planetary Change,
56(1-2), 23-56.
235
Larsen, C.F., Motyka, RJ., Arendt, A.A., Echelmeyer, K.A., & Geissler, P.E. (2007).
Glacier changes in southeast Alaska and northwest British Columbia and
contributions to sea level rise. Journal of Geophysical Research F: Earth Surface,
112(1).
Leprince, S., Barbot, S., Ayoub, F., & Avouac, J.P. (2007). Automatic and precise ortho-
rectification, coregistration, and subpixel correlation of satellite images,
application to ground deformation measurements. IEEE Transactions on
Geoscience and Remote Sensing, 45 (6), 1529-1558.
Leprince, S., Ayoub, F., Klinger, Y., & A vouac, lP. (2007). Co-registration of optically
sensed images and correlation (COSI-Corr): an operational methodology for
ground deformation measurements. IEEE International Geoscience and
Remote Sensing Symposium (IGARSS2007), Barcelona.
Li, S., Benson, C., Gens, R, & Lingle, C. (2006). Motion patterns of glaciers in the
eastern Wrangell Mountains, Alaska, seen on ERS-l SAR interferograms.
Eos, Transactions, American Geophysical Union, Fall 2006, 87 (52).
Lucchitta, B.K., Mullins, K.F., Allison, A.L., & Ferrigno, J.G. (1993). Antarctic glacier-
tongue velocities from Landsat images: first results. Annals of Glaciology,
17, 356-366.
Luthcke, S.B., Arendt, A.A., Rowlands, D.D., McCarthy, J.J., & Larsen, C.F. (2008).
Recent glacier mass changes in the Gulf of Alaska region from GRACE mascon
solutions. Journal of Glaciology, 54 (188), 767-777.
Mayer, c., Lambrecht, A., Hagg, W., Helm, A., & Scharrer, K. (2008). Post-drainage ice
dam response at Lake Merzbacher, Inylchek glacier, Kyrgyzstan. Geograjiska
Annaler, Series A: Physical Geography, 9 (1).
Meier, M.F., Dyurgerov, M.B., Rick, U.K., O'Neel, S., Pfeffer, W.T., Anderson, RS.,
Anderson, S.P., & G1azovsky, A.F. (2007). Glaciers dominate eustatic sea-level
rise in the 21
st
century. Science, 317 (5841),1064-1067.
Meier, M., Lundstrom, S., Stone, D., Kamb, B., Engelhardt, H., Humphrey, N.,
Dunlap, W.W., Fahnestock., M., Krimmel, RM., & Walters, R (1994).
Mechanical and hydrologic basis for the rapid motion of a large tidewater
glacier 1: Observations. Journal of Geophysical Research, 99 (B8),
15219-15229.
Molnia, B. F. (2007). Late nineteenth to early twenty-first century behavior of Alaska
glaciers as indicators of changing regional climate. Global and Planetary Change,
56 (1-2), 23-56.
236
Motyka, R.J., O'Neel, S., Conner, C.L., & Echelmeyer, K.A. (2003). Twentieth century
thinning of Mendenhall Glacier, Alaska, and its relationship to climate,
lake calving, and glacier run-off. Global and Planetary Change, 35 (1-2),
93-112.
NASA Goddard Space Flight Center Global Change Master Directory, website last
accessed Oct. 20, 2009. Available at: http://gcmd.nasa.gov/records/GCMD_
CAMP_Himalayas_EOP-3_sfc.html.
NASA Jet Propulsion Laboratory ASTER. Available at: http://asterweb.jpl.nasa.gov/
characteristics.asp.
NASA Landsat Program. Available at: http://landsat.gsfc.nasa.gov/about/L5_td.html.
National Snow and Ice Data Center, Antarctic Glaciological Data Center. Available
at: http: //nsidc. org/data/velmap/imcorr.html.
NOAA Climate Data Online. Available at: http://www7.ncdc.noaa.gov/CDO/cdo.
Oelermans, J., & Reichert, B. K. (2000). Relating glacier mass balance to meteorological
data by using seasonal sensitivity characteristic, Journal of Glaciology, 46 (152),
1-6.
O' Neel, S., Echelmeyer, K.A., & Motyka, R.J. (2001). LeConte Glacier, Alaska, U.S.A.
Journal of Glaciology, 47 (159), 567-578.
Oreskes, N., Shrader-Frechette, K., & Belitz, K. (1994). Verification, validation, and
confirmation of numerical models in the earth sciences. Science, 263,
(5147), 641-646.
Quincey, D.J. & Glasser, N.F. (2009). Morphological and ice-dynamical changes on the
Tasman glacier, New Zealand, 1990-2007. Global and Planetary Change, 68,185-
197.
Rees, W.G., & Arnold, N.S. (2007). Mass balance and dynamics of a valley glacier
measured by high-resolution LiDAR. Polar Record, 43 (227), 311-319.
Rolstad, C, Amlien, J., Hagen, J., & Lunden, B. (1997). Visible and near-infrared digital
images for determination of ice velocities and surface elevation during a surge
on Osbornebreen, a tidewater glacier in Svalbard. Annals of Glaciology\
24, 255-261.
236
Motyka, RJ., O'Neel, S., Conner, C.L., & Echelmeyer, K.A. (2003). Twentieth century
thinning of Mendenhall Glacier, Alaska, and its relationship to climate,
lake calving, and glacier run-off. Global and Planetary Change, 35 (1-2),
93-112.
NASA Goddard Space Flight Center Global Change Master Directory, website last
accessed Oct. 20, 2009. Available at: http://gcmd.nasa.gov/records/GCMD_
CAMP _Himalayas_EOP-3_sfc.html.
NASA Jet Propulsion Laboratory ASTER. Available at: http://asterweb.jpl.nasa.gov/
characteristics. asp.
NASA Landsat Program. Available at: http://landsat.gsfc.nasa.gov/about/L5_td.html.
National Snow and Ice Data Center, Antarctic Glaciological Data Center. Available
at: http://nsidc .org! data/velmap/imcorr.html.
NOAA Climate Data Online. Available at: http://www7.ncdc.noaa.gov/CDO/cdo.
Oelermans, J., & Reichert, B. K. (2000). Relating glacier mass balance to meteorological
data by using seasonal sensitivity characteristic, Journal of Glaciology, 46 (152),
1-6.
O'Neel, S., Echelmeyer, K.A., & Motyka, R.J. (2001). LeConte Glacier, Alaska, U.S.A.
Journal of Glaciology, 47 (159),567-578.
Oreskes, N., Shrader-Frechette, K., & Belitz, K. (1994). Verification, validation, and
confirmation of numerical models in the earth sciences. Science, 263,
(5147),641-646.
Quincey, D.J. & Glasser, N.F. (2009). Morphological and ice-dynamical changes on the
Tasman glacier, New Zealand, 1990-2007. Global and Planetary Change, 68,185-
197.
Rees, W.G., & Arnold, N.S. (2007). Mass balance and dynamics of a valley glacier
measured by high-resolution LiDAR. Polar Record, 43 (227), 311-319.
Rolstad, C., Amlien, J., Hagen, J., & Lunden, B. (1997). Visible and near-infrared digital
images for determination of ice velocities and surface elevation during a surge
on Osbomebreen, a tidewater glacier in Svalbard. Annals of Glaciology>.
24,255-261.
237
Roush, J., Lingle, C.S., Guritz, R.M., Fatland, D.R., & Voronina, V.A. (2003). Surge-
front propogation and velocities during the early-1993-95 surge of Bering
Glacier, Alaska, U.S.A., from sequential SAR imagery. Annals of Glaciology,
36(1), 37-44.
Scambos, T. A., Dutkiewicz, M. J., Wilson, J. C., & Bindschadler, R. (1992). Application
of image cross-correlation to the measurement of glacier velocity using satellite
image data. Remote Sensing of Environment, 42, 177-183.
Scambos, T. A., & Bindschadler, R. (1993). Complex ice stream flow revealed by
sequential satellite imagery. Annals of Glaciology, 17, 177-182.
Scherler, D., Leprince, S., & Strecker, M. (2008). Glacier-surface velocities in alpine
terrain from optical satellite imagery - accuracy improvement and quality
assessment. Remote Sensing of Environment, 112, 3806-3819.
Scott, R. H. (1884). Nature, 30, 354.
Shekarforoush, H., Berthod, M., & Zerubia, J. (1996). Subpixel image registration by
estimating the polyphase decomposition of cross power spectrum. Proceedings
IEEE Computer Society Conference on Computer Vision and Pattern
Recognition, 18-20 June 1996. San Francisco, USA. 532-537.
Short, N. H., & Gray, A. L. (2004). Potential for RADARSAT-2 interferometry: glacier
monitoring using speckle tracking. Canandian Journal of Remote Sensing, 30,
(3), 504-509.
Steffen, K., Box, J. E., & Abdalati, W. (1996). Greenland Climate Network: GC-Net, in
S. C. Colbeck (Ed.), CRREL 96-27 Special Report on Glaciers, Ice Sheets and
Volcanoes, trib. To M. Meier, (pp. 98-103).
Strozzi, T., Luckman, A., Murray, T., Wegmuller, U., & Werner, C. L. (2002). Glacier
motion estimation using SAR offset-tracking procedures, IEEE Transactions on
Geoscience and Remote Sensing, 40 (11), 2384-2391.
Trabant, D.C., Krimmel, R.M., Echelmeyer, K.A., Zirnheld, S.L., & Elsberg, D.H.
(2003). The slow advance of a calving glacier; Hubbard Glacier, Alaska, U.S.A.
Annals of Glaciology, 36, 45-50.
USGS (2004), Shuttle Radar Topography Mission, 1 arcsecond scenes
SRTM_u01_n059wl50, SRTM_u01_n059wl51, SRTM_u01_n060wl50 and
SRTM_u01_n060_wl51, unfilled unfinished 2.0, Global Land Cover Facility,
University of Maryland, College Park, Maryland, February 2000.
U.S. Geological Survey Global Visualization Viewer. Available at: http://glovis.usgs.gov.
Roush, J., Lingle, C.S., Guritz, RM., Fatland, D.R., & Voronina, V.A. (2003). Surge-
front propogation and velocities during the early-1993-95 surge of Bering
Glacier, Alaska, U.S.A, from sequential SAR imagery. Annals of Glaciology,
36 (1),37-44.
237
Scambos, T. A, Dutkiewicz, M. J., Wilson, J. C., & Bindschadler, R (1992). Application
of image cross-correlation to the measurement of glacier velocity using satellite
image data. Remote Sensing of-Environment, 42, 177-183.
Scambos, T. A., & Bindschadler, R. (1993). Complex ice stream flow revealed by
sequential satellite imagery. Annals of Glaciology, 17, 177-182.
Scherler, D., Leprince, S., & Strecker, M. (2008). Glacier-surface velocities in alpine
terrain from optical satellite imagery - accuracy improvement and quality
assessment. Remote Sensing of Environment, 112, 3806-3819.
Scott, R. H. (1884). Nature, 30,354.
Shekarforoush, H., Berthod, M., & Zerubia, J. (1996). Subpixel image registration by
estimating the polyphase decomposition of cross power spectrum. Proceedings
IEEE Computer Society Conference on Computer Vision and Pattern
Recognition, 18-20 June 1996. San Francisco, USA 532-537.
Short, N. H., & Gray, A L. (2004). Potential for RADARSAT-2 interferometry: glacier
monitoring using speckle tracking. Canandian Journal of Remote Sensing, 30,
(3), 504-509.
Steffen, K., Box, J. E., & Abdalati, W. (1996). Greenland Climate Network: GC-Net, in
S. C. Colbeck (Ed.), CRREL 96-27 Special Report on Glaciers, Ice Sheets and
Volcanoes, trib. To M Meier. (pp. 98-103).
Strozzi, T., Luckman, A., Murray, T., Wegmuller, U., & Werner, C. L. (2002). Glacier
motion estimation using SAR offset-tracking procedures, IEEE Transactions on
Geoscience and Remote Sensing, 40 (11), 2384-2391.
Trabant, D.C., Krimmel, RM., Echelmeyer, K.A., Zirnheld, S.L., & Elsberg, D.H.
(2003). The slow advance of a calving glacier; Hubbard Glacier, Alaska, U.S.A.
Annals of Glaciology, 36, 45-50.
USGS (2004), Shuttle Radar Topography Mission, 1 arcsecond scenes
SRTM_uOl_n059wI50, SRTM_uOl_n059wI51, SRTM_uOl_n060wI50 and
SRTM_uOl_n060_wI51, unfilled unfinished 2.0, Global Land Cover Facility,
University of Maryland, College Park, Maryland, February 2000.
U.S. Geological Survey Global Visualization Viewer. Available at: http://glovis.usgs.gov.
238
VanLooy, J., Forster, R., & Ford, A. (2006). Accelerating thinning of Kenai Peninsula
glaciers, Alaska. Geophysical Research Letters, 33 (21) L21307,
doi: 10.1029/2006GL028060.
Warren, C. R. (1992). Iceberg calving and the glacioclimatic record. Progress in Physical
Geography, 16 (3), 253-282.
Whillans, I., & Tseng, Y. (1995). Automatic tracking of crevasses on satellite images.
Cold Regions Science and Technology, 23, 201-214.
Williamson, S., Sharp, M., Dowdeswell, J., & Benham, T. (2008). Iceberg calving rates
from northern Ellesmere Island ice caps, Canadian Arctic, 1999-2003. Journal of
Glaciology, 54 (186), 391-400.
Young, N. W., & Hyland, G. (2002). Velocity and strain rates derived from InSAR
analysis over the Amery Ice Shelf, East Antarctica, Annals of Glaciology, 34 (1),
228-234.
Zwally, H.J., Abdalati, W., Herring, T., Larson, K., Saba, J., & Steffen, K. (2002).
Surface melt-induced acceleration of Greenland ice-sheet flow. Science, 297
(5579), 218-222.
218
VanLooy, J. , Forster, R., & Ford, A. (2006). Accelerating thinning of Kenai Peninsula
glaciers, Alaska. Geophysical Research Lellers, 33 (21) L2 I 307,
doi: 10. 1 029I2Q06GL028060.
Warren, C. R. (1992). Iceberg calving and the glacioclimatic record. Progress ill Physical
Geography, 16 (3), 253-282.
Whillans, I., & Tseng, Y. (1995). Automatic tracking of crevasses on satellite images.
Cold.Regions Science alld Techl/o/ag)' , 23, 201-21 4.
Williamson, S., Sharp, M., Dowdeswcll , J., & Benham, T. (2008). Iceberg calving rates
from northern Ellesmere Island ice caps, Canadian Arctic, 1999-2003. Journal of
Glaci%gy. 54 (186). 39\-400.
Young, N. W., & Hyland, O. (2002). Veloci ty and strain rates derived from lnSAR
analysis over the Amery Ice Shelf, East Antarct ica, Annals o/Glaciology, 34 (1).
228-234.
Zwal1y, H.J. , Abdalati, W., Herring, T., Larson, K., Saba, J., & StetTen, K. (2002).
Surface melt-induced acceleration of Greenland ice-sheet flow. Science, 297
(5579), 218-222.