## Radial averaging of 2-d tif image

### Kevin Wang (view profile)

on 4 Feb 2016
Latest activity Edited by Image Analyst

on 12 Sep 2019

### Image Analyst (view profile)

I am looking to compute a radial average of a 2-d tif microscopy image.
I want to start from a given pixel as the center, go progressively radially and record the intensities of all the pixels lying on the locus of the circle of that radius. Out of all these, I want to compute a graph of radius vs. Intensity.
Any ideas? I am looking to create a .m file to do this. Thank you!

### Image Analyst (view profile)

on 4 Feb 2016
Edited by Image Analyst

### Image Analyst (view profile)

on 12 Sep 2019

See my attached demo. Feel free to adapt, like to change the center or whatever. It gives the average radial profile within the blobs but you can use the same concept to do it over the whole image. The whole-image version is shown in the Answer below this one. Of course you could always just use ginput() to identify the center, compute the radiii, and use accumaray. Or just use a double for loop. So, there are several ways.

### Image Analyst (view profile)

on 4 Feb 2016
Edited by Image Analyst

### Image Analyst (view profile)

on 12 Sep 2019

OK, so maybe that demo was too hard for you to adapt. Here is an easier, more straightforward demo using two for loops. It's easy to understand (as compared to accumarray which would probably be faster). See attached script below the image.

### Hugo Trentesaux (view profile)

on 7 Feb 2019
Edited by Hugo Trentesaux

### Hugo Trentesaux (view profile)

on 11 Sep 2019

My version of the function :
function profile = radialAverage(IMG, cx, cy, w)
% computes the radial average of the image IMG around the cx,cy point
% w is the vector of radii starting from zero
[a,b] = size(IMG);
[Y, X] = meshgrid( (1:a)-cx, (1:b)-cy);
R = sqrt(X.^2 + Y.^2);
profile = [];
for i = w % radius of the circle
mask = (i-1<R & R<i+1); % smooth 1 px around the radius
values = (1-abs(R(mask)-i)) .* double(IMG(mask)); % smooth based on distance to ring
% values = IMG(mask); % without smooth
profile(end+1) = mean( values(:) );
end
end

Stefan Weichert

### Stefan Weichert (view profile)

on 11 Sep 2019
there is one error in your code:
You have to switch around X and Y. Otherwise you end up with complete nonsense.
Hugo Trentesaux

on 11 Sep 2019
You're right.