情報通信システム(7) http://www10. plala. or 情報通信システム(7) http://www10.plala.or.jp/katofmly/chiba-u/ 2018年6月12日 火曜日 午後4時10分~5時40分 NTT-TX Corp. 加藤 洋一
情報を送るということ たとえば、 送信側(蓄積側) 受信側(再生側) 送信側(蓄積側) 受信側(再生側) 事象が起きる 事象に符号を割り当てる 送る(蓄積する) 受信側(再生側) 符号を受け取る 符号から事象を再現する 提示(再生)する たとえば、 送信側(蓄積側) 一文字読み取る 文字に符号を割り当てる 送る(蓄積する) 受信側(再生側) 符号を受け取る 符号から文字を再現する 提示(再生)する 事象の種類 例えば、 一文字、音楽の一サンプル、画像の一画素、などなど 符号の割り当て方法を工夫すると、トータルの符号量を減らせる(可変長符号化)
(復習)情報量、情報エントロピー、可変長符号化 ある事象の生起確率が p のとき、その事象が生起したときの情報量は -log p と定義される。 情報エントロピーとは、情報量の期待値。即ち、 p1からpNまでの事象がある。 情報を効率よく(つまりなるべく少ないビット数で)符号化する方法として、可変長符号化がある。 代表的な方式はハフマン符号化(生起確率により符合の長さが異なる)
(復習)結合確率の情報エントロピー 事象間に関連がないとき (独立)は結合事象のエントロピーと各事象のエントロピーの和は等しい 個々の事象を別々に符号化しても、まとめて符号化しても同じ 事象間に関連があるとき は結合事象のエントロピーは各事象のエントロピーの和より小さくなる つまり、事象をまとめて符号化すればよい
確率事象とその結合(前回の講義) 複数の文字をまとめてひとつの事象と捉えることで、一文字あたりのエントロピー、即ち情報量が減ることが分かる。これは、隣り合う文字間に何らかの関連があるからである。 事象の数 場合の数 エントロピー 一文字あたりのエントロピー 1文字 15717 28 4.14 2文字 7858 385 7.44 3.72 3文字 5239 1521 9.70 3.23 テキスト中の文字の順序をランダムに入れ替えてみた。 事象の数 場合の数 エントロピー 一文字あたりのエントロピー 1文字 15717 28 4.14 2文字 7858 577 8.23 4.11 3文字 5239 3119 11.23 3.74 隣り合う文字間の関連をなくすと、エントロピーが増大した。 3文字のときは、事象の数と場合の数が近すぎ、有効な確率が計算できない(事象の数>>場合の数 である必要がある)。
場合の数が膨大となる ー> 処理量が現実的でなくなる(各場合の生起確率を求めることができない、有効な可変長符号を設計できない) 複数の事象を結合させるときの問題点 場合の数が膨大となる ー> 処理量が現実的でなくなる(各場合の生起確率を求めることができない、有効な可変長符号を設計できない) 音声や画像などでは、2つや3つのサンプルだけでなく、さらに広範囲で各サンプル値が関連している ー> 単に数個の事象を結合しただけでは不十分 別の方法が必要。。。
最も単純な比較は、「値の比較」であろう。値の比較は、値の「差」の絶対値や自乗を評価すればよい。 「関連性」の尺度(のひとつ)=相関関数 2つの信号の関連性を調べてみよう ここで言う「信号」は確率過程であることに注意。即ち、個々の信号の値(サンプル値列)は確定していないが、統計的には一定の性質を持っている。 最も単純な比較は、「値の比較」であろう。値の比較は、値の「差」の絶対値や自乗を評価すればよい。 信号A ………… ………… 信号B 一回目 2回目 3回目
「関連性」の尺度(のひとつ)=相関関数 信号Aを数多く発生させる サンプルAi A0,A1,・・・Ai ・・・・を何回も発生させる 自乗 平均 期待値 Tij 信号Bを数多く発生させる サンプルBj 計算はちょっと大変。。。 B0,B1,・・ ・・ ・Bj・・・・を何回も発生させる
相関関数 信号の統計的性質が時間によって変わらない=定常確率過程
相関関数
相関関数
相関関数の具体的な計算方法 Ai 積和 R0 Bi Ai 積和 R1 Bi-1 Ai 積和 R2 Bi-2 1/N 1/N 1/N
自己相関関数
自己相関関数のフーリエ変換
自己相関関数のフーリエ変換 この定理は、自己相関関数計算を高速に行うときに便利である。
自己相関関数が示すもの
自己相関関数計算の実験 信号を以下のように生成した。 標本数は、N。 信号はs。 パラメータとして、0<a<1.0を与える。 初期値は、-0.5から0.5までの乱数。 aが小さければ、s[i]とs[i+1]の関連が少なく、 aが1に近ければ、 s[i]とs[i+1]の関連が大きくなる。 import numpy, random def get_signal(a, N): b = 1.0 - a s = numpy.array([0.0]*N) N個の実数の配列 s[0] = random.random() - 0.5 初期値 for i in range(1, N): s[i] = a * s[i-1] + b * (random.random() - 0.5) return s 配列を返す random.random()は、0.0から1.0に一様に分布する乱数
パラメータaが大きければ、自己相関関数の「尾」が長く、小さければ、短いことがわかる。 自己相関関数計算の実験 プログラム名は、autocorr.py 結果は、gnuplotで表示。 パラメータaが大きければ、自己相関関数の「尾」が長く、小さければ、短いことがわかる。 即ち、パラメータaが大きいということは、離れた標本値間でも関連が大きいが、パラメータaが小さければ、標本間の関連が減る、ということである(当然の結果)。
まず信号の最も基本的な性質を見る これから圧縮符号化を行う信号の集合に関し、以下のような基本データをまずみる。 最大値と最小値 これは、信号の種類(例えば、画像なら、明るい写真と暗い写真など)による変化は少ないことが多い(ディジタル画像なら0-255の間)。 平均値 平均値は、いろいろに変化する場合(画像など)と、いつも0の場合(音楽、音声)があると思われる。 画像の場合、領域ごとの平均値は結構変化する。 分散(あるいは標準偏差) 領域ごとに分散の変化を見るのも良い。 エントロピー ヒストグラム これら基本データは、さらに高度な解析を行う際に役立つ。
RGBとYUV(輝度・色差信号) RGBはひとつのカラー画素をRed、Green、Blueの3原色で表す方法 YUVは、ひとつのカラー画素を輝度Y(明るさ)と2つの色差信号(Y-BとY-R)で表す方法 人間の目は、色の変化より輝度の変化に敏感である。そこで、色空間座標の変換を行い、YUV空間での処理を行う。 元のRGB信号が正の値しか持たないとき(例えば0から255)、Y信号も同様。しかし、UV信号は、正負の値をとりうる。UV信号をモノクロ画像としてみる場合には、それぞれに元のRGB信号の中間の値(範囲が0から255なら128)を加える。 カラー画像の基本的性質を見てみよう
画像の基本的性質の例 Image 1 (img_analysis.py) R Min = 9 Max = 255 Average = 101.3 Std Dev = 63.7 G Min = 0 Max = 255 Average = 112.0 Std Dev = 65.2 B Min = 0 Max = 255 Average = 130.9 Std Dev = 83.6 R entropy = 7.616505 G entropy = 7.749665 B entropy = 7.690832 Y Min = 5 Max = 255 Average = 110.9 Std Dev = 63.1 U Min = 21 Max = 199 Average = 139.3 Std Dev = 24.7 V Min = 70 Max = 225 Average = 121.1 Std Dev = 21.0 Y entropy = 7.734218 U entropy = 5.893437 V entropy = 5.680427 ヒストグラムはgnuplot (img_hist.dem)で表示する。 RGBおよびY信号のヒストグラムは広い範囲に分布するが、UV信号は平均値付近の頻度が高い
「関連性」は「冗長性」 画像の場合の「関連性」とは、画像中のある画素が「白」の場合、その周辺の画素も白である可能性が高い、というような意味である。 例えば、画像からひとつ画素が抜け落ちたときのことを考える。その画素値は、高い確率で周りの画素値と近いと考えられるだろう。 上記のように、たとえ画素をひとつ抜いたとしてもそれがある程度の精度で予測可能である。 別の言い方をすると、その画素はなくても問題がなかった、即ち、「冗長」であった、ということができる。
2次元信号の自己相関関数
実際の画像の相関関数 Image 1 Auto correlation function R 1.000 0.980 0.959 0.948 0.938 0.931 0.924 0.918 0.983 0.969 0.952 0.942 0.933 0.926 0.920 0.914 0.961 0.953 0.941 0.933 0.925 0.919 0.914 0.909 0.949 0.943 0.933 0.926 0.919 0.914 0.909 0.905 0.939 0.935 0.926 0.920 0.914 0.909 0.905 0.901 0.931 0.928 0.920 0.914 0.909 0.904 0.900 0.897 0.923 0.921 0.915 0.909 0.904 0.900 0.896 0.893 0.916 0.915 0.909 0.904 0.899 0.895 0.892 0.889
実際の画像の相関関数 Auto correlation function G 1.000 0.978 0.957 0.946 0.937 0.930 0.923 0.917 0.979 0.964 0.948 0.938 0.930 0.923 0.917 0.912 0.954 0.947 0.936 0.928 0.921 0.915 0.910 0.906 0.941 0.936 0.928 0.921 0.914 0.909 0.905 0.901 0.931 0.927 0.920 0.914 0.909 0.904 0.900 0.896 0.922 0.920 0.913 0.908 0.903 0.899 0.895 0.892 0.914 0.912 0.907 0.902 0.897 0.894 0.891 0.888 0.907 0.906 0.901 0.896 0.892 0.889 0.886 0.884
実際の画像の相関関数 Auto correlation function B 1.000 0.985 0.970 0.962 0.954 0.948 0.943 0.938 0.984 0.974 0.962 0.955 0.948 0.943 0.937 0.933 0.965 0.961 0.953 0.946 0.940 0.935 0.931 0.927 0.954 0.951 0.944 0.939 0.934 0.929 0.925 0.922 0.945 0.942 0.937 0.932 0.928 0.924 0.920 0.917 0.936 0.935 0.930 0.926 0.922 0.918 0.915 0.912 0.928 0.927 0.923 0.919 0.916 0.913 0.910 0.907 0.921 0.920 0.917 0.913 0.910 0.908 0.905 0.903
実際の画像の相関関数 Auto correlation function Y 1.000 0.980 0.961 0.951 0.942 0.935 0.928 0.923 0.982 0.969 0.953 0.944 0.936 0.929 0.923 0.918 0.960 0.953 0.942 0.934 0.927 0.922 0.917 0.912 0.948 0.943 0.934 0.927 0.921 0.916 0.912 0.908 0.938 0.934 0.927 0.921 0.915 0.911 0.907 0.903 0.929 0.927 0.920 0.915 0.910 0.906 0.902 0.899 0.921 0.920 0.914 0.909 0.905 0.901 0.898 0.895 0.914 0.913 0.909 0.904 0.900 0.897 0.894 0.891
実際の画像の相関関数 Auto correlation function U 1.000 0.999 0.998 0.998 0.998 0.997 0.997 0.997 0.998 0.998 0.997 0.997 0.997 0.996 0.996 0.996 0.996 0.996 0.996 0.996 0.996 0.995 0.995 0.995 0.995 0.995 0.995 0.995 0.995 0.994 0.994 0.994 0.994 0.994 0.994 0.994 0.993 0.993 0.993 0.993 0.993 0.993 0.993 0.993 0.992 0.992 0.992 0.992 0.992 0.992 0.991 0.991 0.991 0.991 0.991 0.991 0.990 0.991 0.990 0.990 0.990 0.990 0.990 0.990
実際の画像の相関関数 Auto correlation function V 1.000 0.998 0.997 0.997 0.996 0.996 0.995 0.995 0.998 0.998 0.997 0.997 0.996 0.996 0.995 0.995 0.998 0.998 0.997 0.997 0.996 0.996 0.996 0.995 0.998 0.998 0.997 0.997 0.997 0.996 0.996 0.996 0.998 0.998 0.997 0.997 0.997 0.997 0.996 0.996 0.998 0.998 0.998 0.998 0.997 0.997 0.997 0.996 0.998 0.998 0.998 0.998 0.998 0.997 0.997 0.997 0.998 0.998 0.998 0.998 0.998 0.998 0.997 0.997
相関を減らすひとつの方法=予測符号化方式 画像の左上から、右へ、上から、下へ、順にスキャンする方法が一般的(TVと同じ) 画素値の入力順序(ラスタースキャン) 予測符号化の方法 既に送信した画素値から次に送信する画素値を予測する。 予測値と実際の画素値の差(即ち予測誤差)を送信する。 受信側では、送信側同様、既に受信した画素から次に受信する画素値を予測する。 予測値に予測誤差を足し合わせると、元の画素値を得る。
予測符号化の方法 予測誤差 画素値を順に入力 出力 送信側 (予測誤差のみ伝送する) 予測値 過去に入力された画素値から次の画素値を予測する 受信側 予測誤差 再生した画素値 過去に受信した画素値から次の画素値を予測する 予測値
予測符号化の方法 i j
予測圧縮後のエントロピーと自己相関 Image 1 Simple prediction, s[i,j] = s[i-1, j] Y Min = -221 Max = 255 Average = 0.1 Std Dev = 25.5 Y entropy = 5.509558 Auto correlation function Y 1.000 -0.003 -0.238 -0.034 -0.040 -0.022 -0.019 -0.023 0.703 0.053 -0.153 -0.032 -0.041 -0.022 -0.013 -0.020 0.401 0.097 -0.070 -0.022 -0.041 -0.019 -0.005 -0.018 0.312 0.102 -0.055 -0.013 -0.028 -0.023 -0.005 -0.013 0.256 0.106 -0.043 -0.018 -0.011 -0.020 -0.012 -0.009 0.212 0.108 -0.027 -0.022 -0.010 -0.014 -0.013 -0.005 0.175 0.105 -0.014 -0.019 -0.014 -0.015 -0.008 -0.001 0.147 0.095 -0.004 -0.015 -0.015 -0.017 -0.007 0.003 予測を行う前のY信号のエントロピーは、7.7ビット程度。
予測圧縮後のエントロピーと自己相関 Three pixel prediction, s[i,j] = s[i-1, j] + s[i, j-1] - s[i-1, j-1] Y Min = -254 Max = 255 Average = 0.3 Std Dev = 20.6 Y entropy = 5.430507 Auto correlation function Y 1.000 -0.057 -0.201 0.056 0.058 0.047 0.046 0.057 0.030 0.017 0.003 -0.012 -0.001 -0.004 -0.005 0.002 -0.304 0.061 0.105 0.002 -0.019 0.010 0.013 -0.006 -0.030 0.002 0.005 0.021 -0.007 -0.009 0.011 0.002 0.002 0.003 -0.007 -0.001 0.025 -0.005 -0.009 0.002 0.010 0.007 0.006 -0.011 0.008 0.009 -0.009 -0.003 0.006 0.013 0.004 -0.003 -0.004 0.003 0.006 0.002 0.015 0.002 0.004 0.001 -0.003 -0.007 0.005 0.011 若干だが、こちらの方が効率がよさそうである。
予測圧縮の効果 元々の画像 予測後の画像 相関が大きい(位置的に近い画素は似たような画素値を持つ) 画素値はほぼ一様な分布を持つ(つまり、エントロピーは大きい) 予測後の画像 相関は小さい 画素値の分布は0周辺に偏る(つまりエントロピーは小さい)
予測符号化の実験 通常は、予測誤差を量子化し、さらに圧縮率を上げる 予測誤差 量子化された予測誤差 画素値を順に入力 量子化 出力 (予測誤差のみ伝送する) 送信側 予測値 過去に入力された画素値から次の画素値を予測する 予測値 受信側 予測誤差 再生した画素値 過去に受信した画素値から次の画素値を予測する 予測値
圧縮符号化の実験 Step size = 4, Total 233 (236) Kbytes Y Ent=3.413672 Bytes=167243 Huffman Bytes=169512 U Ent=2.835669 Bytes=34618 Huffman Bytes=34928 V Ent=3.019002 Bytes=36856 Huffman Bytes=37376 1_q21.bmp Step size = 8, Total 179 (180) Kbytes Y Ent=2.668758 Bytes=130748 Huffman Bytes=131416 U Ent=2.076168 Bytes=25346 Huffman Bytes=25970 V Ent=2.239305 Bytes=27337 Huffman Bytes=27679 1_q41.bmp Step size = 16, Total 132 (137)Kbytes Y Ent=2.005317 Bytes=98244 Huffman Bytes=101098 U Ent=1.449804 Bytes=17699 Huffman Bytes=19539 V Ent=1.576837 Bytes=19250 Huffman Bytes=20652 1_q81.bmp Step size = 32, Total 92(107) Kbytes Y Ent=1.449476 Bytes=71012 Huffman Bytes=77994 U Ent=0.936545 Bytes=11433 Huffman Bytes=15875 V Ent=0.980627 Bytes=11971 Huffman Bytes=16124 1_qf1.bmp 元の画像ファイルサイズは、1,153KByte
効率的な符号化(前回の講義の復習) 発生確率分布に適合した可変長符号化を用い、サンプル毎に符号化すればよい(逆に言うとこれ以上の圧縮は困難) ランダムな信号、各標本が独立(前後の標本と関連がない)であるような確率過程 関連性が及ぶ複数のサンプルをまとめた事象を対象に発生確率分布を求め、可変長符号化する(工夫によって、圧縮が可能) 標本間の関連性が高いような確率過程 しかし、関連性が及ぶ標本の数が多い場合、事象の数(場合の数)が極端に多くなり可変長符号化が困難となる(圧縮の可能性はあるのだが、「標本をまとめて符号化する」という単純な方針では、具体的な処理方法(アルゴリズム)の実現が難しい)。そこで、可変長符号化の前に信号の性質に応じた処理を行う。
音声と画像の情報量圧縮の一般的「戦略」 音声、音楽、画像の各標本値は、他の近隣の標本値と関連がある。即ち、冗長性がある。最初に、信号の性質に着目して、冗長性を削減することで情報量を減らす。 予測、直交変換など 音声や画像では、完全に再生できなくても支障がない場合が多い。「完全に再生する」ことをあきらめる事で、さらに情報量を削減する。 量子化 最終的に得られた値(シンボル)を効率よくビット列にする。 エントロピー符号化 「完全に再生できない」場合の元信号との差を「符号化雑音」という。これを目立たせないように、復号の後で何らかの処理を加える。 ポストフィルター