In [1]:
from matplotlib import gridspec as gridspec
from matplotlib import pyplot as plt
import tensorflow as tf
import kernels
FILENAME = '/home/rosa/사진/dog.jpeg'
#텐서플로우에서 어떻게 이미지를 오픈시키는 지에 대한 함수
def read_one_image(filename):
filename_queue = tf.train.string_input_producer([filename]) #읽을 파일목록을 filename_queue에 저장
#print(filename_queue) #<tensorflow.python.ops.data_flow_ops.FIFOQueue object at 0x7f853199fa20
image_reader = tf.WholeFileReader() #reader가 filename queue에서 파일명 하나씩 읽어옴
#print(image_reader) #<tensorflow.python.ops.io_ops.WholeFileReader object at 0x7f85044d3438>
_, image_file = image_reader.read(filename_queue)
image = tf.image.decode_jpeg(image_file, channels=3)
#Tensor("DecodeJpeg_14:0", shape=(?, ?, 3), dtype=uint8
#print(image)#decoder에서 해당 파일을 열어서 데이터를 읽는다.
image = tf.cast(image, tf.float32) / 256.0
#Tensor("truediv_14:0", shape=(?, ?, 3), dtype=float32)
# cast to float to make conv2d work #읽어들인 데이터를 텐서플로우모델에 맞게 정재한다.
#print(image)
return image
#필터함수_con&relu
def convolve(image, kernels, rgb=True, strides=[1, 3, 3, 1], padding='SAME'):
images = [image[0]]
for i, kernel in enumerate(kernels):
filtered_image = tf.nn.conv2d(image, kernel, strides=strides, padding=padding)[0]
if i == 2:
filtered_image = tf.minimum(tf.nn.relu(filtered_image), 255)
images.append(filtered_image)
return images
#session을 run시키는 함수
def get_real_images(images):
with tf.Session() as sess:
coord = tf.train.Coordinator()
#print(coord) #<tensorflow.python.training.coordinator.Coordinator object at 0x7f84f6e76da0>
threads = tf.train.start_queue_runners(coord=coord)
#print(threads)
images = sess.run(images)
coord.request_stop()
coord.join(threads)
return images
#image를 보여주는 함수
def show_images(images, rgb=True):
gs = gridspec.GridSpec(1, len(images))
for i, image in enumerate(images):
plt.subplot(gs[0, i])
if rgb:
plt.imshow(image)
else:
image = image.reshape(image.shape[0], image.shape[1])
plt.imshow(image, cmap='gray')
plt.axis('off')
plt.show()
def main():
rgb = True
if rgb:
kernels_list = [kernels.BLUR_FILTER_RGB, kernels.SHARPEN_FILTER_RGB, kernels.EDGE_FILTER_RGB,
kernels.TOP_SOBEL_RGB, kernels.EMBOSS_FILTER_RGB]
#print(kernels_list)#아무것도 안나옴
else:
kernels_list = [kernels.BLUR_FILTER, kernels.SHARPEN_FILTER, kernels.EDGE_FILTER,
kernels.TOP_SOBEL, kernels.EMBOSS_FILTER]
#print(kernels_list)
#[<tf.Tensor 'Const_1:0' shape=(3, 3, 1, 1) dtype=float32>, <tf.Tensor 'Const_3:0' shape=(3, 3, 1, 1) dtype=float32>, <tf.Tensor 'Const_5:0' shape=(3, 3, 1, 1) dtype=float32>, <tf.Tensor 'Const_7:0' shape=(3, 3, 1, 1) dtype=float32>, <tf.Tensor 'Const_9:0' shape=(3, 3, 1, 1) dtype=float32>]
image = read_one_image(FILENAME)
#print(image)
#Tensor("truediv_3:0", shape=(?, ?, 3), dtype=float32)
if not rgb:
image = tf.image.rgb_to_grayscale(image)
#print(image)
#Tensor("rgb_to_grayscale_4:0", shape=(?, ?, 1), dtype=float32)
image = tf.expand_dims(image, 0) # to make it into a batch of 1 element
#print(image)
#Tensor("ExpandDims_5:0", shape=(1, ?, ?, 1), dtype=float32)
images = convolve(image, kernels_list, rgb)
#print(images)
#[<tf.Tensor 'strided_slice_36:0' shape=(?, ?, 1) dtype=float32>, <tf.Tensor 'strided_slice_37:0' shape=(?, ?, 1) dtype=float32>, <tf.Tensor 'strided_slice_38:0' shape=(?, ?, 1) dtype=float32>, <tf.Tensor 'Minimum_6:0' shape=(?, ?, 1) dtype=float32>, <tf.Tensor 'strided_slice_40:0' shape=(?, ?, 1) dtype=float32>, <tf.Tensor 'strided_slice_41:0' shape=(?, ?, 1) dtype=float32>]
images = get_real_images(images)
#print(images)
show_images(images, rgb)
if __name__ == '__main__':
main()