zoukankan      html  css  js  c++  java
  • Python图像处理库PIL的ImageStat模块介绍

    ImageStat模块用于计算整个图像或者图像的一个区域的统计数据。

    一、ImageStat模块的函数

    1、  Stat

    定义1ImageStat.Stat(image) Stat instance

      ImageStat.Stat(image, mask) Stat instance

    含义1:计算给定图像的统计值。

    假设变量mask被赋值,将仅仅针对变量mask所定义的区域进行统计。

    样例1

    >>> from PIL importImage, ImageStat
    
    >>> im01 =Image.open("D:\Code\Python\test\img\test01.jpg")
    
    >>> im02 =Image.open("D:\Code\Python\test\img\test02.jpg")
    
    >>> r,g,b =im02.split()
    
    >>> stat =ImageStat.Stat(im01)
    
    >>> stat.sum
    
    [120170597.0, 151378139.0,151481196.0]
    
    >>> stat.count
    
    [786432, 786432, 786432]
    
    >>> stat_r =ImageStat.Stat(im01,r)
    
    >>> stat_r.sum
    
    [120170597.0, 151378139.0,151481196.0]
    
    >>> stat_r.count
    
    [786432, 786432, 786432]
    
    >>> stat_g =ImageStat.Stat(im01,g)
    
    >>> stat_g.sum
    
    [116891840.0, 146593055.0,145616479.0]
    
    >>> stat_g.count
    
    [760083, 760083, 760083]
    
    >>> stat_b =ImageStat.Stat(im01,b)
    
    >>> stat_b.sum
    
    [111057281.0, 140047475.0,139208738.0]
    
    >>> stat_b.count
    
    [729161, 729161, 729161]


    定义2ImageStat.Stat(list) Stat instance

    含义2:与定义1一样。可是它仅仅计算前一个直方图的统计值。

    样例2

    >>> from PIL importImage, ImageStat
    
    >>> im01 =Image.open("D:\Code\Python\test\img\test01.jpg")
    
    >>> im02 =Image.open("D:\Code\Python\test\img\test02.jpg")
    
    >>> stat = ImageStat.Stat(im01)
    
    >>> stat_l =ImageStat.Stat([0,0,100,100])
    
    >>> stat_l.count
    
    [200]
    
    >>> stat_l.sum
    
     
    
    Traceback (most recent calllast):
    
      File "<pyshell#65>", line 1,in <module>
    
        stat_l.sum
    
      File"C:Python27libsite-packagesPILImageStat.py", line 48, in__getattr__
    
        v = getattr(self, "_get" + id)()
    
      File"C:Python27libsite-packagesPILImageStat.py", line 84, in _getsum
    
        layerSum += j * self.h[i + j]
    
    IndexError: list index out ofrange
    
    >>> stat_l.mean
    
    []
    
    >>> stat_l.bands
    
    []
    
    >>> stat_l.h
    
    [0, 0, 100, 100]


    python编辑器的提示看,对象stat_l仅仅有四个属性,分别为counthmeanbands,其并没有sum属性。

    二、ImageStat模块的属性

    以下的属性对于图像的每一个通道。拥有一个相应的仅含一个元素的序列。

    这些属性都是仅仅有在调用的时候才会去计算。否则不会做计算。

    1、 Extrema

    定义:stat.extrema

    含义:获取图像中每一个通道的最大值和最小值。

    样例:

    >>> from PIL importImage, ImageStat
    
    >>> im02 =Image.open("D:\Code\Python\test\img\test02.jpg")
    
    >>> stat =ImageStat.Stat(im02)
    
    >>> stat.extrema
    
    [(2, 255), (0, 255), (0, 255)]

    图像im02中,红色通道的最小值为2,最大值为255;绿色和蓝色通道的最小值均为0,最大值均为255

    2、 Count

    定义:stat.count

    含义:获取图像中每一个通道的像素个数。

    样例:

    >>> from PIL importImage, ImageStat
    
    >>> im02 =Image.open("D:\Code\Python\test\img\test02.jpg")
    
    >>> im02.mode
    
    'RGB'
    
    >>> im02.size
    
    (1024, 768)
    
    >>> stat =ImageStat.Stat(im02)
    
    >>>stat.count
    
    [786432, 786432,786432]

    图像im02的模式为“RGB”,其尺寸为1024x768。像素点个数为786432

    所以属性count统计的结果为三个通道均为786432

    3、 Sum

    定义:stat.sum

    含义:获取图像中每一个通道的像素值之和。

    样例:

    >>> from PIL import Image, ImageStat
    
    >>> im02 =Image.open("D:\Code\Python\test\img\test02.jpg")
    
    >>> stat = ImageStat.Stat(im02)
    
    >>> stat.sum
    
    [90912466.0,75765120.0, 59027727.0]

    图像im02的三个通道的像素值累加和分别为90912466.0, 75765120.0, 59027727.0

    4、 Sum2

    定义:stat.sum2

    含义:获取图像中每一个通道的像素值平方之和。

    样例:

    >>>from PIL import Image, ImageStat
    
    >>>im02 = Image.open("D:\Code\Python\test\img\test02.jpg")
    
    >>>stat = ImageStat.Stat(im02)
    
    >>>stat.sum
    
    [90912466.0,75765120.0, 59027727.0]
    
    >>>stat.sum2
    
    [14449895138.0,12289898764.0, 9141884969.0]

    属性sum2统计的是各个通道的像素值平方之和,并不是和的平方。

    5、  Mean

    定义:stat.mean

    含义:获取图像中每一个通道的像素值的平均值。

    样例:

    >>>from PIL import Image, ImageStat
    
    >>>im02 = Image.open("D:\Code\Python\test\img\test02.jpg")
    
    >>>stat = ImageStat.Stat(im02)
    
    >>>stat.sum
    
    [90912466.0,75765120.0, 59027727.0]
    
    >>>stat.count
    
    [786432, 786432,786432]
    
    >>>stat.mean
    
    [115.60117848714192,96.34033203125, 75.05763626098633]

    从实例中能够看出,属性mean为每一个通道的像素值之和除以像素个数。精确到小数点后14位。

    6、 Median

    定义:stat.mean

    含义:获取图像中每一个通道的像素值的中值。

    样例:

    >>> from PIL import Image, ImageStat
    
    >>> im02 =Image.open("D:\Code\Python\test\img\test02.jpg")
    
    >>> stat = ImageStat.Stat(im02)
    
    >>> stat.extrema
    
    [(2, 255), (0,255), (0, 255)]
    
    >>>stat.median
    
    [119, 80, 40]

    属性median获取了每一个通道像素值得中值。

    7、  Rms

    定义:stat.rms

    含义:获取图像中每一个通道的像素值的均方根值。均方根值。也称方均根值或有效值。它的计算方法是先平方、再平均、然后开方。即:将N个项的平方和除以N后开平方的结果,即均方根的结果。其计算公式为:

                                 

    样例:

    >>>from PIL import Image, ImageStat
    
    >>>im02 = Image.open("D:\Code\Python\test\img\test02.jpg")
    
    >>>stat = ImageStat.Stat(im02)
    
    >>>stat.rms
    
    [135.55069835243268,125.00965724006934, 107.81701101697355]

    8、  Var

    定义:stat.var

    含义:获取图像中每一个通道的像素值的方差值。方差(variance)是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。统计中的方差(样本方差)是各个数据分别与其平均数之差的平方的和的平均数。

    样例:

    >>>from PIL import Image, ImageStat
    
    >>>im02 = Image.open("D:\Code\Python\test\img\test02.jpg")
    
    >>>stat = ImageStat.Stat(im02)
    
    >>>stat.var
    
    [5010.359356216148,6345.954827388127, 5990.859103547667]

    9、  Stddev

    定义:stat.stddev

    含义:获取图像中每一个通道的像素值的标准差值。

    标准差也被称为标准偏差。标准差(Standard Deviation)描写叙述各数据偏离平均数的距离(离均差)的平均数。它是方差平方和平均后的方根,用σ表示。

    标准差是方差的算术平方根。

    标准差能反映一个数据集的离散程度。标准偏差越小。这些值偏离平均值就越少。反之亦然。标准偏差的大小可通过标准偏差与平均值的倍率关系来衡量。

    标准差的公式例如以下:

     

    样例:

    >>>from PIL import Image, ImageStat
    
    >>>im02 = Image.open("D:\Code\Python\test\img\test02.jpg")
    
    >>>stat = ImageStat.Stat(im02)
    
    >>>stat.stddev
    
    [70.78389192617306,79.66150153862358, 77.40064020114863]

    通过实例可知。图像im02中,红色通道的像素值最接近平均值。

  • 相关阅读:
    vant ui 在vue中的安装和使用
    vue-element-admin完整项目实例
    关于Vue中main.js,App.vue,index.html之间关系进行总结
    vue 集成 element ui
    springboot写入数据库汉字变问号???
    import declarations are not supported
    基于Idea从零搭建一个最简单的vue项目
    idea中执行“npm”命令,提示node 不是内部或外部命令,也不是可运行的程序
    Intellij IDEA 中如何 给Maven添加依赖
    圆圈中最后剩下的数字
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7079857.html
Copyright © 2011-2022 走看看