令和2年度10月 応用情報技術者試験(AP)の午後問題3は、
- 誤差拡散法による減色処理
に関する問題でした。
減色処理とは、画像の情報量を落として画像ファイルのサイズを小さくしたり、モノクロの液晶画面に画像を表示させたりする際に行われる処理で、誤差拡散法は減色アルゴリズムの一つだそうです。
誤差拡散法というアルゴリズムも本問を通して知りましたが、画像処理についてもあまり知らないので、実際に動かしてみることで理解を深めていこうと思います。
下図は、減色処理をする前の元画像です。2つの方法で減色を行っていきます。
プログラム例(r02o_ap_pm3_1.rb.rb
)
まずは、問題文(pdf)図3,図5に示されるアルゴリズム(画質向上のための改修をする前)を具現化してみました。
実行結果
from.png
が画像処理前の画像、to1.png
が画像処理後、出力されるファイル名を指定します。
$ ruby r02o_ap_pm3_1.rb from.png to1.png
プログラム例(r02o_ap_pm3_2.rb.rb
)
画質向上のための改修
ピクセルを処理する順番を、Y座標ごとに逆向きにすることで、誤差拡散の方向の偏りを減らし、画質を改善するアルゴリズム
実行結果
$ ruby r02o_ap_pm3_2.rb from.png to2.png
ちょっとしたアルゴリズムの工夫を行うだけで、改修前アルゴリズムの実行結果の画像と比べて、かなりの改善がみられることが分かりました。実際にプログラムを作って実行してみることの重要性を再認識しました。
参考
関連
追記
どうも誤差拡散法が気になって、問題文中の図4に示される変換前画像の値が誤差拡散法、及び画質向上のための改修を行うことによってどんな値に変換されるのか計算してみました。 pic.twitter.com/rH2yUJZxgl
— ⓂⓐⓔⓗⓐⓡⓐⓂⓐⓢⓐⓗⓘⓓⓔ⛅(16℃) (@maehrm) 2020年10月24日