《数字图像处理 》 第 1 章-绪论

目录

前置准备:安装依赖库

引言

学习目标

[1.1 什么是数字图像处理](#1.1 什么是数字图像处理)

核心概念

[代码实现:模拟图像 vs 数字图像(效果对比)](#代码实现:模拟图像 vs 数字图像(效果对比))

效果说明

[1.2 数字图像处理的起源](#1.2 数字图像处理的起源)

发展历程

代码实现:模拟早期数字图像处理(灰度拉伸)

效果说明

[1.3 数字图像处理技术应用领域实例](#1.3 数字图像处理技术应用领域实例)

[1.3.1 伽马射线成像](#1.3.1 伽马射线成像)

代码实现:模拟伽马射线成像效果

[1.3.2 X 射线成像](#1.3.2 X 射线成像)

[代码实现:模拟 X 射线成像效果](#代码实现:模拟 X 射线成像效果)

[1.3.3 紫外波段成像](#1.3.3 紫外波段成像)

代码实现:模拟紫外波段成像效果

[1.3.4 可见光和红外波段成像](#1.3.4 可见光和红外波段成像)

[代码实现:可见光 vs 红外成像对比](#代码实现:可见光 vs 红外成像对比)

[1.3.5 微波波段成像](#1.3.5 微波波段成像)

代码实现:模拟微波波段成像效果

[1.3.6 无线电波段成像](#1.3.6 无线电波段成像)

代码实现:模拟无线电波段成像效果

[1.3.7 其他成像方式](#1.3.7 其他成像方式)

代码实现:模拟深度成像效果

效果汇总说明

数字图像处理的基本步骤

代码实现:完整数字图像处理流程

效果说明

图像处理系统的组成

代码实现:模拟图像处理系统的模块调用

代码说明

小结、参考文献和延伸读物

小结

参考文献

延伸读物

总结


大家好!今天开始更新《数字图像处理》系列笔记,第一章是绪论,也是打好基础的关键。本文会从数字图像处理的定义、起源、应用领域到基本步骤、系统组成全方位讲解,每个知识点都搭配可直接运行的 Python 代码 + 效果对比图,还有 Mermaid 思维导图 / 流程图辅助理解,零基础也能轻松上手~

前置准备:安装依赖库

首先安装代码运行所需的依赖,执行以下命令:

bash

复制代码
pip install opencv-python numpy matplotlib pillow

引言

数字图像处理(Digital Image Processing, DIP)是指利用计算机对图像进行采集、变换、分析、增强等操作,将模拟图像转化为数字图像并提取有用信息的技术。从医疗影像诊断到卫星遥感、从人脸识别到手机修图,数字图像处理已经渗透到我们生活的方方面面。本章作为入门,会帮大家建立对 DIP 的整体认知。

学习目标

  1. 理解数字图像处理的定义,区分模拟图像与数字图像;
  2. 了解数字图像处理的发展起源;
  3. 掌握数字图像处理在不同波段成像的应用场景及模拟实现;
  4. 熟悉数字图像处理的基本步骤,并能通过代码实现完整流程;
  5. 理解图像处理系统的核心组成部分。

1.1 什么是数字图像处理

核心概念

  • 模拟图像:连续的、非数字化的图像(比如胶片照片),无法直接被计算机处理;
  • 数字图像:将模拟图像离散化 (采样 + 量化)后得到的、由像素矩阵组成的图像,每个像素用数值表示颜色 / 亮度信息。

代码实现:模拟图像 vs 数字图像(效果对比)

下面的代码会读取一张图片,转化为数字矩阵(展示像素值),并对比原始图与模拟 / 低采样数字图像的效果:

复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

# 设置中文字体(Windows用SimHei,Mac用PingFang SC,Linux用WenQuanYi Micro Hei)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# ---------------------- 1. 读取图像并转化为数字矩阵 ----------------------
img_path = "test_img.jpg"  # 替换为你的测试图片路径
img = cv2.imread(img_path)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 转换为RGB格式(OpenCV默认BGR)

# 打印数字图像的核心特征:像素矩阵
print("数字图像的形状(高度, 宽度, 通道数):", img_rgb.shape)
print("前5行5列的像素值(RGB通道):\n", img_rgb[:5, :5, :])

# ---------------------- 2. 模拟图像 vs 数字图像对比 ----------------------
# 模拟模拟图像:添加高斯模糊(模拟连续、非离散的胶片效果)
analog_img = cv2.GaussianBlur(img_rgb, (25, 25), 0)

# 创建对比图1:模拟vs数字
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))
ax1.imshow(analog_img)
ax1.set_title("模拟图像(高斯模糊模拟连续效果)", fontsize=12)
ax1.axis('off')

ax2.imshow(img_rgb)
ax2.set_title("数字图像(像素矩阵表示)", fontsize=12)
ax2.axis('off')

plt.savefig("模拟图像vs数字图像.png", dpi=300, bbox_inches='tight')
plt.show()

# ---------------------- 3. 数字图像的离散化演示(采样) ----------------------
# 降低采样率:每隔10个像素取一个值,模拟低分辨率数字图像
low_sample_img = img_rgb[::10, ::10, :]
# 放大回原尺寸,展示采样后的像素化效果
low_sample_img_resize = cv2.resize(low_sample_img, (img_rgb.shape[1], img_rgb.shape[0]), interpolation=cv2.INTER_NEAREST)

# 创建对比图2:采样率对比
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))
ax1.imshow(img_rgb)
ax1.set_title("原始数字图像(高采样率)", fontsize=12)
ax1.axis('off')

ax2.imshow(low_sample_img_resize)
ax2.set_title("低采样率数字图像(像素化)", fontsize=12)
ax2.axis('off')

plt.savefig("数字图像采样对比.png", dpi=300, bbox_inches='tight')
plt.show()

效果说明

模拟图像 vs 数字图像对比图

数字图像采样对比图

1.2 数字图像处理的起源

发展历程

  • 20 世纪 50 年代:起源阶段,主要用于航天领域(美国喷气推进实验室处理月球探测图像);
  • 20 世纪 60-70 年代:技术发展,引入傅里叶变换、直方图均衡等算法,应用于医疗影像;
  • 20 世纪 80 年代后:计算机算力提升,数字图像处理进入普及阶段,扩展到民用领域;
  • 21 世纪:结合 AI / 深度学习,图像处理精度和效率大幅提升。

代码实现:模拟早期数字图像处理(灰度拉伸)

早期数字图像处理以简单的灰度变换、滤波为主,下面代码模拟 1970 年代的基础处理效果:

复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 读取图像并转为灰度图(早期处理多针对灰度图)
img_path = "test_img.jpg"
img = cv2.imread(img_path, 0)  # 0表示灰度模式

# ---------------------- 模拟早期处理:简单灰度拉伸(提升对比度) ----------------------
# 灰度拉伸公式:y = (x - min) * 255 / (max - min)(将灰度范围映射到0-255)
min_val = np.min(img)
max_val = np.max(img)
early_process_img = (img - min_val) * 255 / (max_val - min_val)
early_process_img = np.uint8(early_process_img)  # 转换为8位像素值

# 创建对比图3:早期处理效果
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))
ax1.imshow(img, cmap='gray')
ax1.set_title("原始灰度图(模拟1960年代未处理图像)", fontsize=12)
ax1.axis('off')

ax2.imshow(early_process_img, cmap='gray')
ax2.set_title("灰度拉伸后(模拟早期数字处理效果)", fontsize=12)
ax2.axis('off')

plt.savefig("早期数字图像处理对比.png", dpi=300, bbox_inches='tight')
plt.show()

# 输出处理前后的灰度统计(模拟早期数据分析)
print("处理前灰度范围:", min_val, "~", max_val)
print("处理后灰度范围:", np.min(early_process_img), "~", np.max(early_process_img))

效果说明

早期数字图像处理对比图

1.3 数字图像处理技术应用领域实例

数字图像处理的核心应用之一是 "多波段成像",不同波段的成像对应不同的应用场景,下面逐个讲解并给出模拟代码。

1.3.1 伽马射线成像

  • 应用场景:核医学(PET 扫描)、天体物理(伽马射线暴观测);
  • 技术特点:伽马射线穿透性强,成像需通过灰度拉伸突出高能量区域。
代码实现:模拟伽马射线成像效果
复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

img = cv2.imread("test_img.jpg", 0)  # 灰度图

# 模拟伽马射线成像:伽马校正+热力色板映射
gamma = 0.4  # 伽马值<1提升亮部(模拟高能量区域)
gamma_img = np.power(img / 255.0, gamma) * 255.0
gamma_img = np.uint8(gamma_img)

# 创建对比图4
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))
ax1.imshow(img, cmap='gray')
ax1.set_title("原始灰度图", fontsize=12)
ax1.axis('off')

ax2.imshow(gamma_img, cmap='hot')  # hot色板模拟伽马射线的热辐射效果
ax2.set_title("模拟伽马射线成像效果", fontsize=12)
ax2.axis('off')

plt.savefig("伽马射线成像对比.png", dpi=300, bbox_inches='tight')
plt.show()

1.3.2 X 射线成像

  • 应用场景:医学诊断(骨折、肺部检查)、安检(行李扫描);
  • 技术特点:X 射线穿透不同密度物质的能力不同,成像突出边缘和轮廓。
代码实现:模拟 X 射线成像效果
复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

img = cv2.imread("test_img.jpg", 0)  # 灰度图

# 模拟X射线成像:边缘检测+反相(模拟X光片黑白反转效果)
edges = cv2.Canny(img, 50, 150)  # Canny边缘检测突出轮廓
xray_img = 255 - edges  # 反相:黑色背景+白色轮廓

# 创建对比图5
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))
ax1.imshow(img, cmap='gray')
ax1.set_title("原始图像", fontsize=12)
ax1.axis('off')

ax2.imshow(xray_img, cmap='gray')
ax2.set_title("模拟X射线成像效果(X光片)", fontsize=12)
ax2.axis('off')

plt.savefig("X射线成像对比.png", dpi=300, bbox_inches='tight')
plt.show()

1.3.3 紫外波段成像

  • 应用场景:刑侦(指纹检测)、工业检测(电路板缺陷)、植物病害检测;
  • 技术特点:紫外光不可见,成像需映射为可见色板,突出紫外反射区域。
代码实现:模拟紫外波段成像效果
python 复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

# 设置中文字体(兼容不同系统)
plt.rcParams['font.sans-serif'] = ['SimHei', 'PingFang SC', 'WenQuanYi Micro Hei']
plt.rcParams['axes.unicode_minus'] = False

# 读取图像(增加异常处理,避免路径错误)
img_path = "./picture/TianHuoSanXuanBian.jpg"
img = cv2.imread(img_path)
if img is None:
    raise FileNotFoundError(f"无法读取图像,请检查路径:{img_path}")

img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 模拟紫外成像:HSV调色+紫色映射(修复核心逻辑)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)  # 拆分后的h/s/v都是uint8类型,尺寸一致

# 1. 处理饱和度:增强后强制转回uint8(避免类型变化)
s = np.clip(s * 1.5, 0, 255).astype(np.uint8)

# 2. 处理色相:先转为int32避免溢出,再裁剪,最后转回uint8
h = h.astype(np.int32) + 100  # 转为int32防止uint8溢出
h = np.clip(h, 140, 160)      # 限定紫色色相区间(140-160对应HSV的紫色)
h = h.astype(np.uint8)        # 强制转回uint8,匹配原类型

# 3. 亮度通道保持不变(可选:也可轻微增强)
v = v.astype(np.uint8)

# 合并通道(此时h/s/v尺寸、类型完全一致)
hsv_uv = cv2.merge([h, s, v])
uv_img = cv2.cvtColor(hsv_uv, cv2.COLOR_HSV2RGB)

# 创建对比图
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))
ax1.imshow(img_rgb)
ax1.set_title("原始可见光图像", fontsize=12)
ax1.axis('off')

ax2.imshow(uv_img)
ax2.set_title("模拟紫外波段成像效果", fontsize=12)
ax2.axis('off')

# 保存图片(避免中文路径乱码)
plt.savefig("紫外波段成像对比.png", dpi=300, bbox_inches='tight')
plt.show()

1.3.4 可见光和红外波段成像

  • 可见光成像:最常见的成像方式(手机拍照、相机),捕捉人眼可见的光;
  • 红外波段成像:应用于夜视仪、体温检测、安防监控,捕捉物体的红外辐射(热量)。
代码实现:可见光 vs 红外成像对比
复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

img = cv2.imread("test_img.jpg")
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 模拟红外成像:伪彩色热力映射+暗部增强
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
infrared = np.power(gray / 255.0, 0.2) * 255.0  # 增强暗部(模拟热量捕捉)
infrared = np.uint8(infrared)

# 创建对比图7
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))
ax1.imshow(img_rgb)
ax1.set_title("可见光成像(原始图像)", fontsize=12)
ax1.axis('off')

ax2.imshow(infrared, cmap='inferno')  # inferno色板模拟红外热力效果
ax2.set_title("模拟红外波段成像效果(夜视仪)", fontsize=12)
ax2.axis('off')

plt.savefig("可见光vs红外成像对比.png", dpi=300, bbox_inches='tight')
plt.show()

1.3.5 微波波段成像

  • 应用场景:雷达成像、卫星遥感、气象监测(台风 / 降雨);
  • 技术特点:微波穿透性强(不受天气影响),成像易受噪声影响,需滤波处理。
代码实现:模拟微波波段成像效果
复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

img = cv2.imread("test_img.jpg", 0)  # 灰度图

# 模拟微波成像:添加高斯噪声(模拟信号噪声)+ 中值滤波(去噪)
noise = np.random.normal(0, 30, img.shape).astype(np.uint8)
microwave_noise = cv2.add(img, noise)
microwave_img = cv2.medianBlur(microwave_noise, 3)  # 中值滤波去噪

# 创建对比图8
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))
ax1.imshow(microwave_noise, cmap='gray')
ax1.set_title("含噪声的微波成像模拟", fontsize=12)
ax1.axis('off')

ax2.imshow(microwave_img, cmap='gray')
ax2.set_title("滤波后微波成像效果", fontsize=12)
ax2.axis('off')

plt.savefig("微波波段成像对比.png", dpi=300, bbox_inches='tight')
plt.show()

1.3.6 无线电波段成像

  • 应用场景:射电望远镜(宇宙天体观测)、无线电定位;
  • 技术特点:分辨率低,需通过插值 / 增强提升清晰度。
代码实现:模拟无线电波段成像效果
复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

img = cv2.imread("test_img.jpg", 0)  # 灰度图

# 模拟无线电成像:降低分辨率(模拟低精度)+ 插值放大
small = cv2.resize(img, (img.shape[1]//10, img.shape[0]//10), interpolation=cv2.INTER_LINEAR)
radio_img = cv2.resize(small, (img.shape[1], img.shape[0]), interpolation=cv2.INTER_NEAREST)

# 创建对比图9
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))
ax1.imshow(img, cmap='gray')
ax1.set_title("原始高分辨率图像", fontsize=12)
ax1.axis('off')

ax2.imshow(radio_img, cmap='gray')
ax2.set_title("模拟无线电波段成像效果(低分辨率)", fontsize=12)
ax2.axis('off')

plt.savefig("无线电波段成像对比.png", dpi=300, bbox_inches='tight')
plt.show()

1.3.7 其他成像方式

  • 应用场景:深度成像(3D 摄像头)、超声成像(医学 B 超)、偏振成像(玻璃反光去除);
  • 下面以深度成像为例,给出模拟代码。
代码实现:模拟深度成像效果
复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

img = cv2.imread("test_img.jpg")
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 模拟深度成像:基于亮度生成深度图(越亮表示距离越近)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
depth = 1 - (gray / 255.0)  # 反转:暗部远,亮部近

# 创建对比图10
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))
ax1.imshow(img_rgb)
ax1.set_title("原始图像", fontsize=12)
ax1.axis('off')

im = ax2.imshow(depth, cmap='viridis')  # viridis色板模拟深度
ax2.set_title("模拟深度成像效果(3D深度图)", fontsize=12)
ax2.axis('off')
plt.colorbar(im, ax=ax2, shrink=0.8, label='深度值(0=远,1=近)')

plt.savefig("深度成像对比.png", dpi=300, bbox_inches='tight')
plt.show()

效果汇总说明

深度成像:viridis 色板直观展示 3D 深度分布。

数字图像处理的基本步骤

代码实现:完整数字图像处理流程

下面的代码演示从采集→预处理→增强→分析→输出的完整步骤:

python 复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt
import os

# ---------------------- 基础配置 ----------------------
plt.rcParams['font.sans-serif'] = ['SimHei', 'PingFang SC', 'WenQuanYi Micro Hei']
plt.rcParams['axes.unicode_minus'] = False

# ========== 直接指定绝对路径==========
img_path = r".\picture\XiLian.png"  # 原始图像
save_img_path = r".\picture\最终处理图像.jpg"  # 保存图像
compare_img_path = r".\picture\数字图像处理基本步骤.png"  # 对比图

# ---------------------- 步骤1:图像采集(读取图像) ----------------------
img = cv2.imread(img_path)
if img is None:
    raise FileNotFoundError(f"❌ 原始图像不存在,请检查路径:\n{img_path}")
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# ---------------------- 步骤2:预处理(去噪+旋转) ----------------------
denoise_img = cv2.GaussianBlur(img_rgb, (5, 5), 0)
h, w = denoise_img.shape[:2]
M = cv2.getRotationMatrix2D((w//2, h//2), 5, 1.0)
preprocess_img = cv2.warpAffine(denoise_img, M, (w, h))

# ---------------------- 步骤3:增强(均衡+锐化) ----------------------
ycrcb = cv2.cvtColor(preprocess_img, cv2.COLOR_RGB2YCrCb)
y, cr, cb = cv2.split(ycrcb)
y_eq = cv2.equalizeHist(y)
ycrcb_eq = cv2.merge([y_eq, cr, cb])
equalize_img = cv2.cvtColor(ycrcb_eq, cv2.COLOR_YCrCb2RGB)
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])
enhance_img = cv2.filter2D(equalize_img, -1, kernel)

# ---------------------- 步骤4:分析(边缘+轮廓) ----------------------
gray = cv2.cvtColor(enhance_img, cv2.COLOR_RGB2GRAY)
edges = cv2.Canny(gray, 50, 150)
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
analysis_img = enhance_img.copy()
cv2.drawContours(analysis_img, contours, -1, (255, 0, 0), 2)

# ---------------------- 步骤5:输出(保存+读取) ----------------------
# 保存图像(直接用绝对路径)
save_success = cv2.imwrite(save_img_path, cv2.cvtColor(analysis_img, cv2.COLOR_RGB2BGR))
# 若常规保存失败,尝试兼容中文路径
if not save_success:
    encode_img = cv2.imencode('.jpg', cv2.cvtColor(analysis_img, cv2.COLOR_RGB2BGR))[1]
    encode_img.tofile(save_img_path)
    if not os.path.exists(save_img_path):
        raise IOError(f"❌ 保存失败,请检查路径权限:\n{save_img_path}")
print(f"✅ 图像保存成功:\n{save_img_path}")

# 读取保存的图像(直接用绝对路径)
saved_img = cv2.imread(save_img_path)
# 若常规读取失败,尝试兼容中文路径
if saved_img is None:
    saved_img = cv2.imdecode(np.fromfile(save_img_path, dtype=np.uint8), cv2.IMREAD_COLOR)
if saved_img is None:
    raise FileNotFoundError(f"❌ 读取失败,请检查路径:\n{save_img_path}")
saved_img_rgb = cv2.cvtColor(saved_img, cv2.COLOR_BGR2RGB)

# ---------------------- 绘制子图 ----------------------
fig, axes = plt.subplots(2, 3, figsize=(18, 12))
axes[0,0].imshow(img_rgb)
axes[0,0].set_title("1. 原始采集图像", fontsize=12)
axes[0,0].axis('off')

axes[0,1].imshow(preprocess_img)
axes[0,1].set_title("2. 预处理后(去噪+旋转校正)", fontsize=12)
axes[0,1].axis('off')

axes[0,2].imshow(enhance_img)
axes[0,2].set_title("3. 增强后(均衡+锐化)", fontsize=12)
axes[0,2].axis('off')

axes[1,0].imshow(edges, cmap='gray')
axes[1,0].set_title("4. 分析-边缘检测", fontsize=12)
axes[1,0].axis('off')

axes[1,1].imshow(analysis_img)
axes[1,1].set_title("4. 分析-轮廓提取", fontsize=12)
axes[1,1].axis('off')

axes[1,2].imshow(saved_img_rgb)
axes[1,2].set_title("5. 输出-保存的图像", fontsize=12)
axes[1,2].axis('off')

plt.tight_layout()
plt.savefig(compare_img_path, dpi=300, bbox_inches='tight')
print(f"✅ 对比图保存成功:\n{compare_img_path}")
plt.show()

效果说明

数字图像处理基本步骤对比图

图像处理系统的组成

代码实现:模拟图像处理系统的模块调用

下面的代码将系统拆分为输入、处理、输出三大模块,模拟实际系统的工作逻辑:

复制代码
import cv2
import numpy as np
import os
import matplotlib.pyplot as plt

# ---------------------- 模块1:输入模块 ----------------------
class InputModule:
    def __init__(self, img_path):
        self.img_path = img_path
    
    def collect_image(self):
        """采集图像(模拟从硬件设备读取)"""
        if not os.path.exists(self.img_path):
            raise FileNotFoundError(f"图像文件不存在:{self.img_path}")
        img = cv2.imread(self.img_path)
        return cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    
    def transmit_image(self, img):
        """模拟图像传输(转为字节流,模拟网络/硬件传输)"""
        encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90]
        _, img_bytes = cv2.imencode('.jpg', cv2.cvtColor(img, cv2.COLOR_RGB2BGR), encode_param)
        print("✅ 图像传输完成,字节流长度:", len(img_bytes))
        return img_bytes

# ---------------------- 模块2:处理模块 ----------------------
class ProcessModule:
    def __init__(self):
        self.sharpen_kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])  # 锐化核
    
    def hardware_accelerate(self, img):
        """模拟硬件加速(简化版,实际调用GPU)"""
        print("⚡ 模拟GPU加速处理中...")
        return img
    
    def process_algorithm(self, img):
        """核心处理算法:去噪+锐化"""
        img = self.hardware_accelerate(img)
        denoise_img = cv2.GaussianBlur(img, (3, 3), 0)  # 去噪
        sharpen_img = cv2.filter2D(denoise_img, -1, self.sharpen_kernel)  # 锐化
        return sharpen_img

# ---------------------- 模块3:输出模块 ----------------------
class OutputModule:
    def display_image(self, img):
        """显示处理后图像"""
        plt.rcParams['font.sans-serif'] = ['SimHei']
        plt.imshow(img)
        plt.title("处理后图像(系统输出)", fontsize=12)
        plt.axis('off')
        plt.show()
    
    def save_image(self, img, save_path="系统输出图像.jpg"):
        """保存图像到本地"""
        cv2.imwrite(save_path, cv2.cvtColor(img, cv2.COLOR_RGB2BGR))
        print(f"💾 图像已保存至:{os.path.abspath(save_path)}")

# ---------------------- 系统整合运行 ----------------------
if __name__ == "__main__":
    # 初始化各模块
    input_mod = InputModule("test_img.jpg")
    process_mod = ProcessModule()
    output_mod = OutputModule()
    
    # 1. 输入阶段:采集+传输
    raw_img = input_mod.collect_image()
    img_bytes = input_mod.transmit_image(raw_img)
    
    # 模拟传输后还原图像
    nparr = np.frombuffer(img_bytes, np.uint8)
    img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
    img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    
    # 2. 处理阶段:算法处理
    processed_img = process_mod.process_algorithm(img_rgb)
    
    # 3. 输出阶段:显示+保存
    output_mod.display_image(processed_img)
    output_mod.save_image(processed_img)

代码说明

该代码模拟了实际图像处理系统的核心逻辑:

  • 输入模块:负责图像采集和传输(字节流模拟网络传输);
  • 处理模块:模拟硬件加速 + 核心算法(去噪 + 锐化);
  • 输出模块:负责图像显示和本地保存。运行后会输出处理后的图像,并打印传输 / 保存日志,直观体现系统的工作流程。

小结、参考文献和延伸读物

小结

本章系统讲解了数字图像处理的绪论知识:

  1. 数字图像处理的核心是将模拟图像离散化为像素矩阵,通过计算机进行各类操作;
  2. 技术起源于航天领域,随算力提升逐步普及到医疗、工业、民用等领域;
  3. 多波段成像是核心应用方向,不同波段对应不同场景和处理策略;
  4. 基本步骤为「采集→预处理→增强→分析→输出」,每个步骤有明确的目标和算法;
  5. 图像处理系统由输入、处理、输出三大模块组成,硬件 + 软件协同工作。

参考文献

  1. 《数字图像处理(第三版)》------Rafael C. Gonzalez(经典教材);
  2. 《OpenCV-Python 中文教程》------ 冯振、郭延宁、吕跃勇;
  3. 数字图像处理国家标准(GB/T 30247-2013)。

延伸读物

  1. 《深度学习与计算机视觉》------ 何凯明等(结合 AI 的图像处理进阶);
  2. 《遥感数字图像处理》------ 梅安新(多波段成像深度讲解);
  3. OpenCV 官方文档:https://docs.opencv.org/4.x/

总结

如果大家在运行代码时遇到问题(比如图片路径、字体乱码),可以评论区留言~下一章会讲解数字图像的基础数学知识(采样、量化、像素间关系),敬请期待!

相关推荐
C雨后彩虹13 小时前
任务最优调度
java·数据结构·算法·华为·面试
少林码僧15 小时前
2.31 机器学习神器项目实战:如何在真实项目中应用XGBoost等算法
人工智能·python·算法·机器学习·ai·数据挖掘
钱彬 (Qian Bin)15 小时前
项目实践15—全球证件智能识别系统(切换为Qwen3-VL-8B-Instruct图文多模态大模型)
人工智能·算法·机器学习·多模态·全球证件识别
智航GIS15 小时前
10.4 Selenium:Web 自动化测试框架
前端·python·selenium·测试工具
jarreyer15 小时前
摄像头相关记录
python
宝贝儿好15 小时前
【强化学习】第六章:无模型控制:在轨MC控制、在轨时序差分学习(Sarsa)、离轨学习(Q-learning)
人工智能·python·深度学习·学习·机器学习·机器人
大、男人15 小时前
python之asynccontextmanager学习
开发语言·python·学习
Niuguangshuo16 小时前
EM算法详解:解密“鸡生蛋“的机器学习困局
算法·机器学习·概率论
a31582380616 小时前
Android 大图显示策略优化显示(一)
android·算法·图片加载·大图片
智驱力人工智能16 小时前
守护流动的规则 基于视觉分析的穿越导流线区检测技术工程实践 交通路口导流区穿越实时预警技术 智慧交通部署指南
人工智能·opencv·安全·目标检测·计算机视觉·cnn·边缘计算