强基初中数学&学Python——第249课 数字和数学第三方模块Matplotlib之四:图像教程(2)

将伪彩色方案应用于图像绘图

  伪彩色是增强数据对比和可视化的易用而有效的工具。这在使用投影仪演示数据时尤其有用——它们的对比度通常很差。

  伪彩色仅能用于单通道、灰度、亮度图像。然而,现有的图像是一个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()