2016-03-21 4 views
0

Ich habe ein Problem: Es gibt ein 2-D-Array der Intensität - Z [(x, y) ist eine Matrix, und der Wert ist eine Intensität].Wärme- und Intensitätskarte in Matlab

1 2 3 4 ... 
1 3 4 6 ... // ~ 1000 colums. 
2 6 7 8 ... 

Erstellen einer Heatmap: I=imagesc(Z).

Dann möchte ich Spalten einfärben, beispiels 100-200 colums - blaue Farbe, 200-300 - grün, 300-400 - rot. Etwas wie Gradient an den Säulen.

enter image description here

Vielen Dank!

UPD *: Ich habe das, und ich möchte es kolorieren. durch "Farbfilter", z. B. Achse X [0,100] -> blau. X [100, 200] - rot.

, um das Bild, das ich oben angehängt habe, zu erhalten. ist es möglich?

enter image description here

+0

Ihre Intensität liegt zwischen 0 und 100? Bedeutung 0 ist schwarz? – GameOfThrows

+0

ja, 100 - weiß, 0 ist schwarz. graue Colormap – delkov

Antwort

1

Ich bin nicht sicher, ob die Farbintensität/Lichtintensität Teil, aber ich denke, das ist die Arbeit machen soll:

intense = [0 2 3 4;1 3 4 6;2 6 7 8]; 
intense = intense./100; %//Convert to percentage 
RGBmat = zeros([size(intense), 3]); %//Create blank RGB map 
%//set Col1 to red 
RGBmat (:,1,1) = 255; 
%//set Col2 to green 
RGBmat(:,2,2) = 255; 
%//set Col3 to Blue 
RGBmat(:,3,3) = 255; 

%//multiply intensity 
Res = RGBmat .* repmat(intense,[1,1,3]); %//I am not sure about adjusting the intensity of each pixel. 

Nach diesem Beitrag Adjusting image intensity values

es sollte Siehst du vielleicht so aus?

J = (RGBmat ./ 255).^ repmat(intense,[1,1,3])*255 %//This is assuming that intensity matrix is from 0 to 255 not 1 to 100, you will have to normalize it I guess. 

imshow(Res,'InitialMagnification','fit') 
imshow(J,'InitialMagnification','fit') 

Beachten Sie, wie 100 Intensität nicht weiß ist, aber die Standard-schwarz, das ist, weil, wenn ich RGBmat eingestellt auf Standardwert, I Nullen verwendet (die schwarz bedeutet), wenn Sie es wollen, weiß zu sein, Sie muss RGBmat auf Nullen setzen (...). * 255; Dies bedeutet jedoch, wenn Sie die Spalten auf Rot, Grün und Blau einstellen, müssen Sie die anderen Kanäle auf Null setzen:

Also für rot, anstatt rot auf 255; Sie müssen stattdessen blau und grün auf 0 setzen.

======== Einfüg.Nummer aktualisiertem Inhalt ============

Angenommen, Ihre Intensität Matrix (oder Ihr Bild Graustufen) ist I

sollten Sie erstes Prozent wandelt es in:

Ipercent = double(I)./255; 

nächsten in ein 3D-Bild RGB machen -

IRGB = repmat(Ipercent,[1,1,3]); 

jetzt können Sie multip ly Ihre Farbmaskierung hinein:

%This line will multiply your first 1:100 column with a red mask 
IRGB(:,1:100,1) = uint8(IRGB(:,1:100,1).*255); 

Der Rest ist nur die Farben der einzelnen Abschnitte anpassen.

+0

Bitte, schau auf meine upd. – delkov

+0

@delkov Lösung zu Ihrem Problem hinzugefügt – GameOfThrows

+0

danke, wie kann ich es plotten? Welcher Befehl? (kann es glatter sein, nicht wie Pixel, wenn es möglich ist). – delkov