使用 matplotlib处理彩色图像

目前有多条基于同一时间维度的时序序列经过数据重构后生成了多组二维灰度图,接下来我们的工作就是把这些灰度图合并成一张彩图,JUST DO IT

数据预处理

由于数据采集时难以避免会有数据传输、传感器的噪声,这里我们要对原始数据进行数据滤波尽可能去除数据噪声。这里外面使用巴特沃斯滤波器进行滤波,传感器的采样频率为50hz,信号本身最大的频率为5hz,截止频率为5hz,则wn = 2 * 5 / 50 = 0.2。Wn = 0.2;可以看到滤波后的数据能够一定程度的减少了干扰,还原了数据。

b, a = signal.butter(8, 0.2, 'lowpass')
filtedData = signal.filtfilt(b, a, your_own_data)

使用 matplotlib处理彩色图像

单个窗口内的时序信号可视化

使用 matplotlib处理彩色图像

合并灰度图

import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
'''
   prepare your own data
'''
#如何让图片的标题能够显示中文字符,只需要三行代码
def set_ch():
    '''
        加载中文显示工具
    '''
    from pylab import mpl
    mpl.rcParams['font.sans-serif']=['Arial Unicode MS']
    mpl.rcParams['axes.unicode_minus']=False
set_ch()
combine = np.array([channel_one,channel_two,channel_three])#将三个二维数组合成一个三维数组
# 讲过上面处理过后,通常得到一副图像的数组表示形式,如:[C, H, W] 分别表示图形的通道数、高、宽
# 但图像一般的存储格式为:[H, W, C] 及高、宽、通道数
# 所以要对数组形式做一定的改变才能正常显示
# 首先转换数据类型:float -> int
combine = np.asarray(combine, dtype=int)
# 然后转换存储格式
combine = combine.transpose((1, 2, 0))#转换3通道图像的数组格式:transpose (C,H,W) -> (H,W,C)
plt.figure("combine_image",figsize=(20,10))
plt.subplot(1,4,1)
plt.imshow(accx_RP,plt.cm.gray)
plt.title('通道一(R)', size=15)
plt.subplot(1,4,2)
plt.imshow(accy_RP,plt.cm.gray)
plt.title('通道二(G)', size=15)
plt.subplot(1,4,3)
plt.imshow(accz_RP,plt.cm.gray)
plt.title('通道三(B)', size=15)
plt.subplot(1,4,4)
plt.imshow(X_rp,plt.cm.gray)
plt.title('RGB彩图', size=15)
plt.show()

使用 matplotlib处理彩色图像

读取彩图

import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
# 读入一幅彩色图片
img_path = 'data/000.4.png'   # 读入当前文件目录下的 demo.jpg
img = Image.open(img_path)
# 显示图片
plt.figure("Image")     # 图像窗口名称
plt.imshow(img,cmap = plt.cm.jet)
plt.axis('on')  # 关掉坐标轴为 off
plt.title('image')  # 图像题目
plt.show()
img = np.asarray(img, dtype=float)
print(img.shape)

# --------------------------------一般神经网络中对图像的处理(部分)--------------------------------------------------
# 打印图像的PTL存储形式
print(img)
# 将图片转成numpy数组(这是图像处理过程中必然使用的一步),并将原来的int像素值改成float类型(放数组里就是float,存储在图像中就是int整型。)
img = np.asarray(img, dtype=float)
print(img)  # 打印numpy的存储形式
# 转换3通道图像的数组格式 : transpose (H, W, C) -> (C, H, W)
img = img.transpose((2, 0, 1))
print(img)  # 打印转换通道之后的存储形式
# ----------------------------------------------------------------------------------
# 讲过上面处理过后,通常得到一副图像的数组表示形式,如:[3, 100, 100] 分别表示图形的通道数、高、宽
# 但图像一般的存储格式为:[100, 100, 3] 及高、宽、通道数
# 所以要对数组形式做一定的改变才能正常显示
# 首先转换数据类型:float -> int
img = np.asarray(img, dtype=int)
# 然后转换存储格式
img = img.transpose((1, 2, 0))    # transpose (C, H, W) -> (H, W, C)
# 之后便可正常显示图片
plt.imshow(img)
# plt.show()#注意show()函数放到代码段最后,防止下面存储图片时得到空白图

使用 matplotlib处理彩色图像

上一篇:[MySQL]-->查询5天之内过生日的同事中的闰年2月29日问题的解决过程


下一篇:python matplotlib 绘制图片并保存图片