http://imagej.273.s1.nabble.com/Problem-with-Maximum-intensity-projection-tp5020309p5020328.html
otherwise there are faster calls available. If you want to fit the data,
trying to have very fast code here, anyhow.
> Thanks for the info, but all of what I do is in the frame direction of a
> hyperstack; the z direction is just another one of the indices to a voxel of
> data. As far as I can tell, for hyperstacks, there is no way around using
> imp.getStackIndex in the middle of the inner loop.
>
> Thanks,
>
> Fred
>
>
> On Fri, March 23, 2018 1:22 pm, Michael Schmid wrote:
>> Hi Fred,
>>
>> for getting the values along the z direction, e.g. for fitting, you can
>> do the following:
>>
>> int nSlices = stack.getSize();
>> ImageProcessor[] inIps = new ImageProcessor[nSlices];
>> for (int i=0; i<nSlices; i++)
>> inIps[i] = stack.getProcessor(i+1);
>> Calibration cal = imp.getCalibration();
>> double[] zData = new double[nSlices];
>> for (int i=0; i<nSlices; i++)
>> zData[i] = cal.getZ(i);
>>
>> double[] fitData = new double[nSlices];
>> for (int y=0; y<height; y++) {
>> IJ.showProgress((double)y/height);
>> for (int x=0; x<width; x++) {
>> double[] params = null;
>> for (int i=0; i<nSlices; i++)
>> fitData[i] = inIps[i].getPixelValue(x, y);
>> // do the fit for fitData over zData
>> }
>> }
>> }
>>
>> Somewhere I have a Stack_Fitter plugin, I'll upload it to
>>
http://imagejdocu.tudor.lu>>
>> Michael
>> ________________________________________________________________
>> On 23/03/2018 18:32, Fred Damen wrote:
>>> Greetings,
>>>
>>> I would like to second Kenneth's frustration with my version of fetching the
>>> requisite values:
>>>
>>> for(int iz=0; iz<nz; iz++) {
>>> IJ.showStatus("NonLinearFit: z="+iz);
>>> IJ.showProgress(((float)iz)/nz);
>>>
>>> for(int ix=0; ix<nx; ix++)
>>> for(int iy=0; iy<ny; iy++) {
>>> for(int if=0; if<nf; if++)
>>> y[if] =
>>> ((FloatProcessor)is.getProcessor(imp.getStackIndex(1,iz+1,if+1))).getf(ix,iy);
>>> process(x,y);
>>> }
>>> }
>>>
>>> Ages ago, I tried using the various getVoxel(s) methods to no avail. If
>>> memory serves, they would always return the same value. So once I got the
>>> aforementioned code working I just copy and paste every time I need it;
>>> which
>>> is always.
>>>
>>> I would assume that this inner loop can be done extremely more efficiently
>>> under the hood than through the interface, i.e., repeated calls to
>>> is.getProcessor and imp.getStackIndex are not free; notice the need for
>>> showStatus and showProgress. Can the getVoxels and setVoxels methods that
>>> include the frame dimension be included.
>>>
>>> Thanks for listening,
>>>
>>> Fred
>>>
>>>
>>> On Fri, March 23, 2018 11:30 am, Kenneth Sloan wrote:
>>> ...
>>>> Obligatory question: I tried to use getVoxels - but failed miserably.
>>>> After a
>>>> few attempts, I just
>>>> rolled my own.
>>>>
>>>> This is slower than dirt - but I hope it's clear.
>>>>
>>>> And, as always - I welcome corrections to my chronic mis-understanding of
>>>> the
>>>> API.
>>>> --
>>>> Kenneth Sloan
>>>>
[hidden email]
>>>> Vision is the art of seeing what is invisible to others.
>>> ...
>>>
>>> --
>>> 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>