使用numpy解决图像维度变换问题

简介: 使用numpy解决图像维度变换问题numpy python  numpy函数介绍 1. np.transpose(input, axes=None)在机器学习中经常会碰到各种图像数据集,有的是按照num*height*width*channel来存储的,而有的则是num*channel*height*width。

使用numpy解决图像维度变换问题

numpy函数介绍

1. np.transpose(input, axes=None)

在机器学习中经常会碰到各种图像数据集,有的是按照num*height*width*channel来存储的,而有的则是num*channel*height*width。然后每次碰到这种问题都会想半天该怎么相互变换。

也想过自己手敲代码实现,但是一方面速度肯定没别人的方法好,另一方面还不一定是对的233。其实numpy已经帮我们都弄好了,我们只要使用np.transpose方法即可。

例如输入数据是a.shape = 1000*32*32*3(num*height*width*channel)

我们只需要使用如下代码即可达到要求。

  1. a = np.transpose(a, [0,3,1,2]) 

2. np.concatenate((a1, a2, …), axis=0)

  • 参数1:表示需要叠加的一组矩阵,可以是元组形式 (a1, a2, …),也可以是列表形式[a1,a2,…]。另外,各个矩阵的维度必须保持一致!
  • 参数2:axis默认为0,当然也可以设置为其他的值。

3. np.newaxis

这个可以用于扩展一个新的维度,例如假设我们的标签y.shape=(10,),我们想把它变成 (10,1) 该怎么做?很简单:

  1. y = y[:, np.newaxis] 
  2.  
  3. # 其实也可以这样 
  4. y = np.reshape(y, [len(y),1]) 

效果图如下:

img_e51e090a956511d56d1d7db702a3b309.png

4. np.mean & np.var

  • np.mean(a, axis=None, dtype=None, out=None, keepdims=<no value>)
  • np.var(a, axis=None, dtype=None, out=None, ddof=0, keepdims=<no value>)

很简单,这两个方法分别用来计算均值和方差,在图像数据预处理的时候很有帮助。可以在应用场景二中来看看具体的特殊用法。

实践出真知之应用场景一

现假设我们有一组二维图像数据集,其大小为3*2*2 (num*height*width)。我们现在想将这个二维数据集转化成3维的,而且最后维度顺序要是num*height*width*channel,我们应该咋办呢?

1. 扩展出一个新的维度用来表示channel

新增加一个维度,建议先将channel增加在第二个维度,这样更好理解,而且数据不会被打乱。

img_e86d3296a198c042d6e89469d0c5ea01.png

2.叠加channel

img_aee755aa50d86aae5876c9c4f8ff6a1c.png

3.维度转置

img_32854c5cb32be4338e859d0b8f1a5c2f.png

4.验证是否正确

最后来验证一下这一波操作是否正确:

img_ece3b758b62edefcda0c39a7424c86dc.png

可以看到是正确的!!!

5.整体演示代码

img_602f7aed04284856063d6a58c6c74e95.png

实践出真知之应用场景二

假设我们现有三维数据集,a.shape=(4,2,2,3) (num, height, width, channel)。而在数据预处理之前呢,我们一般都需要将图像数据每个像素点的值除以255,之后再减去每个维度的均值,再除以方差。

但是怎么得到每个维度的均值和方差呢?

img_4280cdd24bc52468613e52886fd3c063.png

因为channel在最后一维,所以我们需要指定需要计算均值和方差的维度,即 0,1,2。另外还有一个很重要的就是我们需要讲keepdims这个参数设置为True,它的作用是让输出的结果保持相同的维度,比如说数据集是4维的,那么输出的均值也会是4维。由下图可以看到,如果keepdims=False,那么均值和方差则会变成1维列表

img_55169e7bdab3fc2a7068b74682ac72d0.png


MARSGGBO原创





2018-8-5



目录
相关文章
|
4月前
|
BI 测试技术 索引
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-1
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)
|
4月前
|
存储 API C语言
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-2
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)
|
4月前
|
Python
如何查询RGB图像的三维numpy数组中有多少个不同的RGB点,并打印具体数值?
如何查询RGB图像的三维numpy数组中有多少个不同的RGB点,并打印具体数值?
|
5月前
|
存储 算法 数据处理
《Numpy 简易速速上手小册》第3章:Numpy 数组操作与变换(2024 最新版)
《Numpy 简易速速上手小册》第3章:Numpy 数组操作与变换(2024 最新版)
74 0
|
Python
浅谈NumPy中的维度Axis
NumPy中的维度是一个很重要的概念,很多函数的参数都需要给定维度Axis,如何直观的理解维度呢?我们首先以二维数组为例进行说明,然后推广到多维数组。 (有人将ndim属性叫维度,将axis叫轴,我还是习惯将axis称之为维度,axis=0称为第一个维度)
76 0
  浅谈NumPy中的维度Axis
|
机器学习/深度学习 计算机视觉 Python
基于Numpy数组的图像分割 基于PIL对图像进行拼接
基于Numpy数组的图像分割 基于PIL对图像进行拼接
233 0
基于Numpy数组的图像分割 基于PIL对图像进行拼接
|
计算机视觉 Python
【opencv】图像数据类型由numpy转为tensor后颜色改变
【opencv】图像数据类型由numpy转为tensor后颜色改变
287 1
【opencv】图像数据类型由numpy转为tensor后颜色改变
|
Python
CV5 numpy入门及图像的基本操作
复制法,即复制最边缘的像素。
78 0
|
Python
【Numpy总结】第二节:Numpy 的属性与形状变换
在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions),维度的数量称为秩(rank);比如说,二维数组相当于是两个一维数组,即 二维数组有两个轴,秩为2 。 <font color=blue > 重点:很多时候可以声明 axis。 axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作; axis=1,表示沿着第 1 轴进行操作,即对每一行进行操作。
115 0
【Numpy总结】第二节:Numpy 的属性与形状变换
|
计算机视觉 Python
Numpy 进阶(二) — 对图像进行旋转、水平、垂直镜像操作!
原理讲解 用 Python 对图片做旋转、镜像操作时,小伙伴们可能首先想到的是 PIL 、Opencv 等图像处理程序包,只需要一行代码就可以实现目标转换。 这样做的确能够实预期目标,但图像是怎么实现旋转的,这个过程对我们来说就像一个黑盒子,很陌生,为了了解图像变换机制,这篇文章借助 Numpy 数组来实现图像翻转等操作
Numpy 进阶(二) — 对图像进行旋转、水平、垂直镜像操作!