¿Cómo puedo dibujar un diagrama de imshow normalizado con una barra de colores que represente los datos sin procesar en matplotlib

Estoy usando matplotlib para trazar imágenes con registro normalizado, pero me gustaría que los datos originales de la imagen en bruto se representaran en la barra de colores en lugar del intervalo [0-1]. Tengo la sensación de que hay una manera más matplotlib'y de hacer esto utilizando algún tipo de objeto de normalización y no transformando los datos de antemano ... en cualquier caso, podría haber valores negativos en la imagen en bruto.

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)

Intenté usar cb.set_array, pero eso no parecía hacer nada, y cb.set_clim, pero eso cambia la escala de los colores por completo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta