Tensorflow sobel 卷积操作
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
myimg=mpimg.imread('img.jpg')
plt.imshow(myimg)
plt.axis('off')
plt.show()
print(myimg.shape)
full=np.reshape(myimg,[1,768,1366,3])
inputfull=tf.placeholder(tf.float32,shape=[1,768,1366,3])
my_filter=tf.Variable(tf.constant([[-1.0,-1.0,-1.0],[0.0,0.0,0.0],[1.0,1.0,1.0],
[-2.0,-2.0,-2.0],[0.0,0.0,0.0],[2.0,2.0,2.0],
[-1.0,-1.0,-1.0],[0.0,0.0,0.0],[1.0,1.0,1.0]],
shape=[3,3,3,1]))
op=tf.nn.conv2d(inputfull,my_filter,strides=[1,1,1,1],padding='SAME')
out=tf.cast((op-tf.reduce_min(op)/(tf.reduce_max(op)-tf.reduce_min(op)))*255,tf.uint8)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
target=sess.run(out,feed_dict={inputfull:full})
target=np.reshape(target,[768,1366])
plt.imshow(target,cmap='Greys_r')
plt.axis('off')
plt.show()
运行结果:
sobel算子是一种求边界梯度的卷积核,在tensorflow中用代码实现非常的方便。