How can set colormap for below matirx?
3 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Amir Torabi
il 5 Dic 2019
Commentato: Amir Torabi
il 6 Dic 2019
Hello Friends.
The below code calculates an matrix eta2. and then display some shapes that each of them is on specified positions. For displaying it, I used imagesc(eta2).
Also, etas is a matrix that its value varies between 0 and 1 randomly. Indeed, each grain has own values between grid points i and j.
Now I am looking for determining a custom color for each of grains. How can do it.
Thanks.
%code
Nx=128;%grid
Ny=Nx;
eta2 = zeros(Nx,Ny);
etas = rand(Nx*Ny,25));
for igrain=1:25
ncount=0;%counter
for i=1:Nx
for j=1:Nx
ii =(i-1)*Nx+j;
eta2(i,j) =eta2(i,j)+etas(ii,igrain)^2; %calculating the eta2.
if(etas(ii,igrain) >= 0.5)
ncount=ncount+1;
end
%
ncount=ncount/(Nx*Ny);
end
end%Nx
end%igrain
%%Display
figure
imagesc(eta2);
4 Commenti
Image Analyst
il 6 Dic 2019
For completeness, here is the image that your code and data create:
Risposta accettata
Image Analyst
il 6 Dic 2019
I think this is what you want:
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 14;
% Existing code
Nx=64;
Ny=Nx;
eta2 = zeros(64,64);
% original code
load storeEtas
for igrain=1:25
ncount=0;
for i=1:Nx
for j=1:Nx
ii =(i-1)*Nx+j;
eta2(i,j) =eta2(i,j)+etas(ii,igrain)^2;
if(etas(ii,igrain) >= 0.5)
ncount=ncount+1;
end
ncount=ncount/(Nx*Ny);
end
end
end
figure
% New code below by Image Analyst:
subplot(2, 3, 1);
imshow(eta2, [], 'ColorMap', hsv(256));
colorbar;
title('eta2, Pseudo-colored', 'FontSize', fontSize);
impixelinfo;
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0, 0.04, 1, 0.96]);
drawnow;
% Plot the image in gray scale
subplot(2, 3, 2);
imshow(eta2, [], 'ColorMap', gray(256));
colorbar;
title('eta2, Actual values (gray scale)', 'FontSize', fontSize);
impixelinfo;
% Show the histogram
subplot(2, 3, [3, 6]);
imhist(eta2);
grid on;
title('Histogram of eta2', 'FontSize', fontSize);
% Threshold the image
thresholdValue = 0.7;
line([thresholdValue, thresholdValue], ylim, 'Color', 'r', 'LineWidth', 2);
binaryImage = eta2 > thresholdValue;
subplot(2, 3, 4);
imshow(binaryImage);
title('Binary Image', 'FontSize', fontSize);
% Label the image so we can assign (almost) unique colors to each region,
% and so we can make measurements of it, such as the area of each blob.
[labeledImage, numberOfBlobs] = bwlabel(binaryImage, 8);
fprintf('Found %d blobs.\n', numberOfBlobs);
% Apply a variety of pseudo-colors to the regions.
coloredLabelsImage = label2rgb (labeledImage, 'hsv', 'k', 'shuffle');
% Display the pseudo-colored image.
subplot(2, 3, 5);
imshow(coloredLabelsImage);
title('Individually colored regions of eta2', 'FontSize', fontSize);
% Get all the blob properties.
blobMeasurements = regionprops(labeledImage, eta2, 'all')
% blobMeasurements is an array of structures. Each structure has a bunch of measurements in it.
% For example, get all the areas into a single vector.
allAreas = [blobMeasurements.Area]
Più risposte (1)
Kristoffer Walker
il 5 Dic 2019
Modificato: Kristoffer Walker
il 5 Dic 2019
Amir,
Look into "caxis" and "colormap" functions. Basically, to manipulate the color map (so that it highlights different pixels differently) you need to adjust the range of the colormap matrix by making the first row correspond to the end range of the values of interest and the last row correspond to the other edge of the range. Imagesc will automatically scale the min and max values of the matrix to the edges of the colormap.
Use ColorMapEditor to create custom colormap matricies. For higher dynamic range colormaps, make the number of rows in your colormap large. The number of columns is always 3. Execute "colormap" to see the current colormap. Use "colormap(cm)" to assign your own matrix cm to be the colormap. Red, Green, Blue columns from 0 to 1 in amplitude. So white is [1 1 1].
You could also plot symbols individually in a for loop over all pixels of interest if you do not want to be restricted to a grid:
nRows = 64; % Increase this for better dynamic range
dCol = (maxAmp-minAmp)/nRows;
cm = colormap(jet); % execute "help graph3d" to see built-in (e.g. parula, jet, etc.)
for i=1:nSymbols
% find nearest row of colormap for current pixel
iRow = (amp(i) - minAmp) / dCol + 1;
h = plot(x, y, 'MarkerFaceColor', cm(iRow,:));
end
0 Commenti
Vedere anche
Categorie
Scopri di più su Orange in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!