【画像処理】バイキュービック補間法の原理・計算式

この記事では、画像を拡大・縮小・回転したときなどに利用する補間法の1つである「バイキュービック補間法」の原理や計算方法についてまとめました。

バイキュービック補間法(Bicubic interpolation)

本ページの内容は以下動画で解説しています。

前回記事「バイリニア補間法による画像拡大の原理」では、バイリニア補間法について紹介しました。
バイキュービック補間法では、周囲16画素の画素値を利用します。
そして、距離に応じて関数を使い分け、加重平均を求めます。

最近傍法やバイリニア補間法よりも計算処理は重いですが、画質の劣化を抑えることが出来ます。

【計算方法】バイキュービック補間法の仕組み

拡大画像の座標(x', y')における画素値を求める手順は以下の通りです。

①拡大画像の座標(x', y')を拡大率\alphaで割り、(x'/\alpha ,y'/\alpha )を求めます。

②元画像における(x'/\alpha ,y'/\alpha )の周囲16画素の画素値を取得します。

③周囲16画素それぞれと(x'/\alpha ,y'/\alpha )との距離dを求めます。

④周囲16画素の画素値の加重平均を拡大画像の座標(x', y')における画素値とします。
このとき、加重平均の計算に用いる各画素に対する重みkは、距離dに応じて以下の式で求めます。

(1)   \begin{eqnarray*} k = \begin{cases} 1-(a+3)d^2+(a+2)d^3 \hspace{20px} (0\leq d<1)\\ -4a+8ad-5ad^2+ad^3 \hspace{25px} (1\leq d<2)\\ 0 \hspace{75px} (d \geq 2.0 ) \end{cases} \end{eqnarray*}

a-0.5\sim -1.0の値を与えます。
aが小さくなるほど、シャープ化が強くなります。

関連ページ

PythonとOpenCVを用いてバイキュービック補間法を実装する方法について以下ページで解説しています。

【Python/OpenCV】バイキュービック補間法で画像の拡大・縮小【cv2.resize】
Python版OpenCVのcv2resizeでバイキュービック補間法を実装し、画像のサイズを変更(拡大・縮小)する方法をソースコード付きで解説します。

PythonとOpenCVを用いた画像処理全般については以下ページで解説しています。

【Python版OpenCV入門】画像処理の基礎〜応用例までサンプルコード付きで徹底解説
Python版OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。

他の画像処理アルゴリズムについては、以下ページでまとめています。

【画像処理入門】アルゴリズム&プログラミング
この記事では、画像処理における基本的なアルゴリズムとその実装例(プログラム)についてまとめました。

コメント

  1. 63rabbits より:

    いつも参考にさせて頂いています。ありがとうございます。
    式(1)の2行目は
    -4a + 8ad – 5ad^2 + ad^3 …(+d^3 -> +ad^3)
    ではないでしょうか?