全部文章

图像学

  • 彩色图片怎样通过数字表示的?
  • 什么是灰度图像?灰度图像有何作用?

图像的起源

图像是什么

图像是人类视觉的基础,是自然景物的客观反映,是人类认识世界和人类本身的重要源泉。“图”是物体反射或透射光的分布,“像“是人的视觉系统所接受的图在人脑中所形版的印象或认识,照片、绘画、剪贴画、地图、书法作品、手写汉学、传真、卫星云图、影视画面、X光片、脑电图、心电图等都是图像。—姚敏. 数字图像处理:机械工业出版社,2014年。

模拟图像和数字图像

图像起源于1826年前后法国科学家Joseph Nicéphore Niépce发明的第一张可永久保存的照片,属于模拟图像。模拟图像又称连续图像,它通过某种物理量(如光、电等)的强弱变化来记录图像亮度信息,所以是连续变换的。模拟信号的特点是容易受干扰,如今已经基本全面被数字图像替代。

在第一次世界大战后,1921年美国科学家发明了Bartlane System,并从伦敦传到纽约传输了第一幅数字图像,其亮度用离散数值表示,将图片编码成5个灰度级,如下图所示,通过海底电缆进行传输。在发送端图片被编码并使用打孔带记录,通过系统传输后在接收方使用特殊的打印机恢复成图像。

1950年左右,计算机被发明,数字图像处理学科正式诞生。

模拟图像和数字图像的对比,我们可以看一下:

数字图像的表示

像素

每一个像素点只有一种颜色组成,任何一张图片的像素数=横向像素点数*竖向像素点数,图片在同等宽高的情况下,像素点越多,表示的颜色信息越多,也就越清晰。

彩色图像

三原色光模式(RGB color model)

三原色光模式RGB color model),又称RGB颜色模型红绿蓝颜色 模型,是一种加色模型,将红(Red)、绿(Green)、蓝(Blue)三原色的色光以不同的比例相加,以合成产生各种色彩光相加色混合的表现。原色光投射到屏幕上,在相互重叠的地方显示出新的颜色;红色、绿色和蓝色以适当的强度组合可以产生白色。例如下图,我们把三种颜色的手电筒照在墙壁上,就可以叠加混合出多种颜色:

选择红绿蓝的生理原因(了解)

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

计算机显示模式:24比特模式

黑色 - (0, 0, 0) - (00000000, 00000000, 00000000)

白色 - (255, 255, 255) - (11111111, 11111111, 11111111)

红色 - (255, 0, 0) - (11111111, 00000000, 00000000)

浅红 - (100, 0, 0) - (01100100, 00000000, 00000000)

黄色 – (255, 255, 0) - (11111111, 11111111, 00000000)

每像素24位比特编码的RGB值:

使用三个8位无符号整数(0255)表示红色、绿色和蓝色的强度。 这是当前主流的标准表示方法,它可以产生一千六百万种颜色组合,对人类的眼睛来说,其中有许多颜色已经是无法确切的分辨。

彩色图片的一个的像素点是怎么表示的?

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

注意:

在python的opencv包中,三个通道的颜色顺序为:[蓝色(Blue), 绿色(Green), 红色(Red)],即BGR

一个红色的像素点→ [0, 0, 255]

 

一个长为2个像素点的红线 → [[0, 0, 255], [0, 0, 255]]

计算机中的彩色图片是怎么表示的?

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

上图就是一个长宽像素为3x2的图片:

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

案例:使用opencv保存生成效果如下图片:

import numpy as np
import cv2
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/demo3x2.png', image_array)

使用opencv读取刚刚写入的图片,查看像素内容,查看形状或者说维度信息:

import cv2
image_file_name = 'images/demo3x2.png'
src = cv2.imread(image_file_name)
print(src)
print(src.shape) # (3, 2, 3)

灰度图像

计算机中的灰度图像是怎样表示的,为什么要使用灰度图像?

思考1

下面图片还是彩色的图片吗?还要不要用RGB三个通道来表示?

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

思考2 右边的图片你还能认出是猫吗?感觉失真大不大?

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

计算机采用0/1编码的系统,数字图像也是利用0/1来记录信息,我们平常接触的图像都是8位数图像,包含0~255灰度,其中0,代表最黑,1,表示最白。

人眼对灰度更敏感一些,在16位到32位之间。

案例3:彩色图像(RGB)转灰度(GRAY)图像把彩色图像转换为灰度图像,并看看灰度图像在计算机中又是怎样表示的。

import cv2
rgb_cat_image_path = 'images/cat.png'
rgb_cat = cv2.imread(rgb_cat_image_path)
gray_cat = cv2.cvtColor(rgb_cat, cv2.COLOR_BGR2GRAY)
print(gray_cat)
print(gray_cat.shape) # (563, 1000)
cv2.imwrite('images/gray_cat.png', gray_cat)

思考3 灰度图像有什么用?

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

总结

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

 

图像分类总结

二值图像

一幅二值图像的二维矩阵仅由0、1两个值构成,“0”代表黑色,“1”代白色。由于每一像素(矩阵中每一元素)取值仅有0、1两种可能,所以计算机中二值图像的数据类型通常为1个二进制位。二值图像通常用于文字、线条图的扫描识别(OCR)和掩膜图像的存储。

灰度图

每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;但是,灰度图像在黑色与白色之间还有许多级的颜色深度。灰度图像经常是在单个电磁波频谱如可见光内测量每个像素的亮度得到的,用于显示的灰度图像通常用每个采样像素8位的非线性尺度来保存,这样可以有256级灰度(如果用16位,则有65536级)。

彩色图

每个像素通常是由红(R)、绿(G)、蓝(B)三个分量来表示的,分量介于(0,255)。RGB图像与索引图像一样都可以用来表示彩色图像。与索引图像一样,它分别用红(R)、绿(G)、蓝(B)三原色的组合来表示每个像素的颜色。但与索引图像不同的是,RGB图像每一个像素的颜色值(由RGB三原色表示)直接存放在图像矩阵中,由于每一像素的颜色需由R、G、B三个分量来表示,M、N分别表示图像的行列数,三个M x N的二维矩阵分别表示各个像素的R、G、B三个颜色分量。RGB图像的数据类型一般为8位无符号整形,通常用于表示和存放真彩色图像。


总结

  1. 图像是什么

    图:物体反射或透射光的分布

    像:人的视觉系统所接受的图在人脑中所形版的印象或认识

  2. 模拟图像和数字图像

    模拟图像:连续存储的数据,

    数字图像:分级存储的数据

  3. 数字图像

    位数:图像的表示,常见的就是8位

    分类:二值图像,灰度图像和彩色图像

 

posted @ 2025-07-07 16:07  指尖下的世界  阅读(15)  评论(0)    收藏  举报