After a quick walk down the hall for guidance…

One paper to start with (both for the specific method and a guide to further reading) is:

Mathieu Desbrun, Mark Meyer, and Pierre Alliez. “Intrinsic Parameterizations of Surface Meshes”, in EUROGRAPHICS 2002, Volume 21 (2002), Number 2

Abstract

Parameterization of discrete surfaces is a fundamental and widely-used operation in graphics, required, for in- stance, for texture mapping or remeshing. As 3D data becomes more and more detailed, there is an increased need for fast and robust techniques to automatically compute least-distorted parameterizations of large meshes. In this paper, we present new theoretical and practical results on the parameterization of triangulated surface patches. Given a few desirable properties such as rotation and translation invariance, we show that the only admissible parameterizations form a two-dimensional set and each parameterization in this set can be computed using a sim- ple, sparse, linear system. Since these parameterizations minimize the distortion of different intrinsic measures of the original mesh, we call them Intrinsic Parameterizations. In addition to this partial theoretical analysis, we pro- pose robust, efficient and tunable tools to obtain least-distorted parameterizations automatically. In particular, we give details on a novel, fast technique to provide an optimal mapping without fixing the boundary positions, thus providing a unique Natural Intrinsic Parameterization. Other techniques based on this parameterization family, designed to ease the rapid design of parameterizations, are also proposed.

--

Kenneth Sloan

[hidden email]
On Jan 22, 2014, at 11:04 , Kenneth Sloan <

[hidden email]> wrote:

> If the original surface is nicely behaved, and you don’t care too much about shape, here’s what I would do:

>

> The basic problem is to provide a “parameterization” of the observed 2D surface embedded in 3D. Once you have this, “flattening” is easy enough. Then, the issue is how to compute the average intensity.

>

> From your description, esp. the part about “unique Z for every pixel”, your surfaces are “functions over the plane”. This makes things simpler.

>

> Start by constructing a triangular mesh, with the surface voxels as vertices. For starters, I would simply triangulate the <x,y> grid points. For a function over the plane, this will work. Otherwise, you need to solve the “cloud of points -> surface” problem.

>

> If my assumption above is correct, you *could* just discard the Z co-ordinate. In that case, you lose information about the area covered. If the slope is severe, this is probably unacceptable. From your description, I gather that you have a “sphere-like” object, cut in half - so the slop is nearly vertical near the boundary.

>

> There is considerable literature on parameterizing such a surface, but I regret that I’m no longer current on it and would have to do some reading. You can do that. The key phrase in a search might be “parameterization, surface mesh”.

>

> One idea worth considering is to project the surface onto the plane (discarding Z) - this only works if your surface is a function over the plane. For each edge in the triangulation, maintain information about the CURRENT length of that edge and the ORIGINAL length (measured in 3D). Use a spring model to “relax” the mesh so that each edge attempts to move it’s vertices in order to make the length of the edge closer to the original length. With care, this should converge to a flat mesh which (as closely as possible) preserves distances between vertices and does a reasonable job of preserving areas).

>

> I don’t know how to do all this by “combining existing plug-ins”. You are looking at a significant piece of Java code. It feels like a nice term-project in a surface modeling course.

>

> This is sufficiently interesting to me that I might be interested in finding a student to work on it (and perhaps play with it myself). If you are interested in doing that, please contact me off-list.

> All I would need to start would be one “nice” example of one of your Stacks.

>

> It also may be that a short literature search will produce a better solution. The important thing is to be clear about the properties of your particular class of surfaces. IN GENERAL, this is “hard-to-impossible”, but your particular problem looks do-able, to me. Only, not by simply pulling plug-ins off the shelf.

>

> --

> Kenneth Sloan

>

[hidden email]
>

>

> On Jan 21, 2014, at 11:56 , Sébastien Tosi <

[hidden email]> wrote:

>

>> Hi all,

>>

>> I am processing a 3D stack holding a net like object (staining of the apical membrane of a curved tissue).

>>

>> I could detect the surface of the tissue and generate a topographic map where each pixel of the original stack is associated to a unique Z coordinate. The tissue is cut in two halves so that it is not closed and the curvature is quite smooth.

>>

>> I would now like to map the detected surface of the tissue to a 2D map in which each pixel intensity would be computed as the z average (or maximum) intensity computed around and perpendicularly to the 3D surface. In short a sort of 3D ImageJ "Straighten".

>>

>> The tricky part is the projection itself, I would be interested in preserving surfaces at the expense of shapes as the target measurement is the area of the cell apical sections.

>>

>> Is there a plugin performing this task or is it "simply" feasible by combining existing plugins?

>>

>> Best,

>> Sébastien

>>

>> --

>> ImageJ mailing list:

http://imagej.nih.gov/ij/list.html>

> --

> ImageJ mailing list:

http://imagej.nih.gov/ij/list.html--

ImageJ mailing list:

http://imagej.nih.gov/ij/list.html