图像学基础 | 学习笔记

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 快速学习图像学基础

开发者学堂课程【计算机视觉入门及案例实战图像学基础学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/744/detail/13171


图像学基础

内容简介:

一、图像学

二、计算机中彩色图片的一个的像素点是怎么表示的?

三、计算机中彩色图片怎样表示的?

四、计算机中的灰色图片怎样表示的,为什么要使用灰色图片?

五、习题

一、图像学

1.图像学就是研究怎么样用数字去表示看到的一切的学科.

2.图像学学习的三个方面

①彩色图片怎样通过数字表示的?

②什么是灰度图像?灰度图像有何作用?

③opencv 库安装与简单使用

二、计算机中彩色图片的一个的像素点是怎么表示的?

使用3个(0-255)之间数字表示在RGB(红,绿,蓝)三个不同通道颜色的强度,来呈现不同的颜色。

具体解析:

一张彩色的图片在计算机中,由许多像素点组成,每个像素点都有一个特定的颜色,如何表示这个特定的颜色,先给大家介绍一个概念 RGB

从一张图片谈起:

image.png

左边是一张企鹅的高清图,右边是它局部区域放大的效果。画出局部区域可以很清晰的看到,当把局部区域放大之后,它变得模糊了,但如果把局部区域缩小,它还是非常清晰的。再看到局部区域,我们可以发现它其实是有很多的点点去组成的,这些点的名字叫像素点。点其实是一个一个的小方块,并且每个小方块属于一个特别的颜色,并且一个小方块它是不可能属于两个不同的颜色的。如果这张图它的宽度是100,长度是100。可以算出这张图由1万个像素组成,可以想象,假如像素特别多,就能够去描述一张非常高清的图片。至此可以通过这样一张图,得出一个结论。计算机中,无论是高清的图片,还是不那么清晰的图片,都是由一个一个的像素点去组成的,每个像素点它只能呈现一个特定的颜色,是图像表示的最小单元,单位面积内的像素点越多,它所能表示的图片也会越清晰

1.三原色光模式(RGB)

三原色光模式(RGB),又称RGB颜色模型或红绿蓝颜色模型,是一种加色模型,将红(Red)、绿(Green)、蓝(Blue)三原色的色光以不同的比例相加,以合成产生各种色彩光相加色混合的表现。原色光投射到屏幕上,在相互重叠的地方显示出新的颜色:红色、绿色和蓝色以适当的强度组合可以产生白色。

2.选择红绿蓝的生理原因(了解即可)

三原色的原理不是出于物理原因,而是由于生理原因造成的。人的眼睛内有几种辨别颜色的锥形感光细胞,到的刺激略大于辨别绿色的细胞,人的感觉是黄色:如果辨别黄绿色的细胞受到的刺激大大高于辨别绿色的细胞,人的感觉是红色。虽然三种细胞并不是分别对红色、绿色和蓝色最敏感,但这种光可以分别对三种追星细胞产生刺激。

注意:RGB中光的强度,我们从0到1一次划分强度。并且每一列RGB我们一般称为通道

3.计算机中的显示模式:24比特模式

24比特模式是指每像素24位比特编码的RGB值:使用三个8位无符号整数(0到255)表示红色、绿色和蓝色的强度。这是当前主流的标准表示方法,它可以产生一千六百万种颜色组合,对人类的眼睛来说,其中有许多颜色已经是无法确切的分辨。

image.png

下面举例说明:

计算机中的显示模式有很多种,用的最多的是24比特模式,就是用24位2进制的数据来表示RGB。以下面的第二个例子进行说明,一个24位二进制数据,数字全部都是1,由于要用24位二进制的数字来表示RGB三个通道上不同的强弱程度,因此分到每条通道上面,实际上就是8位,代表了在RGB三个通道上面的强弱程度。做一个近似的转换,把二进制转化为10进制那8位二进制的1是2的8次方-1=256-1=255,他们对应的颜色就是白色。下面是相关的例子:

image.png

三、计算机中彩色图片怎样表示的?

用一个三位的数组或者说列表就可以简单的表示出计算机中的彩色图片

解析:

Opencv 中的颜色表示是倒过来的RGB,也就是 BGR:蓝色、绿色、红色

如何去表示一张猫图?

image.png

一张猫图是由很多的像素点组成的,每个像素点是使用一个 RGB 三个通道的数值来表示的。这些像素点是怎样排列组合去形成这张猫图的,接下来逐步说明。

首先,从像素点开始讲解,一个红色的像素点,为了演示方便将它放大,用RGB表示为,在红色R通道上是255,绿色G通道数值是0,在蓝色B通道上数值也是0。(255,0,0)数据结构称为元组,而[255,0,0]数据结构被称为列组。两种结构表示的都是有顺序的数据的集合,两种表达形式在效果上是一致的。在之后的案例中,会大量的使用到一个第3方的计算机视觉库openCV。opencv的世界里面,三通道的顺序并不是RGB,而是倒过来写的RGB。一个红色的像素点则表示为[0,0,255],之后为避免混淆,都将使用opencv中的表达的数据结构,就是BGR。

其次由点及线,一条像素线如何表示呢?短线中间画一根虚线。第1个点,写成openCV中的表达方式,它的顺序实际上是倒过来写的RGB,在红色这个通道上是255,在绿色这个通道上是0,在蓝色这个通道上也是0。表示为[0,0,255]。另个点也是一样,表示为[0,0,255]。之前已经了解到列表是能够表征顺序的,其实列表还能够嵌套,所以接下来只要在最外层套上这样一个中括号,然后注意记得用逗号隔开就可以表示为两个像素点组成的像素线了。总结:一个长为两个像素点的红线在opencv的世界里面,是用列表去嵌套列表组成的最外层的这样一个列表,它就代表着线而里面的这个一个一个的小的列表,它代表的就是一个一个的点,所以实际上是用点连在一起去组成了。最后由线及面,一条红色短线,一条蓝色短线,一条绿色短线组成一个像素面。前面已经学会了如何使用数字和符号来表示一根线,这里还是使用 opencv,先把这条红线发出来,为[[0,0,255],[0,0,255]],

接下来是绿色的线[[0,255,0],[0,255,0]]和蓝色的线[[255,0,0],[255,0,0]]。目的就是要把三条线组合在一起变成一个面,可以发现这三条线是有一个顺序的,记得之前是怎么样通过点组成线的吗?直接在外层套一个中括号,把它放在一个列表里面就可以了。相应的只要把这三条线也套一个中括号,把它放到一个列表里面就可以了。注意用逗号隔开。表示为:

[

[[0,0,255],[0,0,255]]

[[0,255,0],[0,255,0]]

[[255,0,0],[255,0,0]]

]

这就能够表示一张3×2的图片,其中最底层的中括号,它代表的是像素点,这个表示着像素点,实际上是RGB三通道,中间层的中括号它代表的是线,线里面有两个像素点,它代表的是图片,宽度是按最外层的中括号它代表的面中括号里面元素的个数上去代表着图片。案例:用两个像素点去表示一条线,例如两个红色的像素点表示一条线

1.案例:使用opencv写入效果如下的图片

image.png

(1)代码

安装第三方包 opencv

Pipinsta11opencv-python

解析:输入opencv安装包后,可以直接回车进行安装。但如果需要下载和安装的速度更快,也可以通过-i的选项去指定一个国内的镜像元,因为这个命令它默认使用的是国外的网址,通过杠I的选项,指定使用一个国内的镜像元,就可以更快的加载了。老师使用了豆瓣的镜像元:https://pypi.douban.com/simple

(2)敲代码 code

Importnumpyasnp

Importcv2

Image_array=np.array([

[[0,0,255],[0,0,255]],

[[0,255,0],[0,255,0]],

[[255,0,0],[255,0,0]]

])cv2.imwrite(‘images/demo3×2.png’,image_array)

解析:导入已经安装好的 opencv的库,注意导入的时候不是写open

CV而是importerCV处。接下来正式编写代码实现案例,我们分为

三个步骤,第1个实力化列表,实例化图片,代表图片的列表数据。

把表数据写入到一个文件中,但注意opencv的库不能够直接写入列

表,先把数据转换成line中的一个数组。第2步是把列表数据转换

为line中的数组,转换好的数据写入到特定的文件中。把列表转换

成numpy中的数组对象,然后把列表对象放进去。方法呈现两个参数,

第1个是文件名,第2个是数组对象,接下来要定义文件名,新建一

个文件夹,把生成的文件放到文件夹下。再来编写一个文件名,文件

名就是images。看到图片效果,和案例效果相同。

2.案例:使用opencv读取刚刚写入的图片,查看像素内容,查看形

状或者说维度信息

(1)代码:

Importcv2

Image_file_name=’images/demo3×2.png’

Src=cv2.imread(image_file_name)

Print(src)

Print(src.shape)#(3,2,3)

(2)解析:

先导入已经安装好的 openCV 的库,使用 openCV 读取刚刚写入的图片,查看像素内容,查看形状或者是维度信息。第1步读取图片。OpenCV 库读取信息、查看像素内、。查看维度信息。然后需要使用一个变量来承接读取的报道文件src。接下来就来看这样一个图片的像素内容,直接通过 printsrc 就能看到它的像素内容,然后查看维度信息,维度信息是藏在 src 的 shaper 属性中 createsrc 点 shaper


四、计算机中的灰色图片怎样表示的,为什么要使用灰色图片?

回答:计算机中的灰度图像是二维数组表示的,灰度图像起到了降维的作用,方便计算机快速处理

思考1:下面这张图片还是彩色图片吗?还需要用RGB三个通道来表示?

不是彩色的RGB图片,而是灰度图像,感觉不需要用RGB三个通道来表示,使用三个通道来表示有点浪费。

image.png

思考2:上面的图片你还能认出来是猫吗?感觉失真大不大?用手机的照片编辑软件就能把左边这样一张彩色的图转化为右边,这样一张灰色的图,显然还能认出右边这样一张图是猫图,感觉失真并不大,但是还是丢失了一些关键的信息,比如说它的颜色,实际上右边这张图它是一张灰度图。

总结:能认出来是猫,有些失真(不知道是黄颜色的猫),但感觉失真不大(能认出来是猫,知道他在舔舌头)

1.案例:彩色图像(RGB)转灰度(GRAY)图像

要求:把彩色图像转换为灰度图像,并看看灰度图像在计算机中又是怎样表示的。

选中一张彩色的猫图,在这里将使用一款新的ID工具spider,大家可以使用原来的工具,使用spider的目的是为了给大家更好的演示程序。新建一个模块的文件取名denmo.03cat.True,great.打开这样一个文件,接下来来编写代码。

代码:

(1)读取彩色图片

Rgb_cat=cv2.imread(“images/cat.png”)

(2)把彩色图片转换为灰度图片

Gray_cat=cv2.cvtColor(rgb_cat,cv2.COLOR_BGR2GRAY)

(3)查看灰度图像的像素内容

Print(gray_cat)

(4)查看灰度图片的维度信息

Print(gray_cat.sgape)

(5)保存灰度图像

Cv2.imwrite(“images/cat_gray.png”,gray_cat)

解析:

导入之前已经安装好的openCV的包。

首先读取彩色猫图。点击开始目录下面的catch点PNG,把彩色图片转换为灰度图片,一行代码就可以把彩色猫图转换为灰度图片,第1个参数是原图,第2个参数是把原图像转换为什么类型的图片。把变量替换一下,选择转为灰度图片。使用变量承接转换之后的结果,然后代码查看灰度图像的像素内容,直接通过print打印出来。查看一下它的维度信息。然后通过变量管理器,看到相应的信息。接下来保存这张灰度图像,需要两个参数,第1个是要把它写到哪个文件中,

第2个是要把哪个图片写到这个文件名对应的文件中。先写文件名,文件名是images上面的catgreen。把这张灰度图片写到这个文件内容中。代码输入完成。

思考3:灰度图片有什么用?

起到降维的作用,把一个像素点的表示数据从3个变成了1个,只丢失了颜色信息,可以想象这样计算机处理起来会更简单更快。


五、习题

1.多选题:以下A、B、C、D四个说法中正确的有?()

A:在RGB中我们分别用3个0到255之间的数字表示在红、绿、蓝三个颜色上的强度,由不同强度的这三种颜色,组成丰富的色彩。

B:RGB能够表述的色彩是无限多的,世间任何颜色都能表示出来。

C:灰度图像中一个像素点由0到255之间的数值表示颜色的深浅,灰度图像起到了降维的作用,计算机及程序处理灰度图像会比处理 RGB 图像要快。

D:图片的形状shape是(3,2,3)

正确答案:ACD

解析:B错误,RGB只能排列组合出16000种颜色,并非无限多

2.多选题:以下六个说法中正确的有?()

A:安装opencv库的命令pipInsta11opencv

B:安装opencv库的命令是pipinsta11opencv-python

C:导入opencv库的代码importcv2

D:导入opencv库的代码是importopencv

E:读取图片可以使用image_array=cv2.imread(图片文件名)

F:查看图片的维度信息可以使用image_array.shape

正确答案:BCEF

相关文章
|
11月前
|
数据挖掘 计算机视觉 Python
Python数据分析中图像处理的实用技术点:图像加载与保存、图像转换与增强、特征提取与描述
Python数据分析中图像处理的实用技术点:图像加载与保存、图像转换与增强、特征提取与描述
91 1
Python数据分析中图像处理的实用技术点:图像加载与保存、图像转换与增强、特征提取与描述
|
6月前
|
机器学习/深度学习 算法 计算机视觉
利用深度学习技术实现自动图像风格转换
本文将介绍如何利用深度学习技术中的神经网络结构,例如卷积神经网络和生成对抗网络,来实现自动图像风格转换。通过对图像特征的提取和风格迁移算法的应用,我们可以实现将一幅图像的风格转换为另一幅图像的艺术效果,为图像处理领域带来全新的可能性。
|
机器学习/深度学习 算法 搜索推荐
使用深度学习进行图像风格转换
在计算机视觉领域,图像风格转换是一项引人注目的技术。它允许将图像的内容与另一个图像的风格相结合,从而创造出独特且令人惊艳的图像效果。近年来,深度学习已经成为实现图像风格转换的主要方法之一。
199 0
|
6月前
|
机器学习/深度学习 算法 搜索推荐
基于深度学习的图像风格转换技术
【5月更文挑战第31天】 在数字图像处理领域,风格转换技术已从传统算法演变至以深度学习为核心的智能化方法。本文深入探讨了基于卷积神经网络(CNN)的图像风格转换技术,分析了其核心原理、关键技术及应用前景。通过引入感知损失与风格损失的概念,实现了图像内容与风格的解耦和重组,使得源图像能够获得目标风格特征。此外,文章还讨论了目前技术面临的主要挑战,包括风格迁移的精度、效率以及多样化问题,并提出了潜在的改进方向。
|
6月前
|
机器学习/深度学习 编解码 并行计算
深度学习的图像超分技术综述-输入单张图像(SISR)和输入多张图像的基于参考的图像(RefSR)
深度学习的图像超分技术综述-输入单张图像(SISR)和输入多张图像的基于参考的图像(RefSR)
239 0
|
6月前
|
机器学习/深度学习 计算机视觉 Python
【Python计算机视觉】项目实战之图像增强imguag对关键点变换、标注框变化(附源码 超详细必看)
【Python计算机视觉】项目实战之图像增强imguag对关键点变换、标注框变化(附源码 超详细必看)
198 0
|
算法 数据可视化
【视觉基础篇】16 # 如何使用噪声生成复杂的纹理?
【视觉基础篇】16 # 如何使用噪声生成复杂的纹理?
185 0
【视觉基础篇】16 # 如何使用噪声生成复杂的纹理?
|
机器学习/深度学习 数据采集 编解码
史上最全 | 基于深度学习的3D分割综述(RGB-D/点云/体素/多目)(下)
3D目标分割是计算机视觉中的一个基本且具有挑战性的问题,在自动驾驶、机器人、增强现实和医学图像分析等领域有着广泛的应用。它受到了计算机视觉、图形和机器学习社区的极大关注。传统上,3D分割是用人工设计的特征和工程方法进行的,这些方法精度较差,也无法推广到大规模数据上。在2D计算机视觉巨大成功的推动下,深度学习技术最近也成为3D分割任务的首选。近年来已涌现出大量相关工作,并且已经在不同的基准数据集上进行了评估。本文全面调研了基于深度学习的3D分割的最新进展,涵盖了150多篇论文。论文总结了最常用的范式,讨论了它们的优缺点,并分析了这些分割方法的对比结果。并在此基础上,提出了未来的研究方向。
史上最全 | 基于深度学习的3D分割综述(RGB-D/点云/体素/多目)(下)
|
机器学习/深度学习 编解码 人工智能
图像基础二(下)
图像基础二(下)
184 0
图像基础二(下)
|
自然语言处理 计算机视觉 C++
图像基础二(上)
图像基础二(上)
158 0
图像基础二(上)