将伪彩色方案应用于图像绘图
伪彩色是增强数据对比和可视化的易用而有效的工具。这在使用投影仪演示数据时尤其有用——它们的对比度通常很差。
伪彩色仅能用于单通道、灰度、亮度图像。然而,现有的图像是一个RGB图像。由于R、G和B都是相似的(请参见上文中数据),因此可以使用数组切片从数据中选择一个通道(可以在Numpy教程中阅读更多内容):
Numpy教程:
https://numpy.org/doc/stable/user/quickstart.html#indexing-slicing-and-iterating
·
lum_img = img[:, :, 0]
完整代码:
·
·
·
·
·
·
·
ipython%matplotlib tkimport matplotlib.pyplot as pltimport matplotlib.image as mpimgimg = mpimg.imread('D:/5xstar/work/stinkbug.png')lum_img = img[:, :, 0]plt.imshow(lum_img)
如上图,代码生成的是一张亮度(2D,无颜色)图像,应用了默认的颜色映射(即查表,LUT),得默认的翠绿色。
当然,还有很多其他选择。下面通过cmap参数改变颜色映射(colormap)从而改变图像的颜色。
·
plt.imshow(lum_img, cmap="hot")
完整代码:
·
·
·
·
·
·
·
ipython%matplotlib tkimport matplotlib.pyplot as pltimport matplotlib.image as mpimgimg = mpimg.imread('D:/5xstar/work/stinkbug.png')lum_img = img[:, :, 0]plt.imshow(lum_img, cmap="hot")
另外,还可以使用set_cmap()方法更改现有绘图对象上的颜色映射:
·
·
imgplot = plt.imshow(lum_img)imgplot.set_cmap('nipy_spectral')
完整代码:
·
·
·
·
·
·
·
·
ipython%matplotlib tkimport matplotlib.pyplot as pltimport matplotlib.image as mpimgimg = mpimg.imread('D:/5xstar/work/stinkbug.png')lum_img = img[:, :, 0]imgplot = plt.imshow(lum_img)imgplot.set_cmap('nipy_spectral')
注意:
但是,请记住,在具有内联(inline)后端的Jupyter Notebook中,不能对已经渲染的绘图进行更改。在一个单元格(IPython单元格与Python命令行不一样,内可有多行命令)中创建绘图对象后,不能在后面的单元格中调用它的set_cmap()方法来改变绘图。因此,需要确保在同一个单元格中同时输入这些命令,如下面的代码,这时程序只渲染一次图像。plt命令也不会改变早期单元格的绘图。
还有很多颜色映射方案可用。请参阅颜色映射的列表和图像:
https://matplotlib.org/stable/tutorials/colors/colormaps.html。
色阶参考
能看到颜色代表的值是很有帮助的主意。这里可以通过在图形中添加颜色条来达到:
·
·
imgplot = plt.imshow(lum_img)plt.colorbar()
完整代码:
·
·
·
·
·
·
·
·
ipython%matplotlib tkimport matplotlib.pyplot as pltimport matplotlib.image as mpimgimg = mpimg.imread('D:/5xstar/work/stinkbug.png')lum_img = img[:, :, 0]imgplot = plt.imshow(lum_img)plt.colorbar()