如何创建sobel运算符掩码矩阵?

时间:2012-12-28 19:22:50

标签: image-processing

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],然后这个水平和垂直矩阵没有“乘以”得到sobel算子,它们是二维的乘积卷积运算。黑客意味着什么?

1 个答案:

答案 0 :(得分: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]

应用上述方程式与使用[-1,1]进行卷积A相同。

仅举例来说,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]进行卷积A相同。

仅举例来说,B[0,3] = -1xA[0,4] + 0xA[0,3] + 1xA[0,2] => -1x9 + 0x16 + 1x25 => 16


类似于垂直导数也是如此。

(如果需要更多细节,请发表评论。)