使用Python Matplotlib绘制用于CNN训练图片的方法及实践

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoyw/article/details/88602361

图片识别是属于分类问题,例如工业设备运行工况,包括正常、供液不足等等数据分析图,用计算机模拟人学习分析图像,首先需要收集待学习的图片,并对图片进行分类管理,对于这些分类需要在计算机文件系统上分别建立目录,把对应分类的图片存储到相应的目录下,由于有些Python工具对中文支持的不好,建议最好直接使用数字建立目录,便于操作并省去麻烦。

对于训练学习的图片,考虑计算资源及响应速度等要求,要求图片尽可量的小,使用有限的像素表述清楚特征供计算机学习就足够了。

目前,图像识别主要是自然景物,例如人脸、动物、物体等方向等识别,而对于决策分析等方向的图表分析,几乎是空白,通过研究、实践总结出一点小经验,分享一起讨论。
  
工业大数据、人工智能中,有决策分析等方向等需求,例如学习人类看曲线图、饼图、直方图、帕特图等等。这类图像有个共同的特点,有坐标系!

坐标系是非常重要的参照特征,下面通过实验来进行验证。

1. 创建目录

目录样式如下:
在这里插入图片描述
示例代码如下:

def mkdir(path):
    # 去除首位空格
    path=path.strip()
    # 去除尾部 \ 符号
    path=path.rstrip("\\") 
    # 判断路径是否存在,存在——True;不存在——False
    isExists=os.path.exists(path) 
    # 判断结果
    if not isExists:
        # 如果不存在则创建目录,创建目录操作函数
        os.makedirs(path)  
        return True
    else:
        # 如果目录存在则不创建,并提示目录已存在
        return False

2. 从数据库中提取绘图数据

略。

3. 绘制图形并保存为图片

3.1. 创建画板

每画一幅图片时,需要先创建新的空白画板,并定义好图片尺寸,语法自己网上百度去,这里先给出简单的样例。
plt.figure(figsize(1.92, 1.2)) # 设置 figsize 192*120

3.2. 设置画板

首先,定义最大坐标视窗。例如 plt.axis([0,4,0,50]),二维的坐标系;
其次,增加图片中网格,方便分析曲线,语句是plt.grid()。

3.3. 画图

plt.plot(x,y,color="Blue")
plt.plot(upx,upy,color="Red")
plt.plot(downx,downy,color="Red")

3.4. 保存图片

使用pythonplt.savefig()保存图片到指定目录中。

为了提高CNN的性能,最直接的是减小图片尺寸,需要把图片四周空白去掉,并保留坐标系(可以不要刻度值)。
在这里插入图片描述
在这里插入图片描述
对比效果,最后采用temp2的方案——去白边留刻度。示例代码如下:
在这里插入图片描述

3.5. 关闭画板

保存图片到磁盘中,应关闭画板(如果是少量图片,无所谓了,但是,大量图片的情况下,如果不关闭画板,则很快耗尽资源而崩溃),使用方法:plt.close()。

最后,分享关键代码片段如下:

while row < c:
    tmp_data = data_X[row]
    ......
    #1.创建画板
    plt.figure(figsize(1.92, 1.2)) # 设置 figsize 192*120
    #plt.rcParams['savefig.dpi'] = 300 #图片像素
    #plt.rcParams['figure.dpi'] = 300 #分辨率
    # 默认的像素:[6.0,4.0],分辨率为100,图片尺寸为 600&400
    
    plt.axis(ax)
    plt.grid()
        
    plt.plot(x,y,color="Blue")
    plt.plot(upx,upy,color="Red")
    plt.plot(downx,downy,color="Red")
    
    # 去掉图片四周的空白,减少图片像数
    #plt.gca().xaxis.set_major_locator(plt.NullLocator()) 
    #plt.gca().yaxis.set_major_locator(plt.NullLocator()) 
    plt.subplots_adjust(top=1,bottom=0.05,left=0.05,right=1,hspace=0,wspace=0) 
    #plt.subplots_adjust(top=1,bottom=0,left=0,right=1,hspace=0,wspace=0) 
    plt.margins(0,0)
        
    #plt.show()
    mkdir(str(data_Y[row]))
    plt.savefig(str(data_Y[row]) + "\\" + str(row)+".jpg")
    #紧凑图像,会改变图像尺寸,在此不适用
    #plt.savefig(str(data_Y[row]) + "\\" + str(row)+".jpg",bbox_inches='tight')
    plt.close() # 关闭画板
    row = row + 1

通过CNN两层神经网络分析、测试,总结如下:

1、图像在坐标系位置准确,坐标轴、网格(grid)对预测结果没有(显著)影响;

2、图像尺寸由192×120缩减到160×100,对预测结果没有(显著)影响。

欢迎读者反馈指导,一起研究。

参考:
《使用Python Matplotlib绘图并输出图像到文件中的实践》 CSDN博客 肖永威 2018.04

展开阅读全文

没有更多推荐了,返回首页