Dip-sobel-operator

提供:Dev Guides
移動先:案内検索

ソーベル演算子

sobel演算子は、Prewitt演算子に非常に似ています。 また、派生マスクであり、エッジ検出に使用されます。 Prewitt演算子のように、sobel演算子は画像内の2種類のエッジを検出するためにも使用されます。

  • 縦方向
  • 横方向

Prewittオペレーターとの違い

主な違いは、ソベル演算子ではマスクの係数が固定されておらず、微分マスクの特性に違反しない限り、要件に従って調整できることです。

以下は、Sobelオペレーターの垂直マスクです。

-1 0 1
-2 0 2
-1 0 1

このマスクは、Prewittオペレーターの垂直マスクとまったく同じように機能します。 1つ目と3つ目の列の中央に「2」と「-2」の値があるという違いが1つだけあります。 画像に適用すると、このマスクは垂直エッジを強調表示します。

使い方

このマスクを画像に適用すると、目立つ垂直エッジになります。 これは、単に一次微分として機能し、エッジ領域のピクセル強度の差を計算します。

中央の列はゼロであるため、画像の元の値は含まれませんが、その辺の右と左のピクセル値の差を計算します。 また、1列目と3列目の両方の中心値はそれぞれ2と-2です。

これにより、エッジ領域の周囲のピクセル値により多くの重みが与えられます。 これによりエッジ強度が増加し、元の画像と比較して強調されます。

以下は、ソベル演算子の水平マスクです

-1 -2 -1
0 0 0
1 2 1

上記のマスクは水平方向のエッジを検出します。これは、ゼロ列が水平方向にあるためです。 このマスクを画像に畳み込むと、画像の顕著な水平方向のエッジになります。 唯一の違いは、1行目と3行目の中心要素として2と-2があることです。

使い方

このマスクは、画像の水平方向のエッジを際立たせます。 また、上記のマスクの原理に基づいて動作し、特定のエッジのピクセル強度間の差を計算します。 マスクの中央の行はゼロで構成されるため、画像のエッジの元の値は含まれず、特定のエッジの上下のピクセル強度の差を計算します。 したがって、強度の突然の変化を増やし、エッジをより見やすくします。

次は、これらのマスクの動作を確認します。

サンプル画像

以下は、上記の2つのマスクを1つずつ適用するサンプル画像です。

Sobel Operator

垂直マスクを適用した後

上記のサンプル画像に垂直マスクを適用すると、次の画像が得られます。

Sobel Operator

水平マスクを適用した後

上記のサンプル画像に水平マスクを適用すると、次の画像が得られます

Sobel Operator

比較

ご覧のとおり、垂直マスクを適用した最初の画像では、すべての垂直エッジが元の画像よりも目立ちます。 同様に、2番目の図では、水平マスクを適用したため、すべての水平エッジが表示されています。

このようにして、画像から水平エッジと垂直エッジの両方を検出できることがわかります。 また、sobel演算子の結果をPrewitt演算子と比較すると、Sobel演算子はPrewitt演算子と比較してより多くのエッジを検出するか、エッジをより見やすくすることがわかります。

これは、ソーベル演算子では、エッジの周囲のピクセル強度により多くの重みを割り当てたためです。

より多くの重みをマスクに適用する

また、マスクにより多くの重みを適用すると、より多くのエッジが得られることがわかります。 また、チュートリアルの冒頭で述べたように、sobel演算子には固定係数がないため、ここに別の重み付き演算子があります

-1 0 1
-5 0 5
-1 0 1

このマスクの結果とPrewitt垂直マスクの結果を比較できる場合、このマスクがPrewittのマスクに比べてより多くのエッジを与えることは明らかです。