0

ソーベル (Gx と Gy) の正確なマスクは? 私が見たのは、人々がそれをどのように書いたかについて、以下のように2つのタイプがあるということです。

スタイル 1

Gx = [-1 -2 -1
        0 0 0
        1 2 1]

Gy = [-1 0 1
      -2 0 2
      -1 0 1]

スタイル 2

Gx = [-1 0 1
      -2 0 2
      -1 0 1]

Gy = [-1 -2 -1
        0 0 0
        1 2 1]

編集済み

@アウレリス

Matlab では --> (行 x 列)

OpenCV --> (列 x 行)

ただし、下の図はどちらも正しいです

-->column
^
|row
|

おそらくMatlabでは、スタイル1が使用されている場合はGx ==水平エッジ、Gy ==垂直エッジが出力され、スタイル2が使用されている場合はGx ==水平エッジ、Gy ==垂直エッジが出力されます。どちらも同じ出力を生成します (列の主な順序により、内部操作が異なる場合があります)。

@Abhishekスタイル1を使用して水平および垂直エッジを計算していますか? および Gx は水平エッジに対応し、Gy は垂直エッジに対応しますか? スタイル2はそれを補完するものということですか?たとえば。Gxを計算すると垂直エッジが得られ、Gyは水平エッジが得られますか?

4

2 に答える 2

3

スタイル 2 が正しいです。ただし、カーネルが画像と畳み込まれているため、両方のスタイルを使用しても同じ結果が得られます。

Gx = [-1 -2 -1 0 0 0 <--- X 方向ではなく Y 方向にフィーチャを抽出します。1 2 1]

Gy = [-1 0 1 -2 0 2 <--- Y 方向ではなく X 方向に特徴を抽出します。-1 0 1]

これは、単純な 2 次元畳み込みを使用して確認できます。

元の画像:元の画像

Style1、Gx を使用: ここに画像の説明を入力

style1、Gy を使用: ここに画像の説明を入力

于 2013-03-05T19:52:59.173 に答える
1

数学表記を使用している場合、適切なマスクはスタイル 2 です (こちらを参照)。

MATLAB と OpenCV の行列の違いから混乱が生じている可能性があります。MATLAB 行列は列優先順で指定され、OpenCV 行列は行優先順で指定されます。

スタイル 1 は列優先の方法でソーベル マスクを表し、スタイル 2 は行優先の順序で同じマスクを表します。

于 2013-03-05T19:49:23.307 に答える