Image processing Skimage filters.sobel_v结果没有意义。为什么?
其中提到,检测垂直线的内核是:Image processing Skimage filters.sobel_v结果没有意义。为什么?,image-processing,edge-detection,scikit-image,sobel,Image Processing,Edge Detection,Scikit Image,Sobel,其中提到,检测垂直线的内核是: 1 0 -1 2 0 -2 1 0 -1 如果我这样做: img = np.array([[1.0, 2.0, 3.0], [4, 5, 6], [7, 8, 9]]) Lx = filters.sobel_v(img) 然后打印Lx,我得到: Lx 0.0000 0.0000 0.0000 0.0000 2.0000 0.0000 0.0000 0.0000 0.0000 这没有任何意义,因为结果应该是: 1*(-1) + 3*1 +
1 0 -1
2 0 -2
1 0 -1
如果我这样做:
img = np.array([[1.0, 2.0, 3.0], [4, 5, 6], [7, 8, 9]])
Lx = filters.sobel_v(img)
然后打印Lx
,我得到:
Lx
0.0000 0.0000 0.0000
0.0000 2.0000 0.0000
0.0000 0.0000 0.0000
这没有任何意义,因为结果应该是:
1*(-1) + 3*1 + 4*(-2) + 6*2 + 7*(-1) + 9*1 = -16 + 24 = 8
而不是位于中央位置的2
发生了什么?这种差异是由于比例因子造成的 用于垂直边缘检测的Sobel核通常定义为: 该内核可以分解为平滑内核和派生内核的乘积,如下所示: 为了使平滑核成为一个真正的平均滤波器,它应该按系数
1/(1+2+1)=1/4进行缩放。这样,Sobel内核就变成:
尽管文档中没有提到比例因子,但它实际上是在实现中使用的(请查看以说服您自己)。谢谢您的回答。非常有用。谢谢你修复我的卷积:)