【画像処理】最近傍補間法の原理・計算式

この記事では、画像を拡大・縮小・回転したときなどに利用する補間法の1つである「最近傍法補間法」の原理や計算方法についてまとめました。 [latexpage]

最近傍法(Nearest neighbor)による画像拡大・縮小の仕組み

最近傍法(Nearest neighbor・ニアレストネイバー法)は、画像を拡大した際に最近傍にある画素をそのまま使う線形補間法です。 単純なアルゴリズムなので、他の補間法と比較して処理速度が速い反面、画質が劣化しやすくなります。

最近傍法によって拡大後の画素値を求める計算式は以下のとおりです。

計算式

拡大前の元画像を$I$、拡大率$\alpha$で拡大後の画像を$I’$とします。 このとき、拡大後の画素値は次の式で求めます。 \begin{eqnarray} I'(x, y)=I([\frac{x}{\alpha}], [\frac{y}{\alpha}]) \end{eqnarray} []は四捨五入を表しています。 つまり、「拡大後の座標÷拡大率」を四捨五入して得られた座標にある元画像の画素値をそのまま利用します。

【計算例】2×2のグレースケール画像を1.5倍に拡大する場合

次のような入力画像$I$を1.5倍に拡大した画像$I’$について考えます。

\begin{eqnarray} I= \left[ \begin{array}{ccccc} 50 & 100 \\ 150 & 200 \\ \end{array} \right] \end{eqnarray}

画像$I$のサイズは2×2なので1.5倍に拡大した画像$I’$は以下のように3×3のサイズとなります。

\begin{eqnarray} I'= \left[ \begin{array}{ccccc} I'(0,0) & I'(1,0) & I'(2,0) \\ I'(0,1) & I'(1,1) & I'(2,1) \\ I'(0,2) & I'(1,2) & I'(2,2) \\ \end{array} \right] \end{eqnarray}

拡大後の画素値を最近傍法で求まると次のようになります。

\begin{eqnarray} I'(0,0)=I([\frac{0}{1.5}], [\frac{0}{1.5}])=I(0,0)=50 \\ I'(1,0)=I([\frac{1}{1.5}], [\frac{0}{1.5}])=I(1,0)=100 \\ I'(2,0)=I([\frac{2}{1.5}], [\frac{0}{1.5}])=I(1,0)=100 \\ I'(0,1)=I([\frac{0}{1.5}], [\frac{1}{1.5}])=I(0,1)=150 \\ I'(1,1)=I([\frac{1}{1.5}], [\frac{1}{1.5}])=I(1,1)=200 \\ I'(2,1)=I([\frac{2}{1.5}], [\frac{1}{1.5}])=I(1,1)=200 \\ I'(0,2)=I([\frac{0}{1.5}], [\frac{2}{1.5}])=I(0,1)=150 \\ I'(1,2)=I([\frac{1}{1.5}], [\frac{2}{1.5}])=I(1,1)=200 \\ I'(2,2)=I([\frac{2}{1.5}], [\frac{2}{1.5}])=I(1,1)=200 \\ \end{eqnarray}

よって$I’$は

\begin{eqnarray} I= \left[ \begin{array}{ccccc} 50 & 100 & 100 \\ 150 & 200 & 200 \\ 150 & 200 & 200 \\ \end{array} \right] \end{eqnarray}

となります。

【注意】 拡大率によっては四捨五入した際に存在しない座標になる場合もあります。 その場合、近傍にある利用可能な画素で代用するなど対策を考える必要があります。

関連ページ

PythonとOpenCVを用いて最近傍補間法を実装する方法について以下ページで解説しています。

【Python/OpenCV】cv2.resizeの最近傍補間法(cv2.INTER_NEAREST)で画像の拡大
Python版OpenCVのcv2.resizeで最近傍補間法(cv2.INTER_NEAREST)を実装し、画像サイズを変更する方法をソースコード付きで解説します。

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

PythonとOpenCVで画像処理プログラミング超入門
Python版OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。

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

429 Too Many Requests
記事の監修者
西住技研

在学中はシステム制御理論や画像処理、機械学習を専攻分野として研究していました。就職後は、プログラミング(Python)を活用したデータ分析や作業自動化に取り組み、現在に至ります。そこで得たノウハウをブログで発信しています。
⇓YoutubeやX(旧Twitter)でも情報発信中です

西住技研をフォローする
画像処理

コメント