FFT filter conversion to real space

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

FFT filter conversion to real space

G. Esteban Fernandez
Hello all,

I have a slit-scanning confocal in my facility that sometimes introduces
vertical line artifacts into images.  I use ImageJ to correct these defects
in frequency space; I make a thin horz. rectangle through the middle of the
FFT map, except through the very center.  How can I do the same filtering in
real space?  I'm looking for a kernel that I can use in other programs that
don't have Fourier capabilities.  (sample images and mask at
http://www.missouri.edu/~fernandezg/FFT)

On a related note, can people suggest a resource/reference for converting
Fourier filters to real space in general?

Thanks and Happy Holidays!

-Esteban

--
G. Esteban Fernandez, Ph.D.
Associate Director
Molecular Cytology Core Facility
University of Missouri
120 Bond Life Sciences Center
Columbia, MO  65211

http://www.biotech.missouri.edu/mcc/

573-882-4895
573-884-9395 fax
Reply | Threaded
Open this post in threaded view
|

Re: FFT filter conversion to real space

Gluender-2
>Hello all,
>
>I have a slit-scanning confocal in my facility that sometimes introduces
>vertical line artifacts into images.  I use ImageJ to correct these defects
>in frequency space; I make a thin horz. rectangle through the middle of the
>FFT map, except through the very center.  How can I do the same filtering in
>real space?  I'm looking for a kernel that I can use in other programs that
>don't have Fourier capabilities.  (sample images and mask at
>http://www.missouri.edu/~fernandezg/FFT)
>
>On a related note, can people suggest a resource/reference for converting
>Fourier filters to real space in general?
>
>Thanks and Happy Holidays!
>
>-Esteban
>
>--
>G. Esteban Fernandez, Ph.D.
>Associate Director
>Molecular Cytology Core Facility
>University of Missouri
>120 Bond Life Sciences Center
>Columbia, MO  65211
>
>http://www.biotech.missouri.edu/mcc/
>
>573-882-4895
>573-884-9395 fax


By "real space" you mean the image- or 2-dimensional space-domain, do you?

Filtering in the frequency- or Fourier-domain means multiplication of
the complex-valued Fourier-spectrum of your image with the filter
function (mask), in your case the horizontal bar with a gap around
the DC-term.

Filtering in the space-domain means convolution with the filter's
point-response (convolution kernel) which is the Fourier-retransform
of the filter function.

Consequently, you could try to Fourier-retransform the horizontal bar
with a gap around the DC-term. However the resulting convolution
kernel may turn out impractical for several reasons:
1) It may be complex-valued (in any case it will be bipolar)
2) It may be too big (extended)
But the result may be a starting point for what you want.

If your bar were line-like and without the gap, the
Fourier-retransform would be confined to the y-axis in space domain.
It would be a negative constant on this line with a positive peak at
the origin. To mimic the gap, you could add a constant to the result
of the convolution until your image is strictly positive.

Of course, there are better solutions to the problem but they are
more involved.

HTH
--

                   Herbie

          ------------------------
          <http://www.gluender.de>
Reply | Threaded
Open this post in threaded view
|

FFT multiplication

Winnok H. De Vos
Dear All,

I would like to take the opportunity to ask another question regarding  
Fourier operations. I would like to perform spatiotemporal image  
correlation in the Fourier domain because of speed and memory  
considerations.
If I understand correctly, convolution of two images (i.e.  
correlation) in the spatial domain, equals mere multiplication of the  
Fourier transformed images in the frequency domain.
However, when multiplying two FFT images, the resulting images is no  
longer expressed in polar coordinates and therefore cannot be  
transformed back by inverse FFT. I tried FD Math correlate, but this  
operation requires two square images of fixed dimensions and I'm not  
sure if enlarging the canvas size goes without consequences for the  
correlation outcome. I have noticed that the latter operation appears  
to give a similar resulting image whether one uses the original images  
as input or the Fourier transformed.
Could anybody please share on how to do this the right way?
Many thanks in advance and best wishes,

Winnok

ps: the archives were unaccesible, so apologies if this is a duplicate query.
Reply | Threaded
Open this post in threaded view
|

Re: FFT multiplication

Gluender-2
>Dear All,
>
>I would like to take the opportunity to ask
>another question regarding Fourier operations. I
>would like to perform spatiotemporal image
>correlation in the Fourier domain because of
>speed and memory considerations.
>If I understand correctly, convolution of two
>images (i.e. correlation) in the spatial domain,
>equals mere multiplication of the Fourier
>transformed images in the frequency domain.

Well, not perfectly but nearly...

Convolution and correlation is not the same but they are quite similar.
You must take care of the differences:

1) Convolution is a commutative operation, correlation is not.
        k(rho) = [b(r) corr a(r)] != [a(r) corr b(r)] = kÝ(-rho)

        Ý stands for "complex conjugate" and can be ignored
        when dealing with images (that are real-valued signals).

2) The relations between convolution and corelation are
        k(rho) = b(r) corr a(r) = b(r) conv aÝ(-r)
        f(rho) = b(r) conv a(r) = b(r) corr aÝ(-r)

>However, when multiplying two FFT images, the
>resulting images is no longer expressed in polar
>coordinates and therefore cannot be transformed
>back by inverse FFT.

If you Fourier-transform an image b(r) = b(x,y),
then it results in a (generally complex-valued)
Fourier-spectrum in Cartesian coordinates B(f_r)
= B(f_x, f_y).

Of course, you may represent whatever
2-dimensional function in polar coordinates but
this has nothing to do with the
Fourier-transformation.

As far as I remember and for whatever reasons --
though displaying Fourier-spectra in Cartesian
coordinates -- IJ _numerically_ indicates the
spectral coordinates as polar coordinates. Please
correct me if I'm wrong or if this behavior has
been changed.
(Personally and for several reasons, I don't use
IJ's Fourier-transformation. Instead I use the
slower IJ-PlugIn FFTJ.)

>I tried FD Math correlate, but this operation
>requires two square images of fixed dimensions
>and I'm not sure if enlarging the canvas size
>goes without consequences for the correlation
>outcome.

You may add appropriate surrounding areas of
preferably constant gray-value to your images.
(Avoid any gray-level steps when doing so.)

FD-Math in fact is based on the Fourier-approach
and therefore requires square sized image with
side-length being a power of 2. This is due to
the implemented algorithm. Digital
Fourier-transformation of arbitrarily sized
images is much slower (the IJ-PlugIn FFTJ is able
to do just that).

>I have noticed that the latter operation appears
>to give a similar resulting image whether one
>uses the original images as input or the Fourier
>transformed.
>Could anybody please share on how to do this the right way?
>Many thanks in advance and best wishes,
>
>Winnok
>
>ps: the archives were unaccesible, so apologies if this is a duplicate query.

HTH
--

                   Herbie

          ------------------------
          <http://www.gluender.de>
Reply | Threaded
Open this post in threaded view
|

Re: FFT multiplication

Robert Dougherty
In reply to this post by Winnok H. De Vos
Winnock,

You could try the plugin Convolve 3D on my site.  You should not give  
it stacks of images unless you want 3D convolution or correlation.

Bob

On Dec 25, 2008, at 3:25 AM, Winnok De Vos wrote:

> Dear All,
>
> I would like to take the opportunity to ask another question  
> regarding Fourier operations. I would like to perform spatiotemporal  
> image correlation in the Fourier domain because of speed and memory  
> considerations.
> If I understand correctly, convolution of two images (i.e.  
> correlation) in the spatial domain, equals mere multiplication of  
> the Fourier transformed images in the frequency domain.
> However, when multiplying two FFT images, the resulting images is no  
> longer expressed in polar coordinates and therefore cannot be  
> transformed back by inverse FFT. I tried FD Math correlate, but this  
> operation requires two square images of fixed dimensions and I'm not  
> sure if enlarging the canvas size goes without consequences for the  
> correlation outcome. I have noticed that the latter operation  
> appears to give a similar resulting image whether one uses the  
> original images as input or the Fourier transformed.
> Could anybody please share on how to do this the right way?
> Many thanks in advance and best wishes,
>
> Winnok
>
> ps: the archives were unaccesible, so apologies if this is a  
> duplicate query.
>

Robert Dougherty, Ph.D.
President, OptiNav, Inc.
10900 NE 8th St, Suite 900
Bellevue, WA 98004
Tel. (425)990-5912
FAX (425)467-1119
www.optinav.com
[hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: FFT multiplication

Winnok H. De Vos
In reply to this post by Gluender-2
Thank you very much for your well documented response.
So in summary, squaring the canvas (e.g. black fill) and using FD Math
correlate on the original images should return relatively reliable data.
I know the polar coordinates are just a representation, but how does one
convert an image (for instance after multiplying these two FFT
images=correlation) back to such representation in order to be able to
perform the inverse Fourier transform?
I checked out FFTJ as well, but it indeed is far slower, just what I wanted
to circumvent.
Best regards,
Winnok


>Dear All,
>
>I would like to take the opportunity to ask
>another question regarding Fourier operations. I
>would like to perform spatiotemporal image
>correlation in the Fourier domain because of
>speed and memory considerations.
>If I understand correctly, convolution of two
>images (i.e. correlation) in the spatial domain,
>equals mere multiplication of the Fourier
>transformed images in the frequency domain.

Well, not perfectly but nearly...

Convolution and correlation is not the same but they are quite similar.
You must take care of the differences:

1) Convolution is a commutative operation, correlation is not.
        k(rho) = [b(r) corr a(r)] != [a(r) corr b(r)] = kÝ(-rho)

        Ý stands for "complex conjugate" and can be ignored
        when dealing with images (that are real-valued signals).

2) The relations between convolution and corelation are
        k(rho) = b(r) corr a(r) = b(r) conv aÝ(-r)
        f(rho) = b(r) conv a(r) = b(r) corr aÝ(-r)

>However, when multiplying two FFT images, the
>resulting images is no longer expressed in polar
>coordinates and therefore cannot be transformed
>back by inverse FFT.

If you Fourier-transform an image b(r) = b(x,y),
then it results in a (generally complex-valued)
Fourier-spectrum in Cartesian coordinates B(f_r)
= B(f_x, f_y).

Of course, you may represent whatever
2-dimensional function in polar coordinates but
this has nothing to do with the
Fourier-transformation.

As far as I remember and for whatever reasons --
though displaying Fourier-spectra in Cartesian
coordinates -- IJ _numerically_ indicates the
spectral coordinates as polar coordinates. Please
correct me if I'm wrong or if this behavior has
been changed.
(Personally and for several reasons, I don't use
IJ's Fourier-transformation. Instead I use the
slower IJ-PlugIn FFTJ.)

>I tried FD Math correlate, but this operation
>requires two square images of fixed dimensions
>and I'm not sure if enlarging the canvas size
>goes without consequences for the correlation
>outcome.

You may add appropriate surrounding areas of
preferably constant gray-value to your images.
(Avoid any gray-level steps when doing so.)

FD-Math in fact is based on the Fourier-approach
and therefore requires square sized image with
side-length being a power of 2. This is due to
the implemented algorithm. Digital
Fourier-transformation of arbitrarily sized
images is much slower (the IJ-PlugIn FFTJ is able
to do just that).

>I have noticed that the latter operation appears
>to give a similar resulting image whether one
>uses the original images as input or the Fourier
>transformed.
>Could anybody please share on how to do this the right way?
>Many thanks in advance and best wishes,
>
>Winnok
>
>ps: the archives were unaccesible, so apologies if this is a duplicate
query.

HTH
--

                   Herbie

          ------------------------
          <http://www.gluender.de>

No virus found in this incoming message.
Checked by AVG.
Version: 7.5.552 / Virus Database: 270.10.0/1861 - Release Date: 22/12/2008
11:23
 

No virus found in this outgoing message.
Checked by AVG.
Version: 7.5.552 / Virus Database: 270.10.0/1861 - Release Date: 22/12/2008
11:23
 
Reply | Threaded
Open this post in threaded view
|

Re: FFT multiplication

Gluender-2
>Thank you very much for your well documented response.
>So in summary, squaring the canvas (e.g. black fill) and using FD Math
>correlate on the original images should return relatively reliable data.

That's what I would expect.
The color of the "fill" depends on the kind of your images.

>I know the polar coordinates are just a representation, but how does one
>convert an image (for instance after multiplying these two FFT
>images=correlation) back to such representation in order to be able to
>perform the inverse Fourier transform?

OK, first of all here is what concerns the spectral "multiplication":

3) What does remark 2) mean for spectral functions?

b(r)  conv  a(r)
  |           |
  FT          FT
  |           |
B(f_r)  *  A(f_r)


[ b(r)  corr  a(r) ]   =  [ b(r)  conv  aÝ(-r) ]
    |           |            |            |
    FT          FT           FT           FT
    |           |            |            |
[ B(f_r)  *  AÝ(f_r) ] =  [ B(f_r)  *  AÝ(f_r) ]

* stands for multiplication and
Ý stands for "complex conjugate"

Because the Fourier-transforms of your images are
most likely complex-valued, you must take care of
the the "complex conjugate" AÝ(f_r)!

A(f_r)  = Re{ A(f_r) } + i * Im{ A(f_r) };
AÝ(f_r) = Re{ A(f_r) } - i * Im{ A(f_r) };



4) How to multiply complex numbers cz = cx * cy ?

cx = rx + i ix;
cy = ry + i iy;

cz = cx * cy = (rx * ry - ix * iy) + i(rx * iy + ry * ix) = rz + i iz;


With this in mind, you have do perform the
Fourier-transforms of your images that result in
2 spectral components each (real and imaginary
parts). Then you do the complex multiplication
taking into account the "complex conjugate" of
the spectrum of one of your images. Finally you
do a Fourier-retransform of the resulting complex
"product"-spectrum which should result in a
real-valued image (but it wont!). That's all.

I just checked this procedure with FFTJ and it works perfectly!


>I checked out FFTJ as well, but it indeed is far slower, just what I wanted
>to circumvent.
>Best regards,
>Winnok


HTH further

                  Herbie

          ------------------------
          <http://www.gluender.de>



>  >Dear All,
>>
>>I would like to take the opportunity to ask
>>another question regarding Fourier operations. I
>>would like to perform spatiotemporal image
>>correlation in the Fourier domain because of
>>speed and memory considerations.
>>If I understand correctly, convolution of two
>>images (i.e. correlation) in the spatial domain,
>>equals mere multiplication of the Fourier
>>transformed images in the frequency domain.
>
>Well, not perfectly but nearly...
>
>Convolution and correlation is not the same but they are quite similar.
>You must take care of the differences:
>
>1) Convolution is a commutative operation, correlation is not.
> k(rho) = [b(r) corr a(r)] != [a(r) corr b(r)] = kÝ(-rho)
>
> Ý stands for "complex conjugate" and can be ignored
> when dealing with images (that are real-valued signals).
>
>2) The relations between convolution and corelation are
> k(rho) = b(r) corr a(r) = b(r) conv aÝ(-r)
> f(rho) = b(r) conv a(r) = b(r) corr aÝ(-r)
>
>>However, when multiplying two FFT images, the
>>resulting images is no longer expressed in polar
>>coordinates and therefore cannot be transformed
>>back by inverse FFT.
>
>If you Fourier-transform an image b(r) = b(x,y),
>then it results in a (generally complex-valued)
>Fourier-spectrum in Cartesian coordinates B(f_r)
>= B(f_x, f_y).
>
>Of course, you may represent whatever
>2-dimensional function in polar coordinates but
>this has nothing to do with the
>Fourier-transformation.
>
>As far as I remember and for whatever reasons --
>though displaying Fourier-spectra in Cartesian
>coordinates -- IJ _numerically_ indicates the
>spectral coordinates as polar coordinates. Please
>correct me if I'm wrong or if this behavior has
>been changed.
>(Personally and for several reasons, I don't use
>IJ's Fourier-transformation. Instead I use the
>slower IJ-PlugIn FFTJ.)
>
>>I tried FD Math correlate, but this operation
>  >requires two square images of fixed dimensions
>>and I'm not sure if enlarging the canvas size
>>goes without consequences for the correlation
>>outcome.
>
>You may add appropriate surrounding areas of
>preferably constant gray-value to your images.
>(Avoid any gray-level steps when doing so.)
>
>FD-Math in fact is based on the Fourier-approach
>and therefore requires square sized image with
>side-length being a power of 2. This is due to
>the implemented algorithm. Digital
>Fourier-transformation of arbitrarily sized
>images is much slower (the IJ-PlugIn FFTJ is able
>to do just that).
>
>>I have noticed that the latter operation appears
>>to give a similar resulting image whether one
>>uses the original images as input or the Fourier
>>transformed.
>>Could anybody please share on how to do this the right way?
>>Many thanks in advance and best wishes,
>>
>>Winnok
>>
>>ps: the archives were unaccesible, so apologies if this is a duplicate
>query.
>
>HTH
>--
>
>                    Herbie
>
>           ------------------------
>           <http://www.gluender.de>
>
>No virus found in this incoming message.
>Checked by AVG.
>Version: 7.5.552 / Virus Database: 270.10.0/1861 - Release Date: 22/12/2008
>11:23
>
>
>No virus found in this outgoing message.
>Checked by AVG.
>Version: 7.5.552 / Virus Database: 270.10.0/1861 - Release Date: 22/12/2008
>11:23
Reply | Threaded
Open this post in threaded view
|

Re: FFT multiplication

Winnok H. De Vos
Of course! I manually performed the operations described and obtained  
a correlation image, which indeed still contains a complex component  
(?). The resulting image (+ swap quadrants) corresponds with the one  
generated by FD Math as well as Bob's convolve 3D plugin. The latter  
actually runs very fast and works on rectagular images. Thanks for  
your patience and detailed explanation.
Cheers,
winnok


Citeren Gluender <[hidden email]>:

>> Thank you very much for your well documented response.
>> So in summary, squaring the canvas (e.g. black fill) and using FD Math
>> correlate on the original images should return relatively reliable data.
>
> That's what I would expect.
> The color of the "fill" depends on the kind of your images.
>
>> I know the polar coordinates are just a representation, but how does one
>> convert an image (for instance after multiplying these two FFT
>> images=correlation) back to such representation in order to be able to
>> perform the inverse Fourier transform?
>
> OK, first of all here is what concerns the spectral "multiplication":
>
> 3) What does remark 2) mean for spectral functions?
>
> b(r)  conv  a(r)
>  |           |
>  FT          FT
>  |           |
> B(f_r)  *  A(f_r)
>
>
> [ b(r)  corr  a(r) ]   =  [ b(r)  conv  aÝ(-r) ]
>    |           |            |            |
>    FT          FT           FT           FT
>    |           |            |            |
> [ B(f_r)  *  AÝ(f_r) ] =  [ B(f_r)  *  AÝ(f_r) ]
>
> * stands for multiplication and
> Ý stands for "complex conjugate"
>
> Because the Fourier-transforms of your images are most likely  
> complex-valued, you must take care of the the "complex conjugate"  
> AÝ(f_r)!
>
> A(f_r)  = Re{ A(f_r) } + i * Im{ A(f_r) };
> AÝ(f_r) = Re{ A(f_r) } - i * Im{ A(f_r) };
>
>
>
> 4) How to multiply complex numbers cz = cx * cy ?
>
> cx = rx + i ix;
> cy = ry + i iy;
>
> cz = cx * cy = (rx * ry - ix * iy) + i(rx * iy + ry * ix) = rz + i iz;
>
>
> With this in mind, you have do perform the Fourier-transforms of your
> images that result in 2 spectral components each (real and imaginary
> parts). Then you do the complex multiplication taking into account the
> "complex conjugate" of the spectrum of one of your images. Finally you
> do a Fourier-retransform of the resulting complex "product"-spectrum
> which should result in a real-valued image (but it wont!). That's all.
>
> I just checked this procedure with FFTJ and it works perfectly!
>
>
>> I checked out FFTJ as well, but it indeed is far slower, just what I wanted
>> to circumvent.
>> Best regards,
>> Winnok
>
>
> HTH further
>
>                  Herbie
>
>          ------------------------
>          <http://www.gluender.de>
>
>
>
>> >Dear All,
>>>
>>> I would like to take the opportunity to ask
>>> another question regarding Fourier operations. I
>>> would like to perform spatiotemporal image
>>> correlation in the Fourier domain because of
>>> speed and memory considerations.
>>> If I understand correctly, convolution of two
>>> images (i.e. correlation) in the spatial domain,
>>> equals mere multiplication of the Fourier
>>> transformed images in the frequency domain.
>>
>> Well, not perfectly but nearly...
>>
>> Convolution and correlation is not the same but they are quite similar.
>> You must take care of the differences:
>>
>> 1) Convolution is a commutative operation, correlation is not.
>> k(rho) = [b(r) corr a(r)] != [a(r) corr b(r)] = kÝ(-rho)
>>
>> Ý stands for "complex conjugate" and can be ignored
>> when dealing with images (that are real-valued signals).
>>
>> 2) The relations between convolution and corelation are
>> k(rho) = b(r) corr a(r) = b(r) conv aÝ(-r)
>> f(rho) = b(r) conv a(r) = b(r) corr aÝ(-r)
>>
>>> However, when multiplying two FFT images, the
>>> resulting images is no longer expressed in polar
>>> coordinates and therefore cannot be transformed
>>> back by inverse FFT.
>>
>> If you Fourier-transform an image b(r) = b(x,y),
>> then it results in a (generally complex-valued)
>> Fourier-spectrum in Cartesian coordinates B(f_r)
>> = B(f_x, f_y).
>>
>> Of course, you may represent whatever
>> 2-dimensional function in polar coordinates but
>> this has nothing to do with the
>> Fourier-transformation.
>>
>> As far as I remember and for whatever reasons --
>> though displaying Fourier-spectra in Cartesian
>> coordinates -- IJ _numerically_ indicates the
>> spectral coordinates as polar coordinates. Please
>> correct me if I'm wrong or if this behavior has
>> been changed.
>> (Personally and for several reasons, I don't use
>> IJ's Fourier-transformation. Instead I use the
>> slower IJ-PlugIn FFTJ.)
>>
>>> I tried FD Math correlate, but this operation
>> >requires two square images of fixed dimensions
>>> and I'm not sure if enlarging the canvas size
>>> goes without consequences for the correlation
>>> outcome.
>>
>> You may add appropriate surrounding areas of
>> preferably constant gray-value to your images.
>> (Avoid any gray-level steps when doing so.)
>>
>> FD-Math in fact is based on the Fourier-approach
>> and therefore requires square sized image with
>> side-length being a power of 2. This is due to
>> the implemented algorithm. Digital
>> Fourier-transformation of arbitrarily sized
>> images is much slower (the IJ-PlugIn FFTJ is able
>> to do just that).
>>
>>> I have noticed that the latter operation appears
>>> to give a similar resulting image whether one
>>> uses the original images as input or the Fourier
>>> transformed.
>>> Could anybody please share on how to do this the right way?
>>> Many thanks in advance and best wishes,
>>>
>>> Winnok
>>>
>>> ps: the archives were unaccesible, so apologies if this is a duplicate
>> query.
>>
>> HTH
>> --
>>
>>                   Herbie
>>
>>          ------------------------
>>          <http://www.gluender.de>
>>
>> No virus found in this incoming message.
>> Checked by AVG.
>> Version: 7.5.552 / Virus Database: 270.10.0/1861 - Release Date: 22/12/2008
>> 11:23
>>
>>
>> No virus found in this outgoing message.
>> Checked by AVG.
>> Version: 7.5.552 / Virus Database: 270.10.0/1861 - Release Date: 22/12/2008
>> 11:23



--
assistent prof. P. Van Oostveldt
Dep. Moleculaire Biotechnologie
Fac. Toegepaste Landbouwwetenschappen, Ugent
Coupure links 653
9000 Gent
tel. (0032) 09/264.59.71
Reply | Threaded
Open this post in threaded view
|

Re: FFT multiplication

Kenneth Sloan-2
In reply to this post by Winnok H. De Vos
On Dec 26, 2008, at 3:46 AM, Winnok De Vos (ugent) wrote:

> Thank you very much for your well documented response.
> So in summary, squaring the canvas (e.g. black fill)

GRAY fill!

Fill with zeroes IFF pixels are SIGNED.  The idea is to fill with the  
DC value of the "actual" data.
This way you don't change the final DC value and you minimize the  
artifacts due to the fact that your signal is neither infinite nor  
cyclic.

--
Kenneth Sloan
[hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: FFT filter conversion to real space

Michael Schmid
In reply to this post by G. Esteban Fernandez
Hi,

Eliminating a horizontal line with vertical frequency = 0 corresponds to
subtracting the average of each vertical line in the image. The wider the
rectangle that you block, the more you also remove slow variations along a
vertical line.

So, the kernel of the filter operation would be too large for a reasonably
fast convolution operation. It will be a n*1 kernel, with large 'n', a
value of 1 at the zero point and all other values negative, tapering off
to 0 at large radius. The sum of all kernel values must be zero.

A better alternative to the inverse of the Fourier domain operation is
subtracting a filtered image in real space. You can try it using the "Fast
Filters" plugin:

http://imagejdocu.tudor.lu/doku.php?id=plugin:filter:fast_filters:start

Select 'x radius = 0',  a large value of 'y radius', and 'subtract filtered'.
The 'mean' or 'border-limited mean' will come close to your Fourier domain
filter. If your image has a dark (low-value) background you can also try
'background from minima' instead of 'mean'.

Some of these operations can be easily done in many other programs, e.g.
'mean' in one direction is the equivalent of 'motion blur' in Photoshop.
Running it twice will reduce 'hard edge' artifacts.

Michael

___________________________________________________________________________

On Wed, December 24, 2008 15:20, G. Esteban Fernandez wrote:

> Hello all,
>
> I have a slit-scanning confocal in my facility that sometimes introduces
> vertical line artifacts into images.  I use ImageJ to correct these
> defects
> in frequency space; I make a thin horz. rectangle through the middle of
> the
> FFT map, except through the very center.  How can I do the same filtering
> in
> real space?  I'm looking for a kernel that I can use in other programs
> that
> don't have Fourier capabilities.  (sample images and mask at
> http://www.missouri.edu/~fernandezg/FFT)
>
> On a related note, can people suggest a resource/reference for converting
> Fourier filters to real space in general?
>
> Thanks and Happy Holidays!
>
> -Esteban
>
> --
> G. Esteban Fernandez, Ph.D.
> Associate Director
> Molecular Cytology Core Facility
> University of Missouri
> 120 Bond Life Sciences Center
> Columbia, MO  65211
>
> http://www.biotech.missouri.edu/mcc/
>
> 573-882-4895
> 573-884-9395 fax
>
Reply | Threaded
Open this post in threaded view
|

Re: FFT && Padding && Fast FFTs Java && Polar FFT

Stephan Preibisch
In reply to this post by Winnok H. De Vos
Hi,

maybe this might help you as well. I recently presented my Stitching Tools
at the ImageJ conference, they are Fourier based and compute the
correlation between n-dimensional images.

Have a look here:
http://fly.mpi-cbg.de/~preibisch/software.html#Stitching

There is also a conference paper explaining everything in detail:
http://fly.mpi-cbg.de/~preibisch/pubs/imagejpaper2008.pdf

Concerning padding of the images what was discussed as well it turned out
best for us if one extends the images by their mirrored content which is
faded using a exponential function.

Btw, I use an extended version of Dave Hale's 1D FFT. It is by far the
fastest one I have seen under Java, I have the multithreaded ImageJ
version on my website as well:
http://fly.mpi-cbg.de/~preibisch/software.html#FFT

And if you are interested in polar FFTs, I can suggest you two algorithms
from two different groups which deal with that:

Fast Fourier transforms for nonequispaced data, Potts et. al.
http://www-user.tu-chemnitz.de/~potts/nfft/
http://www-user.tu-chemnitz.de/~potts/nfft/polar.php

Fast and Accurate Polar Fourier Transform, Averbuch et. al.
http://www.cs.tau.ac.il/~amir1/PS/Polar_Paper_New.pdf
http://www.math.umn.edu/~focm/c_/Elad.pdf

All the best, hope it helps,
Stephan

> Dear All,
>
> I would like to take the opportunity to ask another question regarding
> Fourier operations. I would like to perform spatiotemporal image
> correlation in the Fourier domain because of speed and memory
> considerations.
> If I understand correctly, convolution of two images (i.e.
> correlation) in the spatial domain, equals mere multiplication of the
> Fourier transformed images in the frequency domain.
> However, when multiplying two FFT images, the resulting images is no
> longer expressed in polar coordinates and therefore cannot be
> transformed back by inverse FFT. I tried FD Math correlate, but this
> operation requires two square images of fixed dimensions and I'm not
> sure if enlarging the canvas size goes without consequences for the
> correlation outcome. I have noticed that the latter operation appears
> to give a similar resulting image whether one uses the original images
> as input or the Fourier transformed.
> Could anybody please share on how to do this the right way?
> Many thanks in advance and best wishes,
>
> Winnok
>
> ps: the archives were unaccesible, so apologies if this is a duplicate
> query.
>