使用sobel算子提取图片轮廓
使用sobel算子提取整幅图片的轮廓
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import tensorflow as tf
import pylab
myimg=mpimg.imread('00.jpg')#480,640,3
full=np.concatenate((myimg,myimg),axis=2)
#将同一幅图片复制俩次再重叠成二维的矩阵,方便提取横向轮廓和纵向轮廓最后相加成为整幅图的轮廓
full=np.reshape(full,[1,480,640,6])
inputfull =tf.Variable(tf.constant(1.0,shape=[1,480,640,6]))
#最后一维为6个元素,前三个用Gx算子后三个用Gy算子
filter1=tf.Variable(tf.constant([[-1.0,-1.0,-1.0],[0,0,0],[1.0,1.0,1.0],
[-1.0,-1.0,-1.0],[-2.0,-2.0,-2.0],[-1.0,-1.0,-1.0],
[-2.0,-2.0,-2.0],[0,0,0],[2.0,2.0,2.0],
[0,0,0],[0,0,0],[0,0,0],
[-1.0,-1.0,-1.0],[0,0,0],[1.0,1.0,1.0],
[1.0,1.0,1.0],[2.0,2.0,2.0],[1.0,1.0,1.0]],
shape=[3,3,6,1]
))
op=tf.nn.conv2d(inputfull,filter1,strides=[1,1,1,1],padding='SAME')
o=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())
t,f=sess.run([o,filter1],feed_dict={inputfull:full})
t=np.reshape(t,[480,640])
plt.imshow(t,cmap='Greys_r')
plt.savefig('00_1.jpg')
plt.show()