1

http://www.cis.rit.edu/people/faculty/rhody/EdgeDetection.htm

これは、ソーベル演算子が方程式からどのように得られるかを説明しようとする唯一の記事のようです。しかし、私は確かにその側面を理解していません。

そのページで、彼らは

A = array of actual image , B = grayscale version

Horizontal gradient B(j ,k) = taking column values = A ( j,k+1 ) - A (j,k)

私の質問、なぜ水平の列の値を取るのですか?

それから再び、彼らは言った:

This can be represented by a filter array as shown below: as a matrix [-1,1]

このフィルター配列はどのようにその方程式から得られるのでしょうか? また、[-1,1] が [-1,0,1] になる理由を理解するのに苦労しています。この水平および垂直行列は、ソーベル演算子を取得するために「乗算」されません。それらは 2 次元の積です。畳み込み演算。それは何を意味するハックですか?

4

1 に答える 1

3

サンプル配列 を考えてみましょうA = [1,4,9,16,25]

あなたが言及した記事に従って、この配列の水平導関数を見つける必要があります。

水平導関数について話すときは、行内の要素間の差を取る必要があります。つまり、データが行内でどのように変化するか、つまり水平導関数です。同様に、列内のデータの変動は垂直導関数です。

最初の式は次のとおりです。B[j,k] = A[j,k+1] - A[j,k]

=> B[0,0] = A[0,1] - A[0,0]=> B[0,0] = 4-1 => 3

=> B[0,1] = A[0,2] - A[0,1]=> B[0,1] = 9-4 => 5

=> B[0,2] = A[0,3] - A[0,2]=> B[0,2] = 16-9 => 7

=> B[0,3] = A[0,4] - A[0,3]=> B[0,3] = 25-16 => 9

だから最後にB = [3,5,7,9]

上記の式を適用することは、A を [-1,1] でたたみ込むことと同じです。

例として、B[0,3] = -1xA[0,3] + 1xA[0,4]=> -1x16 + 1x25 => 9


次に、2 番目の式を試します。B[j,k] = A[j,k+1] - A[j,k-1]

=> B[0,1] = A[0,2] - A[0,0]=> B[0,1] = 9-1 => 8

=> B[0,2] = A[0,3] - A[0,1]=> B[0,2] = 16-4 => 12

=> B[0,3] = A[0,4] - A[0,2]=> B[0,3] = 25-9 => 16

最後に、B = [8,12,16]

この操作は、[-1,0,1] で A を畳み込むのと同じです。

例として、B[0,3] = -1xA[0,4] + 0xA[0,3] + 1xA[0,2]=> -1x9 + 0x16 + 1x25 => 16


垂直導関数の場合も同様です。

(詳細が必要な場合は、コメントを入力してください。)

于 2012-12-29T19:39:47.420 に答える