写在前面

DIP-Digital Image Processing-数字图像处理,是计算机图形学和计算机视觉的重要基础,本系列文章是根据“冈萨雷斯《数字图像处理》(第四版)”教材的顺序展开,解释数字图像处理中的重要知识点,同时也可作为期末复习笔记。

  1. 第一、二章 序论、数字图形基础
  2. 第三章 灰度变换与空间滤波
  3. 第四章 频率域滤波
  4. 第六章 彩色图像处理
  5. 第八章 图像编码基础
  6. 第十-十一-十二章 图像分割描述识别
  7. 上机作业

目录

写在前面

图像增强概念

点处理与邻域处理

图像运算

逻辑运算

算术运算

位面图

解释

位面图的生成

数据隐藏试验

应用

空域点处理增强

直接灰度变换

直方图修正

直方图

直方图均衡化处理

算法

直方图匹配(规定化处理)

空域滤波

图像平滑

邻域平均法

中值滤波(统计排序滤波器)

线性滤波器

卷积

图像边界处理策略

图像锐化

微分锐化

梯度算子锐化

拉普拉斯算子锐化

梯度算子效果vs拉普拉斯算子效果

模板锐化

总结


图像增强概念

定义加强、突出图像中的主要信息,抑制、削弱、剔除图像中的不需要的信息,使处理的结果对特定的应用来说比原始图像更“合适”,更便于进一步处理。

目的:使图像更适合于人的视觉特性或机器的识别系统。

注意:图像信息有损无增!!!(不会增加新的细节,反而可能丢失部分低对比度的细节、噪声)图像增强一般是一个复杂图像处理系统的主要的“预处理”环节。

应用:图像噪声的消除、拍摄过程中曝光不足,事后修复

例:如何求单位体积内,红血球细胞的个数;红血球细胞的直径?

  • 1. 图像增强:首先对左侧的原始图像进行图像增强,目的是提高红血球的边缘清晰度,从而便于后续的边缘检测。可以使用以下方法:
    • 对比度增强:增强图像的对比度,使红血球边缘更加清晰。
    • 平滑滤波:去除图像中的噪声,避免噪声干扰边缘检测结果。
    • 锐化处理:增强红血球边缘的细节,使得细胞轮廓更加明显。(具体见下)
  • 2. 边缘检测:增强后的图像可以通过边缘检测算法提取红血球的边缘。通过边缘检测得到的结果类似于右侧图像,其中红血球的边缘被清晰地标出。常用的边缘检测方法有:
    • Canny 边缘检测:一种常用的边缘检测算法,可以提取出红血球的清晰边缘。
    • Sobel 算子:可以增强水平和垂直方向的边缘,便于检测圆形的边界。(会在后续篇章中有具体涉及)
  • 3. 轮廓提取和形态学操作:边缘检测得到二值图后,可以进行一些形态学操作来进一步处理:
    • 闭运算:填补红血球轮廓中的小空隙,确保边界完整。(见下《图像运算》)
    • 连通域分析:将各个红血球的轮廓分离开来,以便后续计数和测量。(在《1.数字图形基础》中有具体介绍)
  • 4. 计算红血球数量和直径
    • 数量计算:对每个连通区域(红血球)进行标记计数,统计出单位面积内的红血球数量
    • 直径测量:对于每个红血球轮廓,可以测量其外接圆的直径,获得红血球的平均直径。

方法:频域处理法空域处理法(对图像像素直接进行处理)

数学模型:

  • 图像质量的判断标准具体问题有关;
  • 图像增强没有通用理论,本章所讨论的理论只具有指导意义。

点处理与邻域处理

  • 点处理:指的是对图像中每个像素点单独进行变换处理,而不依赖于周围像素。即每个像素值 f(x,y) 通过灰度变换函数 T 转换成新的值 g(x,y) = T(f(x,y))
  • 邻域处理:涉及到一个像素及其周围像素的区域处理,通常用于平滑、锐化等操作。而 1×1 邻域 实际上就是点处理,即单独对每个像素进行操作。

图像运算

图像运算主要包括逻辑运算算术运算,可以用于图像增强、图像合成、边缘提取等操作。

逻辑运算

逻辑运算主要包括与(AND)、或(OR)、非(NOT)等操作,适用于二值图像(每个像素只有0和1两种状态)。这些运算可以用于图像的掩膜操作或二值图像的合成。

  • (AND)运算:用于提取两幅图像的共同部分(重合区域)。
  • (OR)运算:用于合并两幅图像的内容。
  • (NOT)运算:用取反于,即将图像的白色变为黑色,黑色变为白色。

算术运算

算术运算包括加法、减法、乘法、除法等操作,适用于灰度图像。算术运算可以用于图像增强和图像对比度调整等。

  • 加法:可以增加图像的亮度或叠加两幅图像。
  • 减法:用于图像之间的差异检测,减去背景图像后可以突出变化区域,常用于医学图像或运动检测中。
  • 得到
  • 乘法和除法:用于图像的亮度缩放或掩膜处理,可以调整图像的对比度和亮度。乘法用于提取特定区域;除法用于消除阴影

位面图

位面图是一种将图像按照各个二进制位(bit plane)分解的方式,将图像的像素分解为多个二值图像(即只有0和1的图像)。在位面分解中,每个二值图像只包含原图像中像素的某一特定位的信息。由各字节的相同位组成的图像

解释

在数字图像中,每个像素的灰度值通常用一个字节(8位-8bit量化为256个灰度级)来表示,因此每个像素的灰度值可以分解为8个位平面,分别表示从最低位(第0位)到最高位(第7位)的二进制值。

  • 第0位(最低位)位面图:只包含每个像素的最低有效位,通常显示图像中最细微的细节
  • 第7位(最高位)位面图:只包含每个像素的最高有效位,通常显示图像大致轮廓和主要结构

位面图的生成

假设图像为8位灰度图像,每个像素的灰度值可以表示为一个8位二进制数 b_7b_6b_5b_4b_3b_2b_1b_0​,其中 b_7​ 为最高位,b_0​ 为最低位。位面图就是将每一位分别提取出来,形成8个二值图像:

  • 第0位位面图:每个像素的值是原像素值的第0位。
  • 第1位位面图:每个像素的值是原像素值的第1位。
  • 第7位位面图:每个像素的值是原像素值的第7位。

数据隐藏试验

b = imread('4.bmp');        % 读取图像 '4.bmp',存储在变量 b 中
c = b(:,:,1);               % 获取图像 b 的第一个通道,假设是灰度通道(或 R 通道)
bb = imread('a.bmp');       % 读取图像 'a.bmp',存储在变量 bb 中
cc = rem(double(bb),2);     % 将图像 bb 转换为双精度浮点数并取模 2,得到二值图像 cc,包含 bb 中的最低位信息,rem:取模运算
for k = 1:8
    d = double(c) + 2^(k-1) * double(cc); % 将图像 c 转换为双精度浮点数,并将 cc 的位信息按权重 2^(k-1) 叠加到 c 上(逐步将 cc 的位信息嵌入到 c 中)
    % subplot(2,4,k),imshow(uint8(d));    % 将 d 转换为 uint8 类型并显示(注释掉了)
    subplot(2,4,k), imagesc(d);           % 用 imagesc 显示 d,自动调整显示的灰度范围
    % subplot(2,4,k), image(d);           % 用 image 显示 d(注释掉了)
    title(k-1);                           % 给每幅图加上标题,表示当前位(0-7)
end;

% ch3-1.m
k = 7;                      % 定义变量 k,表示位平面的编号
b = imread('4.bmp');        % 读取图像 '4.bmp',存储在变量 b 中
c = b(:,:,1);               % 获取图像 b 的第一个通道(通常是灰度通道或红色通道)
d = rem(double(c), 2^k);    % 将图像 c 转换为双精度类型,取模 2^k,提取低 k 位的值
e = fix(d / 2^(k-1));       % 将 d 右移 (k-1) 位,提取第 (k-1) 位的信息,保留成二值数据
f = e * 250;                % 将 e 放大至较高的灰度级(0 或 250),增强显示效果
imwrite(uint8(f), '16.bmp'); % 将处理后的图像 f 保存为 '16.bmp' 文件

应用

  • 图像压缩:通过分析不同位面的信息,可以选择性地保留或舍弃低位位面,达到压缩图像的目的。
  • 图像分析:有些位平面可能包含图像中的重要特征信息,分析不同位面的结构有助于理解图像的内容。
  • 增强对比:位平面分离可以帮助突出图像的某些特征,尤其是当图像中不同灰度级具有特定含义时。

空域点处理增强

直接灰度变换

直接灰度变换指的是对图像中每个像素的灰度值进行单独的数学变换。

定义:设 r 表示原始图像的灰度值,表示增强后的目标图像的灰度值,通过灰度变换函数 s=T(r) 实现两者的映射。这个变换函数可以根据需求来定义。

应用:灰度变换是一种基本的图像增强方法,通过调节灰度值来增强图像的对比度和亮度,适用于改善图像的视觉效果。

  • 图像反转:将图像的灰度值反转,使亮变暗,暗变亮。常用于 X 光片等图像
    • s =(L−1)−r
    • 其中 L 是图像的灰度级数,如 8 位图像 L=256。
  • 对数变换:将较暗的像素值拉伸,使其变亮,适合增强低亮度区域的细节

    • s = c \cdot \log(1 + r)
    • 其中 c 为常数,控制变换强度。对数变换通常用于处理图像中的暗部细节。
  • 幂次变换伽马校正):通过调整伽马值控制图像的亮度和对比度。对于不同的伽马值 γ,可以增强图像的亮部或暗部细节。

    • s = c \cdot r^\gamma
    • 其中 c 为常数,γ 为幂指数。一般用于调节图像亮度,使图像更适合人眼观察或符合显示设备的特性。
  • 对比度拉伸对比度增强对比度扩展):用来扩大图像的灰度级范围,使亮的区域更亮、暗的区域更暗,从而提高图像的对比度。
    • 对比度拉伸变换函数通常可以表示为分段线性函数,或者由特定的函数(如伽马函数或S形函数)来近似,将原始图像的灰度值范围映射到更广或更窄的范围,以增强图像的对比度。
    • s = T(r) = \begin{cases} 0, & \text{if } r < r_{\text{min}} \\ \frac{L - 1}{r_{\text{max}} - r_{\text{min}}} (r - r_{\text{min}}), & \text{if } r_{\text{min}} \leq r \leq r_{\text{max}} \\ L - 1, & \text{if } r > r_{\text{max}} \end{cases}
    • r< r_{\text{min}}​ 时,输出为0,表示将灰度值映射到黑色。
    • r_{\text{min}} \leq r \leq r_{\text{max}}​ 时,灰度值按比例拉伸到整个范围 [0,L−1]。
    • r > r_{\text{max}},输出为 L−1,表示将灰度值映射到白色。下图不是这个例子:
  • 灰度切分:用于在图像中突出显示特定的灰度级范围,或者将某个灰度范围的像素值进行增强,同时抑制或保持其他灰度范围的像素。灰度切分常用于医学图像处理、遥感图像分析等领域,可以帮助识别和突出感兴趣的目标区域
    • 二值切分:将特定灰度范围内的像素设为一个高值(如白色),范围外的像素设为一个低值(如黑色),形成一个二值图像。这种方式适合在图像中分离出特定区域。
    • 增强切分:在灰度范围内的像素进行增强,而灰度范围外的像素保持不变。这种方式适合在图像中突出显示某个亮度范围的区域。

直方图修正

直方图

a=imread(‘c:\1.jpg');
b=a(:,:,1);
imshow(b);
figure, imhist(b,64); %作b的灰度直方图,64 可改为128, 256等

图像灰度直方图是反映一幅图像中的灰度级与出现这种灰度级的像素的概率之间的关系的图形。

直方图的数学解释:直方图反映了图像的像素的灰度分布。

直方图的作法:

  1. 将图像的灰度级归一化
  2. 计算各灰度级的像素频数(或概率)
  3. 作图

直方图均衡化处理

直方图均衡化是一种图像增强技术,通过调整图像的灰度分布,使得图像的对比度得到增强,视觉效果更加清晰。其核心思想是将图像的灰度级重新分布,使得每个灰度级在图像中的像素数目尽可能均匀分布,从而增强图像的对比度,特别是用于亮度范围较窄的图像。

根据引理2的离散形式,取:s = T(r) = \sum_{t=0}^{r} p_r(t)用于图像直方图均衡化。

  • s 表示输出灰度级。
  • T(r) 表示累积分布函数,将输入灰度级 r 映射为 s。
  • p_r(t) 是灰度级 r 的概率密度

算法

一幅M*N,L灰度级层次的图像,原先像素灰度值为k:(L是灰度级,如256,采用8bit量化,8位)

  1. 计算图像中的总像素个数P(M*N 即图幅参数);
  2. 计算图像中各灰度级的像素总数n_k;
  3. 计算灰度级的概率分布(直方图中应变量的值)p_k=P/n_k;
  4. 计算灰度级的累积分布函数(累积直方图中应变量的值)s_k=\sum p_k;
  5. 确定映射到新灰度值的关系 k -> int{(L-1)* s_k};
  6. 对图像进行映射变换;

  • 直方图均衡是近似的;
  • 简并现象的发生。 
直方图匹配规定化处理

直方图匹配是一种调整图像灰度分布的方法,目的是让输入图像的灰度分布接近目标图像的灰度分布

  • 设定灰度分布:假设输入图像的灰度值为 r,目标输出图像的灰度值为 z。输入图像的灰度分布为 P(r),而期望输出图像的灰度分布为 P(z)。如何得到满足条件的输出函数?

  • 灰度变换函数:定义灰度变换函数 T,使得输入图像 f(x,y) 经过 T 变换后得到均衡化图像 g(x,y)。这个过程就是灰度均衡化。

  • 逆变换求目标函数:定义目标图像的灰度均衡化变换函数 G,其逆变换 G^{-1}可以将均衡化后的图像灰度值 g(x,y) 转换为符合期望输出图像灰度分布的灰度值 h(x,y)。因此,最终的灰度变换可以表示为 G^{-1} \circ T,即先对输入图像均衡化,再通过目标分布的逆变换来调整。

思考题:已知fg的直方图,求af+bg 的直方图。

a+b=1,a、b大于等于0,则组合图像的直方图是原始两幅图像的加权图

空域滤波

图像平滑

邻域平均法

这是线性滤波器的一种特例,通常用来简单地平滑图像,减弱噪声。

邻域:在一定意义下,与该像素相邻的像素的集合。(具体见本专栏《1.数字图像基础》)

  • 简单邻域平均法

    • 公式:g(x, y) = \frac{1}{M} \sum_{(m, n) \in S} f(m, n)
    • 含义:将每个像素的值替换其邻域内所有像素值的简单平均
    • 其中,S 表示中心像素 (x,y) 的邻域,M 为邻域内像素的数量。
    • 应用:用于基本的图像平滑,减弱随机噪声尤其是高频噪声,但可能会导致边缘模糊
  • 加权邻域平均法

    • 公式:g(x, y) = \sum_{(m, n) \in S} \alpha_{(m, n)} f(m, n)
    • 含义:对邻域内每个像素赋予不同的权重 \alpha_{(m, n)} 进行加权平均。
    • 条件:\sum_{(m, n) \in S} \alpha_{(m, n)} = 1,且 \alpha_{(m, n)} \geq 0
    • 应用:比简单平均更灵活,可以通过调节权重系数,使得邻近像素影响更大,从而更好地保持图像的边缘细节。
    • a=imread('c:\\1.jpg'); % 读取图像文件并存储在变量 a 中
      b=a(:, :, 1);          % 提取图像的第一个通道
      c=[0    0.1  0;        % 定义一个 3x3 加权滤波核
         0.1  0.6  0.1;
         0    0.1  0];
      d=conv2(c, b);         % 对图像 b 进行二维卷积,使用卷积核 c
      imshow(d, [0,255]);    % 显示卷积后的图像,并设置显示范围为 [0, 255]
      % 此卷积核矩阵 c 具有一个较大的中心权重 0.6,
      % 周围四个方向为 0.1,其余为 0。
      % 这种设计使得中心像素的值在滤波结果中权重更大,
      % 能够在一定程度上保持图像的边缘信息,使图像更加清晰,
      % 但同时对噪声抑制不如平滑滤波效果。
  • 阈值邻域平均法

    • 应用:这种方法可以在平滑噪声的同时,保留显著不同的像素(如边缘)的信息,使得图像平滑的同时保持边缘清晰。
    • 含义:仅当中心像素与邻域平均值的差异超过某一阈值 T 时,才用邻域的平均值替换该像素,否则保留原值

中值滤波(统计排序滤波器)

原理:将数字图像中的每个像素的值用其邻域中的各像素的中间值代替。(no平均值)

加权邻域平均 、中值滤波都是“基于邻域的操作”。像素及其邻域中的像素所参与的运算,完全可以用所谓的“滤波器”(又称做掩模、核、模板或窗口)来刻画。

用于去除椒盐噪声、脉冲噪声等离散型噪声,适合需要保留边缘和细节的场景。但计算复杂度较高,且对于平滑过度的图像效果不明显。

线性滤波器

几乎类似于邻域平均法中的加权平均法,每个像素值乘以滤波器模板中对应的权重,所有乘积的和即为滤波后的值

卷积

卷积核移动过程的具体步骤:

  1. 定位起始位置:卷积核的左上角从图像的左上角对齐
  2. 加权计算:在当前位置,将卷积核的每个值与图像对应位置的像素值相乘,并求和。
  3. 存储结果:将上述加权和的结果作为新图像中对应位置(卷积核中心点所对应的图像位置)的像素值
  4. 右移一步:将卷积核向右移动一个像素点,然后重复步骤 2 和 3。
  5. 换行:当卷积核到达一行的最右边时,回到下一行的左边,继续从左到右移动,逐像素重复上述步骤。

图像边界处理策略

  • 忽略,不处理:在靠近图像边缘的部分直接忽略卷积或滤波操作,保留原始像素值,或者直接裁剪边缘,不对边缘像素进行处理。这种方法简单,但可能会导致边缘信息丢失

  • 用部分模板处理:当卷积核靠近边界时,使用落在图像区域内的部分卷积核进行计算。这种方法能保留边缘的部分信息,但会导致卷积结果在边界附近的效果有所减弱。

  • 加边:在图像的边缘填充一些虚拟像素,使得卷积核可以完整地覆盖图像的所有区域。常见的加边方式包括:

    • 零填充(Zero-padding):在图像边缘填充0值,适合某些场合,但可能导致图像边缘出现黑色边框。
      • 零填充的填充宽度取决于卷积核的大小,设卷积核大小为m*n:
      • 水平填充(左右两边)\frac{m - 1}{2}​ 个像素。
      • 垂直填充(上下两边)\frac{n - 1}{2}​ 个像素。
    • 复制边缘(Edge replication):用边缘像素的值来填充,以减少边缘的不连续性。
    • 镜像填充(Mirror padding):以边缘为对称轴进行镜像填充,保持图像边缘的连续性。

图像锐化

增强图像边缘及灰度跳变部分。

由于涉及到过多的具体计算,这部分内容就只做一个阐述。我个人目前理解意义上的锐化的过程就是选择一个算子模板,对图像进行上一节中所介绍过的滤波卷积操作。作用使用一阶或二阶导数算子(如梯度算子或拉普拉斯算子)检测图像中亮度变化大的地方(边缘或细节部分),并在检测到的边缘或变化区域上加大亮度变化,以增强这些区域的“清晰度”。。

微分锐化

微分锐化是基于微分的图像锐化方法,通过计算图像灰度变化的导数来增强边缘。在一维情况下,图像边缘可以通过一阶导数来检测;在二维情况下,可以使用梯度或拉普拉斯算子来检测图像的变化。

梯度算子锐化

梯度算子锐化通过计算图像中像素的梯度来检测边缘。梯度是图像灰度值变化最快的方向,因此可以突出边缘和细节。常见的梯度算子包括 Sobel算子Robert算子。这些算子利用图像的水平和垂直梯度信息,生成一个包含边缘强度的图像。梯度算子是基于一阶导数的。

拉普拉斯算子锐化

拉普拉斯算子是一种二阶微分算子,用于检测图像中灰度变化迅速的区域。拉普拉斯算子通过计算周围像素的差分,突出图像的边缘和细节。与梯度算子不同,拉普拉斯算子直接对图像进行二阶导数的计算,因此它更加敏感于细小的边缘

梯度算子效果vs拉普拉斯算子效果

拉普拉斯锐化通常能够生成更细腻的边缘,因为其二阶导数的特性使其在检测和增强边缘时具有更高的精度和敏感度。

模板锐化

模板锐化是一种基于卷积核的锐化方法。通过使用不同的模板(即卷积核),可以实现不同的锐化效果。模板锐化的模板可以是拉普拉斯模板、Sobel模板、Prewitt模板等。这种方法易于实现,且可以根据需求设计不同的模板以达到不同的锐化效果。


总结

数字图像处理(DIP)是计算机图形学和计算机视觉的核心基础。冈萨雷斯的《数字图像处理》涵盖了图像的灰度变换、空间和频率域滤波、彩色图像处理、编码、图像分割、描述及识别等内容。图像增强作为图像处理中重要的预处理步骤,通过对比度增强、平滑滤波、锐化等方法,旨在突出图像主要信息,提高机器识别或人眼识别的效果。常用方法包括点处理、邻域处理、逻辑和算术运算、位面分解等,适用于噪声去除、细节增强等。

空域和频域处理是图像处理的两大方法:空域处理中,灰度变换和直方图操作用于增强图像对比度;频域处理中,滤波器用于降噪和增强图像边缘。卷积、梯度算子、拉普拉斯算子等锐化方法则可增强边缘信息。此外,模板法和中值滤波等方法有助于平滑和去噪,应用广泛。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐