2012-12-28 44 views
1

http://www.cis.rit.edu/people/faculty/rhody/EdgeDetection.htmsobel運算符掩碼矩陣是如何創建的?

這似乎是唯一一篇文章試圖描述sobel算子是如何來自等式的。但我當然不瞭解這些方面。

在該網頁上,他們讓

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],然後這個水平和垂直矩陣不是「相乘」得到sobel算子,它們是二維的乘積卷積運算。這意味着什麼?

+0

404錯誤你提到的文章.. – WhitAngl

回答

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


現在,我們嘗試用第二方程: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]卷積甲。

只是爲了示例,B[0,3] = -1xA[0,4] + 0xA[0,3] + 1xA[0,2] => -1x9 + 0x16 + 1x25 => 16


類似的是與垂直衍生物的情況也是如此。

(如果需要更多的細節,把評論。)

+0

男人你是我的英雄!所有其他地方,我看到「這是一些先進的東西孩子」 – cowboysaif

+0

我不知道爲什麼** Sobel算子**是'[-1 0 1]'?爲什麼我們不使用'[-1 1]'? – Alcott

+1

然後它不會是sobel :)。我不知道確切的答案。我認爲這可能是爲了消除由[-1,1]造成的轉變。不確定。我認爲sobel被用於二維卷積(檢查維基百科)。它首先應用高斯平滑來消除噪音。最好有內核奇數的大小,以便主像素錨定在中心。還要檢查兩個內核的頻率轉換以找到任何有價值的想法。恐怕我不太瞭解。 –