FFT filtering in stack

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

FFT filtering in stack

jdif
I am attempting to use ImageJ to find the FFT of a stack of similar images and then reverse FFT after applying the same custom drawn filter to all of the images.

I am able to obtain the FFT of the satck using this macro:

 setBatchMode(true);
    stack = getImageID;
    newImage("FFT Movie of "+getTitle, "8-bit", getWidth, getHeight,  
nSlices);
    movie = getImageID;
    for (i=1; i<=nSlices; i++) {
       showProgress(i, nSlices);
       selectImage(stack);
       setSlice(i);
       run("FFT");
       run("Copy");
       close;
       selectImage(movie);
       setSlice(i);
       run("Paste");
    }
    setBatchMode(false);

For individual images, I would select areas of the FFT I wanted to delete and then multiply them by 0 using the Process->Math function, and then RFFT this new image (I am doing this to remove/edit selected features from the original image).  Is there any way I can draw this filter on one image and use it as a filter to apply this process to the whole stack?
Reply | Threaded
Open this post in threaded view
|

Re: FFT filtering in stack

Michael Schmid
Hi J,

if you create an FFT-like image that is 255 for everything that you want to pass, and 0 everywhere else, you can use it for Process>FFT>Custom Filter.  You can create such an image from the usual FFT with black 'pass' or white 'reject' areas by applying a suitable threshold.  You should then smoothen it a bit, to avoid 'ringing' artifacts.

The 'Custom Filter' should also work on stacks.

Michael
________________________________________________________________
On Jul 9, 2014, at 17:26, jdif wrote:

> I am attempting to use ImageJ to find the FFT of a stack of similar images
> and then reverse FFT after applying the same custom drawn filter to all of
> the images.
>
> I am able to obtain the FFT of the satck using this macro:
>
> setBatchMode(true);
>    stack = getImageID;
>    newImage("FFT Movie of "+getTitle, "8-bit", getWidth, getHeight,  
> nSlices);
>    movie = getImageID;
>    for (i=1; i<=nSlices; i++) {
>       showProgress(i, nSlices);
>       selectImage(stack);
>       setSlice(i);
>       run("FFT");
>       run("Copy");
>       close;
>       selectImage(movie);
>       setSlice(i);
>       run("Paste");
>    }
>    setBatchMode(false);
>
> For individual images, I would select areas of the FFT I wanted to delete
> and then multiply them by 0 using the Process->Math function, and then RFFT
> this new image (I am doing this to remove/edit selected features from the
> original image).  Is there any way I can draw this filter on one image and
> use it as a filter to apply this process to the whole stack?

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

Re: FFT filtering in stack

jdif
This worked exactly how I intended.  Thanks!