实验5 数字图像基础

1. 实验目的

①了解数字图像基本属性;
②掌握Pillow图像处理库的基本操作。

2. 实验内容

①使用Pillow库对图像进行图像色彩模式转换、颜色通道的分离与合并、转化为数组、缩放、旋转、镜像和裁剪等操作;
②将图像转化为多维数组;
③下载MNIST数据集,访问并以图片形式显示数据集中的样本。

3. 实验过程

题目一:

下载lena.tiff图像(见7.2小节课件),将R、G、B三通道分离,采用灰度图表示颜色的亮度,并分别对各个通道按要求进行处理。
要求:
(1)将R通道的图像缩小为50×50,显示在子图1中,子标题为:“R-缩放”,字体大小为14;
(2)将G通道的图像先水平镜像,再顺时针旋转90度,显示在子图2中,子标题为:“G-镜像+旋转”,字体大小为14,并显示坐标轴;
(3)对B通道的图像进行裁剪,裁剪位置:左上角(0, 0) 右下角(150, 150),显示在子图3中,子标题为:“B-裁剪”,字体大小为14;
(4)将原始的R、G、B通道的图像合并,显示在子图4中,子标题显示图像的色彩模式,字体大小为14;
(5)将要求(4)的处理结果保存为PNG格式的图片,路径为当前工作目录,文件名为“test.png”,如图1所示;
(6)将以上生成的4幅图像显示在2×2的画布中,全局标题为“图像基本操作”,标题字体大小为20,颜色为蓝色,如图2所示。

实验5 数字图像基础_第1张图片

图1 图像保存

实验5 数字图像基础_第2张图片

图2 图像显示

在此之前我先上传一张lena的图片供各位下载
实验5 数字图像基础_第3张图片
当然各位也可以在官网进行下载
lena官网需要各位
源码

import matplotlib.pyplot as plt
from PIL import Image
plt.rcParams["font.family"] = "SimHei"
img1 = Image.open("D:\WorkSpace\VScodeproject01\muqi\lena.tiff")
#分离R,G,B三个通道
img_r,img_g,img_b = img1.split()

plt.figure(figsize=(8,8))
#将R通道的图像缩小为50×50,显示在子图1中,子标题为:“R-缩放”,字体大小为14
imgr = img_r.resize((50,50))
plt.subplot(221)
plt.axis("off")
plt.imshow(imgr,cmap="gray")# cmap是以灰度的方式显示
plt.title("R-缩放",fontsize = 14)

#将G通道的图像先水平镜像,再顺时针旋转90度,显示在子图2中,子标题为:“G-镜像+旋转”,字体大小为14,并显示坐标轴
imgg1 = img_g.transpose(Image.FLIP_LEFT_RIGHT)
imgg2 = imgg1.transpose(Image.ROTATE_270)
plt.subplot(222)
plt.imshow(imgg2,cmap = "gray")
plt.title("G-镜像+旋转",fontsize = 14)

#对B通道的图像进行裁剪,裁剪位置:左上角(0, 0) 右下角(150, 150),显示在子图3中,子标题为:“B-裁剪”,字体大小为14
imgb = img_b.crop((0,0,150,150))
plt.subplot(223)
plt.axis("off")
plt.imshow(imgb,cmap = "gray")
plt.title("B-裁剪",fontsize = 14)

#将原始的R、G、B通道的图像合并,显示在子图4中,子标题显示图像的色彩模式,字体大小为14
imgrgb = Image.merge("RGB",[img_r,img_g,img_b])
plt.subplot(224)
plt.axis("off")
plt.imshow(imgrgb)
plt.title(imgrgb.mode,fontsize = 14)

#将要求(4)的处理结果保存为PNG格式的图片,路径为当前工作目录,文件名为“test.png”
imgrgb.save(r"D:\WorkSpace\VScodeproject01\muqi\test.png")
#将以上生成的4幅图像显示在2×2的画布中,全局标题为“图像基本操作”,标题字体大小为20,颜色为蓝色
plt.suptitle("图像基本操作",fontsize = 20,color= "b")

plt.tight_layout(rect=[0,0,1,0.9])

plt.show()

实验5 数字图像基础_第4张图片
实验5 数字图像基础_第5张图片
注:

  1. 不可直接照搬源码,需要修改文件路径
  2. [python出现Errno 2]
    Invalid argument请查看这篇博客

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

实验5 数字图像基础_第6张图片

要求:
(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 tf
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams["font.family"] = "SimHei"

#下载手写数字数据集
mnist = tf.keras.datasets.mnist
(train_x,train_y),(test_x,test_y) = mnist.load_data()

#随机从所以测试集中显示16张数字图像
#plt.figure(figsize=(12,12))

for i in range(16):
    num = np.random.randint(1,50000)

    #16幅图像按照4×4方式排列在一张画布中,每幅图像的子标题为该图像的标签值,字体大小为14
    plt.subplot(4,4,i+1)
    plt.axis("off")
    plt.imshow(train_x[num],cmap="gray")
    plt.title("标签值" + str(train_y[num]),fontsize = 14)


# 全局标题为“MNIST测试集样本”,字体大小为20,颜色为红色。
plt.suptitle("MNIST测试集样本",fontsize = 20,color = "r")

plt.tight_layout(rect=[0,0,1,0.9])

plt.show()

实验5 数字图像基础_第7张图片

4. 实验小结&讨论题

① 实验过程中遇到了哪些问题,你是如何解决的?
图片导入失败,发现是路径出错。

② 你知道Keras中还集成了哪些数据集吗?请列举1-2个例子,并进行简单介绍。

  1. 波士顿房价数据
    本数据集取自由卡内基梅隆大学维护的StatLib库。这个数据集包含了19世纪70年代末波士顿郊区不同地点的房屋信息数据,每条数据包含13个属性,目标属性是某地点房屋的售价(单位为k$)。
    这个数据集的数据较老,再加上房价与很多因素有关,不具有通用性。它可用于练习回归算法,对于实际项目的作用有限,如果用它来预测中国的房价,绝对谬之千里。
  2. CIFAR10 (十种类别的图片集)
    本数据集包含50,000个32x32彩色训练图像和10,000个测试图像,一共10个类别的标签。
  3. CIFAR100 (100种类别的图片集)
    和CIFAR10数据集类似,只是标签类别扩充到100个,也就是有100个类别的图像。
  4. MNIST (手写数字图片集)
    本数据集包含10个数字的60,000个28x28灰度图像,以及10,000个图像的测试集。
  5. Fashion-MNIST (10种时尚类别的图片集)
    本数据集包含10个时尚类别的60,000个28x28灰度图像,以及10,000个图像的测试集。此数据集可用作MNIST的替代品。
  6. IMDB电影点评数据
    来自IMDB的25,000个电影评论的数据集,标记为正面评价和负面评价。数据集并不是直接包含单词字符串,而是已经过预处理,每个评论都被编码为一系列单词索引(整数)。
  7. 路透社新闻数据
    这是来自路透社的11,228条新闻线索的数据集,标记有46个主题。与IMDB数据集一样,每条新闻线索都被编码为一系列单词索引(相同的约定)。

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

你可能感兴趣的:(神经网络与深度学习,python,计算机视觉,开发语言)