cv中数组维数与图像通道的探索
在神经网络的学习与探索中发现,在将数据放入网络中训练的前一步——数据的预处理也至关重要,包括数据的加载、数据通道数的调整、数据集的扩充、数据的裁剪等预处理操作。当然,这都应属于计算机视觉图像处理的基本操作。
1. 数组的维数
维数可以理解为空间中的坐标轴,一维数组就是一个一维向量,二维数组就是一个X、Y轴,三维数组再加一条Z轴。
实践出真知:
arr1 = np.array([1, 2, 3, 4, 5, 6]) # 1维
arr2 = np.array([[1, 2, 3], [4, 5, 6]]) # 2维
arr3 = np.array([[[1, 2, 3], [4, 5, 6]], # 3维
[[7, 8, 9], [10, 11, 12]]])
现在容易理解一维与二维数组在计算机中的储存方式,但三维呢?
其实三维可以简单理解为现实中的三维立体图形,比如上面的2×2×3的数组,映射到现实中就是这样的存在:
可以利用[ :, :, : ]切片功能简单验证一下:
# 3个维度全部显示
A = arr3[:, :, :]
print(A)
[[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]]
_______________________
_______________________
#显示第一维的第一‘层’
A = arr3[:1, :, :]
print(A)
[[[1 2 3]
[4 5 6]]]
_______________________
_______________________
#显示第一维的第二‘层’
A = arr3[1:2, :, :]
print(A)
[[[ 7 8 9]
[10 11 12]]]
_______________________
_______________________
#显示第二维第一‘列’
A = arr3[:, :1, :]
print(A)
[[[1 2 3]]
[[7 8 9]]]
_______________________
_______________________
#显示第二维第二‘列’
A = arr3[:, 1:2, :]
print(A)
[[[ 4 5 6]]
[[10 11 12]]]
_______________________
_______________________
#显示第三维第一‘列’
A = arr3[:, :, :1]
print(A)
[[[ 1]
[ 4]]
[[ 7]
[10]]]
_______________________
_______________________
.
.
.
切片与坐标对应的三维分别为:
可以与上面的图片一一对应一下,丝毫不差。
我想将PC中虚拟的二进制对应到现实中来,会更有助于理解。
2. 图片的通道
常见的图片通道数一般为一通道跟三通道,一通道为灰度图,灰度范围为0-255,数值越小图片越亮;三通道图片即RGB图片,三个通道便说的是R、G、B三个通道,每个通道的取值范围也是0-255,RGB图片的像素值由三个0-255的数值表示。
三通道图片在计算机中储存时:每一个坐标对应三个值。
所以可以将三通道切分成单通道。