Extracting radially symmetric data from a matrix

Hi. I have a 2D matrix which I can plot using imagesc with respect to distance: x and y (from -xs to +xs). Here's how I discretize my data on x and y:
xs=D./2;
dx=2.*xs./N;
dy=dx;
X=linspace(-xs,xs,N);
Y=linspace(-xs,xs,N);
[x y]=meshgrid(X,Y);
r1=(x.^2+y.^2).^(0.5);
TH1=atan2(y,x);
Now I need to extract radially symmetric sets of data for further analyzing. I mean from 0 to r1. How should I choose the width of r? If I have two matrices like this, how can I interpolate and compare the data on the same 'r' from one matrix with the other one? Thanks

Réponses (1)

Do you want something like this:
D = 10
N = 100
xs=D./2;
dx=2.*xs./N;
dy=dx;
X=linspace(-xs,xs,N);
Y=linspace(-xs,xs,N);
[x y]=meshgrid(X,Y);
r1=(x.^2+y.^2).^(0.5);
subplot(2, 2, 1);
imshow(r1, []);
axis on;
circleMask = r1 < 3;
subplot(2, 2, 2);
imshow(circleMask, []);
axis on;
r2 = r1 .* double(circleMask);
subplot(2, 2, 3);
imshow(r2, []);
axis on;
% Get mean of r1 image inside circle mask
mean_r1 = mean(r1(circleMask))
message = sprintf('The mean of r1 inside the circle mask = %f', mean_r1);
uiwait(helpdlg(message));

4 commentaires

No. Let's assume I have saved my data on M1:
" N=1000; D=5; M1=ones(N); xs=D./2; dx=2.*xs./N; dy=dx; X=linspace(-xs,xs,N); Y=linspace(-xs,xs,N); [x y]=meshgrid(X,Y); r1=(x.^2+y.^2).^(0.5); TH1=atan2(y,x); M1(find(r1>xs)==1)=NaN; figure;imagesc(M1);"
I need to extract the data on r=3 (exactly 3, a line). Thanks
We can get the intensity along a line if you have the Image Processing Toolbox. We can use improfile to get interpolated values exactly along the circle perimeter. Do you have that toolbox?
I do have the toolbox. How should I do it? So we get radial distribution of intensity line?
No, pass the coordinates of the circle perimeter (your x and y) into improfile().

Connectez-vous pour commenter.

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by