Tôi đang sử dụng matplotlib để vẽ hình ảnh đã chuẩn hóa log nhưng tôi muốn dữ liệu hình ảnh thô ban đầu được thể hiện trong thanh màu hơn là khoảng [0-1]. Tôi có cảm giác có một cách matplotlib'y hơn để làm điều này bằng cách sử dụng một số loại đối tượng bình thường hóa và không chuyển đổi dữ liệu trước ... trong mọi trường hợp, có thể có giá trị âm trong hình ảnh thô.Làm thế nào tôi có thể vẽ một ô imshow log-normalized với thanh màu đại diện cho dữ liệu thô trong matplotlib
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)
Tôi đã thử sử dụng cb.set_array, nhưng điều đó dường như không làm bất cứ điều gì, và cb.set_clim, nhưng điều đó hoàn toàn rescales màu sắc.
Vì vậy, dường như tôi có thể vượt qua một trường hợp bình thường vào imshow và hình ảnh sẽ được bình thường đối với tôi: res = ax.imshow (im, định mức = mpl.colors.LogNorm()) Tuy nhiên, nếu tôi đính kèm một thanh màu, các giá trị được đặt thành các vals bình thường hơn là dữ liệu thô. –