[計算ビジョン] Python画像処理ライブラリPILのImageStatモジュールの概要
Introduction Imagestat Module Python Image Processing Library Pil
ImageStatモジュールは、画像全体または画像の領域の統計を計算するために使用されます。
まず、ImageStatモジュールの機能
1、統計
定義1:ImageStat.Stat(image)⇒Statインスタンス
ImageStat.Stat(image、mask)⇒Statインスタンス
意味1:特定の画像の統計値を計算します。変数マスクが割り当てられている場合、変数マスクによって定義された領域のみがカウントされます。
例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]
定義2:ImageStat.Stat(list)⇒Statインスタンス
意味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 '', line 1,in 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には、count、h、mean、bandsの4つの属性しかなく、sum属性はありません。
次に、ImageStatモジュールのプロパティ
次の属性には、画像の各チャネルに1つの要素のみの対応するシーケンスがあります。これらのプロパティは、呼び出されたときにのみ計算されます。それ以外の場合は計算されません。
1、エクストリーム
定義: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、カウント
定義: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です。したがって、属性カウント統計は786432の3つのチャネルになります。
3、合計
定義: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の3つのチャネルのピクセル値は累積され、それぞれ90912466.0、75765120.0、59027727.0です。
4、Sum2
定義:stat.sum2
意味:画像内の各チャネルのピクセル値の2乗の合計を取得します。
例:
>>>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は、合計の2乗ではなく、それぞれのチャネルのピクセル値の2乗の合計をカウントします。
5、平均
定義: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]
例からわかるように、属性の平均は、各チャネルのピクセル値の合計をピクセル数で割ったもので、小数点以下14桁まで正確です。
6、中央値
定義: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
意味:画像内の各チャネルのピクセル値のrms値を取得します。二乗平均平方根値または実効値とも呼ばれる二乗平均平方根値は、二乗、再平均化、および二乗によって計算されます。つまり、N項の2乗をNの2乗で除算し、次に平方根で除算した結果です。その計算式は次のとおりです。
例:
>>>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
意味:画像内の各チャネルのピクセル値の分散値を取得します。分散は、確率論と統計的分散が確率変数またはデータのセットを測定するときの分散の程度の尺度です。確率論の分散は、確率変数とその数学的期待値(平均)との間の偏差の程度を測定するために使用されます。統計の分散(サンプル分散)は、それぞれのデータとそれらの平均の間の差の2乗の合計の平均です。
例:
>>>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
意味:画像の各チャネルのピクセル値の標準偏差を取得します。標準偏差は、標準偏差とも呼ばれます。標準偏差(標準偏差)は、平均からの各データの距離(平均差)の平均を表します。これは分散の二乗の平方根であり、σで表されます。標準偏差は、分散の算術平方根です。標準偏差は、データセットの分散の程度を反映しています。標準偏差が小さいほど、これらの値の平均からの偏差は小さくなり、その逆も同様です。標準偏差の大きさは、平均値に対する標準偏差の比率で測定できます。標準偏差の式は次のとおりです。
例:
>>>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では、赤チャンネルのピクセル値が平均値に最も近い。
---------------------
OF:icamera0
オリジナル:https://blog.csdn.net/icamera0/article/details/50811855