Problem bei der Erstellung einer matplotlib colormap

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Nikero
User
Beiträge: 6
Registriert: Samstag 12. April 2014, 15:52

Hallo
Ich bin ein relativer Neuling in Python und beschäftige mich derzeit damit, ein Matlab-Skript in Python umzuschreiben. Hierzu gehört auch die Erstellung einer eigenen Colormap. Und genau hierbei stoße ich derzeit an meine Grenzen.
Die Colormap in Matlab besteht aus einer 256x3 (RGB) Matrix, die mittels des colormap()-Befehls auf das Bild gelegt wird:

Code: Alles auswählen

N=256;
map = zeros(N,3);
maxg = N;
map(1:maxg,2) = linspace(1,0,maxg);
maxr = floor(2*N/3);
map(1:maxr,1) = linspace(1,0,maxr);
maxb = floor(N/3);
map(1:maxb,3) = linspace(1,0,maxb);
image(my_image)
colormap(map)
In Python habe ich bisher die RGB Matrix mithilfe eines 2D Numpy Arrays realisiert. Aus dieser habe ich mittels des ListedColomap()-Befehls eine Colormap erstellt und diese dann mit anzeigen lassen:

Code: Alles auswählen

import matplotlib.pyplot as plt

# Erstellung der Matrix
N = 256
colmap = numpy.zeros((N, 3)) 
maxg = N
colmap[:maxg,1] = numpy.linspace(1,0,maxg)
maxr = math.floor(2*N/3)
colmap[:maxr,0] = numpy.linspace(1,0,maxr)
maxb = math.floor(N/3)
colmap[:maxb,2] = numpy.linspace(1,0,maxb)

# Erstellung der Colormap
cm = matplotlib.colors.ListedColormap(colmap)

# Benutzung
plt.imshow(my_image, cmap = cm)
Die Werte der Matrix stimmen mit denen der Matlab-Matrix überein. Trotzdem unterscheiden sich die enstehenden Bilder deutlich von der Farbe her.
Es kann auch nicht daran liegen, dass ich ein Numpy Array übergebe, da auch eine umwandlung per tolist()-Befehl nichts ändert:

Code: Alles auswählen

colmap2 = colmap.tolist()
cm = matplotlib.colors.ListedColormap(colmap2)
Per google und offizieller Dokumentation der Methoden bin ich bisher nicht zu einer Lösung gelangt. Daher hoffe ich, dass ihr mir helfen könnt.
mfg Nikero
Nikero
User
Beiträge: 6
Registriert: Samstag 12. April 2014, 15:52

Ich habe das Problem gefunden. Es lag daran, dass die Skalierung anders war (0-250 bei Matlab, -100-150 bei Python). Ich habe das jetzt einfach mithilfe von den vmax bzw. vmin Parameter gelöst:

Code: Alles auswählen

plt.imshow(image3, cmap = cm, vmin=0, vmax=250)
Antworten