使用一些scikit-image代码示例和pyplot玩了一下我在我的图像上发现了不同的结果,这取决于我如何应用我的彩色地图,而且我不知道为什么。< / p>
当我在显示图像时将彩色地图作为插件应用时,一切正常,当我直接对图像进行处理时,它会变成全黑。我感到很困惑,因为我想将这些颜色贴图应用于我想要保存的图像(而不是显示),而且我不知道如何正确地执行此操作。
import matplotlib.pyplot as plt
from skimage import data
from skimage.color import rgb2hed
ihc_rgb = data.immunohistochemistry()
ihc_hed = rgb2hed(ihc_rgb)
fig, axes = plt.subplots(2, 2, figsize=(7, 6))
ax0, ax1, ax2, ax3 = axes.ravel()
ax0.imshow(ihc_hed[:, :, 0], cmap=plt.cm.gray)
ax0.set_title("plugin")
ax1.imshow(plt.cm.gray(ihc_hed[:, :, 0]))
ax1.set_title("direct")
[这有点过了]
答案 0 :(得分:3)
ihc_hed[:, :, 0]
内的值介于-1.37和-0.99之间。 imshow
的默认行为是显示整个值范围。另一方面,plt.cm.gray
对值为0到1的图像进行操作。
自动重新缩放可以在第一种情况下保存您,但不会在第二种情况下保存。我建议始终使用具有固定范围的imshow
:imshow(image, vmin=0, vmax=1, cmap='gray')
答案 1 :(得分:1)
根据您对Stefan van der Walt answer的评论,我得出结论,您不想保存matplotlib数字,而是直接保存图片。
正如Stefan指出的那样,您需要在使用色彩映射之前缩放值。 Matplotlib为此提供了类Normalize
:
import matplotlib.pyplot as plt
import matplotlib.colors
from skimage import data
from skimage.color import rgb2hed
ihc_rgb = data.immunohistochemistry()
ihc_hed = rgb2hed(ihc_rgb)
fig, axes = plt.subplots(1, 3, figsize=(8, 3))
ax0, ax1, ax2 = axes.ravel()
ax0.imshow(ihc_hed[:, :, 0], cmap=plt.cm.gray)
ax0.set_title("plugin")
ax1.imshow(plt.cm.gray(ihc_hed[:, :, 0]))
ax1.set_title("direct")
norm = matplotlib.colors.Normalize()
gray_image = plt.cm.gray(norm(ihc_hed[:,:,0]))
ax2.imshow(gray_image)
ax2.set_title("direct with norm")
for a in axes:
a.xaxis.set_visible(False)
a.yaxis.set_visible(False)
plt.gcf().tight_layout()
plt.show()