前回の続き

前回はバイキュービック関数から、画素補間に使用する係数をどのように求めるのかということを記述しました。

今回は、「画素補間に使用する元画素をどのように求めるのか」ということについて記述します。前回と同じように、ズーム前の画素がd0,d1,d2,d3,...と並んでいるとします。すると、ズームのために参照する画素としては、1倍(ズームなし)の場合は、最初はd0,d1,d2,d3、次はd1,d2,d3,d4、その次はd2,d3,d4,d5、...以下同様となります。これは当たり前ですね。

次に2倍の場合は、最初はd0,d1,d2,d3、次もd0,d1,d2,d3、その次はd1,d2,d3,d4、その次もd1,d2,d3,d4、その次はd2,d3,d4,d5、...以下同様となります。つまり、同じ4画素が2回使用されることになるわけです。もちろん、同じ組み合わせでも、積算するための係数が1回目と2回目で異なるのでズームができるのです。1回目は0,1,0,0、2回目は-0.1,0.6,0.6,-0.1のように。

同様に3倍の場合は、同じ4画素が3回使用され、...となります。倍率が小数点を含むような場合でも考え方は全く同じです。

プログラム的に考えると、参照元となる画素の左端のインデックスをi(の整数部分)が保持するとすると、
i = 0;
for (1ライン分){
適切な係数で画素を補間して出力;
i += 1/(倍率);
}
となります。iを使えば、各ステップにおける参照元画素までの距離が分かるので、バイキュービック補間の係数が求まることになります。

以上がズームの考え方です。これを回路とする場合、iを固定小数点数とし、バイキュービックの係数をテーブルを作成して参照してゆけば実装できます。

Comments