threshold 3Dwave
GIo
Hi,
I am Giorgia and I am really new in Igor. I would like to analyze a movie (let's say 500 frames). The movie shows particles (which are my ROI) travelling along a channel. I want to create a projection of these particles (so at the end I should obtain one single image), and I would need to threshold and average the signal of the particles (so, I guess of the single frame).
In this case I would need to threshold a 3D wave. But, does the Imagethreshold return a 2D wave?if so, this part of the code is not correct "ImageTransform/R=M_Imagethresh averageImage input3dwaveNup", isn't it?
This the code that I am using:
function Part (input3DwaveNup,input3DwaveCargo,threshold)
wave input3DwaveNup, input3DwaveCargo
variable threshold
wave M_Imagethresh, M_AveImage
variable i,j,k, waveMaxNup, WaveMaxCargo, WaveMinNup, WaveMinCargo, ImageNum = dimsize(input3dwaveNup,2)
variable t1=startmstimer, timerRefNum
make/d/o/n=(dimsize(input3dwaveNup,0),dimsize(input3dwaveNup,1), dimsize(input3dwaveNup,2)) dummy3D
make/d/o/n=(dimsize(input3dwaveNup,0),dimsize(input3dwaveNup,1)) outputwaveNup = 0, outputwaveCargo = 0, RatioCargoVsNup=0
Imagethreshold/T=(threshold) input3dwaveNup
ImageTransform/R=M_Imagethresh averageImage input3dwaveNup
outputwaveNup = M_aveimage
ImageTransform/R=M_Imagethresh averageImage input3dwavecargo
outputwavecargo = M_aveimage
newimage outputwaveNup
newimage outputwaveCargo
end
wave input3DwaveNup, input3DwaveCargo
variable threshold
wave M_Imagethresh, M_AveImage
variable i,j,k, waveMaxNup, WaveMaxCargo, WaveMinNup, WaveMinCargo, ImageNum = dimsize(input3dwaveNup,2)
variable t1=startmstimer, timerRefNum
make/d/o/n=(dimsize(input3dwaveNup,0),dimsize(input3dwaveNup,1), dimsize(input3dwaveNup,2)) dummy3D
make/d/o/n=(dimsize(input3dwaveNup,0),dimsize(input3dwaveNup,1)) outputwaveNup = 0, outputwaveCargo = 0, RatioCargoVsNup=0
Imagethreshold/T=(threshold) input3dwaveNup
ImageTransform/R=M_Imagethresh averageImage input3dwaveNup
outputwaveNup = M_aveimage
ImageTransform/R=M_Imagethresh averageImage input3dwavecargo
outputwavecargo = M_aveimage
newimage outputwaveNup
newimage outputwaveCargo
end
I am not sure I understand what you mean by "projection of these particles". One possibility is that you want the result of:
Since you appear to have a threshold parameter you could replace the threshold and the average with:
ImageTransform/METH=3 zProjection aa
Note that your code contains two Make commands that are not necessary. For example, the combination of:
ImageTransform/R=M_Imagethresh averageImage input3dwaveNup
outputwaveNup = M_aveimage
can be replaced by:
Wave M_AveImage // note the correct name
Duplicate/O M_AveImage,outputwaveNup
HTH,
A.G.
WaveMetrics, Inc.
January 11, 2018 at 01:37 pm - Permalink
You could write your own code to replace the ImageTransform functions, perhaps using MatrixOp functions:
MatrixOp averageImage=sumBeams(temporary3dMatrix)/(numPoints(beam(temporary3dMatrix,1,1))) //averages along the 3rd dimension of "beams" or layers
January 11, 2018 at 02:07 pm - Permalink
I still have some issues with the code, but it's going better.
I would have one more question about how to load my BigTIFF. They are usually bigger than 5 GB. Is it possible to load such a big file in Igor7?
Or maybe, is there a way to open the first 500 frames of the movie, so run the analysis, then open the others 500 frame of the movie, run the analysis.... at the end sum the n results? I should have one single image as the final results.
Thank you!
G
January 12, 2018 at 06:16 am - Permalink
You can read a bigTiff image. Check the documentation for ImageLoad with the /BIGT=1 flag.
A.G.
January 12, 2018 at 10:41 am - Permalink
For the bigTIf file, I tried and checked the /BIGT flag, but doesn't work. Upload only the first 2 frames.
Anyway I will do a new post with a correct thread.
Thanks thanks!!!
Gio
January 14, 2018 at 07:08 am - Permalink