The Destination: Final Report

A brief description of the the project and what was required of me is located here. Here, I will summarize my involvement with and contributions to the project.

The main focus of my summertime research involved working on the proximity detection part of a region detection algorithm. Given the result of the original algorithm run, I was to create a method that would join two patches that appeared to be part of the same "packet".

Below:Frame 522 before the proximity detection algorithm has been run. Notice that in the upper left corner there are two green areas that if connected woudld form a backwards "s". These are the two patches I focused on. There were also other considerations in using this frame. Also in the upper left corner is a third patch which doesn't connect with either of the other two, and in the bottom left corner is a small patch close to the larger patch all the way across the screen. These patches also shouldn't join.

My algorithm went through two different lifecycles. The first lifecycle worked only for very specific cases, but actually would join the two patches visually on the output. The second lifecycle would pick up any patch in a valid joining direction, but would only print the patches that were found out to the screen, instead of changing the visual output to show the merge.
Lifecycle 1: This version of the algorithm searched a rectangular area to the right of each patch. If height is described by the y-axis, and width by the x-axis, the rectangular is a few rows taller than the patch, and one half the width. If there is a cell that is a member of a different patch in the rectangle, then a second rectangle is defined. This rectangle is slightly larger, and dependent upon both patches, instead of just one. The height is from the highest top to the lowest bottom and from 3 columns to the right of the joining edge furthest right, to 3 columns to the left of the joing edge furthest left. The joining edges are the right of the first patch, and the left of the second edge.

This second rectangle is used to find seed points, those cells with low Reynold's shear stress, as well as used to define the merging. If seed points are found, the algorithm was unsuccessful and terminates. If seed points are found, the region detection algorithm is revisited with relaxed conditions. We restrict the growth area to this second rectangle, however. We grow from the seed points found, which marks each of the valid cells with a "1" in thier patch number, and renumber from the first patch. This allows the growth from the seedpoints to not reach either of the patches, if it truly just a random ReyShear seed point and not a bridge between two patches.

Below: Frame 522 after the proximity, lifecycle 1, has been run. Notice how only the two patches that form an "s" have been merged.

Lifecycle 2: As the first version wasn't very robust, I began pondering how else to find patches in a valid joining area. After talking with Bugs, I began formulating what is now known as Scanning. The idea behind scanning is that pathces that are joined should show the same general direction of flow, at least around the joining edges. To establish this, I created centerlines and orientation detection. The direction of flow along the joining edges is assumed to be the direction of the first/last centerline segment. We scan an area twice the height long, between the angles of 45 degrees above the projected centerline, and 45 degrees below the projected centeriline.

To accomplish this, I scan radially from two different points. The first is the end centerline dot, and the second is a little bit further in. This will provide a line perpendicular to the centerline of length the same as the width that will all be scanned. I also scan both forwards (to the right), and backwards (to the left), in this version, per a request from Bugs.

Scanning in both directions also allows for a double check of patches that should be joined. If proximity is picked up in one direction, but not another, chances are that they really don't belong merged. I have not yet implented this merging, as time is limited, but I would have liked to do so.

Below: Frame 522 after the proximity, lifecycle 2, has been run. The pinky-purple areas represent the areas that have been scanned. Both of the target patches in the upper left hand corner pick up eachother.

I also extracted swirl and Reynold shear stress packets this summer however, to do this, I modified the original regions detecting algorithm, and did not create my own algorithm.

Below: Pictures of Reynold shear stress regions and swirl regions. On the left is frame 522 with Reynold shear regions in yellow. On the right is frame 531 with swirl regions in black. I did not have any pictures of 522 with swirl. I apologize.

Places to go from Here:
  1. Actually join regions that Proximity picks up, instead of just outputing what was found.
  2. Work with the centerlines so they can deal with packets that split
  3. Modify the centerline criteria to rely on both the distance the center moves and the distance between the high and low patch. Maybe also look at using the angle between two dots to determine the angle along which the center will be moved.
  4. Fix the Proximity Scan Boundary detection. A few rays still get through.

Who am I? Cast of Characters Plot
The Journey The Destination Sanity Breaks
************ The Beginning ************