本文へスキップ

平成24年度 秋期 ITパスポート試験 問96

この問題の解説と、これまでの解答の記録です。

問96
頻出度★☆☆

図1は,8×8画素の白黒の画像例である。この図に対して,白を0,黒を1として表すと,図2に示すように8ビットのビット列が8行あるディジタルデータとして,画像データを表現することができる。 文字データしか送れない通信で画像データを送ろうとする場合,画像データを文字データであるかのように変換して通信する必要がある。 また,文字データと比べてデータ量の大きい画像データを効率よく通信するために,データを圧縮して送るという工夫がなされる。図2のビット列を左上から順に見ていくと,0が10個続き,次に1が34個続き,その次に0が20個続いていることが分かる。この同じ値が続く個数のことをランレングスという。これを利用して画像データを圧縮する方法を考える。 次に示す画像データの表現方法は,画像データの情報量を圧縮することを目的とする変換である。図2に示す画像データは,何ビットで表現されるか。 〔画像データの表現方法〕 (1) 画像データをランレングスで表現し,それらの値を2進数で表現する。 (2) ランレングスの値を2進数で表現したときの値 n に対して,その n の桁数が m のとき,次の形式で,一つのランレングスを表現する。

①桁数の情報②区切りの情報③ランレングスの情報

①桁数の情報:(m-2)ビットの連続する1で表現。なお,m が0~2の場合は,“0”と表現 ②区切りの情報:区切りは“0”で表現 ③ランレングスの情報:n 例えば,ランレングスの値が20のとき,それを2進数で表現したときの値 n は“10100”となり,その桁数 m は5となる。したがって,m が5のとき,①は(5-2)ビットの連続する1なので“111”となり,これに区切りの“0”と n をつなげ,結果は“111010100”となる。 (3) (2)で求めた形式の値をつなげていく。このとき,画像データは必ず白から始まるものとし,もし,画像データが黒から始まる場合は,ランレングス0の白があるとして先頭に“000”を補う。

出典 平成24年度 秋期 ITパスポート試験 問96
解説

問 96

※ この問題は、解説作成時の検算で公表解答を確認しきれませんでした。判定は IPA 公表の解答どおりです。

  • ア

    正解 図2のビット列を左上から順に読むと、白(0)が10個 → 黒(1)が34個 → 白(0)が20個 と続く (合計64ビット=8×8画素)。(3)の原文は原典 page-44 のとおり「画像データは必ず白から始まるものとし、もし、画像データが黒から始まる場合はランレングス0の白があるとして先頭に000を補う」であり、図2は白から始まっているので「000」を補う処理は不要である。あとは三つのランレングス 10・34・20 をそれぞれ規則どおり符号化して足し合わせる。 (a) 10 → 2進数 n は「1010」で桁数 m=4。①は(4-2)=2ビットの「11」、②区切りは「0」、③は n の4ビット。符号は「1101010」で 2+1+4=7ビット。 (b) 34 → 2進数 n は「100010」で m=6。①は(6-2)=4ビットの「1111」、②「0」、③6ビット。4+1+6=11ビット。 (c) 20 → 2進数 n は「10100」で m=5。①は(5-2)=3ビットの「111」、②「0」、③5ビット。3+1+5=9ビット (これは設問中の例そのもの)。 合計は 7+11+9=27ビットとなり、アが正しい。なお m≧3 のとき1ランレングス分の長さは (m-2)+1+m=2m-1 ビットとまとめられ、m=4,6,5 を代入すれば 7,11,9 とすぐ求まる。

  • 不正解イ

    30は、正しい27ビットに不要な「000」3ビットを足してしまった値。(3)の「先頭に000を補う」は画像データが黒から始まる場合の救済措置であり、図2の1行目は 00000000 で白から始まっているので補ってはいけない。補うかどうかを条件を読まずに機械的に行うと3ビット多くなる。

  • 不正解ウ

    33は、①桁数の情報を「(m-2)ビットの連続する1」ではなく「mビット」と読み違えた場合の値。そう誤ると m+1+m=2m+1 となり、m=4,6,5 で 9+13+11=33ビットになる。①は桁数 m そのものを並べるのではなく、m-2 個の1で m を伝える可変長符号である点を取り違えている。

  • 不正解エ

    36は、上のウの誤り (①をmビットとして33ビット) に、さらに不要な「000」3ビットを加えてしまった場合の値で、二つの誤りが重なっている。ランレングスは 10・34・20 の三つだけであり、規則どおりなら 7+11+9=27ビットを超えることはない。

ここがポイント
  • ランレングス法 (連長圧縮) は、同じ値が連続する個数 (ランレングス) を記録して情報量を減らす可逆圧縮方式で、白黒2値画像やFAXのように同色が長く続くデータで効果が大きい。まず図から「白10・黒34・白20」のようにランレングスを正しく数えることが出発点になる。
  • 本問の可変長符号は ①(m-2)ビットの連続する1 + ②区切りの「0」 + ③nのmビット という構成で、m≧3 なら1ランレングス当たり 2m-1 ビットになる。①は区切りの0までの1の個数で桁数 m を伝える仕組みであり、m が0~2 のときは①が「0」1ビットになる (だからランレングス0の白は「0」「0」「0」=「000」の3ビットで表される)。
用語

解答の記録