図1は,8×8画素の白黒の画像例である。この図に対して,白を0,黒を1として表すと,図2に示すように8ビットのビット列が8行あるディジタルデータとして,画像データを表現することができる。 文字データしか送れない通信で画像データを送ろうとする場合,画像データを文字データであるかのように変換して通信する必要がある。 また,文字データと比べてデータ量の大きい画像データを効率よく通信するために,データを圧縮して送るという工夫がなされる。図2のビット列を左上から順に見ていくと,0が10個続き,次に1が34個続き,その次に0が20個続いていることが分かる。この同じ値が続く個数のことをランレングスという。これを利用して画像データを圧縮する方法を考える。 次に示す画像データの表現方法は,画像データの情報量を圧縮することを目的とする変換である。図2に示す画像データは,何ビットで表現されるか。 〔画像データの表現方法〕 (1) 画像データをランレングスで表現し,それらの値を最大128の範囲で区切る。例えば,ランレングスが200の場合は,128と72の二つのランレングスに分ける。 (2) (1)で表現したそれぞれの値から1を引き,2進数7ビットで表現する。各7ビットに対して,白の場合は0を,黒の場合は1を,それぞれの色情報として先頭ビットに補って各8ビットで表現する。
平成24年度 秋期 ITパスポート試験 問95
这道题的解析和你的作答记录。
問 95
※ 编写解析时的验算未能完全确认公布答案;判定仍按 IPA 公布的答案。
错误ア
7位只是1个游程中“数值部分”的长度。步骤(2) 规定要在7位数值的首位补上1位颜色信息,使每个都用8位表示,所以哪怕只有1个游程也需要8比特;而且图2 中的游程本来就有三个。这是把单位量(1个游程)与整体量(整个图像数据)弄混后得到的数值。
错误イ
8位是1个游程的编码长度。作为“颜色信息1位+数值7位”这样1个游程的构成来说是正确的,但本题问的是表示图2 的整个图像数据所需要的比特数。图2 的游程有 白10、黑34、白20 这三个,所以需要它的3倍。
错误ウ
21位是 3×7,虽然正确地数出了游程有三个,却漏掉了要补在每个游程首位的那1位颜色信息。步骤(2) 明确写着“白色时补0、黑色时补1作为各自的颜色信息补在首位,从而用各8位表示”,所以1个游程是8位而不是7位,这里少算了3位。
- エ
正解 把图2的比特串从左上角开始依次读下来,白色(0)连续10个、黑色(1)连续34个、白色(0)连续20个。也就是说游程有“白10 → 黑34 → 白20”这三个(10+34+20=64像素=8×8)。 步骤(1):以最大128为范围对游程的值进行切分。10、34、20 都在128以内,所以不会发生切分,游程仍然是三个。 步骤(2):把每个值减去1,用7位二进制数表示,再在首位补上1位颜色信息(白色为0、黑色为1),从而变成8位。 ・白10 → 10-1=9 → 用7位表示为 0001001 → 首位补上白色的0,得到 00001001 ・黑34 → 34-1=33 → 用7位表示为 0100001 → 首位补上黑色的1,得到 10100001 ・白20 → 20-1=19 → 用7位表示为 0010011 → 首位补上白色的0,得到 00010011 游程有三个,每个占8位,所以 3×8=24 比特。因此正确答案是 エ。原来的图像数据是64比特,也就是说被压缩到了24比特(压缩率 24÷64=37.5%)。 顺便说明,之所以要“减去1”,是因为游程一定在1以上128以下,而7位能表示的范围是 0~127。把 1~128 平移成 0~127,就能把长达128的游程也装进7位里。
- 游程编码法(行程长度压缩)是把相同值连续出现的个数进行编码的无损压缩方式。首先把图像数据改读成“颜色+连续个数”的排列,这是解题的出发点,图2 就是 白10 → 黑34 → 白20 这三个游程。总比特数用(游程的个数)×(每个游程的编码长度)求出。
- 编码规则一定要确认两点:“切分的上限”和“每个游程的编码长度”。本题的上限是128,所以 10、34、20 都不会被切分,游程仍是3个;每个游程是数值7位+颜色信息1位=8位。因此 3×8=24 比特,原来的64比特被压缩到了37.5%(压缩率=压缩后÷压缩前)。