2017-08-28 77 views
0

我读了https://en.wikipedia.org/wiki/Sobel_operator
说,我们要检测灰度图像中的水平边缘。
请注意 - 我写矩阵作为行的序列。

问题1)然后我应该取[1,0,-1; 2,0,-2; 1,0,-1](来自G x =以上维基链接的矩阵* A)并且将其与给定图像进行卷积。 所以我会叠加[-1,0,1; -2,0,2; -1,0,1](从矩阵的180度旋转获得)在每个像素上。
是吗?

问题2)假设图像是[a,b,c; d,X,f; g,h,i],那么我将用-a + c-2d + 2f-g + i = Y来代替像素X.如果Y变成负值会怎么样? (像素值不能为负)。

问题3)我可以通过应用sobel算子(不是将该输出矩阵作为图像渲染)后得到的矩阵来得出关于图像的特定像素的任何结论吗?

问题4)是否 - 取决于使用的矩阵 - 水平或垂直边缘将在输出图像中强调,但不是两者都是?

谢谢。sobel操作员如何工作

回答

0

像素值不能为负数

现在好了就可以了,根据定义。使用偏移表示法可以很容易地看到(平坦=灰色,负=暗,正=明),使用2的补码表示法通常会使数学更容易(但看起来真的很糟糕,如果直接渲染会造成混淆)。无论哪种方式,如果你想使用相同的格式(听起来像你这样做,否则就没有问题),你还必须将结果夹紧和/或缩放到新的范围,因为在最糟糕的情况下,他们不会适合。自然图像中的大多数像素不会有很大的衍生物,因此钳位不会造成太大麻烦,但是否合适取决于您需要的信息。缩放会降低各处的小细节。

显然,如果您使用不同的目标格式(每个像素的位数多于源数据),那么首先这不是一个问题。如果你有一个8位输入,你可以将结果以一个有符号的16位格式存储,而不会有任何问题。

这是 - 根据使用的矩阵 - 水平或垂直边缘将强调在输出图像,但不是两个?

是的,但您可以通过获取梯度向量的长度来合并它们。这将在任何方向(不仅H或V,而且对角线和两者之间的角度)大致相等地处理边缘。您也可以将水平和垂直导数的绝对值相加,这是一种更简单的计算,但它将对角线边缘视为与直边不同。

1

1)对。 2)标志会告诉你边缘的极性;如果你想保持两个极性,取绝对值;否则只保留正面或负面部分。 3)边缘是滤波器响应高的地方。 4)右边,虽然一些斜边也是可见的。