【神经网络】tensorflow实验5--数字图像基础

news/2024/11/29 1:43:06/

目录

1. 实验目的

2. 实验内容

3. 实验过程

题目一:

① 代码

② 实验结果

题目二:

① 代码

② 实验结果

4. 实验小结&讨论题


1. 实验目的

①了解数字图像基本属性;

②掌握Pillow图像处理库的基本操作。

2. 实验内容

①使用Pillow库对图像进行图像色彩模式转换、颜色通道的分离与合并、转化为数组、缩放、旋转、镜像和裁剪等操作;

②将图像转化为多维数组;

③下载MNIST数据集,访问并以图片形式显示数据集中的样本。

3. 实验过程

题目一:

下载lena.tiff图像,将R、G、B三通道分离,采用灰度图表示颜色的亮度,并分别对各个通道按要求进行处理。

 

要求:

(1)将R通道的图像缩小为50×50,显示在子图1中,子标题为:“R-缩放”,字体大小为14;

(2)将G通道的图像先水平镜像,再顺时针旋转90度,显示在子图2中,子标题为:“G-镜像+旋转”,字体大小为14,并显示坐标轴;

(3)对B通道的图像进行裁剪,裁剪位置:左上角(0, 0) 右下角(300,300),显示在子图3中,子标题为:“B-裁剪”,字体大小为14;

(4)将原始的R、G、B通道的图像合并,显示在子图4中,子标题显示图像的色彩模式,字体大小为14;

(5)将要求(4)的处理结果保存为PNG格式的图片,路径为当前工作目录,文件名为“test.png”,如图1所示;

(6)将以上生成的4幅图像显示在2×2的画布中,全局标题为“图像基本操作”,标题字体大小为20,颜色为蓝色,如图2所示。

图1 图像保存

 

图2 图像显示

① 代码

from PIL import Imageimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = 'SimHei'plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号img = Image.open("lena.tiff")img_r,img_g,img_b = img.split() #将彩色图像分离为R,G,B三个颜色通道。plt.figure(figsize=(5,5))   #整体画布大小5*5# (1)将R通道的图像缩小为50×50,显示在子图1中,子标题为:“R-缩放”,字体大小为14;plt.subplot(221)   #两行两列第1个图plt.axis("off")      #不显示坐标轴img_small = img_r.resize((50,50)) #缩放50*50plt.imshow(img_small,cmap="gray")   #灰度图plt.title("R-缩放",fontsize = 14)# (2)将G通道的图像先水平镜像,再顺时针旋转90度,显示在子图2中,子标题为:“G-镜像+旋转”,字体大小为14,并显示坐标轴;plt.subplot(222)plt.axis('on')#显示坐标轴img_gr = img_g.transpose(Image.ROTATE_270)#逆时针270 = 顺时针90plt.imshow(img_gr,cmap="gray")plt.title("G--镜像+旋转",fontsize = 14)# (3)对B通道的图像进行裁剪,裁剪位置:左上角(0, 0) 右下角(150, 150),显示在子图3中,子标题为:“B-裁剪”,字体大小为14;plt.subplot(223)img_region = img_b.crop((0,0,150,150))plt.imshow(img_region)plt.title("B-裁剪",fontsize = 14)# (4)将原始的R、G、B通道的图像合并,显示在子图4中,子标题显示图像的色彩模式,字体大小为14;img_rgb = Image.merge("RGB",[img_r,img_g,img_b])  #将所有通道合并,得到BGR彩色图像plt.subplot(224)plt.axis("off")plt.imshow(img_rgb)plt.title("rgb",fontsize = 14)# (5)将要求(4)的处理结果保存为PNG格式的图片,路径为当前工作目录,文件名为“test.png”,如图2所示;img_rgb.save('test.png')#(6)将以上生成的4幅图像显示在2×2的画布中,全局标题为“图像基本操作”,标题字体大小为20,颜色为蓝色。plt.suptitle("图像基本操作",fontsize = 20,color = 'b')plt.show()

② 实验结果

题目二:

按下列要求完成程序,随机显示MNIST数据集中的样本,效果如下图所示。

要求:

(1)下载手写数字数据集,读取训练集和测试集数据,放在NumPy数组train_x、train_y、test_x、test_y中;(train_x:训练集图像,train_y:训练集标签,test_x:测试集图像,test_y:测试集标签)

(2)随机从所有测试集数据中显示16幅数字图像;

(3)16幅图像按照4×4方式排列在一张画布中,每幅图像的子标题为该图像的标签值,字体大小为14,全局标题为“MNIST测试集样本”,字体大小为20,颜色为红色。

① 代码

# (1)下载手写数字数据集,读取训练集和测试集数据,放在NumPy数组train_x、train_y、test_x、test_y中;(train_x:训练集图像,train_y:训练集标签,test_x:测试集图像,test_y:测试集标签)# (2)随机从所有测试集数据中显示16幅数字图像;# (3)16幅图像按照4×4方式排列在一张画布中,每幅图像的子标题为该图像的标签值,字体大小为14,全局标题为“MNIST测试集样本”,字体大小为20,颜色为红色。import tensorflow as tfimport numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = 'SimHei'  #防止中文乱码plt.rcParams['axes.unicode_minus'] = False #设置正常显示符号mnist = tf.keras.datasets.mnist(train_x,train_y),(test_x,test_y) = mnist.load_data()plt.suptitle("MNIST测试集样本",fontsize = 20,color = 'r')   #总标题for i in range(16):num = np.random.randint(1,50000)plt.subplot(4,4,i+1)plt.axis("off")    #不显示坐标轴plt.imshow(train_x[num])plt.title("标签值:"+str(train_y[num]))   #train_y[num]是手写数字值plt.show()# print(train_x[0])# print(train_y[0])

② 实验结果

4. 实验小结&讨论题

① 实验过程中遇到了哪些问题,你是如何解决的?

这次的题目有点难,问了很多同学才得以解决,刚开始图片存储位置不对,不能正常运行,我就把图片存储到我的这个代码的项目文件中,就可以正常显示了。类似于波士顿房价集和鸢尾花,对图片进行处理的时候对一些函数不是很熟练,导致运行会出错。

② 你知道Keras中还集成了哪些其他的数据集吗?请列举一二,并下载出来。除了Keras,你知道其他下载数据集的方式吗?

MNIST数字分类数据集  CIFAR10小图像分类数据集  CIFAR100小图像分类数据集  IMDB电影评论情感分类数据集

1.使用urllib下载cifar-10数据集,并读取再存为图片

2.按BATCH_SIZE读取二进制文件中的图片数据,并存放为jpg

③ 在题目基本要求的基础上,你对每个题目做了那些扩展和提升?或者你觉得在编程实现过程中,还有哪些地方可以进行优化?

每个题目要实现的功能很多,可以使用自定义函数是代码看着简便一点。


http://www.ppmy.cn/news/42013.html

相关文章

BGP与OSPF混合组网

如图。R1和R2之间是OSPF Area 0,R23和R4之间是OSPF Area 1,R5和R6之间是OSPF Area2。除了R1和R2之间的cost是100,其余链路的cost都是10. AR1/2/3/4/5/6之间通过Loopback口建立IBGP全互联邻居关系,并且都是AS11520,和外部建立EBGP邻居访问100.100.100.1的网络。(不确定图中…

穿戴规范智能识别系统 yolov7

穿戴规范智能识别系统通过yolov7python网络模型AI深度视觉学习算法,穿戴规范智能识别系统对工厂画面中人员穿戴行为自动识别分析,发现现场人员未按照规定穿戴着装,立即抓拍告警。YOLOv7 的发展方向与当前主流的实时目标检测器不同&#xff0c…

(邱维声)高等代数课程笔记:n 元排列

n 元排列 \quad回顾一下,数域 KKK 上的 nnn 元线性方程组解的情况有几种?前面我们通过对增广矩阵作初等行变换化为阶梯形已经解决了这个问题。 \quad但事实上,化完阶梯形后,这个方程组的求解已经完成的差不多了。换言之&#xff0…

Python 小型项目大全 6~10

六、凯撒密码 原文:http://inventwithpython.com/bigbookpython/project6.html 凯撒密码是朱利叶斯凯撒使用的一种古老的加密算法。它通过将字母在字母表中移动一定的位置来加密字母。我们称移位的长度为密钥。比如,如果密钥是 3,那么A变成D&…

关键词数据分析-搜索词和关键词分析工具

要搜索热门关键词获取,可以采用以下几种方法: 使用百度指数:百度指数是一个实用的工具,可用于查看关键词的热度趋势、搜索量等数据。在百度指数中,您可以输入您要搜索的关键词,并查看近期的相关数据。这可以…

【Unity VR开发】结合VRTK4.0:创建一个按钮(Option Button)

语录: 如同天上降魔主,真是人间太岁神。 前言: 选项按钮是一种提供多项选择选项的方法,其中只有一个按钮可以处于激活状态,激活另一个按钮时将确保组中的所有其他按钮都已停用。我们可以使用嵌套在预制件中的预制件来实…

uniapp页面后退时更改页面内容【uniapp如何区分页面是跳转来的还是后退来的】【伸手党福利】

目录应用场景实现目标分析技术难点解决方法另附:自动登录判断跳转页面ps2 这个案例的实际简单的解决方法应用场景 建立一个自动登录的中间页,如果自动登录,则自动跳转到内部应用。如果自动登录失败,则显示用户名密码输入页。 发现…

三、线程状态【3/12】【多线程】

线程的状态3. 线程的状态3.1 观察线程的所有状态3.2 线程状态和状态转移的意义3.3 观察线程的状态和转移3. 线程的状态 3.1 观察线程的所有状态 线程的状态是一个枚举类型 Thread.State public class ThreadState {public static void main(String[] args) {for (Thread.State…