【个人理解】关于矩阵【层,行,列】和图像【高,宽,通道数】的理解

这是我之前一直混淆没弄明白的一个问题
就是诶图像的通道数和矩阵的层数为什么不对应啊或者一张图像表示成矩阵的时候,为什么shape不是我们理解的[层,行,列]的形式?
下午看了不少大佬写的文章
总算是搞清楚了(应该吧哈哈哈哈)

我们先理解一下三维矩阵。

吐司大家应该都吃过吧?
通常定义的三维矩阵,一层就是一片吐司,一个吐司就是一个二维矩阵,有n行m列,这里假设有c片吐司,那这个三维矩阵的shape就是[c, n, m]。
这下大家脑海里应该都有一点想象了吧?

然后就是真实的三维矩阵,写在代码里,在数据上,应该是怎么表示的?
具体例子:看例子点我
参考链接:https://blog.csdn.net/weixin_38267508/article/details/83539395

然后,有一点很重要的是,不同的工具,对于数据结构的定义可能是不一样的。Python中的numpy的数据结构就是这样的[h,w,c],如果你用caffe的话默认[n,c,w,h],这里n是batch_size,剩下就是通道,宽,高。
参考链接:https://www.zhihu.com/question/318026075

然后再来说说图像
我们获取到一张RGB图像以后,输出图像的size,一般都是[h, w, 3]。
RGB图像表示的是三通道图像,这个时候通道数,放在了最后。
我们都知道,一个像素点的值,一般都是一个一维数组[R, G, B]来表示的。
可能有些朋友会想:图像表示成矩阵以后,去看这个矩阵,这个矩阵明明是3列的,为什么说是3层?这个跟我们认知里的三维矩阵应该是[层数,行,列]不一样啊?
有这个疑问的朋友,这时候已经把这两种不同的表示方式混淆起来了。
记住一点,[ 层,行,列 ]和[ 高,宽,通道数 ]的定义都存在,尽量只从一个角度去看这个三维矩阵。
你处理的是图像,那就只需要记住[ 高,宽,通道数 ];你定义了一个[c, n, m]的矩阵,那就只需要记住[ 层,行,列 ]。
具体应该是什么顺序,要看你使用的是什么库,人家是怎么定义的这个数据结构了。

这篇主要是写给我自己看的。提醒自己不要混淆了。
如果有大佬看了觉得我理解的我写的有问题,请一定要告诉我!我好及时改正!

参考链接:三维矩阵Shape的理解
参考链接:矩阵进行concat()的理解
参考链接:numpy中np.shape的理解
参考链接:Python中三维变二维矩阵(用reshape)后各个维度的关系
参考链接:为什么python读取一张图片形成的矩阵维度是(高,宽,通道数),而不是(二维数组个数,行,列)?

    原文作者:一苇以航_aw
    原文地址: https://blog.csdn.net/Mr__George/article/details/105347436
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞