【深度学习】RGB图像的内存排列方式及HWC和CHW格式解析

摘要

RGB图像是计算机视觉和图像处理领域中最为常见的图像格式之一,而在进行图像处理和深度学习计算时,通常需要对图像的尺寸和通道数进行规范化。本文将对RGB图像的内存排列方式、HWC和CHW格式进行详细解析,并探讨它们之间的关系。

一、RGB图像的内存排列方式

在计算机内存中,RGB图像的像素信息通常是按照BGR的顺序排列的,而不是RGB的顺序。这是因为在Windows平台上,像素数据是按照BGR的顺序存储在内存中的,而不是RGB的顺序。因此,当OpenCV读取一张RGB图像时,它会将像素数据按照BGR的顺序排列在内存中,而不是RGB的顺序。
例如,对于一张3×3的RGB图像,其像素信息在内存中的排列方式如下所示:
B G R B G R B G R
可知,每一个像素点都由三个值组成,分别表示该像素点在蓝色、绿色和红色通道中的颜色值,而整张图像的像素数据则按照BGR的顺序排列。
一般pytorch中的tensor,即网络的输入,要转换为plane的格式,即rrrgggbbb。

二、HWC格式和CHW格式

在机器学习和计算机视觉领域中,常用的图像尺寸表示格式有HWC和CHW两种格式。其中,H、W、C分别表示图像的高度、宽度和通道数,或者通道数、高度和宽度。

HWC格式

HWC格式是指按照高度、宽度和通道数的顺序排列图像尺寸的格式。例如,一张形状为256×256×3的RGB图像,在HWC格式中表示为[256, 256, 3]。在一些图像处理库或者底层框架中,例如OpenCV和TensorFlow,通常使用HWC格式表示图像尺寸。

在OpenCV中,读取的图片默认是HWC格式,即按照高度、宽度和通道数的顺序排列图像尺寸的格式。例如,一张形状为256×256×3的RGB图像,在OpenCV中读取后的格式为[256, 256, 3],其中最后一个维度表示图像的通道数。在OpenCV中,可以通过cv2.imread()函数读取图片,该函数的返回值是一个NumPy数组,表示读取的图像像素值。需要注意的是,OpenCV读取的图像像素值是按照BGR顺序排列的,而不是RGB顺序。因此,如果需要将OpenCV读取的图像转换为RGB顺序,可以使用cv2.cvtColor()函数进行转换。

CHW格式

CHW格式是指按照通道数、高度和宽度的顺序排列图像尺寸的格式。例如,一张形状为3×256×256的RGB图像,在CHW格式中表示为[3, 256, 256]。在计算机视觉和深度学习中,通常使用CHW格式表示图像尺寸。
在PyTorch中,模型接收的RGB图像通常采用CHW格式,即按照通道数、高度和宽度的顺序排列像素信息的方式。在CHW格式中,每个像素点的RGB值依次排列在内存中,通道数是第一维,高度是第二维,宽度是第三维。因此,对于一个形状为[C, H, W]的RGB图像,C表示通道数,通常为3,H表示高度,W表示宽度。对于每个像素点,其RGB值依次存储在内存中相邻的位置上。具体来说,假设某个像素点的坐标为(i, j),其在内存中的存储位置可以表示为:

offset = i * W * C + j * C

其中,i表示该像素点在第二维中的位置,j表示该像素点在第三维中的位置,C表示通道数,W表示宽度。这个公式可以计算出该像素点在内存中的偏移量,从而可以访问该像素点的RGB值。需要注意的是,在PyTorch中,RGB图像的像素值通常采用浮点数的形式表示,并且像素值的范围通常是[0, 1]或[-1, 1]。

三、HWC和CHW格式的关系

HWC格式和CHW格式虽然表示方式不同,但它们可以互相转换。对于一张形状为[H, W, C]的图像,我们可以使用transpose函数将其转换为形状为[C, H, W]的图像,即CHW格式。转换方法如下:

import numpy as np
# 创建一个形状为[256, 256, 3]的随机图像
img = np.random.rand(256, 256, 3)
# 将HWC格式的图像转换为CHW格式
img_chw = np.transpose(img, (2, 0, 1))

另外,对于一些深度学习框架,如PyTorch和Caffe2等,通常要求输入的图像张量格式为CHW格式。因此,在使用这些框架进行图像处理时,需要将图像张量从HWC格式转换为CHW格式。

总结

本文对RGB图像的内存排列方式、HWC和CHW格式进行了详细解析,并探讨了它们之间的关系。在进行图像处理和深度学习计算时,需要对图像的尺寸和通道数进行规范化,以便于不同框架和库之间进行数据格式转换和模型输入。

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颢师傅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值