东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 6162|回复: 0

[课堂笔记] 02、利用tensorflow对图片进行卷积(轮廓信息提取)和池化(膨胀)

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14427
QQ
发表于 2020-3-11 10:01:42 | 显示全部楼层 |阅读模式
02、利用tensorflow对图片进行卷积(轮廓信息提取)和池化(膨胀)




  1. import matplotlib.pyplot as plt
  2. import tensorflow as tf

  3. '''
  4. 利用tensorflow对图片进行卷积(轮廓信息提取)和池化(膨胀)
  5. '''


  6. def show_image_tensor(image_tensor):
  7.     # 要求:使用交互式会话
  8.     # 获取图像tensor对象对应的image对象,image对象时一个[h,w,c]
  9.     # print(image_tensor)
  10.     image = image_tensor.eval()
  11.     # print(image)
  12.     print("显示时图像大小为:{}".format(image.shape))
  13.     if len(image.shape) == 3 and image.shape[2] == 1:
  14.         # 黑白图像
  15.         plt.imshow(image[:, :, 0], cmap='Greys_r')
  16.         plt.show()
  17.     elif len(image.shape) == 3:
  18.         # 彩色图像
  19.         plt.imshow(image)
  20.         plt.show()


  21. sess = tf.InteractiveSession()
  22. path = '0.jpg'

  23. # 读取图像数据并转换为[height, weight, channels]的格式   HWC
  24. img = tf.image.decode_jpeg(tf.read_file(path), 3)
  25. # 图像重置大小   nearest_neighbor
  26. img = tf.image.resize_images(img, size=(300, 300), method=tf.image.ResizeMethod.NEAREST_NEIGHBOR)
  27. # 将图像转换为黑白的图像
  28. img = tf.image.rgb_to_grayscale(img)
  29. old_img = img

  30. # 边缘/轮廓信息提取  多次卷积 滤波器的作用 filter
  31. img = tf.cast(img, dtype=tf.float32)
  32. # NHWC
  33. img = tf.expand_dims(img, 0)

  34. show_image_tensor(img[0])

  35. for i in range(1):
  36.     sobel_gx = [-1, 0, +1, 0, 0, 0, -1, 0, +1]
  37.     # 卷积核是常量
  38.     conv2d_filter = tf.constant(value=sobel_gx, dtype=tf.float32, shape=[3, 3, 1, 1])
  39.     # [filter_height, filter_width, in_channels, out_channels]
  40.     img = tf.nn.conv2d(img, filter=conv2d_filter, strides=[1, 1, 1, 1], padding='SAME')


  41. show_image_tensor(img[0])

  42. # 二值化,小于等于170的设置为0 黑色,大于170设置为255 白色
  43. img = tf.where(tf.less_equal(img, 170), tf.zeros_like(img), tf.ones_like(img) * 255)

  44. # 将白色的区域(车牌区域就是白色的),
  45. # 扩大/膨胀的意思是:将这些白色区域的周边也变成白色的 ==> 只需要做一个maxpool
  46. # 前面已经二值化了 0 或 255(白色)  最大池化:会将白色的周边也变白色 因为255最大
  47. # 多做几次最大池化:膨胀得越大
  48. # 注意池化核大小的变化:(2, 3) 车牌的区域也是长方形的
  49. # img = tf.expand_dims(img, 0)

  50. show_image_tensor(img[0])

  51. # 膨胀
  52. for i in range(2):
  53.     # 池化核的大小:2*3
  54.     img = tf.nn.max_pool(img, ksize=(1, 2, 3, 1), strides=(1, 1, 1, 1), padding='SAME')

  55. show_image_tensor(img[0])

  56. # 修图:将有一些膨胀不太好的地方,还原成黑色
  57. # 0 255 变成 0 -255 前面已经二值化了
  58. # 池化核大小:(3, 1)  在抑制纵轴方向的膨胀呢
  59. img = tf.nn.max_pool(img * -1, ksize=(1, 3, 1, 1), strides=(1, 1, 1, 1), padding='SAME')
  60. img = img * -1

  61. show_image_tensor(img[0])

  62. # 继续膨胀
  63. for i in range(5):
  64.     # 池化核大小:(1, 5)  加码横轴方向的膨胀
  65.     img = tf.nn.max_pool(img, ksize=(1, 1, 5, 1), strides=(1, 1, 1, 1), padding='SAME')


  66. img = img[0]
  67. print(img.get_shape())
  68. show_image_tensor(img)
复制代码


0.jpg
0_1.png
0_2.png
0_3.png
0_4.png
0_5.png
0_6.png
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|人工智能工程师的摇篮 ( 湘ICP备2020019608号-1 )

GMT+8, 2024-4-17 05:14 , Processed in 0.179312 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表