For the surface profile, try checking out the Gizmo tool for 3D imaging. Windows/New/3D plots/Surface Plot and just pick the image you want...
As far as circular ROIs, one of the methods I use is to duplicate the section of the image you want to look at using the /R=[points] flag which gives you a square, and then multiply this with a mask which has the actual pixels you want to look at as 1's, and the rest as 0's. You can also use the imagethreshold function to make this mask, which is a real nice way to get for example, all the above-threshold pixels in a spot that is not necessarily perfectly circular.
I wouldnt be surprised if there is a built in function for perfect circle ROIs tho..
ImageLineProfile computes a surface profile for an arbitrary path specified by a pair of waves. If your path happens to be circular then the profile and optional averages apply.
Thanks for your answers. The image that I need to analyze is of a bead showing interference fringes. My program scans a line profile which is rotating around the center of the bead and is inspired from a similar post. The problem is that the for loop makes it too slow for me. I would like to try the idea with the mask as well. How would you build a circular mask? It would be nice to be able to do circular and not only square profiles.
function circular_profile()
WAVE Image
Variable dAInDegrees, startAngle, x0, y0, radius, i
You could code in the mask by hand, but its a stupid headache (i know, i have a program that makes some 32 perfect circles of increasing radius, if you need i'll post it here to save you the time, but it only goes up to a diameter of 61 pixels).
Instead, do it automatically (tho probably not geometrically perfect):
If you hit your image with imagethreshold/t(thresh) (image), and play around with the (thresh) value, you will generate the mask automatically. Just mess around until you get something that looks good. Then subtract 255 from the output wave (its called M_imagethresh) and that makes the mask with values of 0 and 1. Multiply this onto the original image and you will have only the pixels of interest remaining with everything else set to zero. Mind you, they still show up in the image plot, but they are easy to subtract out of any arithmetic. If you use wavestats on the mask, V_sum is the number of pixels that are active.
PS. You can put code into igor tags <"igor"> without the ""
As far as circular ROIs, one of the methods I use is to duplicate the section of the image you want to look at using the /R=[points] flag which gives you a square, and then multiply this with a mask which has the actual pixels you want to look at as 1's, and the rest as 0's. You can also use the imagethreshold function to make this mask, which is a real nice way to get for example, all the above-threshold pixels in a spot that is not necessarily perfectly circular.
I wouldnt be surprised if there is a built in function for perfect circle ROIs tho..
August 5, 2013 at 01:24 am - Permalink
A.G.
WaveMetrics, Inc.
August 5, 2013 at 10:20 am - Permalink
function circular_profile()
WAVE Image
Variable dAInDegrees, startAngle, x0, y0, radius, i
dAInDegrees=1
startangle = 0
for(i=0;i<180;i+=1)
Make/O/n=2 xTrace={round(x0+radius*cos((startAngle+i*dAInDegrees)*pi/180)),round(x0-radius*cos((startAngle+i*dAInDegrees)*pi/180))} ,yTrace={round(y0+radius*sin((startAngle+i*dAInDegrees)*pi/180)),round(y0-radius*sin((startAngle+i*dAInDegrees)*pi/180))}
ImageLineProfile srcWave=Image, xWave=xTrace, yWave=yTrace
WAVE W_ImageLineProfile
if(i==0)
Duplicate/O W_ImageLineProfile SurfaceProfile
else
SurfaceProfile+=W_ImageLineProfile
endif
endfor
end
August 5, 2013 at 06:17 pm - Permalink
Instead, do it automatically (tho probably not geometrically perfect):
If you hit your image with imagethreshold/t(thresh) (image), and play around with the (thresh) value, you will generate the mask automatically. Just mess around until you get something that looks good. Then subtract 255 from the output wave (its called M_imagethresh) and that makes the mask with values of 0 and 1. Multiply this onto the original image and you will have only the pixels of interest remaining with everything else set to zero. Mind you, they still show up in the image plot, but they are easy to subtract out of any arithmetic. If you use wavestats on the mask, V_sum is the number of pixels that are active.
PS. You can put code into igor tags <"igor"> without the ""
August 6, 2013 at 12:54 am - Permalink
August 6, 2013 at 12:54 am - Permalink
August 6, 2013 at 07:48 am - Permalink