2D colormaps. MxN matrix of RGB values for 4 colors gradient
7 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Felipe Bayona
il 17 Set 2020
Commentato: Bjorn Gustavsson
il 17 Set 2020
Hi Dear Community
Matlab colormaps support 1D color gradients (Nx3 arrays for RGB values)
I would like to obtain a 2D matrix of RGB values (MxNx3) like this:
(6 plots are only examples. Im looking to generate the 4 colors gradien)
Look that there's no a single gradient moving over x-axis (something easy to do with matlab). Each corner correspond to a different color.
Some ideas?
Thanks a lot
0 Commenti
Risposta accettata
Ameer Hamza
il 17 Set 2020
Modificato: Ameer Hamza
il 17 Set 2020
Try this
c{1} = [1 0 0]; % specify 4 colors
c{2} = [0 1 0];
c{3} = [0 0 1];
c{4} = [1 0.5 0.2];
C = reshape(vertcat(c{:}), 2, 2, []);
n = 700; % number of pixels
img = zeros(n, n, 3);
for i=1:3
img(:,:,i) = interp2([0 1], [0 1], C(:,:,i), linspace(0,1,n), linspace(0,1,n).');
end
imshow(img);
Più risposte (1)
Bjorn Gustavsson
il 17 Set 2020
If you do something like this:
[hsvImg] = rgb2hsv(Imrgb);
x_lims = [1 184;
199 383;
397 581;
593 779;
791 977;
991 size(Imrgb,2)];
for i1 = 6:-1:1,
subplot(4,6,i1)
imagesc(Imrgb(:,x_lims(i1,1):x_lims(i1,2),:))
subplot(4,6,i1+6*1)
imagesc(hsvImg(:,x_lims(i1,1):x_lims(i1,2),1))
subplot(4,6,i1+6*2)
imagesc(hsvImg(:,x_lims(i1,1):x_lims(i1,2),2))
subplot(4,6,i1+6*3)
imagesc(hsvImg(:,x_lims(i1,1):x_lims(i1,2),3))
end
subplot(4,6,1)
ylabel('RGB-Images')
subplot(4,6,1+6*1)
ylabel('Hue')
subplot(4,6,1+6*2)
ylabel('Saturation')
subplot(4,6,1+6*3)
ylabel('Intensity')
figure
for i1 = 6:-1:1,
subplot(4,6,i1)
imagesc(Imrgb(:,x_lims(i1,1):x_lims(i1,2),:))
subplot(4,6,i1+6*1)
imagesc(Imrgb(:,x_lims(i1,1):x_lims(i1,2),1))
subplot(4,6,i1+6*2)
imagesc(Imrgb(:,x_lims(i1,1):x_lims(i1,2),2))
subplot(4,6,i1+6*3)
imagesc(Imrgb(:,x_lims(i1,1):x_lims(i1,2),3))
end
subplot(4,6,1)
ylabel('RGB-Images')
subplot(4,6,1+6*1)
ylabel('Red')
subplot(4,6,1+6*2)
ylabel('Green')
subplot(4,6,1+6*3)
ylabel('Blue')
You get to look at the Hue, Saturation and Intensity variation of the 6 different sub-images, and their respective red, green and blue image-planes. From there you should see that some of them are "reasonably" simple, and you should be able to reproduce them.
For mapping 2 data-sets, lets say I1 and I2, it should simplify to at most three 2-D interpolations, perhaps something like this:
I1_linear = linspace(min(I1(:)),max(I1(:)),suitable_nr4size1);
I2_linear = linspace(min(I2(:)),max(I2(:)),suitable_nr4size2);
hsvI2I2(:,:,3) = interp2(I1_linear,I2_linear,hsvImg(:,x_lims(i1,1):x_lims(i1,2),3),I1,I2);
hsvI2I2(:,:,2) = interp2(I1_linear,I2_linear,hsvImg(:,x_lims(i1,1):x_lims(i1,2),2),I1,I2);
hsvI2I2(:,:,2) = interp2(I1_linear,I2_linear,hsvImg(:,x_lims(i1,1):x_lims(i1,2),1),I1,I2);
rgbI1I2 = hsv2rgb(hsvI1I2);
Or even simpler if you interpolate over the RGB-planes.
HTH
2 Commenti
Bjorn Gustavsson
il 17 Set 2020
Well, if you look at how the Hue, Saturation and Intensity or the Red, Green and Blue varies over your examples, you will start to understand how to design your 2-D colour-maps. I can only assume that there will be quite a bit of tinkering before you manage to generate visually pleasing maps (which are at least two interesting fields of work: what's a visually pleasing map for a given purpose? Does different peoples color-vision/perception vary enough to make big differences in what's good?)
Vedere anche
Categorie
Scopri di più su Data Distribution Plots 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!