Python 图像梯度的Tensorflow实现 问题
我试图从头开始实现图像渐变。我知道有多种方法可以做到这一点(包括Sobel和其他过滤器)。我的问题是关于图像梯度的Tensorflow实现 TF通过这种方法实现图像梯度,如图所示。根据TF文件,对于虚拟输入Python 图像梯度的Tensorflow实现 问题,python,tensorflow,image-processing,computer-vision,Python,Tensorflow,Image Processing,Computer Vision,我试图从头开始实现图像渐变。我知道有多种方法可以做到这一点(包括Sobel和其他过滤器)。我的问题是关于图像梯度的Tensorflow实现 TF通过这种方法实现图像梯度,如图所示。根据TF文件,对于虚拟输入 [[0.1.2.3.4] [ 5. 6. 7. 8. 9.] [10. 11. 12. 13. 14.] [15. 16. 17. 18. 19.] [20. 21. 22. 23. 24.] dy和dx分别是 dy=[[5.5.5.5.5] [5. 5. 5. 5. 5.] [5
[[0.1.2.3.4]
[ 5. 6. 7. 8. 9.]
[10. 11. 12. 13. 14.]
[15. 16. 17. 18. 19.]
[20. 21. 22. 23. 24.]
dy和dx分别是
dy=[[5.5.5.5.5]
[5. 5. 5. 5. 5.]
[5. 5. 5. 5. 5.]
[5. 5. 5. 5. 5.]
[0. 0. 0. 0. 0.]]
dx=[[1.1.1.1.0]
[1. 1. 1. 1. 0.]
[1. 1. 1. 1. 0.]
[1. 1. 1. 1. 0.]
[1. 1. 1. 1. 0.]],
但是当使用Sobel过滤器时(如图所示),我的输出是
dx=[-8.,-8.,-8.],
[-8., -8., -8.],
[-8., -8., -8.]]]]
dy=[-40.,-40.,-40.],
[-40., -40., -40.],
[-40., -40., -40.]]]]
虽然我知道这两种方法都是公认的计算梯度的方法,但我的问题是
image_gradients
函数计算导数的有限差分近似值,这相当于使用两个核进行卷积:
| 1-1 | | 1|
| -1 |
Sobel过滤器与以下两个内核进行卷积:
| 10-1 | | 12 1|
| 2 0 -2 | / 8 | 0 0 0 | / 8
| 1 0 -1 | | -1 -2 -1 |
这是估计梯度的两种不同方法
请注意,某些实现使用了不同的规范化。OP中Sobel的结果正好是导数预期值的8倍,因此它根本没有对内核进行规范化。它缺少获得正确大小所需的/8
有没有办法将一种方法的结果转换成另一种方法
是的,我想你可以想出如何做到这一点,但你为什么要这样做?直接从输入图像计算所需的输出要容易得多