美文网首页工具癖Python3机器学习读书
Python3机器学习实践:卷积神经网络篇一 图像

Python3机器学习实践:卷积神经网络篇一 图像

作者: AiFany | 来源:发表于2019-05-10 09:47 被阅读9次
    f20fd8e72558a8227882c10049229e9.jpg

    图像是由一个个像素点构成,每个像素点有三个通道,分别对应R,G,B。彩色RGB图像其实是一个三维矩阵,矩阵中的每个数字(0到255)代表的是一个像素一个通道的灰度。下面举例说明:

    image image image
    一、读取这个图片的三维矩阵
    # -*- coding:utf-8 -*-
    # &Author  AnFany
    
    from skimage import io
    
    fig_path = r"C:\Users\GWT9\Desktop\af.png"
    matrix = io.imread(fig_path)  
    print(matrix, matrix.shape)
    
    • 结果
    [[[137 198 182] 
     [126 189 172]  
    [112 178 164]  
    ... 
     [106 220 210]  
    [ 94 208 198] 
     [ 96 210 202]]
    
    ... 
    
    [[210 227 211] 
     [199 216 200] 
     [213 227 214] 
     ... 
     [142 204 193] 
     [147 207 197] 
     [151 211 199]]] (189, 149, 3)
    
    二、获取3个通道的矩阵以及维度
    # -*- coding:utf-8 -*-
    # &Author  AnFany
    
    from skimage import io
    from PIL import Image
    
    fig_path = r"C:\Users\GWT9\Desktop\af.png"   # 图片路径
    matrix = io.imread(fig_path)
    
    R = matrix[:, :, 0]  # 获取R通道
    G = matrix[:, :, 1]  # 获取G通道
    B = matrix[:, :, 2]  # 获取B通道
    
    print('R通道矩阵:\n', R, '维度:', R.shape)
    print('G通道矩阵:\n', G, '维度:', G.shape)
    print('B通道矩阵:\n', B, '维度:', B.shape)
    
    • 结果
    R通道矩阵:
     [[137 126 112 ... 106  94  96]
     [153 171 154 ... 114 100 116]
     [144 137 137 ... 112 106 125]
     ...
     [218 216 206 ... 136 140 140]
     [221 210 211 ... 139 143 145]
     [210 199 213 ... 142 147 151]] 维度: (189, 149)
    G通道矩阵:
     [[198 189 178 ... 220 208 210]
     [214 233 220 ... 226 212 227]
     [206 199 201 ... 220 214 235]
     ...
     [232 230 222 ... 202 204 203]
     [235 224 227 ... 203 205 207]
     [227 216 227 ... 204 207 211]] 维度: (189, 149)
    B通道矩阵:
     [[182 172 164 ... 210 198 202]
     [198 218 206 ... 214 200 218]
     [191 184 187 ... 207 201 224]
     ...
     [219 217 211 ... 188 190 192]
     [222 211 216 ... 189 192 194]
     [211 200 214 ... 193 197 199]] 维度: (189, 149)
    
    三、根据每个通道的数字矩阵输出图片
    # -*- coding:utf-8 -*-
    # &Author  AnFany
    
    from skimage import io
    from PIL import Image
    
    fig_path = r"C:\Users\GWT9\Desktop\af.png"   # 图片路径
    matrix = io.imread(fig_path)
    
    R = matrix[:, :, 0]  # 获取R通道
    G = matrix[:, :, 1]  # 获取G通道
    B = matrix[:, :, 2]  # 获取B通道
    
    R_image = Image.fromarray(R)
    R_image.show()
    R_image.save(r"C:\Users\GWT9\Desktop\af_R.png")
    
    G_image = Image.fromarray(G)
    G_image.show()
    G_image.save(r"C:\Users\GWT9\Desktop\af_G.png")
    
    B_image = Image.fromarray(B)
    B_image.show()
    B_image.save(r"C:\Users\GWT9\Desktop\af_B.png")
    
    • 结果
    1. R通道


      image
    2. G通道

    image
    1. B通道
    image
    四、根据数字矩阵输出图片

    因为像素值均是0-255内的数字,因此要保证数字矩阵的数字在此范围内,可以设置数字的格式为uint8。

    # -*- coding:utf-8 -*-
    # &Author  AnFany
    
    from PIL import Image
    import numpy as np
    
    # 三维数字矩阵
    R = np.arange(-800, 100, 0.5, dtype=np.uint8).reshape(30, 20, 3)
    R_image = Image.fromarray(R)
    R_image.show()
    

    如果不转换数字格式,也可以为输出的图设定mode,例如mode设置为'RGB',但是此时数字矩阵和读取生成的图片的矩阵是不同的。

    # -*- coding:utf-8 -*-
    # &Author  AnFany
    
    from PIL import Image
    import numpy as np
    
    # 三维数字矩阵
    R = np.arange(-800, 100, 0.5).reshape(30, 20, 3)
    R_image = Image.fromarray(R, mode='RGB')  # 设置mode
    R_image.show()
    

    或将数字矩阵中的数字首先变为整数形式,然后小于0的按0计算,大于255的按255计算,这种转换和直接将数字进行uint8转换得到的是不同的,最后在转换为uint8的格式进行图片的输出。

    # &Author  AnFany
    
    from PIL import Image
    import numpy as np
    
    # 三维数字矩阵
    R = np.arange(-800, 100, 0.5).reshape(30, 20, 3)
    # 进行转换
    R[R < 0] = 0
    R[R > 255] = 255
    R_image = Image.fromarray(np.uint8(R)) # 转为uint8的格式
    R_image.show()
    

    项目地址卷积神经网络CNN,扫描下方二维码或者微信公众号直接搜索”Python范儿“,关注微信公众号pythonfan, 获取更多实例和代码。

    pythonfan.jpg

    相关文章

      网友评论

        本文标题:Python3机器学习实践:卷积神经网络篇一 图像

        本文链接:https://www.haomeiwen.com/subject/kfrooqtx.html