Re: how active a different img

Posted by sombreroduck on
URL: http://imagej.273.s1.nabble.com/activeImage-how-to-set-it-tp3701057p5002826.html

Hi Michael,
Sorry I've been even slower in replying, I've also been away, twice...and it's all been a bit crazy. Somewhere in-between though, as you guessed, I did indeed manage to get a couple of versions of the plugin working. I think the relevant bit is this (comments below the lines for readability)

                    doFFT(impFFT, fftroi, noise, countx+antal*county, ResultsTable.getResultsTable());  
// This is a method that will do an FFT and find the maxima

                    impInvFFT=doInvFFT(impFFT, ResultsTable.getResultsTable().getCounter()-1, countx+antal*county); 
// This method will perform an inverse FFT, close the FFT window, and return the imp for the inverse FFT

                    WindowManager.setTempCurrentImage(imp);        
// This, I thought, was what would set the original image as the active window    

                    IJ.run("Add Image...", "x="+roix+" y="+roiy+" opacity=100");  
//overlays the invFFT onto the orig image

                    impInvFFT.changes=false;                             
                    impInvFFT.close();
// closes the invFFT

                   impFFT.close();   
//tries to close the FFT again, just in case (I don't trust my code to do it the first time....)


Do you mean that I should use WindowManager.setTempCurrentImage(imp)   BEFORE  I do any FFT and invFFT?

I've attached the whole .java file, but I'm afraid it's a bit messy. Iit's all been written in a bit of a rush, plus, if you've not already guessed, I'm not a programmer of any kind (and don't know what a race-condition or FloatProcessor is), I normally just live in the lab with my polymers and surfaces...

Thank you for your help!
R





On 15 April 2013 16:20, Michael Schmid-3 [via ImageJ] <[hidden email]> wrote:
Hi SombreroDuck,

maybe you have solved it already (I've been out of town for a week), but anyhow:

WindowManager.getCurrentImage() points to the image shown as active (having a hook) in the 'Window' menu of ImageJ.  BatchMode macros are the only exception.

You need to determine the current image before running the first FFT.
  ImagePlus imp = WindowManager.getCurrentImage();
Then run the FFT, filter it (or modify it however you like), and do the back transform.

If imp points to the wrong image (the FFT), it's a bug (race condition) in ImageJ: You should be able to fix it by inserting some delay, e.g. 100 milliseconds,
  IJ.wait(100);
before running the FFT. If there *is* a race condition, please post your code (ideally, stripped down to the essence) to let us examine the problem.

--
By the way, if you have a plugin, for some operations you don't need to display the FFT:
You can get the ImageProcessor of the current image and get the FHT from it, see the ij.process.FHT class. Then work on the resulting FloatProcessor, use the FHT's inverse transform and crop it to the original size.

Michael
________________________________________________________________
On Apr 7, 2013, at 15:48, sombreroduck wrote:

> Hi Michael,
> Thanks for the help!. In fact, I had tried the commands you suggested (with
> "WindowManager" in front since it's a plugin, not a macro) but it was
> either throwing errors, ignoring the command, or picking the FFT image
> instead. This latter happened now when I tried again, but I found that if I
> closed the FFT window first it would work. Do you know why it was always
> picking the title, id or imp of the FFT (middle image) and not the
> InverseFFT? (front image)
> Thanks again!
>
>
> On 5 April 2013 18:03, Michael Schmid-3 [via ImageJ] <
> [hidden email]> wrote:
>
>> Hi Sombreroduck,
>>
>> assuming you are writing a macro (your commands don't look like java code
>> of a plugin):
>>
>> Before using selectImage(id) or selectImage(title), you have to define the
>> variable 'id' (or 'title') while the image is still in the foreground:
>>  id = getImageID();
>> or
>>  title = getTitle();
>>
>>
>> When really writing a plugin, however, use
>>  ImagePlus imp = WindowManager.getCurrentImage();
>> Later on, you can use
>>  WindowManager.setTempCurrentImage(imp);
>>
>>
>> Michael
>> _________________________________________________________________
>>
>>
>> On Fri, April 5, 2013 17:10, sombreroduck wrote:
>>
>>> Hi,
>>> I'm writing a plugin which runs an FFT and then an Inverse FFT on (part
>>> of)
>>> an image. I then want to overlay this new inverse back onto the original
>>> image, and had thought to do this with IJ.run("Add Image...", "etc...);
>>> but
>>> to do this the original image would have to be active.
>>>
>>> I've tried selectImage(id) and selectImage(title) but it just throws
>>> errors
>>> "cannot find symbol". Does anyone know how I can convince it to make the
>>> original image active again?
>>>
>>> (alternatively if you know another way to pop the inverse FFT back onto
>>> the
>>> original img?)
>>>
>>>
>>> Cheers!
>>> R
>>>
>>>
>>>
>>> --
>>> View this message in context:
>>>
>> http://imagej.1557.n6.nabble.com/activeImage-how-to-set-it-tp3701057p5002556.html
>>> Sent from the ImageJ mailing list archive at Nabble.com. > Sent from the ImageJ mailing list archive at Nabble.com.
>
> --
> ImageJ mailing list: http://imagej.nih.gov/ij/list.html

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



If you reply to this email, your message will be added to the discussion below:
http://imagej.1557.x6.nabble.com/activeImage-how-to-set-it-tp3701057p5002649.html
To unsubscribe from activeImage- how to set it?, click here.
NAML


autoSplitSelect_DeFFT.java (6K) Download Attachment