【画像処理】ラプラシアンフィルタの原理・特徴・計算式

画像処理におけるLaplacian Filter(ラプラシアンフィルタ)の原理や特徴、計算式についてまとめました。

【はじめに】ラプラシアンフィルタとは

ラプラシアンフィルタ(Laplacian Filter)は、二次微分を利用して画像から輪郭を抽出する空間フィルタです。

■入力画像(左)、出力画像(右)

出力画像(フィルタを掛けた後)を見ると、輪郭の部分が白くなっている、つまり画素値が大きいことがわかります。

動画版解説

【計算式】カーネルの導出方法

デジタル画像は離散データなので、微分は差分で計算することができます。
水平方向および垂直方向の画素値の一次微分I_{x}, I_{y}は次式で表せます。

(1)   \begin{eqnarray*} I_{x}(x, y)=I(x+1, y)-I(x, y)\\ I_{y}(x, y)=I(x, y+1)-I(x, y) \end{eqnarray*}

二次微分I_{xx}, I_{yy}はもう一度差分を取ることで計算できます。

(2)   \begin{eqnarray*} I_{xx}(x, y)&=& \{I(x+1, y)-I(x, y) \}-\{I(x, y)-I(x-1, y) \} \\ &=&I(x-1, y)-2I(x, y)+I(x+1, y)\\ I_{yy}(x, y)&=& \{ I(x, y+1)-I(x, y) \}- \{I(x, y)-I(x, y-1) \} \\ &=&I(x, y-1)-2I(x, y)+I(x, y+1) \end{eqnarray*}

よって、ラプラシアン\nabla^2I(x, y)は以下のように表せます。

(3)   \begin{eqnarray*} \nabla^2I(x, y)&=&I_{xx}(x, y)+I_{yy}(x, y) \\ &=&I(x-1, y)+I(x, y-1)-4I(x, y) + I(x+1, y)+I(x, y+1) \end{eqnarray*}

ラプラシアン\nabla^2I(x, y)の計算結果からカーネルK_4は次のように求まります。

(4)   \begin{eqnarray*} K_4= \left[ \begin{array}{ccc} 0 & 1 & 0 \\ 1 & -4 & 1 \\ 0 & 1 & 0 \\ \end{array} \right] \end{eqnarray*}

上式はラプラシアンフィルタのカーネル(4近傍)となります。
ラプラシアンフィルタのカーネルは、4近傍(上下左右)だけでなく、斜め方向の2次微分も加えた8近傍K_8のカーネルも存在します。

(5)   \begin{eqnarray*} K_8= \left[ \begin{array}{ccc} 1 & 1 &  1 \\ 1 &  -8 &  1 \\ 1 &  1 &  1 \\ \end{array} \right] \end{eqnarray*}

4近傍と8近傍の違いは、「微分を取る近傍の画素数」です。

説明
4近傍 注目画素の上下左右の4画素の二次微分を取る
8近傍 注目画素の上下左右だけでなく斜めも加えた8画素の二次微分を取る

【計算例】例題

入力画像Iとラプラシアンフィルタ(4近傍)のカーネルKが次のように与えられたとき、出力画像I'を求めよ。

(6)   \begin{eqnarray*} I= \left[ \begin{array}{ccccc} 0 & 0 & 0 &  0\\ 0& 10 & 10 &  0\\ 0&   0 & 10 &  0\\ 0 & 0 & 0 &  0\\ \end{array} \right], K= \left[ \begin{array}{ccccc} 0 & 1 & 0\\ 1 & -4  & 1\\ 0 & 1 & 0\\ \end{array} \right] \end{eqnarray*}

解説

入力画像IとカーネルK畳み込み演算してやると

(7)   \begin{eqnarray*} I'(1,1)&=&(-4\cdot 10)+(1\cdot 10)=-30\\ I'(2,1)&=&(-4\cdot 10)+(1\cdot 10)+(1\cdot 10)=-20\\ I'(1,2)&=&(1\cdot 10)+(1\cdot 10)=20\\ I'(2,2)&=&(-4\cdot 10)+(1\cdot 10)=-30\\ \end{eqnarray*}

となります。今回は、入力画像の端の画素値は0とします。
また、0未満の画素値は0とします。

となります。すると、出力画像I'は次のようになります。

(8)   \begin{eqnarray*} I'= \left[ \begin{array}{ccccc} 0 & 0 & 0 &  0\\ 0& 0 & 0 &  0\\ 0& 20 & 0 &  0\\ 0 & 0 & 0 &  0\\ \end{array} \right] \end{eqnarray*}

言語 解説記事
Python 【Python/OpenCV】ラプラシアンフィルタでぼかし・平滑化
C# 【C#】ラプラシアンフィルタで画像のぼかし(ノイズ除去)
まとめ 【画像処理入門】アルゴリズム&プログラミング

コメント

  1. tatsu より:

    nice!!

  2. それもまた一興 より:

    Iyyの式の2行目 Iが抜けとりまっせ〜

    • 管理人 より:

      ※それもまた一興様
      ご指摘ありがとうございます。
      該当箇所を修正致しました。

  3. 画像処理で苦戦中の学生 より:

    計算例のカーネルの左右が1になってませんよー

    • 管理人 より:

      ※画像処理で苦戦中の学生 様
      ご指摘ありがとうございます!
      誤記を修正致しました。

  4. 出遅れた学生 より:

    (1)式は前方微分で、(2)式は後方微分になってるんですね。これわかってて表記消したのか、俺の勘違いか

    (2)式1段3段の第4項+じゃないかな。

    • 管理人 より:

      コメントありがとうございます!
      ご指摘のとおり{}が無いと計算がおかしくなりますので、修正いたしました。
      ※LaTeXで数式を記載していたのですが、{}がうまく表示されておりませんでした。