/ isomatch Public
You must be signed in to change notification settings

## Folders and files

NameName
Last commit message
Last commit date

# IsoMatch: Creating Informative Grid Layouts

Feel free to use, modify and redistribute this code.

• Make sure this notice is redistributed alongside the code.
• You acknowledge that the code is provided as-is, with no guarantees.
• When using the code in a publication, please cite

O. Fried, S. DiVerdi, M. Halber, E. Sizikova and A. Finkelstein. "IsoMatch: Creating Informative Grid Layouts." 36th Annual Conference of the European Association for Computer Graphics (Eurographics), Kongresshaus in Zürich, Switzerland, 2015

Feel free to contact me (ohad-at-cs-dot-princeton-dot-edu) with questions, bug reports, and suggestions. Also check out my website for this and other publications.

IsoMatch Demo video

## Getting started

Notice that the provided implementation only supports some of the features described in the paper. Please refer to the original publication for more extensions and improvements such as hierarchical arrangements and collection summarization.

### A simple isomatch example

The best place to start is `test.m`. The file should produce two colorful images, one unsorted and the other arranged via IsoMatch.

Let's do a step-by-step rundown of what's going on inside `test.m`:

In this example we will arrange random colors on a 20x20 grid. Let's start by specifying the grid size:

``````options = struct();
options.grid_size = [20 20];
``````

And now let's generate some random colors:

``````rand_colors = rand(prod(options.grid_size), 3);
``````

We will need to calculate a distance matrix that will contain all the pair-wise distances between our colors. In order to do that, we use the matlab functions `pdist` to calculate distances and `squareform` to convert a vector of distances to matrix form.

``````d_list = pdist(rand_colors);
d_matrix = squareform(d_list);
``````

Now for the interesting part. We call `isomatch()` to do the heavy lifting.

``````result_assignment = isomatch(d_matrix, options);
``````

Notice that if we want more data, namely the objective function values, we can use the longer syntax:

``````[result_assignment, obj_res, obj_orig] = isomatch(d_matrix, options);
``````

Now that we have `result_assignment`, we can use it to assign our objects into grid cells. Specifically `rand_colors(result_assignment, :)` is what we need.

#### Complex patterns

Notice that the above example used a rectangular grid. It is important to realize that isomatch supports any arbitrary pattern, which can be very different from a regular grid (in the paper we show examples such as the shape of a bell). In order to use your own pattern, supply raw coordinates via `options.grid_coords`.

#### 3D and above

You are not limited to 2D. Use `options.isomap_ndims` to change the dimensionality of isomap's output. Use `options.grid_coords` to specify your own coordinated, in higher dimensions.

#### Refining the results

As explained in the paper, we can try to minimize our energy function in order to improve results. A naive implementation is provided which uses random swaps to lower the energy. Set `options.num_swaps` or `options.swap_threshold` to a value above 0 to activate random swaps. Notice that the more swaps you perform, the better the result (but execution time will be longer).

No description, website, or topics provided.

## Releases

No releases published

## Packages 0

No packages published