Project

General

Profile

« Previous | Next » 

Revision 0ffc32ec

Added by Jim Regetz over 13 years ago

  • ID 0ffc32ecba5e3b5ddb28db10e30e0e55d59daa3a

added prose text to boundary document, and (partly) refactored figures

View differences:

terrain/boundary/boundary.Rnw
17 17
\usepackage{fancyhdr}
18 18
\usepackage[font=normalsize,singlelinecheck=false]{subfig}
19 19

  
20

  
20 21
\title{SRTM/ASTER boundary analysis}
21 22
\author{Jim Regetz}
22 23
\date{Last update: 23 Jun 2011}
......
25 26
\usepackage[utf8]{inputenc}
26 27
\usepackage{a4wide}
27 28
\usepackage{verbatim}
29
\usepackage{listings}
28 30
\usepackage[colorlinks=true,urlcolor=red]{hyperref}
31
\usepackage{color}
29 32

  
30
\topmargin 70pt
33
%\topmargin 70pt
31 34

  
32 35
\pagestyle{fancy}
33 36
\rfoot{}
......
35 38
\renewcommand {\headrulewidth}{0pt}
36 39
\renewcommand {\footrulewidth}{0pt}
37 40

  
41
% set some listings options
42
\lstset{
43
  basicstyle=\small\ttfamily,
44
  stringstyle=\ttfamily,
45
  commentstyle=\itshape\ttfamily,
46
  showstringspaces=false,
47
}
48

  
38 49
\begin{document}
39 50

  
40 51
% define custom colors for R input and output
......
61 72
options(continue=" ")
62 73
@
63 74

  
75
\paragraph{Region of analysis} For testing purposes, I used a narrow
76
band along the 60N boundary in Canada (Figure \ref{focal-area}). The
77
latitudinal extent of this band is 59.875N - 60.125N (i.e., 300 3"
78
pixels straddling 60N), and the longitudinal extent is 136W to 96W
79
(i.e., 48000 pixels wide).
80

  
64 81
\begin{figure}[htp]
65
  \centering
66 82
  \caption{Focal area}
67
<<echo=FALSE,results=hide,fig=TRUE>>=
83
  \centering
84
<<echo=FALSE,results=hide,fig=TRUE,height=5,width=7>>=
85
  par(omi=c(0,0,0,0))
68 86
  library(raster)
69 87
  library(maps)
70 88
  demdir <- "/home/regetz/media/temp/terrain/dem/"
71 89
  dem <- raster(file.path(demdir, "fused_300straddle.tif"))
72
  map("world", xlim=c(-140,-70), ylim=c(40, 70), fill=TRUE, col="grey")
90
  map("world", xlim=c(-140,-70), ylim=c(40, 70), fill=TRUE, col="grey",
91
      mar=c(4,0,0,0))
73 92
  grid(col="darkgray")
74 93
  axis(1)
75 94
  axis(2)
......
78 97
  arrows(-110, 57, -113, 59.7, col="red", length=0.1)
79 98
  text(-110, 57, labels="focal region", col="red", font=3, pos=1)
80 99
@
100
  \label{focal-area}
81 101
\end{figure}
82 102

  
83
\begin{figure}[htp]
84
  \caption{Weighting schemes}
103
\paragraph{Fusion approaches} This document includes latitudinal
104
characterizations of terrain values based on three different variants of
105
a fused ASTER/SRTM DEM. I also explored (and briefly describe below) two
106
additional approaches to fusing the layers, but do not include further
107
assessment of these here.
108

  
109
\subparagraph{Simple fusion} Naive concatentation of SRTM below 60N with
110
ASTER above 60N, without applying any modifications to deal with
111
boundary artifacts (Figure \ref{blend-simple}).
112

  
113
\subparagraph{Multiresolution spline} Application of Burt \& Adelson's
114
(1983) method for blending overlapping images using multiresolution
115
splines, as implmented in the \emph{enblend} software package. Data prep
116
and post-processing were handled in R (see Listing \ref{code-enblend}).
117
As presented here, the ASTER and SRTM inputs were prepared such that the
118
overlap zone is 75 latitudinal rows (6.75km) (Figure
119
\ref{blend-multires}).
120

  
121
\subparagraph{Gaussian weighted average} Blend of the two layers using
122
weighted averaging such that the relative contribution of the SRTM
123
elevation is zero at 60N, and increases according to a Gaussian function
124
of distance moving south away from 60N. As presented here, this function
125
was parameterized such that the ASTER and SRTM are equally weighted at a
126
distance of $\sim$2.4km (26 cells) from the boundary, and the influence of
127
ASTER is negligible by $\sim$5km from the boundary (Figure
128
\ref{blend-gaussian}).
129

  
130
\subparagraph{Others not shown} Fused with exponential ramp north of
131
60N. The first step is to take the pixel-wise difference between ASTER
132
and SRTM in the row immediately below 60N (i.e., the northmost extent of
133
SRTM). An exponentially declining fraction of this difference is then
134
then added back into the ASTER values north of 60N. This does a fine job
135
of eliminating the artificial shelf and thus the appearance of a seam
136
right along the 60N boundary, but it does not address the abrupt
137
transition in texture (i.e., the sudden appearance of high frequency
138
variability moving north across the boundary). Additionally, it
139
introduces vertical ``ridges'' running north from the boundary. These
140
arise because the calculated ramps are independent from one longitudinal
141
``column'' to the next, and thus any changes in the boundary difference
142
from one pixel to the next lead to adjacent ramps with different
143
inclines.
144

  
145
I also tried a simple LOESS predictive model. This involved first
146
calculating the difference between ASTER and SRTM everywhere south of
147
60N, and then fitting a LOESS line to these differences using the actual
148
ASTER elevation as a predictor. I then used the fitted model to predict
149
the ASTER-SRTM difference for ASTER cells north of 60N, and add a
150
declining fraction (based on a Gaussian curve) of this difference to the
151
ASTER values north of 60N. Conceptually, this amounts to applying an
152
ASTER-predicted correction to the ASTER elevation values, where the
153
correction term declines to zero according with increasing distance
154
north of the bonudary. However, this method alone didn't yield
155
particularly promising results in removing the 60N seam itself,
156
presumably because adding a predicted correction at the boundary does
157
not close the SRTM-ASTER gap nearly as efficiently as do corrections
158
that are based on the actual elevation values. I therefore haven't
159
pursued this any further, although it (or something like it) may prove
160
useful in combination with one of the other methods.
161

  
162
\begin{figure}
163
  \caption{SRTM/ASTER blend configurations}
85 164
  \centering
86
  \subfloat[Gaussian weighted blend]{
165
  \subfloat[Simple fusion]{
166
    \label{blend-simple}
87 167
<<echo=FALSE,results=hide,fig=TRUE, height=3, width=6>>=
88
  par(omi=c(0,0,0,0), mar=c(4,4,1,2)+0.1)
89
  curve(exp(-0.001*x^2), from=-150, to=0, xlim=c(-150, 150), col="red",
90
      xaxt="n", bty="n", xlab="Latitude", ylab="Weighting")
91
  curve(1+0*x, from=0, to=150, add=TRUE, col="red")
92
  curve(1-exp(-0.001*x^2), from=-150, to=0, add=TRUE, col="blue")
93
  #axis(1, at=seq(-150, 150, by=60), labels=seq(59.875, 60.125, by=0.05))
94
  #axis(1, at=0, labels=60, col="red", cex=0.85)
95
  axis(1, at=seq(-120, 120, by=60), labels=seq(59.9, 60.1, by=0.05))
96
  text(-100, 0.6, labels="gaussian\nblend")
97
  text(-140, 0.9, labels="SRTM", col="blue", pos=4)
98
  text(-140, 0.1, labels="ASTER", col="red", pos=4)
168
  par(omi=c(0,0,0,0), mar=c(4,4,0,2)+0.1)
169
  plot(0, xlim=c(-150, 150), ylim=c(0, 1), type="n", xaxt="n", yaxt="n",
170
      bty="n", xlab="Latitude", ylab=NA)
171
  rect(0, 0, 150, 0.75, col="red", density=5, angle=45)
172
  rect(-150, 0, 0, 0.75, col="blue", density=5, angle=135)
173
#  axis(1, at=seq(-120, 120, by=60), labels=seq(59.9, 60.1, by=0.05))
174
  axis(1, at=seq(-150, 150, by=75), labels=c(59.875, NA, 60, NA, 60.125))
175
  text(-150, 0.9, labels="SRTM", pos=4, col="blue")
176
  text(150, 0.9, labels="ASTER", pos=2, col="red")
99 177
@
100 178
  }\\
101 179
  \subfloat[Multiresolution spline]{
180
    \label{blend-multires}
102 181
<<echo=FALSE,results=hide,fig=TRUE, height=3, width=6>>=
103 182
  par(omi=c(0,0,0,0), mar=c(4,4,0,2)+0.1)
104 183
  plot(0, xlim=c(-150, 150), ylim=c(0, 1), type="n", xaxt="n", yaxt="n",
105 184
      bty="n", xlab="Latitude", ylab=NA)
106
  rect(-75, 0, 0, 0.75, col="purple")
185
  rect(-75, 0, 0, 0.75, col="lightgray")
107 186
  rect(-75, 0, 150, 0.75, col="red", density=5, angle=45)
108 187
  rect(-150, 0, 0, 0.75, col="blue", density=5, angle=135)
109 188
  #axis(1, at=seq(-150, 150, by=60), labels=seq(59.875, 60.125, by=0.05))
110 189
  #axis(1, at=0, labels=60, col="red", cex=0.85)
111
  axis(1, at=seq(-120, 120, by=60), labels=seq(59.9, 60.1, by=0.05))
190
  #axis(1, at=seq(-120, 120, by=60), labels=seq(59.9, 60.1, by=0.05))
191
  axis(1, at=seq(-150, 150, by=75), labels=c(59.875, NA, 60, NA, 60.125))
112 192
  text(-150, 0.9, labels="SRTM", pos=4, col="blue")
113 193
  text(-37.5, 0.8, labels="overlap", pos=3, font=3)
114 194
  text(150, 0.9, labels="ASTER", pos=2, col="red")
115 195
@
196
  }\\
197
  \subfloat[Gaussian weighted average]{
198
    \label{blend-gaussian}
199
<<echo=FALSE,results=hide,fig=TRUE, height=3, width=6>>=
200
  par(omi=c(0,0,0,0), mar=c(4,4,1,2)+0.1)
201
  curve(exp(-0.001*x^2), from=-150, to=0, xlim=c(-150, 150), col="red",
202
      xaxt="n", bty="n", xlab="Latitude", ylab="Weighting")
203
  curve(1+0*x, from=0, to=150, add=TRUE, col="red")
204
  curve(1-exp(-0.001*x^2), from=-150, to=0, add=TRUE, col="blue")
205
  #axis(1, at=seq(-150, 150, by=60), labels=seq(59.875, 60.125, by=0.05))
206
  #axis(1, at=0, labels=60, col="red", cex=0.85)
207
  #axis(1, at=seq(-120, 120, by=60), labels=seq(59.9, 60.1, by=0.05))
208
  axis(1, at=seq(-150, 150, by=75), labels=c(59.875, NA, 60, NA, 60.125))
209
  text(-100, 0.6, labels="gaussian\nblend")
210
  text(-140, 0.9, labels="SRTM", col="blue", pos=4)
211
  text(-140, 0.1, labels="ASTER", col="red", pos=4)
212
@
213
  }
214
\end{figure}
215

  
216
\newpage
217

  
218
%\includepdfset{pagecommand=\thispagestyle{fancy}}
219
%\setkeys{Gin}{width=1.8\linewidth}
220
%\captionsetup[table]{position=top}
221

  
222

  
223
\paragraph{Latitudinal terrain profiles (means)}
224

  
225
\subparagraph{Elevation} As indicated in Figure \ref{mean-elevation},
226
the mean SRTM elevation is uniformly higher than the mean ASTER
227
elevation at all latitudes in the area of overlap, by $\sim$11 meters.
228
However, the shape of the profile itself is nearly identical between the
229
two. As point of reference, the Canada DEM shares a similarly shaped
230
profile, but with elevation values intermediate to the ASTER and SRTM.
231

  
232
Not surprisingly, simple fusion produces an artificial cliff in the mean
233
elevation profile. This artifact is completely removed by both the
234
multiresolution spline and gaussian weighted average methods. The
235
transition is, at least to the eye, slightly smoother in the former
236
case, although ultimately this would depend on the chosen zone of
237
overlap and on the exact parameterization of the weighting function.
238

  
239

  
240
\subparagraph{Slope} As indicated in Figure \ref{mean-slope},
241
the mean ASTER slope is uniformly steeper than the mean SRTM
242
elevation at all latitudes in the area of overlap, by nearly 1 degree.
243
However, the shape of the profile itself is nearly identical between the
244
two. Although this may partly reflect inherent SRTM vs ASTER
245
differences, my guess is that CGIAR postprocessing of the particular
246
SRTM product we're using has removed some of the high frequency
247
``noise'' that remains in ASTER.
248

  
249
Note that the he Canada DEM tends to be flatter than both ASTER and
250
SRTM (presumably because it is at least partially derived from
251
contour-based data (\textbf{check!})). Moreover, this figure makes it
252
clear that the Canada DEM has some major artifacts at regular intervals.
253
The spike especially at 60N (which coincides with provincial boundaries
254
across the entirety of western Canada) means we probably need to scuttle
255
our plans to use this DEM as a reference dataset for boundary analysis.
256

  
257
The simple fused layer exhibits a dramatic spike in slope at the
258
immediate 60N boundary, undoubtedly associated with the artificial
259
elevation cliff. This artifact is eliminated by both the multiresolution
260
spline and gaussian weighting. However, former exhibits a sudden step
261
change in slope in the SRTM-ASTER overlap region, whereas the transition
262
is smoothed out in the latter. This likely reflects the fact that the
263
multiresolution spline effectively uses a very narrow transition zone
264
for stitching together high frequency components of the input images,
265
and I surmise these are precisely the features responsible for the shift
266
in mean slope. 
267

  
268
\subparagraph{Aspect} As indicated in Figure \ref{mean-aspect},
269
the mean aspect of ASTER and SRTM are quite similar across all latitudes
270
in the area of overlap. However, the shape of the
271
profile itself is nearly identical between the
272
two. Although this may partly reflect inherent SRTM vs ASTER
273
differences, my guess is that CGIAR postprocessing of the particular
274
SRTM product we're using has removed some of the high frequency
275
``noise'' that remains in ASTER.
276

  
277
%TODO: recalc aspect using circular mean?
278
%TODO: run flow for enblend output? or just leave what we have, and
279
%discuss that? be sure to mention that we're doing flow for a smaller
280
%longitudinal range
281

  
282
%
283
% Latitudinal terrain profiles (means)
284
%
285
\begin{figure}[t!]
286
  \centering
287
  \caption{Latitudinal terrain profiles}
288
  \subfloat[Mean elevation (m)]{
289
    \includegraphics[page=1, trim=1in 1in 1in 1in, width=\linewidth]{../dem/elevation-assessment.pdf}
290
    \label{mean-elevation}
291
  }\\
292
  \newpage
293
  \subfloat[Mean slope (degrees)]{
294
    \includegraphics[page=1, trim=1in 1in 1in 1in, width=\linewidth]{../slope/slope-assessment.pdf}
295
    \label{mean-slope}
296
  }
297
\end{figure}
298
\begin{figure}[h!]
299
  \ContinuedFloat
300
  \centering
301
  \captionsetup{position=top}
302
  \subfloat[Aspect (direction, 0=East)]{
303
    \includegraphics[page=1, trim=1in 1in 1in 1in, width=\linewidth]{../aspect/aspect-assessment.pdf}
304
    \label{mean-aspect}
305
  }\\
306
  \subfloat[Flow (D8 direction, 0=East)]{
307
    \includegraphics[page=1, trim=1in 1in 1in 1in, width=\linewidth]{../flow/flowdir-assessment.pdf}
308
    \label{mean-flow}
116 309
  }
117 310
\end{figure}
118 311

  
119
%\newpage
120
%\begin{center}
121
%\includegraphics[width=\linewidth]{../dem/boundary-hillshade.png}
122
%\end{center}
312
\paragraph{Summary of findings}
313
\begin{itemize}
314
 \item CDEM itself has problems
315
  \begin{itemize}
316
   \item 60N coincides with provincial boundaries; there are clear 60N
317
     artifacts in this layer!
318
   \item other evident tiling artifacts too
319
  \end{itemize}
320
 \item Big SRTM vs ASTER differences:
321
  \begin{itemize}
322
   \item ASTER is generally lower elevation
323
   \item ASTER has more high-frequency variability ("texture"), which
324
     affects slope/aspect?
325
  \end{itemize}
326
 \item Exponential ramping
327
  \begin{itemize}
328
   \item fixes seam itself
329
   \item leaves dramatic transition in SRTM/ASTER textural differences
330
   \item introduces ridging
331
  \end{itemize}
332
 \item Blending
333
  \begin{itemize}
334
   \item fixes seam itself
335
   \item smooths transition in textural differences
336
  \end{itemize}
337
 \item Other comments
338
  \begin{itemize}
339
   \item Routing is a big ball of wax
340
  \end{itemize}
341
\end{itemize}
342

  
343
\paragraph{To do (possibly)}
344
\begin{itemize}
345
 \item add constant offset to ASTER? or maybe an offset that is a
346
 function of elevation? (revisit LOESS fit)
347
 \item smooth ASTER?
348
\end{itemize}
349

  
350
%TODO: include and discuss the RMSE/correlation plots
351

  
352
%\includepdf[landscape=true,pages=-]{../dem/elevation-assessment.pdf}
353
%\includepdf[landscape=true,pages=-]{../slope/slope-assessment.pdf}
354
%\includepdf[landscape=true,pages=-]{../aspect/aspect-assessment.pdf}
355
%\includepdf[landscape=true,pages=-]{../flow/flowdir-assessment.pdf}
123 356

  
124 357
\newpage
125 358

  
126
\centering
127
\includepdfset{pagecommand=\thispagestyle{fancy}}
128
\setkeys{Gin}{width=1.8\linewidth}
129
\includepdf[landscape=true,pages=-]{../dem/elevation-assessment.pdf}
130
\includepdf[landscape=true,pages=-]{../slope/slope-assessment.pdf}
131
\includepdf[landscape=true,pages=-]{../aspect/aspect-assessment.pdf}
132
\includepdf[landscape=true,pages=-]{../flow/flowdir-assessment.pdf}
359
\appendix
133 360

  
134
\verbatiminput{../dem/enblend.R}
361
\lstinputlisting[language=R, caption={R wrapper code for multiresolution
362
    spline}, label=code-enblend]{../dem/enblend.R}
135 363

  
136 364
\end{document}
137 365

  

Also available in: Unified diff