Locating points on the figure that correspond to a specific number on the colormap

9 visualizzazioni (ultimi 30 giorni)
I've opened a .m figure that was generated earlier.
openfig('MapSurface.fig')
Next, I would like to know the xy position of the points on the figure that exactly match with 100 on the colorbar.
This could either be a pixel or list of pixels (as per their xy position) that correspond to 100, or, a marked region on the figure that highlights all points corresponding to 100.MapSurface.png
Note: I'm doing this as my final aim is to calculate the area of the spot size by knowing the location of its boundaries. In other cases the spot size is bigger or an arbitary shape. I've taken the simplest case for this question.
Thank you.
  2 Commenti
Jigsaw
Jigsaw il 17 Lug 2019
I used the following code for it
A = [200 200 200 200 200; 200 200 200 200 200; 200 200 100 200 200; 200 200 200 200 200; 200 200 200 200 200];
Percent_matrix = flipud (A);
Percent_Interp = imresize(Percent_matrix,200,'bilinear');
pcolor(Percent_Interp)
shading interp
caxis([0 200])
(The colorbar is a custom one as the predefined ones in matlab didnt have the one i wanted)

Accedi per commentare.

Risposta accettata

Adam Danz
Adam Danz il 17 Lug 2019
Modificato: Adam Danz il 17 Lug 2019
In this functional example below, the colorbar value (cval) is set to 140.0 which is within the yellow-green spectrum of the colorbar. The tolerance (tol) is set to 0.5 meaning that any value within 140 +/- 0.5 is accepted. A tolerance of 0 only accepts exact matches which will likely fail.
The "CData" (color data) is pulled from the figure and the code identifies which coordinates are within tolerance to your selected color value. Black markers are plotted showing the matches.
figure()
A = [200 200 200 200 200; 200 200 200 200 200; 200 200 100 200 200; 200 200 200 200 200; 200 200 200 200 200];
Percent_matrix = flipud (A);
Percent_Interp = imresize(Percent_matrix,200,'bilinear');
pcolor(Percent_Interp)
shading interp
caxis([0 200])
colorbar();
cval = 140.0; %colorbar value
tol = .5; %tolerance (accepts all values tval+/-tol); use 0 for no tol.
% get color data from the only object on the axis
ax = gca(); %handle to axis that contains the data
cdata = ax.Children.CData; % assumes axis only has 1 object!
% Alternative: cdata = ax.Children.ZData;
% determine which coordinates match selected color value
cidx = cdata >= (cval-tol) & cdata <= cval+tol;
% get the (x,y,z) coordinates of the slected color regions
x = ax.Children.XData; % assumes axis only has 1 object!
y = ax.Children.YData; % assumes axis only has 1 object!
[yidx,xidx] = find(cidx); % *
xSelect = x(xidx);
ySelect = y(yidx);
% mark selected units on figure
hold on
h = plot(xSelect, ySelect, 'ks', 'MarkerFaceColor', 'k','markersize', 2);
% delete(h)
  6 Commenti
Jigsaw
Jigsaw il 18 Lug 2019
Oh and I like your suggestion of using contourf().
Its a more neater representation but instead of all the different colour patterns getting contours, if only points corresponding to 100 get a contour then that would do the job.
So basically it would be a representation of all the 100 corresponding points falling within the marked boundary.
Adam Danz
Adam Danz il 18 Lug 2019
Check out the "levels" input to contourf() where you can set the number of contrours.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Colormaps in Help Center e File Exchange

Prodotti


Release

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by