# coordinates of pixels in a contour plot

7 views (last 30 days)
Alok singh on 22 Feb 2012
Hi all, I drew 2 contour plots of 2 different matrix in the same figure using contour(Z,v) function. At few points they intersect each other, I want the coordinates of those points numerically without using data cursor because I need locations of many of these points and that is several times so I need to use some function or program to find these points. Please Help me
figure; hold on c1=contour(Am1_r,[0 0],'r'); c2=contour(Am1_i,[0 0],'b'); hold off % Am1_r and Am1_i are 51x51 matrix

Jarrod Rivituso on 23 Feb 2012
I would just bypass the contour altogether. It seems that you essentially want to find the points where
(Am1_r == 0) & (Am2_r == 0)
A little fancy logical indexing would allow you to do this without any contour plot needed. First, two things to note
1. You should probably interpolate your data a bit - 51-by-51 seems rather coarse. interp2 will help you to do this
2. Comparing to zero (as I've shown above) is not always the best idea. Typically you want to make your condition such that the magnitude is less than some threshold.
Here's a quick example for ya...
%Fake data
x = linspace(-1,1,51);
y = linspace(-1,1,51);
[X,Y] = meshgrid(x,y);
Z1 = X.^2 + Y.^2 - 0.5;
Z2 = (X + Y)/2;
%Maybe interpolate your data a bit to make it more fine grained (51 points
%seems kinda low)
xnew = linspace(-1,1,1000);
ynew = linspace(-1,1,1000);
[XNew,YNew] = meshgrid(xnew,ynew);
Z1 = interp2(X,Y,Z1,XNew,YNew);
Z2 = interp2(X,Y,Z2,XNew,YNew);
%Find areas where both matrices are close to zero
threshold = 1e-3;
z1NearZero = abs(Z1) < threshold;
z2NearZero = abs(Z2) < threshold;
allConditionsMet = z1NearZero & z2NearZero;
%Extract x,y data where true
xpoints = XNew(allConditionsMet);
ypoints = YNew(allConditionsMet);
result = [xpoints,ypoints]
%Extract row,column values where true
[r,c] = find(allConditionsMet)
Note that I have defined an x and y scale, which you would probably find helpful to do as well.
Hope this helps!