要学计算机视觉,先了解图像和像素

大家好啊,我是董董灿。

最近发现不少小伙伴开始转行入门计算机视觉领域了。

最开始入门,除了学习经典的算法之外,还有一个点往往会被忽略,那就是了解我们研究的对象。

计算机视觉领域,无论图像识别、图像分类还是图像分割,研究的对象都是图像。图像的获取,要么通过摄像头拍摄,要么通过雷达等感知成像,不管怎么样,送给一个神经网络处理的,都是一个图像。

那了解图像,第一步就是了解像素,以及图像在计算机中是如何由像素堆积而成的。

1、像素

神经网络计算,算的就是像素之间的关系,以及这些关系背后可能隐藏的图片信息。

相机摄像头像素2000万,拍出来的照片肯定比像素1000万的要清晰。

我们更容易看到图片中的物体是什么。

这是为什么?因为像素越多,像素之间的关系(色彩,轮廓)越丰富,我们所能看到的信息就越多,自然而然获取到的信息就多。

(一张1080p的图片,我们可以更容易辨别出图像中的物体是山还是水。这是因为更多的像素会给眼睛更丰富的图片细节)

但是,你有没有发现。

当我们去看一张图片时,我们绝对不是盯着某一个像素或某几个像素看,而是看了整个图像的大部分区域,或者说,大部分像素!

因为只有看到了大部分的图片,才能知道图中是座山。正所谓,聚沙成山!绝不是少了一粒沙,山就不是山,多了一粒沙,就变成了山。

上图哆啦A梦,虽然不是很清晰,像素点数也很少,但一眼望去,依然可以分清是哆啦A梦,甚至,用手捂住一半的图像,依然可以。

2、像素局部性

这是因为人们对于图像信息的识别,是建立在对像素局部性分析的基础上的。

所谓局部性,通俗点说,就是眼睛或大脑会将相邻的像素或大片的像素连接起来分析,从而组合成嘴巴,然后是耳朵,最后是哆啦A梦。

神经网络识别图片大致就是这样的原理:它模拟的,就是人们看到图片之后的信息处理过程。

当我们盯着一个图片看时,我们首先会获取到图片的细节特征,比如哆啦A梦红色的大嘴巴。

但是如果仅仅盯着大嘴巴,又反而让人有一种"只缘身在此山中"的感觉,因此还需要看一下图像的轮廓。

于是,眼睛看图片大致有以下两个过程:

  • 瞳孔放大,盯着某一处细节(如大嘴巴)看

  • 瞳孔缩小,模糊的看一张图片的大致轮廓

两个过程获取的信息叠加,看清楚了,是哆啦A梦!

那么神经网络是否可以模拟这种瞳孔放大、缩小的方式呢?

很幸运,可以!

**卷积核**的设计,就可以很直观的模拟这种获取图片信息的方法。

人们通过调整卷积核的大小,来达到瞳孔张开、缩小的目的。

并且大量的实验和论文表明,卷积这一针对图像局部性识别的算法,可以非常有效的模拟人眼识别物体的过程。

3、图像数据

你有没有想过,为什么一张图片会是彩色的。

你可能会这么回答:因为图片是由RGB三种颜色来表示的,每个像素实际是不同的R/G/B分量的叠加,混合起来,就表示成了不同的颜色。

(三张分别表示R/G/B分量的图片,合成一张彩色图片)

没错,我们人眼可以很直观的看到红色和蓝色,可以察觉到一张图片的色彩和轮廓。

那么,如果让计算机来处理图片,他又是如何知道色彩和轮廓的呢?

其实对于计算机来说,一张图片只是一堆数据,计算机是无法知道这堆数据代表的是什么。

这就需要人为的给这堆数据一种表示方法,让计算机知道,哦,这1/3的数据是红色分量,这1/3的是蓝色分量,这些数据(像素)组合起来,可能代表的是个"帽子"。

数据在计算机的存储中,最常见的存储方式是连续存储的。

比如C语言,定义一个数组,那么数组在内存中的位置是连续的。

ini 复制代码
int data[10] = {0,1,2,3,4,5,6,7,8,9};

内存怎么理解,它就是一排连着的门牌号的公寓宿舍。

门牌号为101里面住着的,是data的第一个数据0。门牌号102里面住着的,是data的第二个数据1,...,以此类推。

只不过,在计算机存储器中,没有门牌号,有的都是地址。

这个时候,计算机根本就不关心数据是啥,计算机用到的时候,就把数据从内存对应的地址中取出来用。

如何取数据

这就需要人们为数据存储设计一种格式,告诉计算机,这堆数据大概是什么样的。只有这样,通过这种人为约定的方式,计算机才能正确的取到R分量或者B分量。

对于一张图片来说,最常见的两个参数是长和宽,一般用H(height) 和 W(width) 来表示,那么RGB三个分量,看作是3个通道(channel),一般用 C 来表示。

如此一来,一张长宽分别是224像素*224像素的RGB图像,就可以用 HWC = 224, 224, 3来表示。两张类似的图片就用 NHWC = 2, 224, 224, 3表示,其中N代表图片张数。

(一张图片的抽象数据表示)

友好的数据表示方法,可以减少大量的计算复杂度。

虽然这样表示不太利于人们的直观理解,但是计算机处理这种数据是十分方便的。

在目前主流的深度学习框架中,对于图片的数据格式,基本都支持了NHWC或NCHW这种数据摆放格式。

说到底,都是为了更高效地进行图片数据的处理和运算。

相关推荐
团象科技14 分钟前
走访近百支出海技术团队后的海外云计算资源选型实操观察
大数据·人工智能·算法
勤自省30 分钟前
吴恩达机器学习课程实验:线性回归模型入门(课后实验)
人工智能·算法·机器学习·回归·线性回归
ChillCoding35 分钟前
更新中:C++ STL库,查找排序(基础算法),数据结构,数学算法,竞赛相关基础
数据结构·c++·算法
智者知已应修善业40 分钟前
【51单片机使用IO组赋值方法实现无源蜂鸣器响时LED12亮不响时34亮】2024-3-7
c++·经验分享·笔记·算法·51单片机
珊瑚里的鱼1 小时前
【动态规划】按摩师
算法·动态规划
Fms_Sa1 小时前
贪心算法-背包问题
算法·贪心算法·c#
大雨淅淅1 小时前
【机器人】ROS2 机械臂控制(MoveIt2)从入门到实战
人工智能·python·神经网络·学习·算法·机器学习·机器人
智者知已应修善业1 小时前
【51单片机0.1秒计时到21.0时点亮LED】2024-1-5
c++·经验分享·笔记·算法·51单片机
apcipot_rain2 小时前
计科八股20260606——二叉树、PCA、图深度学习、进程上下文、C语言预编译、文件读写、单精度浮点数
c语言·数据结构·算法·pca·图神经网络
scx_link2 小时前
逻辑回归的总结
算法·机器学习·逻辑回归