文章目录
前言
之前自学过图像处理,但是有很久没有做过这个方面的项目了,所以就来温故一下,把学过的和之前的一些理解写出来,方便自己以后复盘。
1、什么是数字图像?
图像就是一张图片,图片可以是黑白图片(也叫灰度图片)、彩色图片以及二值图片(这个一般人可能不了解)这三种类型。图像和图片是一个意思。
2、图像的表示
在介绍这三种类型图像之前,我们先介绍图像的表示。其实我们可以把一张图像可以堪称一个二维矩阵,如下:
[
1
2
3
4
5
6
7
8
9
]
(1)
\begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix} \tag{1}
147258369
(1)
矩阵上的每一个数字可以认为是图像里面的每一个像素点。它的值一般是0到255。好了接下来我们介绍黑白图片、彩色图片以及灰度图片。
3、数字图像类型
3.1、二值图像
3.1.1、概念
二值图像可以看作只有一个二维矩阵组成的图像
,矩阵中每个值只能取是0或1,其中0表示黑色,1表示白色。
二值图像每个像素只有一个数值,每个像素值非黑即白,通常用0和1表示。0通常代表黑色,1通常代表白色。
用python生成的二值图像的代码如下:
import numpy as np
from PIL import Image
# 创建一个 5x5 的二值图像
# 格式为 (高度, 宽度)
binary_image = np.array([
[0, 0, 1, 1, 0],
[0, 1, 1, 0, 0],
[1, 1, 0, 0, 1],
[1, 0, 0, 1, 1],
[0, 1, 1, 0, 0]
], dtype=np.uint8)
# 将数组转换为图像
image = Image.fromarray(binary_image * 255, mode='L') # 乘以255将0和1转换为黑和白
# 显示图像
image.show()
3.1.2、应用领域
二值图像广泛应用于各种领域:
- 文档分析: 在OCR(光学字符识别)中,二值图像用于识别字符和文本区域。
- 图像识别: 用于图像中的物体检测和形状识别。
- 医学图像处理: 用于分割和分析医学图像中的特定区域。
- 工业检测: 用于检查产品缺陷或监测生产线上的物体。
3.2、黑白图像(灰度图像)
3.2.1、概念
黑白图像也叫灰度图像,黑白图像可以看作只有一个二维矩阵组成的图像
,矩阵中每个值取值范围是0到255,其中0表示黑色,255表示白色。介于两者之间的值表示不同的灰色。
也可以这样理解:黑白图像的每个像素只有一个值,每个像素值通常在0到255之间,其中0表示黑色,255表示白色,介于两者之间的值表示不同的灰色。
用python生成的灰度图像的代码如下:
import numpy as np
from PIL import Image
# 创建一个 5x5 的灰度图像
# 格式为 (高度, 宽度)
gray_image = np.array([
[0, 64, 128, 192, 255],
[0, 64, 128, 192, 255],
[0, 64, 128, 192, 255],
[0, 64, 128, 192, 255],
[0, 64, 128, 192, 255]
], dtype=np.uint8)
# 将数组转换为图像
image = Image.fromarray(gray_image, mode='L')
# 显示图像
image.show()
3.2.2、应用领域
黑白图像广泛应用于各种领域,包括:
- 医学成像: 如X光片和CT扫描图像。
- 计算机视觉: 用于图像分析和处理,如边缘检测和特征提取。
- 文档扫描: 用于存储和处理扫描文档和图纸。
3.3、彩色图像
与黑白图像和二值图像不同,彩色可以看作由三个二维矩阵组成的图像
,即三维矩阵,表示如下:
[
[
1
2
3
4
5
6
7
8
9
]
[
255
255
0
0
255
255
255
0
255
]
[
128
128
128
64
64
64
192
192
192
]
]
(2)
\begin{bmatrix} \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix} \\ \\ \begin{bmatrix} 255 & 255 & 0 \\ 0 & 255 & 255 \\ 255 & 0 & 255 \end{bmatrix} \\ \\ \begin{bmatrix} 128 & 128 & 128 \\ 64 & 64 & 64 \\ 192 & 192 & 192 \end{bmatrix} \end{bmatrix} \tag{2}
147258369
255025525525500255255
128641921286419212864192
(2)
彩色图像又可以分为RGB图像
和HSV图像
。RGB
和HSV
是两种不同的颜色模型,用于描述和表示颜色。它们各自有不同的优点和应用场景。
3.3.1、RGB图像
3.3.1.1、概念
RGB图像是基于光的三原色(红色、绿色和蓝色)来表示颜色的。可以理解红色是一个矩阵、绿色是一个矩阵、蓝色是一个矩阵,每个矩阵的元素值常用一个范围:0到255来表示。
其实红色、绿色和蓝色是图像的三个通道
,也就是说RGB图像的每个像素由红色、绿色和蓝色三个通道的值组成。每个通道的值通常在0到255之间,表示不同的颜色强度。
- 通道:
- R: 红色通道,每个通道的值通常在0到255之间,表示不同的颜色强度
- G: 绿色通道,每个通道的值通常在0到255之间,表示不同的颜色强度
- B: 蓝色通道,每个通道的值通常在0到255之间,表示不同的颜色强度
通过调节红色、绿色和蓝色的强度,可以生成各种颜色。
3.3.1.2、代码
以下是一个简单的彩色图像矩阵示例,其中每个像素由RGB值组成。
import numpy as np
from PIL import Image
# 创建一个 3x3 的 RGB 彩色图像矩阵
# 格式为 (高度, 宽度, 3),其中3表示RGB三个通道
rgb_image_matrix = np.array([
[[255, 0, 0], [0, 255, 0], [0, 0, 255]], # 第一行:红色、绿色、蓝色
[[255, 255, 0], [0, 255, 255], [255, 0, 255]], # 第二行:黄色、青色、品红色
[[128, 128, 128], [64, 64, 64], [192, 192, 192]] # 第三行:灰色不同深浅
], dtype=np.uint8)
# 将矩阵转换为图像
image = Image.fromarray(rgb_image_matrix, mode='RGB')
# 显示图像
image.show()
3.3.1.3、用途
适用于计算机图像处理、显示器显示等,因为计算机显示器基于RGB模型。
3.2.2、HSV图像
3.2.2.1、概念
HSV(色相、饱和度、明度)图像是一种颜色模型,提供了一种直观的方式来表示和调整颜色,通过色相、饱和度和明度这三个参数来描述颜色。这种模型是基于人类对颜色感知的方式设计的,因此在颜色调整和选择时非常直观。
这里我们可以理解色相(Hue, H)
是一个矩阵、饱和度(Saturation, S)
是一个矩阵、明度(Value, V)
是一个矩阵,HSV图像由这个三维矩阵组成(3个二维矩阵组成的三维矩阵)。
- HSV颜色模型
- 色相(Hue, H):
- 定义: 表示颜色的基本类型或波长,决定颜色的名称(如红色、绿色、蓝色等)。
- 范围: 通常用角度表示,从0°到360°。例如,0°表示红色,120°表示绿色,240°表示蓝色。
- 饱和度(Saturation, S):
- 定义: 表示颜色的纯度或强度。饱和度高表示颜色纯净,饱和度低表示颜色更接近灰色。
- 范围: 从0到1,或0%到100%。0表示无色(灰色),1(或100%)表示完全饱和的颜色。
- 明度(Value, V):
- 定义: 表示颜色的亮度或强度。明度高表示颜色更亮,明度低表示颜色更暗。
- 范围: 从0到1,或0%到100%。0表示黑色,1(或100%)表示完全明亮的颜色。
- 色相(Hue, H):
3.3.2.2、代码
以下是一个将HSV颜色模型转换为RGB颜色模型的Python代码示例:
import numpy as np
import matplotlib.pyplot as plt
import cv2
# 创建一个 3x3 的 HSV 彩色图像
hsv_image = np.array([
[[0, 1, 1], [60, 1, 1], [120, 1, 1]],
[[180, 1, 1], [240, 1, 1], [300, 1, 1]],
[[0, 0.5, 0.5], [60, 0.5, 0.5], [120, 0.5, 0.5]]
], dtype=np.float32)
# 将 HSV 图像转换为 BGR 图像用于显示
bgr_image = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2BGR)
# 显示图像
plt.imshow(bgr_image)
plt.axis('off')
plt.show()
3.3.2.3、用途
常用于图像处理、颜色选择器、图形设计软件等。由于其直观的调整方式,很多图形设计工具和图像编辑软件提供了HSV颜色空间的选择和调整功能。
3.3.3、应用领域
- 摄影: 用于捕捉和展示真实世界的颜色。
- 电视和电影: 用于显示动态视觉内容。
- 数字艺术: 创作和编辑图像和视觉艺术。
- 医学成像: 如彩色超声和CT扫描图像,用于医疗诊断。
- 计算机视觉: 用于对象识别、图像分类等任务。
总结
-
二值图像:只有两个灰度级别(通常是黑色和白色),用于二元分割和简单的图像分析任务。
-
黑白图像:包含多个灰度级别(从黑色到白色的渐变),用于表示更丰富的图像信息和细节。
-
彩色图像通过多个颜色通道来表示图像中的色彩和细节,相比灰度图和二值图像像提供了更多的信息和视觉体验。