Home > front end >  Manually calculate image gradient in tensorflow
Manually calculate image gradient in tensorflow

Time:12-16

I know there is image_gradients in tensorflow to get dx, dy of the image like this

dx, dy = tf.image.image_gradients(image)
print(image[0, :,:,0])
tf.Tensor(
      [[ 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.]], shape=(5, 5), dtype=float32)
print(dx[0, :,:,0])
tf.Tensor(
      [[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.]], shape=(5, 5), dtype=float32)
print(dy[0, :,:,0])
tf.Tensor(
      [[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.]], shape=(5, 5), dtype=float32)

It looks like the gradient values are organized so that [I(x 1, y) - I(x, y)] is in location (x, y). If I would like to do it manually, I'm not sure what I should do.

I tried to input the formula [I(x 1, y) - I(x, y)], but I have no idea how to implement it in the loop

x = image[0,:,:,0]
x_unpacked = tf.unstack(x)

processed = []
for t in x_unpacked:
    ???
    processed.append(result_tensor)

output = tf.concat(processed, 0)

Or if I can shift the whole tensor to the x,y direction, I could do the tensor subtraction, but still not sure about how to handle the edge information. (Above example, they are all zero for the last row/column)

Any help would be appreciated.

CodePudding user response:

for the above example,dx

dx = tf.pad(img[1:,] - img[:-1,], [[0,1],[0,0]])

for dy

dy = tf.pad(img[:,1:] - img[:,:-1], [[0,0],[0,1]])
  • Related