3D straighten

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

3D straighten

SebT
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
Reply | Threaded
Open this post in threaded view
|

Re: 3D straighten

SebT
Well it turns out that there might be no such mapping for generic 3D surfaces. The problem seems only solvable in simple cases (spheres, cylinders, ...). Still any ideas to obtain other types of mappings inducing area distortion are welcome...

--
ImageJ mailing list: http://imagej.nih.gov/ij/list.html
Reply | Threaded
Open this post in threaded view
|

Re: 3D straighten

Kenneth Sloan
In reply to this post by SebT
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
Reply | Threaded
Open this post in threaded view
|

Re: 3D straighten

Kenneth Sloan
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
Reply | Threaded
Open this post in threaded view
|

Measuring diffraction rings and intensity on digitized X-ray films

Henry Barwood
I work with X-ray powder diffraction films that are 3.5  X 36 cm in size. The diffraction is recorded as concentric circles on the film with different angles from the origin (the entrance of the X-ray beam to the powder camera). I would like to be able to convert these circular diffraction rings to a set of angles from the origin and also to be able to measure the intensity of the diffraction ring (the density of the image). A program for doing this was developed in the early 1990's that used NIH-Image, but that program no longer exists. If anyone can suggest a method to accomplish digitization of the angle of the diffraction rings and the intensity of the rings using ImageJ, please let me know. I've tried a number of methods with varying success, and most of them involved fairly le4ngthy and complex manipulation of the digitized film images.

Henry Barwood
Department of Chemistry and Physics
Troy University
Troy, Alabama  36082

--
ImageJ mailing list: http://imagej.nih.gov/ij/list.html
Reply | Threaded
Open this post in threaded view
|

Re: Measuring diffraction rings and intensity on digitized X-ray films

Diego Schmaedech
I do not know if that is what you are looking for. But if it is useful, you
can follow the links for more information;

https://code.google.com/p/jdebye/

[]


On 22 January 2014 18:07, Henry Barwood <[hidden email]> wrote:

> I work with X-ray powder diffraction films that are 3.5  X 36 cm in size.
> The diffraction is recorded as concentric circles on the film with
> different angles from the origin (the entrance of the X-ray beam to the
> powder camera). I would like to be able to convert these circular
> diffraction rings to a set of angles from the origin and also to be able to
> measure the intensity of the diffraction ring (the density of the image). A
> program for doing this was developed in the early 1990's that used
> NIH-Image, but that program no longer exists. If anyone can suggest a
> method to accomplish digitization of the angle of the diffraction rings and
> the intensity of the rings using ImageJ, please let me know. I've tried a
> number of methods with varying success, and most of them involved fairly
> le4ngthy and complex manipulation of the digitized film images.
>
> Henry Barwood
> Department of Chemistry and Physics
> Troy University
> Troy, Alabama  36082
>
> --
> ImageJ mailing list: http://imagej.nih.gov/ij/list.html
>



--




Diego Schmaedech

--
ImageJ mailing list: http://imagej.nih.gov/ij/list.html
Reply | Threaded
Open this post in threaded view
|

Re: 3D straighten

Guy Lyons
In reply to this post by Kenneth Sloan
Sebastien, Kenneth, did you eventually establish a solution to this? I have
the same issue i.e. a 3D stack of an epithelial tissue that has some
distortion in its base, and I would like to adjust the z values
non-uniformly to make the base of the tissue flat. Imagine the z-stack is a
piece of cloth: I want a plugin that will "iron" out the wrinkles.



--
Sent from: http://imagej.1557.x6.nabble.com/

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