二值图像、灰度图像和彩色图像的理解


前言

之前自学过图像处理,但是有很久没有做过这个方面的项目了,所以就来温故一下,把学过的和之前的一些理解写出来,方便自己以后复盘。


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图像RGBHSV是两种不同的颜色模型,用于描述和表示颜色。它们各自有不同的优点和应用场景。

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%)表示完全明亮的颜色。
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扫描图像,用于医疗诊断。
  • 计算机视觉: 用于对象识别、图像分类等任务。

总结

  • 二值图像:只有两个灰度级别(通常是黑色和白色),用于二元分割和简单的图像分析任务。

  • 黑白图像:包含多个灰度级别(从黑色到白色的渐变),用于表示更丰富的图像信息和细节。

  • 彩色图像通过多个颜色通道来表示图像中的色彩和细节,相比灰度图和二值图像像提供了更多的信息和视觉体验。

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hola173841439

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值