3D two-point-correlation

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

3D two-point-correlation

Sawako
Dear all,

    I am doing a project to implement two-point correlation method to analysis the microstructures in single sand particle based on μCT images.
    We have found a plugin which uses two-point-correlation to estimate fluid permeability of porous materials from the website.
(http://wbgn013.biozentrum.uni-wuerzburg.de/ImageJ/two-point-correlation.html)
    However, it could only deal with 2D images and isotropic materials and we don’t know how to put it into 3D practice for three different directions (x, y and z).
    I get really puzzled now and hope if you can give me some suggestion.
    A prompt reply would greatly oblige us.

Best wishes

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

Re: 3D two-point-correlation

dscho
Hi Sawako,

for the record: the website you pointed out listed me as author, therefore
the best way to send this mail would have been to address it to *both* the
ImageJ list *and* Cc: me.

On Sat, 28 Dec 2013, Sawako wrote:

>     I am doing a project to implement two-point correlation method to analysis the microstructures in single sand particle based on μCT images.
>     We have found a plugin which uses two-point-correlation to estimate fluid permeability of porous materials from the website.
> (http://wbgn013.biozentrum.uni-wuerzburg.de/ImageJ/two-point-correlation.html)

Note that this website seems to be unreachable at the moment. But the
Wayback Machine has it:

        https://web.archive.org/web/20100720215202/http://wbgn013.biozentrum.uni-wuerzburg.de/ImageJ/two-point-correlation.html

However, the Wayback machine does not have the Two_Point_Correlation.jar.
That file is obsolete anyway because it is superseded by the VIB_.jar
generated from Fiji's source code repository. The relevant source code is
here:

        https://github.com/fiji/fiji/blob/master/src-plugins/VIB_/src/main/java/Two_Point_Correlation.java

>     However, it could only deal with 2D images and isotropic materials
>     and we don’t know how to put it into 3D practice for three different
>     directions (x, y and z).

The basic idea of the two-point correlation method is to calculate
correlation measures between the original image and transposed versions of
itself, and store the calculated value at coordinates corresponding to the
transposition vector.

The correlation is not limited to 2D; in fact, it is defined completely
independent of any dimensionality. Likewise with the transposition,
meaning that it is straight-forward to extend the theory from 2D to nD.

> I get really puzzled now and hope if you can give me some suggestion.

My main contribution with this plugin was to note that a correlation of
images A and B is equivalent to a convolution of image A with image B
flipped around its center.

That opens the door to use a faster (if somewhat less accurate) way to
calculate the correlation via Fourier-transformed images (a convolution in
scale space is a scalar product in Fourier space; the naive way to
calculate a convolution has quadratic time complexity while the Fourier
transform has only linear-times-logarithmic time complexity, and the
scalar product only linear time complexity, hence the latter runs much
quicker).

Now, especially given that you want to extend this method to 3D (which has
to deal with larger amounts of data, typically) it is highly desirable to
use the quicker method rather than the slower one.

Unfortunately, the plugin uses ImageJ 1.x' FFT class which is both limited
to 2D *and* does not quite implement a Fast Fourier Transform (despite its
name): instead, it calculates the Fast Hartley Transform. Having said
that, the Hartley transform shares the property with the Fourier transform
that convolutions in scale space are equivalent to scalar products in the
transformed space. The advantage of the Hartley transform over the Fourier
transform (and the reason it is used in ImageJ 1.x instead) is that the
former operates on real number spaces while the latter is defined on
complex number spaces.

As you can see, the only problem here is the use of ImageJ 1.x' FFT class
and the incurred limitation to two dimensions.

The best way to proceed, therefore, would be to use something like
ImgLib2's Fourier Transform (which is not limited to two dimensions).

> A prompt reply would greatly oblige us.

No need to get pushy on me ;-)

Ciao,
Johannes

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