0
// Convolution with horizontal differentiation kernel mask
float h = ((src[-srcStride + 1] + src[+1] + src[srcStride + 1]) -
          (src[-srcStride - 1] + src[-1] + src[srcStride - 1])) * 0.166666667f;

// Convolution vertical differentiation kernel mask
float v = ((src[+srcStride - 1] + src[+srcStride] + src[+srcStride + 1]) -
          (src[-srcStride - 1] + src[-srcStride] + src[-srcStride + 1])) * 0.166666667f;

ハリスコーナーに実装されたこの種のカーネルマスクの理論が必要です。それはどのようなカーネルマスクですか?それはprewittですか、それとも別のカーネルですか?そのカーネルマスクを説明できる論文を見つけるのに苦労しています

4

1 に答える 1

0

それは確かにプレウィット演算子です。

src(入力画像)へのインデックス付けに続いてsrcStride、y 方向の次の隣人をアドレス指定するためにスキップする配列要素の数を使用して、次の順序で、次の重みでh要素を取得することがわかります。src

-1/6   0   1/6
-1/6   0   1/6
-1/6   0   1/6

これは、次のカーネルとの畳み込みに対応します (畳み込みはカーネルを反映していることを思い出してください)。

| 1  0  -1 |
| 1  0  -1 | / 6
| 1  0  -1 |

これも 2 つの畳み込みに対応します。

h = src * ( [1 0 -1] / 2 ) * ( [1 1 1]^T / 3 )

つまり、水平方向に微分フィルター (中心差分) を適用し、垂直方向に一様平滑化フィルターを適用します。

一様平滑化フィルタには非常に質の悪いものがあることに注意してください (一部の周波数成分の符号が反転し、一般的に平滑化の機能が低下します)。そのため、(三角平滑化フィルタを使用する)ソーベル演算子を使用することを常にお勧めします。できればガウス勾配

于 2018-05-13T05:34:11.687 に答える