Wie kann ich ein logarithmisch normalisiertes Imshow-Diagramm mit einer Farbleiste zeichnen, die die Rohdaten in matplotlib darstellt?

Ich verwende matplotlib, um logarithmisch normalisierte Bilder zu zeichnen, möchte jedoch, dass die ursprünglichen Rohbilddaten in der Farbleiste und nicht im Intervall [0-1] dargestellt werden. Ich habe das Gefühl, es gibt eine matplotlib'y Art und Weise, dies zu tun, indem eine Art Normalisierungsobjekt verwendet wird und die Daten nicht vorher transformiert werden ... auf jeden Fall könnte es negative Werte im Rohbild geben.

import matplotlib.pyplot as plt
import numpy as np

def log_transform(im):
    '''returns log(image) scaled to the interval [0,1]'''
    try:
        (min, max) = (im[im > 0].min(), im.max())
        if (max > min) and (max > 0):
            return (np.log(im.clip(min, max)) - np.log(min)) / (np.log(max) - np.log(min))
    except:
        pass
    return im

a = np.ones((100,100))
for i in range(100): a[i] = i
f = plt.figure()
ax = f.add_subplot(111)
res = ax.imshow(log_transform(a))
# the colorbar drawn shows [0-1], but I want to see [0-99]
cb = f.colorbar(res)

Ich habe versucht, mit cb.set_array, aber das schien nichts zu tun, und cb.set_clim, aber das skaliert die Farben vollständig.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage