画像のデジタルズームの方法について

きれいに画像を拡大するためのアルゴリズムとしてよく用いられるのはバイキュービック法というものです。それを実際に実装しようとしたときのメモです。

バイキュービックの係数の使い方

ここを初めとしていろいろな場所でバイキュービック関数というのが取り上げられていますが、関数だけ見せられても??となってしまいます。説明を試みてみたいと思います。

まず、ここでは、バイキュービック法でズームをするという場合、4x4のオリジナル画像を使用し、その16画素を元にして、新しいズーム後の画素値を計算する、ということを前提とします。そのとき、ズーム後の画素値は、要するに4x4の画素のそれぞれに重みを乗じて加えることによって得られます。その重みの係数をバイキュービック関数というのが決定しています。

まず、1次元だけを考えてみます。例として、2倍のズームをするとします。補間元となるオリジナル画像が、左から順にd0,d1,d2,d3と並んでいるとします。すると、d1,d2の間で2つの補間画素を求めることになります。初めの補間画素は、実質d1となります。2番目の補間画素はd1とd2のちょうど真ん中にあると考えるわけです。すると、その画素からd0までの距離は1.5、d1までの距離は0.5、d2までの距離は0.5、d3までの距離は1.5となります。それで、これらの距離を先ほどのURLにあるグラフのx座標とし、対応するyの値を係数とするわけです。つまり、(だいたいの値をグラフから読むと、)-0.1d0+0.6d1+0.6d2-0.1d3というのが、補間された画素値になります。

2次元に拡張するには、1次元でそれぞれx方向の補間を行い、それを元にしてもう一回1次元の補間を行うことになります。

ここまでが理解できれば、バイキュービックズームのやり方はほとんどわかったも同然だと思います。あとは、ズーム倍率に応じて適切な補間元となる画素を選ぶ方法が分かればよいことになります(続く)。

Comments