📚 The CoCalc Library - books, templates and other resources
License: OTHER
"""1Simple examples of convolution to do some basic filters2Also demonstrates the use of TensorFlow data readers.34We will use some popular filters for our image.5It seems to be working with grayscale images, but not with rgb images.6It's probably because I didn't choose the right kernels for rgb images.78kernels for rgb images have dimensions 3 x 3 x 3 x 39kernels for grayscale images have dimensions 3 x 3 x 1 x 11011CS 20: "TensorFlow for Deep Learning Research"12cs20.stanford.edu13Chip Huyen ([email protected])14Lecture 0715"""16import os17os.environ['TF_CPP_MIN_LOG_LEVEL']='2'1819import sys20sys.path.append('..')2122from matplotlib import gridspec as gridspec23from matplotlib import pyplot as plt24import tensorflow as tf2526import kernels2728def read_one_image(filename):29''' This method is to show how to read image from a file into a tensor.30The output is a tensor object.31'''32image_string = tf.read_file(filename)33image_decoded = tf.image.decode_image(image_string)34image = tf.cast(image_decoded, tf.float32) / 256.035return image3637def convolve(image, kernels, rgb=True, strides=[1, 3, 3, 1], padding='SAME'):38images = [image[0]]39for i, kernel in enumerate(kernels):40filtered_image = tf.nn.conv2d(image,41kernel,42strides=strides,43padding=padding)[0]44if i == 2:45filtered_image = tf.minimum(tf.nn.relu(filtered_image), 255)46images.append(filtered_image)47return images4849def show_images(images, rgb=True):50gs = gridspec.GridSpec(1, len(images))51for i, image in enumerate(images):52plt.subplot(gs[0, i])53if rgb:54plt.imshow(image)55else:56image = image.reshape(image.shape[0], image.shape[1])57plt.imshow(image, cmap='gray')58plt.axis('off')59plt.show()6061def main():62rgb = False63if rgb:64kernels_list = [kernels.BLUR_FILTER_RGB,65kernels.SHARPEN_FILTER_RGB,66kernels.EDGE_FILTER_RGB,67kernels.TOP_SOBEL_RGB,68kernels.EMBOSS_FILTER_RGB]69else:70kernels_list = [kernels.BLUR_FILTER,71kernels.SHARPEN_FILTER,72kernels.EDGE_FILTER,73kernels.TOP_SOBEL,74kernels.EMBOSS_FILTER]7576kernels_list = kernels_list[1:]77image = read_one_image('data/friday.jpg')78if not rgb:79image = tf.image.rgb_to_grayscale(image)80image = tf.expand_dims(image, 0) # make it into a batch of 1 element81images = convolve(image, kernels_list, rgb)82with tf.Session() as sess:83images = sess.run(images) # convert images from tensors to float values84show_images(images, rgb)8586if __name__ == '__main__':87main()8889