Project

General

Profile

Download (14.3 KB) Statistics
| Branch: | Revision:
1 3c841968 Jim Regetz
% -*- mode: noweb; noweb-default-code-mode: R-mode; -*-
2
%
3
% Using Gregor Gorjanc's bash script:
4
%   sweave -old=<pdfviewer> <filename.Rnw>
5
%
6
% Using my simple bash script wrapper:
7
%   sweave_jr <basename>
8
%
9
% Using the lower level commands, in two steps: 
10
%   R CMD Sweave <filename.Rnw>
11
%   pdflatex <filename.tex>
12
%
13
% To extract R code from within R:
14
%   Stangle("<filename.Rnw>", annotate=FALSE)
15
\documentclass[8pt]{article}
16
\usepackage[final]{pdfpages}
17
\usepackage{fancyhdr}
18
\usepackage[font=normalsize,singlelinecheck=false]{subfig}
19
20 0ffc32ec Jim Regetz
21 3c841968 Jim Regetz
\title{SRTM/ASTER boundary analysis}
22
\author{Jim Regetz}
23
\date{Last update: 23 Jun 2011}
24
25
%\SweaveOpts{echo=true}
26
\usepackage[utf8]{inputenc}
27
\usepackage{a4wide}
28
\usepackage{verbatim}
29 0ffc32ec Jim Regetz
\usepackage{listings}
30 3c841968 Jim Regetz
\usepackage[colorlinks=true,urlcolor=red]{hyperref}
31 0ffc32ec Jim Regetz
\usepackage{color}
32 3c841968 Jim Regetz
33 0ffc32ec Jim Regetz
%\topmargin 70pt
34 3c841968 Jim Regetz
35
\pagestyle{fancy}
36
\rfoot{}
37
\cfoot{\Large\thepage}
38
\renewcommand {\headrulewidth}{0pt}
39
\renewcommand {\footrulewidth}{0pt}
40
41 0ffc32ec Jim Regetz
% set some listings options
42
\lstset{
43
  basicstyle=\small\ttfamily,
44
  stringstyle=\ttfamily,
45
  commentstyle=\itshape\ttfamily,
46
  showstringspaces=false,
47
}
48
49 3c841968 Jim Regetz
\begin{document}
50
51
% define custom colors for R input and output
52
\definecolor{dkblue}{rgb}{0,0,0.7}
53
\definecolor{dkgray}{gray}{0.25}
54
55
% define simple macro for marking up inline R code
56
\def\rfunc#1{\textcolor{dkblue}{\texttt{#1}}}
57
\def\robj#1{\textcolor{black}{\texttt{#1}}}
58
59
% nicer settings from Ross Ihaka
60
\DefineVerbatimEnvironment{Sinput}{Verbatim} %  {xleftmargin=2em,formatcom=\color{dkblue},fontsize=\footnotesize}
61
  {xleftmargin=2em,formatcom=\color{dkblue}}
62
\DefineVerbatimEnvironment{Soutput}{Verbatim}
63
%  {xleftmargin=2em,formatcom=\color{dkgray},fontsize=\footnotesize}
64
  {xleftmargin=2em,formatcom=\color{dkgray}}
65
\DefineVerbatimEnvironment{Scode}{Verbatim}{xleftmargin=2em}
66
\fvset{listparameters={\setlength{\topsep}{0pt}}}
67
\renewenvironment{Schunk}{\vspace{\topsep}}{\vspace{\topsep}}
68
69
% set some specific R options that affect the output format
70
<<echo=FALSE,print=FALSE>>=
71
options(width=80)
72
options(continue=" ")
73
@
74
75 0ffc32ec Jim Regetz
\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
81 3c841968 Jim Regetz
\begin{figure}[htp]
82
  \caption{Focal area}
83 0ffc32ec Jim Regetz
  \centering
84
<<echo=FALSE,results=hide,fig=TRUE,height=5,width=7>>=
85
  par(omi=c(0,0,0,0))
86 3c841968 Jim Regetz
  library(raster)
87
  library(maps)
88
  demdir <- "/home/regetz/media/temp/terrain/dem/"
89
  dem <- raster(file.path(demdir, "fused_300straddle.tif"))
90 0ffc32ec Jim Regetz
  map("world", xlim=c(-140,-70), ylim=c(40, 70), fill=TRUE, col="grey",
91
      mar=c(4,0,0,0))
92 3c841968 Jim Regetz
  grid(col="darkgray")
93
  axis(1)
94
  axis(2)
95
  box()
96
  plot(extent(dem), col="red", add=TRUE)
97
  arrows(-110, 57, -113, 59.7, col="red", length=0.1)
98
  text(-110, 57, labels="focal region", col="red", font=3, pos=1)
99
@
100 0ffc32ec Jim Regetz
  \label{focal-area}
101 3c841968 Jim Regetz
\end{figure}
102
103 0ffc32ec Jim Regetz
\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}
164 3c841968 Jim Regetz
  \centering
165 0ffc32ec Jim Regetz
  \subfloat[Simple fusion]{
166
    \label{blend-simple}
167 3c841968 Jim Regetz
<<echo=FALSE,results=hide,fig=TRUE, height=3, width=6>>=
168 0ffc32ec Jim Regetz
  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")
177 3c841968 Jim Regetz
@
178
  }\\
179
  \subfloat[Multiresolution spline]{
180 0ffc32ec Jim Regetz
    \label{blend-multires}
181 3c841968 Jim Regetz
<<echo=FALSE,results=hide,fig=TRUE, height=3, width=6>>=
182
  par(omi=c(0,0,0,0), mar=c(4,4,0,2)+0.1)
183
  plot(0, xlim=c(-150, 150), ylim=c(0, 1), type="n", xaxt="n", yaxt="n",
184
      bty="n", xlab="Latitude", ylab=NA)
185 0ffc32ec Jim Regetz
  rect(-75, 0, 0, 0.75, col="lightgray")
186 3c841968 Jim Regetz
  rect(-75, 0, 150, 0.75, col="red", density=5, angle=45)
187
  rect(-150, 0, 0, 0.75, col="blue", density=5, angle=135)
188
  #axis(1, at=seq(-150, 150, by=60), labels=seq(59.875, 60.125, by=0.05))
189
  #axis(1, at=0, labels=60, col="red", cex=0.85)
190 0ffc32ec Jim Regetz
  #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))
192 3c841968 Jim Regetz
  text(-150, 0.9, labels="SRTM", pos=4, col="blue")
193
  text(-37.5, 0.8, labels="overlap", pos=3, font=3)
194
  text(150, 0.9, labels="ASTER", pos=2, col="red")
195
@
196 0ffc32ec Jim Regetz
  }\\
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}
309 3c841968 Jim Regetz
  }
310
\end{figure}
311
312 0ffc32ec Jim Regetz
\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}
356 3c841968 Jim Regetz
357
\newpage
358
359 0ffc32ec Jim Regetz
\appendix
360 3c841968 Jim Regetz
361 0ffc32ec Jim Regetz
\lstinputlisting[language=R, caption={R wrapper code for multiresolution
362
    spline}, label=code-enblend]{../dem/enblend.R}
363 3c841968 Jim Regetz
364
\end{document}