您的位置:68399皇家赌场 > 集群主机 > Python中的图像管理

Python中的图像管理

发布时间:2019-05-09 05:51编辑:集群主机浏览(178)

    7 使用ndimage管理图片

    导包提取数据管理数量

    misc.face(gray=True,cmap='gray') 读取图片并可以张开灰度预处理

    ndimage.rotate(图片,角度) 旋转图片

    ndimage.zoom(图片,比例) 缩放图片

    face[0:400,450:900] 切割图片,壹维从0-400,二维从450-900

    from scipy import misc,ndimage
    #原始图片
    face = misc.face(gray=True)
    #移动图片坐标
    shifted_face = ndimage.shift(face, (50, 50))
    #移动图片坐标,并且指定模式
    shifted_face2 = ndimage.shift(face, (-200, 0), mode='wrap')
    #旋转图片
    rotated_face = ndimage.rotate(face, -30)
    #切割图片
    cropped_face = face[10:-10, 50:-50]
    #对图片进行缩放
    zoomed_face = ndimage.zoom(face, 0.5)
    faces = [shifted_face,shifted_face2,rotated_face,cropped_face,zoomed_face]
    

    绘图图片

    plt.figure(figsize = (12,12))
    for i,face in enumerate(faces):
        plt.subplot(1,5,i 1)
        plt.imshow(face,cmap = plt.cm.gray)
        plt.axis('off')
    

    图表的过滤

    #导包处理滤波
    from scipy import misc,ndimage
    import numpy as np
    import matplotlib.pyplot as plt
    face = misc.face(gray=True)
    face = face[:512, -512:]  # 做成正方形
    #图片加噪
    noisy_face = np.copy(face).astype(np.float)
    #噪声图片
    noisy_face  = face.std() * 0.5 * np.random.standard_normal(face.shape)
    #高斯过滤
    blurred_face = ndimage.gaussian_filter(noisy_face, sigma=1)
    #中值滤波
    median_face = ndimage.median_filter(noisy_face, size=5)
    
    #signal中维纳滤波
    from scipy import signal
    wiener_face = signal.wiener(noisy_face, (5, 5))
    
    titles = ['noisy','gaussian','median','wiener']
    faces = [noisy_face,blurred_face,median_face,wiener_face]
    

    绘图图片

    plt.figure(figsize=(12,12))
    plt.subplot(141)
    plt.imshow(noisy_face,cmap = 'gray')
    plt.title('noisy')
    plt.subplot(142)
    plt.imshow(blurred_face,cmap = 'gray')
    plt.title('gaussian')
    plt.subplot(143)
    plt.imshow(median_face,cmap = 'gray')
    plt.title('median')
    plt.subplot(144)
    plt.imshow(wiener_face,cmap = 'gray')
    plt.title('wiener')
    plt.show()
    

    壹.1.1 调换图像格式

    通过 save() 方法,PIL 能够将图像保存成八种格式的文书。上面包车型客车事例从文件名列表(filelist)中读取全部的图像文件,并调换到JPEG 格式:

    from PIL import Image
    import os
    
    for infile in filelist:
      outfile = os.path.splitext(infile)[0]   ".jpg"
      if infile != outfile:
        try:
          Image.open(infile).save(outfile)
        except IOError:
          print "cannot convert", infile
    

    PIL 的 open() 函数用于创建 PIL 图像对象,save() 方法用于保存图像到持有内定文件名的文书。除了后缀变为“.jpg”,上述代码的新文件名和原来的小说件名相同。PIL 是个十足智能的类库,能够依靠文件扩大名来判定图像的格式。PIL 函数会举行简短的检查,若是文件不是 JPEG 格式,会活动将其转变到 JPEG 格式;要是调换退步,它会在调整台出口一条报告退步的音信。

    本书会处理大批量图像列表。下边将创立一个富含文件夹中有所图像文件的文本名列表。首先新建3个文书,命名叫imtools.py,来囤积一些平时使用的图像操作,然后将上边包车型地铁函数增加进去:

    import os
    def get_imlist(path):
    
    """ 返回目录中所有JPG 图像的文件名列表"""
    
    return [os.path.join(path,f) for f in os.listdir(path) if f.endswith('.jpg')]
    

    现在,回到 PIL。

    表1-2:用 PyLab 库绘图的基本线型格式命令

    线型

     

    '-'

    实线

    '--'

    虚线

    ':'

    点线

    python图像常规操作,python图像常规

    使用python进行着力的图像操作与管理

    前言:

    与最初计算机视觉领域好些个程序都以由 C/C 写就的景观不一致。随着计算机硬件速度更加快,商量者在思考选拔实现算葡萄牙语言的时候会越来越多地考虑编写代码的功效和易用性,而不是像过去那样把算法的奉行效用放在第一个人。这一贯产生近年来越多的商量者接纳Python 来落成算法。

    前几天在Computer视觉领域,越来越多的探究者使用 Python 开始展览商量,所以有供给去上学一下特别易用的python在图像处理领域的接纳,那篇博客将会介绍怎么样选拔Python的多少个响当当的图像管理库落成最基本的图像操作与拍卖。

    运用PIL举办着力图像操作

    PIL简介:

    PIL(Python Imaging Library Python,图像管理类库)提供了通用的图像管理效果,以及大气立竿见影的中坚图像操作,举例图像缩放、裁剪、旋转、颜色调换等。

    PIL读取与存款和储蓄图像:

    使用 PIL 中的函数,大家得以从大大多图像格式的文书中读取数据,然后写入最广泛的图像格式文件中。PIL 中最要害的模块为 Image 。

    皇家赌场 ,下边这几个程序笔者动用PIL读取一张jpg图片将其灰度化之后存为三个png文件:

    # -*- coding: utf-8 -*-
    from PIL import Image
    import os
    #打开图像得到一个PIL图像对象
    img = Image.open("./source/test.jpg")
    #将其转为一张灰度图
    img = img.convert('L')
    #存储该张图片
    try:
      img.save("test.png")
    except IOError:
      print "cannot convert"
    

    Test.jpg

    皇家赌场 1

    Test.png

    皇家赌场 2

    PIL生成缩略图:

    # -*- coding: utf-8 -*-
    from PIL import Image
    import os
    #打开图像得到一个PIL图像对象
    img = Image.open("./source/test.jpg")
    #创建最长边为128的缩略图
    img.thumbnail((128,128))
    #存储该张图片
    try:
      img.save("test.png")
    except IOError:
      print "cannot convert"
    

    Test.png

    皇家赌场 3

    PIL调治尺寸与旋转:

    # -*- coding: utf-8 -*-
    from PIL import Image
    import os
    #打开图像得到一个PIL图像对象
    img = Image.open("./source/test.jpg")
    #修改图片大小,参数为一元组
    img = img.resize((100,200))
    #使图片逆时针选择45度
    img = img.rotate(45)
    #存储该张图片
    try:
      img.save("test.png")
    except IOError:
      print "cannot convert"
    

    Test.png

    皇家赌场 4

    PIL复制粘贴图像区域:

    # -*- coding: utf-8 -*-
    # -*- coding: utf-8 -*-
    from PIL import Image
    import os
    #打开图像得到一个PIL图像对象
    img = Image.open("./source/test.jpg")
    #从img中裁剪指定区域
    region = img.crop((300,300,500,500))
    #使裁剪部分逆时针选择145度
    region = region.rotate(145)
    #将该区域粘贴至指定区域
    img.paste(region,(100,100,300,300));
    #存储该张图片
    try:
      img.save("test.png")
    except IOError:
      print "cannot convert"
    

    Test.png

    皇家赌场 5

    元组的采纳中,坐标原点为左上角,区域划分如下图所示

    皇家赌场 6

    利用Matplotlib进行着力图像操作

    Matplotlib简介:

    我们管理数学生运动算、绘制图表,或然在图像上绘制点、直线和曲线时, Matplotlib是个很好的类库,具备比 PIL 更加强劲的绘图功用。Matplotlib 可以绘制出较好的线形图、饼状图、散点图等,不过对于超过二分之一Computer视觉应用来讲,仅仅须求采纳多少个绘图命令。举例,我们想用点和线来代表一些东西,举例兴趣点、对应点以及检验出的物体。

    运用Matplotlib绘制图像、点、线

    # -*- coding: utf-8 -*-
    from PIL import Image
    from pylab import *
    #打开图像得到一个PIL图像对象
    img = Image.open("./source/test.jpg")
    # 读取图像到数组中
    im = array(img)
    # 绘制图像
    imshow(im)
    # 一些点
    x = [100,100,400,400]
    y = [200,500,200,500]
    # 使用红色星状标记绘制点
    plot(x,y,'r*')
    # 绘制连接前两个点的线
    plot(x[:2],y[:2])
    # 添加标题,显示绘制的图像
    title('Plotting: "Test.jpg"')
    show()
    

    show() 命令首先展开图形用户界面(GUI),然后新建二个图像窗口。该图片用户分界面会循环阻断脚本,然后暂停,直到最后四个图像窗口关闭。在每一种脚本里,你只可以调用三遍show() 命令,而且常常是在本子的终极调用。

    也足以应用axis(‘off')命令使坐标轴不显得。

    运作结果

    皇家赌场 7

    在绘图时,有多数增选可以垄断图像的水彩和体制。

    如:

    plot(x,y)      #默认为蓝色实线
    plot(x,y,'r*')   #红色星状标记
    plot(x,y,'go-')   #带有圆圈标记的绿线
    plot(x,y,'ks:')   #带有正方形标记的黑色虚线
    
    标记 颜色
    ‘b' 蓝色
    ‘g' 绿色
    ‘r' 红色
    ‘c' 青色
    ‘m' 品红
    ‘y' 黄色
    ‘k' 黑色
    ‘w' 白色
    标记 线型
    ‘-‘ 实线
    ‘–' 虚线
    ‘:' 点线
    标记 形状
    ‘.'
    ‘o' 圆圈
    's' 正方形
    ‘*' 星形
    ‘ ' 加号
    ‘x' 叉号

    使用Matplotlib绘制图像概略

    绘图图像的轮廓(或许别的二维函数的等概况线)在工作中国和欧洲常管用。因为绘制概况供给对每一个坐标 [x, y] 的像素值施加同三个阈值,所以率先须要将图像灰度化,之后接纳contour得到概略图像

    # -*- coding: utf-8 -*-
    from PIL import Image
    from pylab import *
    # 读取图像到数组中,并灰度化
    im = array(Image.open('./source/test.jpg').convert('L'))
    #显示时抛弃颜色信息
    gray()
    # 显示轮廓图像
    contour(im, origin='image')
    # 在原点的左上角显示
    axis('equal')
    #关闭坐标轴
    axis('off')
    show()
    

    运维结果

    皇家赌场 8

    行使Matplotlib绘制直方图

    图像的直方图用来表征该图像像素值的布满意况。用自然数量的小区间(bin)来内定表征像素值的限制,各样小区间会获得落入该小区间表示范围的像素数量。(灰度)图像的直方图能够行使 hist() 函数绘制:

    hist() 函数的第一个参数钦点小区间的数目。要求注意的是,因为 hist() 只接受一维数组作为输入,所以大家在绘制图像直方图在此以前,必须先对图像进行压平管理。flatten() 方法将随机数组根据行优先准则转变到一维数组。

    # -*- coding: utf-8 -*-
    from PIL import Image
    from pylab import *
    # 读取图像到数组中,并灰度化
    im = array(Image.open('./source/test.jpg').convert('L'))
    # 直方图图像
    hist(im.flatten(),128)
    # 显示
    show()
    

    运作结果

    皇家赌场 9

    运用Matplotlib进行交互式标注

    PyLab 库中的 ginput() 函数能够兑现交互式标注,用来标志一些点大概是有的磨炼多少。

    # -*- coding: utf-8 -*-
    from PIL import Image
    from pylab import *
    # 读取图像到数组中
    im = array(Image.open('./source/test.jpg'))
    # 显示图像
    imshow(im)
    print 'Please click 3 points'
    #获取点击并将点击坐标保存在[x,y]列表中
    x = ginput(3)
    #输出保存的数据
    print 'you clicked:',x
    show()
    

    地点的本子首先绘制1幅图像,然后等待用户在绘图窗口的图像区域点击三回。程 序将那个点击的坐标 [x, y] 自动保存在 x 列表里。

    运作结果

    you clicked: [(295.22704081632651, 210.72448979591837), (405.43112244897952, 66.846938775510239), (439.1045918367347, 180.11224489795921)]
    

    总结

    本篇博客介绍了一些python基本的图像操作,除了上述的PIL和Matplotlib,还八天五头会利用numpy直接操作图像数组来到达操作图像的目标,使用scipy完毕越来越多更头昏眼花的计量,我会把自家的求学进度记录下来,希望对我们享有辅助~

    以上便是本文关于python图像常规操作的全体内容,希望对大家享有扶助。感兴趣的爱人能够一连参照本站:

    python使用邻接矩阵构造图代码示例

    在Python web中落实验证码图片代码分享

    python有意思的门类—色情图片识别代码分享

    Python生成数字图片代码分享

    有哪些难题得以每一日留言,小编会及时回复大家的。多谢朋友们对本站的支撑!

    使用python举办基本的图像操作与管理 前言: 与前期Computer视觉领域大多程序都以由 C/C 写就的情形分化...

    八 pandas绘图函数

    线型图

    #采用Series做法
    import numpy as np
    import pandas as pd
    from pandas import Series,DataFrame
    import matplotlib.pyplot as plt
    np.random.seed(0)
    s = Series(np.random.randn(10).cumsum(),index = np.arange(0,100,10))
    s.plot()
    plt.show(s.plot())
    
    #DataFrame图标实例
    np.random.seed(0)
    df = DataFrame(np.random.randn(10,4).cumsum(0),
                  columns= ['A','B','C','D'],
                  index = np.arange(0,100,10))
    plt.show(df.plot())
    

    柱状图

    #水平与垂直柱状图Series
    fig,axes = plt.subplots(2,1)
    data = Series(np.random.rand(16),index = list('abcdefghijklmnop'))
    data.plot(kind = 'bar',ax = axes[0],color = 'b',alpha = 0.9)
    data.plot(kind = 'barh',ax = axes[1],color = 'b',alpha = 0.9)
    
    #DataFrame柱状图
    df = DataFrame(np.random.rand(6,4),
                  index = ['one','two','three','four','five','six'],
                  columns = pd.Index(['A','B','C','D'],name = 'Genus'))
    plt.show(df.plot(kind = 'bar'))
    
    df = DataFrame(np.random.rand(6,4),
                  index = ['one','two','three','four','five','six'],
                  columns = pd.Index(['A','B','C','D'],name = 'Genus'))
    plt.show(df.plot(kind = 'bar',stacked = True))
    

    直方图与密度图

    a = np.random.random(10)
    b = a/a.sum()
    s = Series(b)
    plt.show(s.hist(bins = 100)) #bins直方图的柱数
    
    #密度图
    a = np.random.random(10)
    b = a/a.sum()
    s = Series(b)
    plt.show(s.plot(kind = 'kde'))
    

    含有密度测度的规格化直方图

    %matplotlib inline
    comp1 = np.random.normal(0,1,size = 200)
    comp2 = np.random.normal(10,2,size = 200)
    values = Series(np.concatenate([comp1,comp2]))
    p1 = values.hist(bins = 100,alpha = 0.3,color = 'k',density = True)
    
    p2 = values.plot(kind = 'kde',style = '--',color = 'r')
    

    皇家赌场 10

    散布图

    #简单的散布图
    df = DataFrame(np.random.randint(0,100,size = 100).reshape(50,2),columns = ['A','B'])
    df.plot('A','B',kind = 'scatter',title = 'x Vs y')
    

    走走矩阵图

    import numpy as np
    import pandas as pd
    from pandas import Series,DataFrame
    %matplotlib inline
    df = DataFrame(np.random.randn(200).reshape(50,4),columns = ['A','B','C','D'])
    pd.plotting.scatter_matrix(df,diagonal = 'kde',color = 'k')
    

    皇家赌场 11

    一.壹.二 创设缩略图

    选拔 PIL 能够很方便地创造图像的缩略图。thumbnail() 方法接受二个元组参数(该参数钦赐生成缩略图的高低),然后将图像调换来符合元组参数钦点大小的缩略图。例如,创制最长边为 12捌 像素的缩略图,能够动用下列命令:

    pil_im.thumbnail((128,128))
    

    一.③.陆 图像的主元素深入分析(PCA)

    PCA(Principal Component Analysis,主元素解析)是一个充足实用的降维技能。它能够在利用尽大概少维数的前提下,尽量多地维持磨炼多少的消息,在此意义上是二个拔尖级手艺。即使是1幅 100×十0 像素的小灰度图像,也许有 10 000 维,能够看成 十 000 维空间中的贰个点。1兆像素的图像具有百万维。由于图像具备极高的维数,在繁多计算机视觉应用中,我们日常应用降维操作。PCA 发生的投影矩阵可以被视为将原有坐标转换来现存的坐标系,坐标系中的各样坐标根据重视递减排列。

    为了对图像数据实行 PCA 转变,图像供给调换到1维向量表示。我们能够运用 NumPy 类库中的 flatten() 方法开始展览转移。

    将变平的图像堆叠起来,大家得以获取1个矩阵,矩阵的一行表示1幅图像。在测算主方向前面,全部的行图像遵照平均图像举办了中央化。大家常见选用SVD(Singular Value Decomposition,离奇值分解)方法来总括主成分;但当矩阵的维数相当大时,SVD 的企图相当的慢,所以那时一般性不应用 SVD 分解。下边正是 PCA 操作的代码:

    from PIL import Image
    from numpy import *
    
    def pca(X):
      """ 主成分分析:
        输入:矩阵X ,其中该矩阵中存储训练数据,每一行为一条训练数据
        返回:投影矩阵(按照维度的重要性排序)、方差和均值"""
    
      # 获取维数
      num_data,dim = X.shape
    
      # 数据中心化
      mean_X = X.mean(axis=0)
      X = X - mean_X
    
    if dim>num_data:
      # PCA- 使用紧致技巧
      M = dot(X,X.T) # 协方差矩阵
      e,EV = linalg.eigh(M) # 特征值和特征向量
      tmp = dot(X.T,EV).T # 这就是紧致技巧
      V = tmp[::-1] # 由于最后的特征向量是我们所需要的,所以需要将其逆转
      S = sqrt(e)[::-1] # 由于特征值是按照递增顺序排列的,所以需要将其逆转
      for i in range(V.shape[1]):
        V[:,i] /= S
    else:
      # PCA- 使用SVD 方法
      U,S,V = linalg.svd(X)
      V = V[:num_data] # 仅仅返回前nun_data 维的数据才合理
    
    # 返回投影矩阵、方差和均值
    return V,S,mean_X
    

    该函数首先通过减去每一维的均值将数据中央化,然后总括协方差矩阵对应最大特征值的特征向量,此时得以选取简明的本事依然SVD 分解。这里大家运用了 range() 函数,该函数的输入参数为三个整数 n ,函数重回整数 0...( n -一) 的3个列表。你也足以动用 arange() 函数来回到一个数组,只怕接纳 xrange() 函数再次回到一个发生器(也许会进级速度)。我们在本书中贯穿使用 range() 函数。

    1经数据个数小于向量的维数,大家决不 SVD 分解,而是总结维数越来越小的协方差矩阵 XX T 的特征向量。通过仅总结对应前 k ( k 是降维后的维数)最大特征值的特征向量,可以使地点的 PCA 操作更加快。由于篇幅所限,有意思味的读者可以自动探究。矩阵 V 的每行向量都以正交的,并且包括了教练多少方差依次减弱的坐标方向。

    我们接下去对字体图像进行 PCA 转变。fontimages.zip 文件包涵采纳差异字体的字符 a 的缩略图。全体的 2359种字体可防止费下载 二 。假定这几个图像的称呼保存在列表 imlist 中,跟以前的代码一齐保存传在 pca.py 文件中,大家得以选择上面包车型地铁剧本总括图像的主成分:

    贰 免费字体图像库由 马丁 Solli 搜集并上传(  )。

    from PIL import Image
    from numpy import *
    from pylab import *
    import pca
    
    im = array(Image.open(imlist[0])) # 打开一幅图像,获取其大小
    m,n = im.shape[0:2] # 获取图像的大小
    imnbr = len(imlist) # 获取图像的数目
    
    # 创建矩阵,保存所有压平后的图像数据
    immatrix = array([array(Image.open(im)).flatten()
                   for im in imlist],'f')
    
    # 执行 PCA 操作
    V,S,immean = pca.pca(immatrix)
    
    # 显示一些图像(均值图像和前 7 个模式)
    figure()
    gray()
    subplot(2,4,1)
    imshow(immean.reshape(m,n))
    for i in range(7):
      subplot(2,4,i 2)
      imshow(V[i].reshape(m,n))
    
    show()
    

    专注,图像供给从壹维代表重新调换到二维图像;能够使用 reshape() 函数。如图 一-8 所示,运维该例子会在3个制图窗口中显示 九个图像。这里大家应用了 PyLab 库的 subplot() 函数在叁个窗口中放置五个图像。

    皇家赌场 12

    1 Scipy简介

    Scipy依赖于Numpy
    Scipy提供了真正的矩阵
    Scipy包含的功能:最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理、图像处理、常微分方程求解器等
    Scipy是高端科学计算工具包
    Scipy由一些特定功能的子模块组成
    

    壹.三.叁 图像缩放

    NumPy 的数组对象是我们管理图像和多少的根本工具。想要对图像实行缩放处理未有现存简单的艺术。大家得以应用从前PIL 对图像对象转变的操作,写三个简短的用来图像缩放的函数。把下部的函数增添到 imtool.py 文件里:

    def imresize(im,sz):
      """ 使用PIL 对象重新定义图像数组的大小"""
      pil_im = Image.fromarray(uint8(im))
    
      return array(pil_im.resize(sz))
    

    咱俩将会在接下去的剧情中采用那几个函数。

    壹.三.肆 直方图均衡化

    图像灰度转变中二个可怜实惠的例证正是 直方图均衡化 。直方图均衡化是指将一幅图像的灰度直方图变平,使调换后的图像中每一个灰度值的布满概率都大同小异。在对图像做越发管理以前,直方图均衡化平日是对图像灰度值进行归1化的二个相当好的秘技,并且能够加强图像的相比较度。

    在这种景况下,直方图均衡化的转换函数是图像中像素值的 储存布满函数 (cumulative distribution function,简写为 cdf,将像素值的限定映射到目的范围的归一化操作)。

    上边包车型大巴函数是直方图均衡化的切切实实贯彻。将以此函数增多到 imtool.py 里:

    def histeq(im,nbr_bins=256):
      """ 对一幅灰度图像进行直方图均衡化"""
    
      # 计算图像的直方图
      imhist,bins = histogram(im.flatten(),nbr_bins,normed=True)
      cdf = imhist.cumsum() # cumulative distribution function
      cdf = 255 * cdf / cdf[-1] # 归一化
    
      # 使用累积分布函数的线性插值,计算新的像素值
      im2 = interp(im.flatten(),bins[:-1],cdf)
    
      return im2.reshape(im.shape), cdf
    

    该函数有四个输入参数,3个是灰度图像,2个是直方图中动用小区间的多寡。函数重回直方图均衡化后的图像,以及用来做像素值映射的集合遍布函数。注意,函数中使用到积累分布函数的末梢二个成分(下标为 -1),指标是将其归①化到 0...一 范围。你能够像上面那样使用该函数:

    from PIL import Image
    from numpy import *
    
    im = array(Image.open('AquaTermi_lowcontrast.jpg').convert('L'))
    im2,cdf = imtools.histeq(im)
    

    图 一-6 和图 一-七为地方直方图均衡化例子的结果。上边一行呈现的分别是直方图均衡化在此以前和之后的灰度直方图,以及储存概率布满函数映射图像。能够看看,直方图均衡化后图像的相比度加强了,原先图像灰湖绿区域的底细变得清清楚楚。

    皇家赌场 13

    6 scipy文件的输入与出口

    保留2进制文件

    from scipy import io as spio
    import numpy as np
    a = np.ones((3,3))
    #mat文件是标准的二进制文件
    spio.savemat('./data/file.mat',mdict={'a':a})
    

    读取图片

    from scipy import misc
    data = misc.imread('./data/moon.png')
    

    读取保存的公文

    data = spio.loadmat('./data/file.mat')
    data['a']
    

    封存图片

    #模糊,轮廓,细节,edge_enhance,edge_enhance_more, 浮雕,find_edges,光滑,smooth_more,锐化
    misc.imsave('./data/save.png',arr=data)
    

    第 一 章 基本的图像操作和管理

    本章讲授操作和管理图像的基础知识,将由此大气演示介绍管理图像所需的 Python 工具包,并介绍用于读取图像、图像转变和缩放、总计导数、画图和保留结果等的骨干工具。那个工具的采纳将贯穿本书的剩余章节。

    图 一-陆:直方图均衡化示例。左边为原本图像和直方图,中间图为灰度转变函数,右边为直方图均衡化后的图像和呼应直方图

    皇家赌场 14

    三 图片灰度管理

    最大值法: 中华V=G=B=max(PAJERO,G,B) 这种办法灰度亮度相比较高

    data2 = data.mean(axis = 2)
    

    平均值法: 智跑=G=B=(LAND G B)/三 这种方法灰度图像比较柔和

    加权平均值 : 悍马H贰=G=B=(w一R w2G w3*B) 根据分化的权重获得差异底色的图纸

    data3 = np.dot(data,[0.299,0.587,0.114])
    

    一.伍 高端示范:图像去噪

    咱俩由此1个老大实用的例子——图像的去噪——来终止本章。图像去噪是在剔除图像噪声的同时,尽大概地保存图像细节和结构的管理才具。大家这里运用 ROF(Rudin-Osher-Fatemi)去噪模型。该模型最早出现在文献 [28] 中。图像去噪对于多数使用来讲都卓殊关键;这么些应用范围很广,小到令你的假南充片看起来更了不起,大到加强卫星图像的身分。ROF 模型具备很好的属性:使拍卖后的图像更平整,同时保证图像边缘和结构音讯。

    ROF 模型的数学基础和拍卖本领异常高深,不在本书讲述范围之内。在描述怎样依照Chambolle 提议的算法 [5] 完结 ROF 求解器在此之前,本书首先简介一下 ROF 模型。

    一幅(灰度)图像 I 的全变差(Total Variation,TV)定义为梯度范数之和。在一连表示的动静下,全变差表示为:

    皇家赌场 15            (1.1)

    在离散表示的情状下,全变差表示为:

    皇家赌场 16

    其间,上边的姿势是在具有图像坐标 x=[x, y] 上取和。

    在 Chambolle 提出的 ROF 模型里,指标函数为找出降噪后的图像 U,使下式最小:

    皇家赌场 17

    其间范数 ||I-U|| 是去噪后图像 U 和原始图像 I 差距的心胸。也正是说,本质上该模型使去噪后的图像像素值“平坦”变化,不过在图像区域的边缘上,允许去噪后的图像像素值“跳跃”变化。

    奉公守法随想 [5] 中的算法,咱们得以遵守下边包车型地铁代码完成 ROF 模型去噪:

    from numpy import *
    
    def denoise(im,U_init,tolerance=0.1,tau=0.125,tv_weight=100):
      """ 使用A. Chambolle(2005)在公式(11)中的计算步骤实现Rudin-Osher-Fatemi(ROF)去噪模型
    
        输入:含有噪声的输入图像(灰度图像)、U 的初始值、TV 正则项权值、步长、停业条件
    
        输出:去噪和去除纹理后的图像、纹理残留"""
    
    m,n = im.shape # 噪声图像的大小
    
    # 初始化
    U = U_init
    Px = im # 对偶域的x 分量
    Py = im # 对偶域的y 分量
    error = 1
    
    while (error > tolerance):
      Uold = U
    
      # 原始变量的梯度
      GradUx = roll(U,-1,axis=1)-U # 变量U 梯度的x 分量
      GradUy = roll(U,-1,axis=0)-U # 变量U 梯度的y 分量
    
      # 更新对偶变量
      PxNew = Px   (tau/tv_weight)*GradUx
      PyNew = Py   (tau/tv_weight)*GradUy
      NormNew = maximum(1,sqrt(PxNew**2 PyNew**2))
    
      Px = PxNew/NormNew # 更新x 分量(对偶)
      Py = PyNew/NormNew # 更新y 分量(对偶)
    
      # 更新原始变量
      RxPx = roll(Px,1,axis=1) # 对x 分量进行向右x 轴平移
      RyPy = roll(Py,1,axis=0) # 对y 分量进行向右y 轴平移
    
      DivP = (Px-RxPx) (Py-RyPy) # 对偶域的散度
      U = im   tv_weight*DivP # 更新原始变量
    
      # 更新误差
      error = linalg.norm(U-Uold)/sqrt(
    

    1.一.1 转变图像格式

    通过 save() 方法,PIL 能够将图像保存成各类格式的公文。下边包车型大巴例证从文件名列表( filelist )中读取全数的图像文件,并调换到JPEG 格式:

    from PIL import Image
    import os
    
    for infile in filelist:
      outfile = os.path.splitext(infile)[0]   ".jpg"
      if infile != outfile:
        try:
          Image.open(infile).save(outfile)
        except IOError:
          print "cannot convert", infile
    

    PIL 的 open() 函数用于成立 PIL 图像对象, save() 方法用于保存图像到持有钦点文件名的文本。除了后缀变为“.jpg”,上述代码的新文件名和原来的书文件名同样。PIL 是个丰裕智能的类库,可以依附文件增添名来推断图像的格式。PIL 函数会开始展览简易的反省,借使文件不是 JPEG 格式,会自动将其转换来 JPEG 格式;若是调换战败,它会在决定台出口一条报告失利的音信。

    本书会处理大批量图像列表。上面将创立1个分包文件夹中颇具图像文件的文件名列表。首先新建二个文件,命名字为imtools.py,来囤积一些时常应用的图像操作,然后将下边包车型大巴函数增多进去:

    import os
    def get_imlist(path):
    
    """ 返回目录中所有JPG 图像的文件名列表"""
    
    return [os.path.join(path,f) for f in os.listdir(path) if f.endswith('.jpg')]
    

    现在,回到 PIL。

    4 Matplotlib中的绘图本领

    单条曲线

    x = np.arange(0.0,6.0,0.01)
    plt.plot(x, x**2)
    plt.show()
    

    多条曲线

    x = np.arange(1, 5,0.01)
    plt.plot(x, x**2)
    plt.plot(x, x**3.0)
    plt.plot(x, x*3.0)
    plt.show()
    
    x = np.arange(1, 5)
    plt.plot(x, x*1.5, x, x*3.0, x, x/3.0)
    plt.show()
    

    标题与标签

    plt.plot([1, 3, 2, 4])
    plt.xlabel('This is the X axis')
    plt.ylabel('This is the Y axis')
    plt.show()
    
    plt.plot([1, 3, 2, 4])
    plt.title('Simple plot')
    plt.show()
    

    据书上说线型绘制图片

    numpy.random.randn(d0, d1, …, dn)是从规范正态布满中回到二个或七个样本值。

    numpy.random.rand(d0, d1, …, dn)的随机样本位于[0, 1)中。

    numpy.random.standard_normal(size=None):随机多个浮点数或N维浮点数组,标准正态分布随机样本

    cumsum :总计轴向元素累加和,重回由中间结果组成的数组 , 关键正是重回值是“由中间结果组成的数组”

    plt.plot(np.random.randn(1000).cumsum(), linestyle = ':',marker = '.', label='one')
    plt.plot(np.random.randn(1000).cumsum(), 'r--', label='two') 
    plt.plot(np.random.randn(1000).cumsum(), 'b.', label='three')
    plt.legend(loc='best') # loc='best'
    plt.show()
    

    壹.肆.四 一些立竿见影的SciPy模块

    SciPy 中隐含部分用以输入和输出的实用模块。上面介绍在那之中五个模块:io 和 misc

    1. 读写.mat文件

      借令你有局地数据,或然在网络下载到一些妙趣横生的数据集,这个数量以 Matlab 的 .mat 文件格式存款和储蓄,那么能够行使 scipy.io 模块举行读取。

      data = scipy.io.loadmat('test.mat')
      

      地点代码中,data 对象涵盖三个字典,字典中的键对应于保存在原有 .mat 文件中的变量名。由于这么些变量是数组格式的,由此得以很有益于地保留到 .mat 文件中。你仅需创设贰个字典(当中要含有你想要保存的保有变量),然后选取 savemat() 函数:

      data = {}
      data['x'] = x
      scipy.io.savemat('test.mat',data)
      

      因为地点的台本保存的是数组 x,所以当读入到 Matlab 中时,变量的名字仍为 x。关于 scipy.io 模块的越来越多内容,请参见在线文档 。

    2. 以图像格局保留数组

      因为我们须要对图像实行操作,并且供给使用数组对象来做运算,所以将数组间接保存为图像文件 四 特别管用。本书中的大多图像都以这么的创立的。

      imsave() 函数能够从 scipy.misc 模块中载入。要将数组 im 保存到文件中,能够运用上边的授命:

      from scipy.misc import imsave
      imsave('test.jpg',im)
      

      scipy.misc 模块一样含有了老牌的 Lena 测试图像:

      lena = scipy.misc.lena()
      

      该脚本再次来到2个 51二×51二 的灰度图像数组。

    4所有 Pylab 图均可保存为多种图像格式,方法是点击图像窗口中的“保存”开关。

    一.二.叁 交互式标注

    不常用户需求和少数应用交互,比方在一幅图像中标志一些点,大概标美赞臣(Meadjohnson)些练习多少。 PyLab 库中的 ginput() 函数就足以兑现交互式标注。下边是八个大致的事例:

    from PIL import Image
    from pylab import *
    
    im = array(Image.open('empire.jpg'))
    imshow(im)
    print 'Please click 3 points'
    x = ginput(3)
    print 'you clicked:',x
    show()
    

    下边的本子首先绘制壹幅图像,然后等待用户在绘图窗口的图像区域点击一回。程序将这么些点击的坐标 [ x, y ] 自动保存在 x 列表里。

    2 图片消噪:傅里叶转变

    #模块用来计算快速傅里叶变换
    import scipy.fftpack as fftpack
    import matplotlib.pyplot as plt
    %matplotlib inline
    #读取图片
    data = plt.imread('moonlanding.png')
    #
    data2 = fftpack.fft2(data)
    
    data3 = np.where(np.abs(data2)>8e2,0,data2)
    
    data4 = fftpack.ifft2(data3)
    
    data5 = np.real(data4)
    
    plt.figure(figsize=(12,9))
    
    plt.imshow(data5,cmap = 'gray')
    

    1.3 NumPy

    NumPy()是极其盛名的 Python 科学总结工具包,个中带有了大气得力的切磋,举个例子数组对象(用来表示向量、矩阵、图像等)以及线性代数函数。NumPy 中的数组对象大致贯穿用于本书的有所例子中 一 数组对象足以扶持您兑现数组中重要性的操作,举个例子矩阵乘积、转置、解方程系统、向量乘积和归1化,那为图像变形、对转移实行建立模型、图像分类、图像聚类等提供了基础。

    1PyLab 实际上包蕴 NumPy 的1对内容,如数组类型。那也是大家能够在 一.2 节使用数组类型的由来。

    NumPy 可以从  免费下载,在线验证文书档案()包括了你大概碰着的多数题指标答案。关于 NumPy 的越多内容,请参见开源书籍 [24]。

    壹.壹.二 创设缩略图

    运用 PIL 能够很便利地开创图像的缩略图。 thumbnail() 方法接受2个元组参数(该参数内定生成缩略图的尺寸),然后将图像调换到符合元组参数钦点大小的缩略图。举例,创造最长边为 12八 像素的缩略图,能够接纳下列命令:

    pil_im.thumbnail((128,128))
    

    5 scipy积分求圆周率

    绘制圆

    f = lambda x : (1 - x**2)**0.5
    import numpy as np
    import matplotlib.pyplot as plt
    x = np.linspace(-1,1,1000)
    plt.figure(figsize = (4,4))
    plt.plot(x,f(x),'-',x,-f(x),'-',color = 'r')
    

    使用Scipy.integrate.quad()来拓展测算

    #integrate.quad(函数,区间端点) ,返回值为面积与精度
    from scipy import integrate
    def g(x):
        return (1- x**2)**0.5
    area,err = integrate.quad(g,-1,1)
    print(area,err)
    

    1.1 PIL:Python图像管理类库

    PIL(Python Imaging Library Python,图像管理类库)提供了通用的图像管理效果,以及大气立竿见影的核心图像操作,比方图像缩放、裁剪、旋转、颜色转变等。PIL 是免费的,能够从  下载。

    行使 PIL 中的函数,大家得以从大好多图像格式的文本中读取数据,然后写入最广泛的图像格式文件中。PIL 中最注重的模块为 Image。要读取一幅图像,能够利用:

    from PIL import Image
    
    pil_im = Image.open('empire.jpg')
    

    上述代码的回来值 pil_im 是贰个 PIL 图像对象。

    图像的水彩调换能够应用 convert() 方法来兑现。要读取一幅图像,并将其调换来灰度图像,只需求加上 convert('L'),如下所示:

    pil_im = Image.open('empire.jpg').convert('L')
    

    在 PIL 文书档案中有局地例证,参见 。这么些事例的出口结果如图 一-1 所示。

    皇家赌场 18

    图 一-一:用 PIL 处理图像的例子

    壹.一 PIL:Python图像管理类库

    PIL(Python Imaging Library Python,图像管理类库)提供了通用的图像管理作用,以及大气得力的骨干图像操作,比方图像缩放、裁剪、旋转、颜色调换等。PIL 是免费的,能够从  下载。

    利用 PIL 中的函数,我们得以从大大多图像格式的公文中读取数据,然后写入最遍布的图像格式文件中。PIL 中最重视的模块为 Image 。要读取一幅图像,能够使用:

    from PIL import Image
    
    pil_im = Image.open('empire.jpg')
    

    上述代码的归来值 pil_im 是3个 PIL 图像对象。

    图像的颜色转变能够动用 convert() 方法来促成。要读取一幅图像,并将其转变来灰度图像,只需求加多 convert('L') ,如下所示:

    pil_im = Image.open('empire.jpg').convert('L')
    

    在 PIL 文书档案中有一点点事例,参见  。这几个事例的出口结果如图 1-1 所示。

    皇家赌场 19

    1.二.2 图像概况和直方图

    上边来看多个专门的绘图示例:图像的概况和直方图。绘制图像的概略(或许别的二维函数的等概况线)在专门的学问中国和亚洲常实用。因为绘制概况需求对各类坐标 [x, y] 的像素值施加同1个阈值,所以率先要求将图像灰度化:

    from PIL import Image
    from pylab import *
    
    # 读取图像到数组中
    im = array(Image.open('empire.jpg').convert('L'))
    
    # 新建一个图像
    figure()
    # 不使用颜色信息
    gray()
    # 在原点的左上角显示轮廓图像
    contour(im, origin='image')
    axis('equal')
    axis('off')
    

    像在此之前的事例同样,这里用 PIL 的 convert() 方法将图像转变到灰度图像。

    图像的直方图用来表征该图像像素值的分布情况。用自然数额的小区间(bin)来钦点表征像素值的限制,各样小区间会获得落入该小区间表示范围的像素数量。该(灰度)图像的直方图能够利用 hist() 函数绘制:

    figure()
    hist(im.flatten(),128)
    show()
    

    hist() 函数的第二个参数钦命小区间的数码。须要注意的是,因为 hist() 只接受1维数组作为输入,所以我们在绘制图像直方图此前,必须先对图像进行压平管理。flatten() 方法将放肆数组根据行优先准则转变来1维数组。图 一-三 为等概况线和直方图图像。

    皇家赌场 20

    图 1-3:用 Matplotlib 绘制图像等概况线和直方图

    一.③.叁 图像缩放

    NumPy 的数组对象是我们处理图像和数量的要紧工具。想要对图像进行缩放处理未有现存轻巧的办法。大家得以采纳从前PIL 对图像对象调换的操作,写三个简练的用来图像缩放的函数。把下部的函数增多到 imtool.py 文件里:

    def imresize(im,sz):
      """ 使用PIL 对象重新定义图像数组的大小"""
      pil_im = Image.fromarray(uint8(im))
    
      return array(pil_im.resize(sz))
    

    我们将会在接下去的源委中应用这些函数。

    一.四.壹 图像模糊

    图像的高斯模糊是可怜杰出的图像卷积例子。本质上,图像模糊正是将(灰度)图像 I 和一个高斯核进行卷积操作:

    *I**σ = **I*Gσ*

    其中 * 表示卷积操作; 是正统差为 σ 的2维高斯核,定义为 :

    皇家赌场 21

    高斯模糊日常是其余图像管理操作的一有的,比方图像插值操作、兴趣点总括以及广大别的应用。

    SciPy 有用来做滤波操作的 scipy.ndimage.filters 模块。该模块使用高效一维分离的法子来计量卷积。你可以像下边那样来使用它:

    from PIL import Image
    from numpy import *
    from scipy.ndimage import filters
    
    im = array(Image.open('empire.jpg').convert('L'))
    im2 = filters.gaussian_filter(im,5)
    

    上面 guassian_filter() 函数的终极一个参数表示标准差。

    图 一-九显示了乘胜 σ 的充实,一幅图像被混为一谈的等级次序。σ 越大,管理后的图像细节丢失越来越多。假若筹划模糊一幅彩色图像,只需简单地对每叁个颜色通道举行高斯模糊:

    im = array(Image.open('empire.jpg'))
    im2 = zeros(im.shape)
    for i in range(3):
      im2[:,:,i] = filters.gaussian_filter(im[:,:,i],5)
    im2 = uint8(im2)
    

    在上头的台本中,最终并不延续需要将图像调换到 uint八格式,这里只是将像素值用陆个人来代表。大家也得以使用:

    im2 = array(im2,'uint8')
    

    来完结退换。

    至于该模块越多的内容以及分裂参数的挑3拣4,请查看  上 SciPy 文书档案中的 scipy.ndimage 部分。

    皇家赌场 22

    图 1-9:使用 scipy.ndimage.filters 模块进行高斯模糊:(a)原始灰度图像;(b)使用 σ=二的高斯滤波器;(c)使用 σ=五 的高斯滤波器;(d)使用 σ=十的高斯滤波器

    一.一.4 调度尺寸和旋转

    要调度一幅图像的尺寸,大家能够调用 resize() 方法。该方法的参数是多少个元组,用来钦命新图像的尺寸:

    out = pil_im.resize((128,128))
    

    要旋转一幅图像,能够运用逆时针格局意味着旋转角度,然后调用 rotate() 方法:

    out = pil_im.rotate(45)
    

    上述例子的输出结果如图 一-1所示。最左端是原本图像,然后是灰度图像、粘贴有旋转后裁剪图像的原有图像,最后是缩略图。

    1.壹.三 复制和粘贴图像区域

    使用 crop() 方法能够从壹幅图像中裁剪钦定区域:

    box = (100,100,400,400)
    region = pil_im.crop(box)
    

    该区域使用肆元组来钦赐。4元组的坐标依次是(左,上,右,下)。PIL 中钦点坐标系的左上角坐标为(0,0)。大家得以转动上面代码中获得的区域,然后利用 paste() 方法将该区域放回去,具体贯彻如下:

    region = region.transpose(Image.ROTATE_180)
    pil_im.paste(region,box)
    

    图 壹-1:用 PIL 管理图像的事例

    本文由68399皇家赌场发布于集群主机,转载请注明出处:Python中的图像管理

    关键词: 68399皇家赌场

上一篇:C#中Hashtable

下一篇:没有了