« Twitter の休眠アカウントが削除されるらしいので、慌てて3つともログイン&ツイート | トップページ | ソフトバンクがスマホか4Gケータイを無料でくれるらしいけど・・&15km走 »

デジタル画像の可逆圧縮、「ランレングス(連長)圧縮」の簡単な具体例と説明、圧縮率の計算~高校『情報Ⅰ』

2022年度から全面的にスタートした高校の新必修科目、『情報Ⅰ』。先日アップした、音声のデジタル化の記事に続いて、今日は画像の可逆圧縮について書いてみよう。

  

綺麗なカラー画像(24ビット、約1678万色など)というものは、そのままデジタル表現するとデータ量が多くなってしまう。だから普通は、「圧縮」することになる。

  

ネット上で綺麗な写真などによく使われてるのが、JPEG圧縮。かなりデータ量を減らせるし、圧縮率90%くらいなら見た目も元の画像データとほとんど変わらない。しかし、JPEG圧縮画像から元の画像に戻すことはできない。非可逆圧縮(不可逆圧縮)だから。

   

  

     ☆     ☆     ☆

それに対して、元に戻せる可逆圧縮もあって、その1つがランレングス圧縮。これは、同じ色が連続してる時に、その色と連続の長さとで表す方法。「ランレングス」を直訳すると、「連続の長さ」になるから、例えば日本語では「連長圧縮」とも呼ばれてる。

    

最大手の東京書籍の教科書を見ると、わりと大きめ(16ピクセル×16ピクセル)のリンゴの画像でかなり短く説明してたが、データ量の変化まで完全に理解・計算できる高校生は少ないと思う。

    

見方を変えると、そこまで新カリキュラムは要求してないのかも知れない。だから、短い説明に留めてるとか。ただ、大人の私自身は面白かったので、もっと簡単な例でやや詳しく解説してみよう。

  

個人的には、ランレングス圧縮の画像を人間が手作業で作るのは大変だということが実感できただけでも意味はある。むしろ、元のオリジナル画像の方が、遥かに簡単に作れたのだ。あと、「ロジック」(論理)と呼ばれてるお絵描きパズルと似てることに気付いた。試しに後で、パズルの方もやってみるかも知れない。

    

   

      ☆     ☆     ☆

まず、極端に簡単な例から始めよう。

   

221213a

  

上図は、横1列、6マスの画像で、後で見るリンゴの画像の下の段の左側だけ取り出したもの。マス目は、ピクセル(画素)と呼ばれる。左の2ピクセルが白、その右の4ピクセルが赤になってるから、ランレングス圧縮では、白2赤4のように表現する。図にすると、次の通り。黒い斜線部は、何も記録されてない部分で、教科書では「データ消滅分」と書かれてた。

   

221213b2

   

では、データ量はどう変化したのか、計算してみよう。色は、後でリンゴ全体を見る時に4色使うので、1ピクセルあたり2ビット(2×2)の情報量と考える。例えば、白は00、赤は01、グレーは10、黄色は11。2ケタの2進数で表せる。

    

元の画像は6ピクセルだから、(元のデータ量)=2×6=12ビット。

  

一方、圧縮後は、色が2ビットで同じ。連続の数は、最大で6ピクセル(1~6)だから、それぞれ3ビット(2×2×2)。上の例だと、2ピクセルは、010。4ピクセルは、100。3ケタの2進数で表せる。

  

だから、(圧縮後のデータ量)=(2+3)+(2+3)=(2+3)×2=10ビット。

∴(圧縮率)=10/12≒83%。

   

あまり圧縮されてないが、それほど色が連続してないし、可逆圧縮だから仕方ない。

   

ちなみに、数学的にはまぎらわしい言い方だが、「圧縮率の%の数字が大きい」ことを、「圧縮率が低い」と言うらしい。つまり、あまり圧縮されてないという意味。逆に、「圧縮率の%の数字が小さい」ことを、「圧縮率が高い」と言う。かなり圧縮されてるという意味。

   

だから教科書にも、「一般に可逆圧縮より非可逆圧縮のほうが圧縮率が高い」と書いてた。私は一読して間違ってると思ってしまったが、「高い」=「小さい」と読みかえるのなら正しい。例えば、ランレングス圧縮よりJPEG圧縮のほうが圧縮率が高い。

   

   

     ☆     ☆     ☆

続いて、64ピクセル(8×8)で描いたリンゴのデジタル画像。ちなみに、グレーはヘタの部分、黄色は光沢がある場所を表してる。

   

221213c

   

上図をランレングス圧縮すると、下図のように表せる。色と数の組合せは全部で28セットになる。横のピクセル数は10まで増えてしまうが、問題ないはず。教科書の図では増えてないが、それは同じ色の連続数が多い図にしてあるから。

            

221213d

   

では、データ量の計算。(元のデータ量)=2×64=128ビット。

   

(圧縮後のデータ量)=(2+3)×28=140ビット。

  

色の連続が少ないので、圧縮後の方がデータ量が増えてしまってる。

 (圧縮率)=140/128≒109パーセント

  

理論的には最初から予想できてたが、すぐに実例と出会うとは思わなかった。試しにGoogleで、「ランレングス圧縮 データ 増える」を検索してみると、その欠点を指摘する記事が色々とヒットした。

  

日本語ウィキペディアの「連長圧縮」の項目にも、欠点が指摘されて、その解決方法の説明も書かれてた(PackBits法など)。ここでは扱わない。

   

   

      ☆     ☆     ☆

最後に、意外と圧縮される例も示しとこう。4色で16ピクセル(4×4)の格子状の画像。

   

221213e2

  

ランレングス圧縮では、下の図のように表せる。

  

221213f2

   

これなら、かなり圧縮されてるように見える。圧縮後の計算では、横が4ピクセルだから、連続の数が3ビットではなく2ビットになることに注意。1ピクセルなら00、2ピクセルなら01、3ピクセルなら10、4ピクセルなら11と表せる。結局、色で2ビット、連続の数でも2ビット使う。色と数の組合せ(2+2ビット)が、計4セット。

      

(元のデータ量)=2×16=32ビット

(圧縮後のデータ量)=(2+2)×4=16ビット

(圧縮率)=16/32=50%

    

   

     ☆     ☆     ☆

以上から、単純なランレングス圧縮は、色の連続が多い単純な画像の時だけ上手く行くことが分かる。

  

あらためて、教科書の図が大きめに作られてた理由が理解できた。要するに、色の連続を増やして、本当に圧縮されるように配慮した図を掲載してるのだ。確かに、1つだけ例を挙げるのなら、成功例を挙げる方が教育的だろう。一般的な高校生にとっては。

   

それでは今日はこの辺で。。☆彡

    

       (計 2442字)

| |

« Twitter の休眠アカウントが削除されるらしいので、慌てて3つともログイン&ツイート | トップページ | ソフトバンクがスマホか4Gケータイを無料でくれるらしいけど・・&15km走 »

数学」カテゴリの記事

教育」カテゴリの記事

情報」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« Twitter の休眠アカウントが削除されるらしいので、慌てて3つともログイン&ツイート | トップページ | ソフトバンクがスマホか4Gケータイを無料でくれるらしいけど・・&15km走 »