Home >
Research
Possible Future Collaborative Research & Student Projects
- Consult my papers and talks on this website for more info on
these topics.
- Desirable skills include Math, CS, writing, programming in C++
in linux, and cartography.
- New projects are added from time to time.
- This page is currently a little obsolescent.
- Use linux when possible, windows when necessary.
- Test everything on the largest, baddest, possible
examples. If my algorithm can be broken, I want to know now,
not later. Also, my algorithms might perhaps be more robust than others'
- Present results as vividly as possible, with color
animations, using the best tools, such as POVRAY. It's ok to
use ten times the computing power to present the results as it
took to compute them.
Here are projects that I am currently interested in.
Find or implement an NPR algorithm and test it on terrain.
(undergrad)
Who's doing it: RT.
Experiment with my Matlab program for interpolating from a
small set of points to a complete matrix of elevations.
The current status is a Matlab program described in Converting elevation
contours to a grid, which was improved by John Child's
masters thesis.
For any of the following ideas:
- If the input data is larger than about 400x400, first
reduce it by either selecting a subset or averaging down.
- Try different values of R. Plot the resulting surfaces
and show the max and average error.
- Try different numbers of points. Plot the error as a
function of the number.
Here are some things to try:
- Take various sample terrain files, both real USGS data,
and generated artificial test data, from my website, delete
most of the points, keeping, say, every 5th point in X and Y.
Apply overdetsol, and see how good the surface is. Delete
more and more points to see how the accuracy degenerates.
Plot the resulting accuracy vs number of points.
- One of the possible applications is filling in holes in
the data. So, take a terrain cell, and delete all the points
in, say a circle of diameter 10. Fill in the missing values
with overdetsol. Plot the resulting surface; report the
error. Vary the '10'.
- Take triangle vertices output from TIN, and interpolate
them.
- For each previous task, plot the error of each post, and
look for patterns.
- More later...
Test available hydrological modeling (aka water flow,
watershed) SW, such as
- ArcGIS ARC Hydro
- GRASS,
- UNC
- other major packages?
Use the largest possible datasets.
Write a summary report comparing them on execution time.
Compare their output when applied to the same dataset.
Use my Matlab method to determine drainage networks on a large
gridded terrain elevation database. Note that detecting and
deleting false local minima (traps) is half the total work.
The idea goes as follows.
- Initial assumptions:
- The input is a matrix of terrain elevations, as from a DEM
file.
- Assume that each point (post) receives one unit of water.
- Assume that all the water falling onto, or flowing into, a
point, then flows out to the point's lowest neighbor.
- If the point is on the edge and is lower that its 2 or 3
neighbors, then its water flows off the edge of the world.
- Processing local catchments:
- A major problem is single points, or groups of points,
that are lower than their neighbors. Remove them thus:
- Make equivalence classes of adjacent cells that are
either at the same elevation or within a certain tolerance.
This prevents some weird flows within the equal-elevation
cells. Note that "within a certain tolerance" is not
transitive, but that's probably ok.
- Make equivalence classes of local sinks. Note that they
may nest.
- Subject to some criterion, remove local sinks, by some
method.
- One easy removal method is to make each sink higher in middle, like
inverting it, so water quickly flows off the side. This is
good for small or long thin sinks. However, it might create new sinks.
- A harder removal method is to fill up sink until it overflows.
- Compute the flow:
- Form a linear system. The unknown variables are the amount of water flowing out of each point (or equivalence class of points).
- Each point induces an equation that says that the water flowing out is the sum of the the water flowing and plus the rain.
- Solve it.
- Present the results:
- Test on the largest possible examples.
- Compare the results to other packages.
- Make pretty pictures of flows and times.
With both other packages and my method:
- Lossily compress and restore the data, and observe the
effect on the computed drainage.
- Add random noise to the data, and ditto.
(senior - PhD)
My map overlay program can easily be extended to interpolate
data from one map to another. E.g., we could estimate the
population of drainage polygons by how much they overlap
the census polygons, whose populations we know.
However this assumes that the population in each census
polygon is even across the whole census polygon, and then
jumps discontinuously at the border. Generalize the
interpolation to assume the population is varying smoothly.
That is, the census polygons are sampling a smooth population
distribution. Resample it into drainage polygons.
This idea is from Fred Broome.
(masters - PhD)
My TIN program inserts points into the triangulation. Extend
it to also delete points. The process could go as follows.
- Estimate an error for each point, P, as follows.
- Find the adjacent points to P in the triangulation.
- Compute the best fit plane to those points.
- Find the distance from P to that plane.
- Select the point with smallest error.
- Delete the adjacent triangles.
- Retriangulate the gap any way. It doesn't matter if the new edges cross outside a concave gap.
- Add the new edges, and the old edges around the gap, to the swap queue.
- Process the swap queue as when inserting points.
This uses the fact that if the triangulation is "folded
over" on itself, say because a concave quadrilateral was split
the wrong way, then the diagonal flipping process will fix it. This property is very useful.
Here's a modification that might be faster.
- Notes:
- We want to handle 75M points.
- Inserting points in batches seems potentially faster.
However don't insert points that are close to each other in
the same iteration, since one point might make the other
superfluous.
- Triangle data structure:
- 3 vertices
- name and error of the worst point in it
- a status bit telling if this triangle has been selected in
step 3 below.
- the 1 to 3 adjacent triangles.
- plane equation
- Steps:
- Initially insert 1000 points the old way to create a
triangulation.
Why? It's the only way I know to select good points at the
start.
- Sort the triangles by max error.
- Filter the sorted list in order, selecting triangles to
split. Do not select a triangle adjacent to any triangle
that is already selected. (I.e., select an "independent" set
of triangles.) Stop checking triangles when the max error is
less than the desired triangulation tolerance.
- Create a new list of vertices from the old vertices plus
the worst point in each triangle selected above.
- Delete and free the triangle dataset.
- Triangulate the point set created above, building a new
triangle data structure. Initialize each triangle's worst
point to undefined and error to zero.
- Process all the non-vertex points:
- Determine which triangle contains the point.
(See below for how to do this fast.)
- Find its error relative to the triangle's plane.
- Update the triangle's worst point and max error.
- If the worst triangle's error is more than the desired
final tolerance, go to step 2.
- Batch Point classification:
(This takes a triangulation and a set of points, and finds
which triangle contains each point.)
- Find the set of edges of the triangulation. Each edge has
2 vertices and 2 triangles.
- Sort all the points and vertices by X.
- Pass thru the list in order. Maintain a list of active
edges sorted in Y. The list update event is passing a vertex.
- If we pass a vertex, update the sorted active edge list.
- Between vertices, sort all the points in Y.
- Merge the point list and active edge list.
- That classifies each point.
- Notes:
- The points and vertices need to be sorted only once at the
start.
- Points become vertices as triangles split, but that doesn't
affect the ordering.
Extend the TIN to use triangular splines of higher degree,
instead of triangular planar patches. The first step is to
compute the curved patches for an existing TIN, then see if
the fit is improved. If so, then this tells us something
about the surface's continuity.
(masters - PhD)
Our lab has ESRI Arcview, with several packages, MicroDEM, and
Grass. See how well they do, e.g., visibility.
Model terrain elevation with a operation like "scooping"
instead of, e.g., Fourier series.
(PhD)
Extend my observer siting testbed many ways:
Compute changing viewshed as observer moves.
Consider the connectivity of the total visible region.
Consider redundant observers.
Study tradeoff between resolution and time, etc.
Would hierarchical elevation datasets help?
(masters, PhD)
Factor out the point location part of my map overlay area
program into a separate program. Test it on large planar
graphs (> 100M edges).
Compare to CGAL and any other package that does this.
(senior - masters)
Do point location on large graphs (>>100M edges), whose edges
are being inserted and deleted, or are moving.
(masters - PhD)
Apply my point location to VLSI databases. Work with a VLSI
person.
(masters - PhD)
My map overlay area program computes the area of all the
nonempty polygons resulting from overlaying two planar graphs
(maps). Extend it to produce the polygons themselves, not
just their areas.
(senior - masters)
Use my fast connected component program to research
percolation.
Robert Sharpley, U South Carolina, at the CARGO kickoff meet,
Newport 5/02, knows an application and knows another relevant
contact. Ask him. I had dinner with him and Avniel, 5/19/02.
(PhD)
Extend my edge intersection algorithm to edges that are being
inserted, deleted, and moving. Jeff Trinkle has an
application.
This is from the DIMACS CGAL workshop 6/02, Minkowski sum
talk.
Extend to polygons being inserted, deleted, and moved.
Extend my mass properties of the union of many cubes thus:
Find the explicit union polyhedron, not just its volume.
Do general polyhedra, not just cubes.
(PhD)
Reimplement my object-space Visible Surface Algorithm (aka
Hidden Surface Algorithm). Test it on the UNC 13M triangle
powerplant, and 80M triangle supertanker.
The depth complexity appears to be about 5.
This idea is from my Research Triangle visit 5/02.
(senior - Masters)
Handle object-space visibility when polyhedra are being
inserted or deleted or are moving.
(PhD)
This is open ended.
(PhD)
2.2.12. PCD
I can't remember what PCD means but remember that, at one
point, my local topo stuff seemed relevant.
The state of computer HW and SW to assist people with with
poor vision is miserable. What there is is poor and/or very
expensive. E.g., Screen magnifying SW is several hundred
dollars. Possible projects, of varying levels, include the following.
- Video magnifier (zoom camera on a stand connecting to monitor) to
- read small amount of text, like the return address on letter
- see small objects, like the insulin level in needle
Existing products cost $2000 and up.
- Email tool.
- Tool to read larger amounts of text, like Kurzweil but
cheaper.
- Simpler TV remote control, and telephone, with few, large,
bright, buttons, and maybe acoustic feedback.
- Magnifying pen for single lines of text...
- + voice output ...
- + haptic feedback to keep user from wandering off the line.
(BS - PhD)
Abstracting a system to hide its irrelevant complexities, and to
provide a base on which to build, has been persistent and
successful paradigm throughout Computer Science history. A
closely tied concept is the 'filter' to provide properly
formatted input to a process, and to convert a process's output
into a more useful form. We need to extend abstraction and
filtration to systems controlled by graphical user interfaces,
jokingly described as WYSIAYG (What You See Is All You Get).
Consider what the transition from textual interfaces to GUIs has
cost. If you know the system's next question, you can type
ahead, instead of being forced to slow down to the machine's
speed. Scripts can be written to control text programs w/o
online human input. The output can be analyzed with programs
like 'expect', which can then provide appropriate, context
sensitive, input. None of this is possible with a graphical
interface.
The impact of this defect is more than a matter of speed. A
major early Unix philosophy was that multiple text programs can
be chained together, so that a complicated task, not envisioned
by the original designers, could be solved by connecting several
simple standard components. In contrast, just try to connect two
interactive forms entry programs.
Our inability to abstract, and build on, graphical interfaces
blocks progress by preventing small graphical packages from being
put together into one system, and wrapped in a custom interface.
What would this allow? At least, one might imagine a GUI wrapper
than translated to and from another language, or that made the
system accessible to a handicapped person. Currently we are
mostly at the mercy of the system designer to provide these
capabilities, which means that only large markets get served.
The following is an immediate commercial application. The
government of the Province of Quebec requires that the SW on
business computers generally be in French. Businesses are
complaining about the need to buy new SW. Consider the advantage
if the currently English graphical SW could be wrapped in a layer
that translated to and from French.
This presents both a challenge and an opportunity to IS/IA. The
challenge is that easier system connections will facilitate both
benevolent and malevolent information flow. It will become easy
to wardial GUI systems, searching for vulnerabilities. The
opportunity is that GUI systems may be wrapped in interfaces to
validate their input, and check that user authorization. Data
mining at the union of different systems will be possible. None
of this will require any cooperation from the various systems.
(PhD+ level)
Here are ideas that, for one reason or another, I'm not
actively pursuing. However, they could be activated at some
point in the future.
Consider a map with several layers that are related to each
other, e.g., elevation, slope, streams, and shorelines.
Lossily compress them as a group so that, when restored, they
are consistent.
(PhD+ level)
Investigate rational functions for approximating functions.
(PhD+)
There are too many journals, so that important information is
spread too thin, and the journals cost too much. Anyone not a
member of a cartel (aka major research establishment) cannot
afford them. Researchers submit more and more papers and grant
proposals, but are less and less willing to review others'
submissions. On the other hand, ever better quality information
is available, for free, on the web. Even the concept that
information consumers would, at least, pay for editors and
reviewers to direct them to the worthwhile stuff has not panned
out. This can lead to societies who should be concerned with
information propagation, ironically being so worried about
financial survival that they restrict members' papers'
information flow. As members correctly sense the societies'
decreasing utility, the societies' membership falls.
What, if anything, should we do about this? Will we all get our
information from researchers' own web sites, which we locate with
google? How will we then judge their correctness? What happens
if spam web pages should arise, in so much greater number than
the useful sites, that filtering out the useful sites becomes
hard?
The proposed challenge is to devise a new model for the
production, vetting, and distribution, of scientific information,
and of selecting whom to fund.
(PhD+ level)