从数组维度的角度去理解图像
从数组维度的角度去理解图像
ytkz说起数组,不得不说numpy。
当然 ,如果你是使用其他的语言,如 C、C++或者matlab,数组的基本概念与编程语言无关。
因为我平常使用 python比较多,所以 就用numpy作为解释什么是图像。
NumPy 是一个 Python 库。
NumPy 用于处理数组。
NumPy 是“Numerical Python”的缩写。
NumPy 用于处理数组。NumPy 中的数组对象称为 ndarray
。
0 维数组
0 维数组或标量是数组中的元素。数组中的每个值都是 0 维数组。
这里我们可以把 0 维数组理解为图像中的像素点。
例子
创建一个值为 10 的 0 维数组
import numpy as np
arr = np.array(10)
print(arr)
一维数组
以 0 维数组作为元素的数组称为 1 维数组。
这里我们可以把1 维数组理解为图像中的某一行或者某一列。
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(arr)
二维数组
以一维数组作为元素的数组称为二维数组。
二维数组可以看为是单个通道(波段)的图像。简称为灰度图 。
创建一个包含两个数组的二维数组,其值分别为 1,2,3 和 4,5,6:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr)
三维数组
以二维数组(矩阵)作为元素的数组称为三维数组。
三维数组就是指图像。假设三维 数组的大小是(x,y,z)
x,y是图像的行列大小,z是图像的通道大小 。
如果z=3,则表示 ,这是 一个3波段的图像 ,再假设这 三个 波段 分别是红绿蓝,则说明 这是 一个 真彩色图像。若这三波段是不全是红绿蓝或 都不是红绿蓝波段 ,说明这是一个假彩色图像。
哦 ,真彩色图像是什么,是指你的手机拍的照片都是真彩色图像
如果z=4,就是指4波段的多光谱影像,国产的GF光学系列都是4波段的影像。
如果 z>n,n是代表一个比较大的数 ,则 说明该三维数组是高光谱影像。
创建一个包含两个二维数组的三维数组,两个二维数组均包含两个数组,其值分别为 1,2,3 和 4,5,6:
import numpy as np
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]])
print(arr)
四维数组
以三维数组(矩阵)作为元素的数组称为四维数组。
从图像的角度 ,可以理解四维数组指时间序列图像。假设四维数组的大小是(x,y,z,t)
遥感论文中 看到的长时间序列的本质就是这个概念。
- x 和 y:这两个维度对应于图像的宽度和高度,即空间维度。在遥感图像中,这通常指的是地表的某一区域的水平和垂直坐标。
- z:这个维度通常用来表示不同波段的信息。遥感技术中,卫星或飞机上的传感器可以捕捉多个波段的数据,比如可见光、近红外、短波红外等,这些不同的波段组合起来可以提供关于地表特征的丰富信息。
- t:最后一个维度表示时间,用于存储同一地点在不同时间点上的图像数据。这对于监测土地利用变化、植被生长周期、城市扩张等长期过程非常有用。
TIF文件是不能保存 4维数组的 ,一般使用 NC文件保存四维数组。
题外话 ,视频本质上可以被视为一种四维数组。
- 宽度 (x):视频帧的宽度,即每行像素的数量。
- 高度 (y):视频帧的高度,即每一列像素的数量。
- 颜色通道 (c):对于彩色视频,每一帧通常包含多个颜色通道,如红、绿、蓝 (RGB) 或其他颜色模型(如 YUV)。对于灰度视频,这个维度只有一个值。
- 时间 (t):视频的时间轴,表示视频中的帧数或时间点。
高维数组
数组可以有任意数量的维度。
当然会有五维、六维、N维数组,这个取决于你的需求。
我平常遇到得少,用得也少,所以不多叙述。