0

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

问题 1 ) 那么我应该采取 [1,0,-1; 2,0,-2 ; 1,0,-1](来自 G x = matrix * A of wiki link above)并将其与给定图像卷积。所以我会叠加 [-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) 是否会根据使用的矩阵在输出图像中强调水平或垂直边缘,但不会同时强调两者?

谢谢。

4

2 回答 2

1

1) 对。

2)标志会告诉你边缘的极性;如果要保持两个极性,取绝对值;否则只保留正面或负面部分。

3) 边缘是滤波器响应高的地方。

4) 对,虽然也可以看到一些斜边。

于 2017-08-31T14:27:46.420 回答
0

像素值不能为负

现在它可以,根据定义。使用偏移表示可以很容易地可视化(平面 = 灰色,负 = 暗,正 = 亮),使用 2 的补码表示通常会使数学变得更容易(但如果直接渲染,看起来真的很糟糕并且令人困惑)。无论哪种方式,如果您想使用相同的格式(听起来像您这样做,否则不会有问题),您还必须将结果钳位和/或缩放到新范围,因为在最坏的情况下它们不会合身。自然图像中的大多数像素不会有很大的导数,因此钳制不会造成太大麻烦,但这是否合适取决于您需要此信息的目的。缩放会随处丢弃小细节。

显然,如果您使用不同的目标格式(每像素的位数多于源格式),这甚至都不是问题。如果您有 8 位输入,您可以将结果存储为有符号的 16 位格式,而不会遇到任何问题。

是不是 - 根据使用的矩阵 - 输出图像中会强调水平或垂直边缘,但不会同时强调两者?

是的,但您可以通过获取梯度向量的长度来组合它们。这将大致相等地处理任何方向的边缘(不仅是 H 或 V,还包括对角线和夹角)。您也可以只对水平和垂直导数的绝对值求和,这是一种更简单的计算,但它对对角线边缘的处理与直边缘不同。

于 2017-08-28T14:22:43.243 回答