Nugine 的个人博客关于

数字图像处理笔记

概述

像素:小块区域,包括两个属性:位置、像素值。

数字图像:由像素组成的二维矩阵。

常见数字图像:灰度、彩色、二值。

灰度:用整数表示,通常 0~255,0 黑,255 白。

彩色像素:RGB 0~255。

二值像素:单比特表示,0 黑,1 白。

图像表示:f(x,y)f(x,y),或矩阵,或矢量。

图像数据量:二进制前缀。

图像数字化:包括取样和量化。

取样:空间上的离散化,在空间上分割成 M×N 个网格(空间分辨率)。

量化:亮度上的离散化,把取样点上对应的亮度连续变化区间转换为单个数码的过程。(幅度分辨率)

图像质量--层次:表示图像实际拥有的灰度级的数量。

图像质量--对比度:图像中灰度反差的大小,对比度 = 最大亮度/最小亮度。

图像质量--清晰度:

主要因素

  • 亮度
  • 对比度
  • 尺寸大小
  • 细微层次
  • 颜色饱和度

调色板:图像的色彩索引表

HSI 模型:色调(H),饱和度(S),亮度(I)

饱和度:色相中灰成分所占的比例。

图像存储--行扫描:从左向右,从上到下

图像存储--交叉存储:隔行存储,或隔行隔列存储。

图像存储--有损压缩:记录主体特征。

图像存储--矢量存储:记录绘图指令。

图像处理常用数据结构:

  • 矩阵
  • 链码:直线斜率
  • 属性图

matlab 矩阵索引:列优先

空域图像增强

图像灰度映射

g(x,y)=EH[f(x,y)]g(x,y) = E_H[f(x,y)]

像素位置不变,灰度变化

  1. 线性灰度变换

    线性方程,可分段

    • 全域线性灰度变换

      [a,b][a,b] => [a,b][a',b']

    • 截取式线性灰度变换

      [a,b][a,b] => [a,b][a',b']

      <a<a => aa'

      >b>b => bb'

    • 分段线性灰度变换

  2. 非线性灰度变换

    • 对数变换

      s=clog(1+r)s=c\log(1+r)

      低区扩展,高区压缩

    • 指数变换

      s=crγs=cr^{\gamma}

      低区压缩,高区扩展

直方图处理

直方图是图像的一种统计表达。

直方图均衡化

一种使输出图像直方图近似为均匀分布的变换算法。

f(j) 表示灰度为 j 的像素数量。

P(j) 表示灰度为 j 的像素数量占总数的比例。

C(j) 表示灰度为 0~j 的像素数量占总数的比例。

g(j) 表示原灰度为 j 的像素在输出图像中的灰度。

g(j)=(gmaxgmin)C(j)+gmin+0.5g(j) = \lfloor(g_{\mathrm{max}}-g_{\mathrm{min}})C(j)+g_{\mathrm{min}}+0.5\rfloor

频数较小的灰度级被归入很少几个或一个灰度级内。

origin = imread("pout.tif");

[row,col] = size(origin); n = row * col;
f = [];
for j=0:255
    f(j+1) = size(find(origin==j),1);
end

P = double(f)/n; C = []; s = 0;
for j=0:255
    s = s + P(j+1); C(j+1) = s;
end

g = [];
for j=0:255
    g(j+1) = uint64((255-0) * C(j+1) + 0 + 0.5);
end

result = origin;
for j=0:255
    result(origin==j) = g(j+1);
end

subplot(2,2,3); imshow(origin); title("origin");
subplot(2,2,4); imshow(result); title("result");
subplot(2,2,1); imhist(origin);
subplot(2,2,2); imhist(result);

直方图规定化

使原图像灰度直方图变成规定形状的直方图的一种增强方法。

  1. 对原始图像作直方图均衡化
  2. 按目标灰度概率密度函数求得变换函数。
  3. 对均衡化后的原图,按变换函数作逆变换。

几何变换

平移、旋转、缩放、镜像

像素坐标用齐次坐标记为 (x,y,1)(x,y,1)

  • 平移

[xy1]=[x0y01][100010dxdy1] \begin{bmatrix} x&y&1 \end{bmatrix} =\begin{bmatrix} x_0&y_0&1 \end{bmatrix}\begin{bmatrix} 1&0&0\\ 0&1&0\\ \mathrm{dx}&\mathrm{dy}&1\\ \end{bmatrix}
  • 水平镜像

T=[100010001] T=\begin{bmatrix} 1&0&0\\ 0&-1&0\\ 0&0&1\\ \end{bmatrix}
  • 垂直镜像

T=[100010001] T=\begin{bmatrix} -1&0&0\\ 0&1&0\\ 0&0&1\\ \end{bmatrix}
  • 旋转

T=[cosθsinθ0sinθcosθ0001] T=\begin{bmatrix} \cos\theta&\sin\theta&0\\ -\sin\theta&\cos\theta&0\\ 0&0&1\\ \end{bmatrix}
  • 缩放

T=[fx000fy0001] T=\begin{bmatrix} f_x&0&0\\ 0&f_y&0\\ 0&0&1\\ \end{bmatrix}

插值运算

  • 线性内插
    • 前向映射法 通过输入位置计算输出位置
    • 后向映射法 通过输出位置计算输入位置 不会出现空白,实际常用
    • 最近邻 取最近的像素值
    • 双线性

双线性方程 f(x,y)=ax+by+cxy+df(x,y)=ax+by+cxy+d

f(0,0)=df(0,0)=df(1,0)=a+df(1,0)=a+df(0,1)=b+df(0,1)=b+df(1,1)=a+b+c+df(1,1)=a+b+c+d

f(x,y)=(f(1,0)f(0,0))x+(f(0,1)f(0,0))y+(f(1,1)+f(0,0)f(1,0)f(0,1))xy+f(0,0)f(x,y) = \begin{aligned} &(f(1,0)-f(0,0))x \\ +&(f(0,1)-f(0,0))y \\ +&(f(1,1)+f(0,0)-f(1,0)-f(0,1))xy \\ +&f(0,0) \end{aligned}

行插值:取左右相邻的非空像素的平均值 列插值:取上下相邻的非空像素的平均值

仿射变换

[xyw]=[abcdef001][xyw]\begin{bmatrix} x'\\y'\\w \end{bmatrix}= \begin{bmatrix} a&b&c\\ d&e&f\\ 0&0&1\\ \end{bmatrix} \begin{bmatrix} x\\y\\w \end{bmatrix}
  • 原点无需变换到原点
  • 线变换为线
  • 平行线保持平行
  • 比例保持

投影变换

[xyw]=[abcdefghi][xyw]\begin{bmatrix} x'\\y'\\w \end{bmatrix}= \begin{bmatrix} a&b&c\\ d&e&f\\ g&h&i\\ \end{bmatrix} \begin{bmatrix} x\\y\\w \end{bmatrix}
  • 原点无需变换至原点
  • 线变换为线
  • 比例不保持
  • 平行线无需保持平行

像素空间关系

  • 邻接
  • 连接
  • 连通

邻域

一个像素的周边像素的集合

  • 4-邻域 -- 4-邻接
  • 对角邻域 -- 对角邻接
  • 8-邻域 -- 8-邻接

连接

邻接(接触),且同在一个灰度值集合中取值(亲戚)

  • 4-连接
  • 8-连接
  • m-连接:4-邻接 或 (对角邻接且共同的四邻都不是他们的亲戚)

若 p 和 r 具有 4-连接 关系,则

  • p 和 r 具有 8-连接 关系
  • p 和 r 具有 m-连接 关系

若 p 和 r 具有 m-连接 关系,则

  • p 和 r 具有 8-连接 关系

连通

连接是连通的一种特例。

通路:由一系列依次连接的像素组成。

4-连通,8-连通 => 4-通路,8-通路

像素距离

  1. 欧氏距离
DE(p,q)=((xs)2+(yt)2)D_E(p,q)=\sqrt{((x-s)^2+(y-t)^2)}
  1. 城区距离
D4(p,q)=xs+ytD_4(p,q)=|x-s|+|y-t|
  1. 棋盘距离
D8(p,q)=max(xs,yt)D_8(p,q)=\mathrm{max}(|x-s|,|y-t|)

用距离定义邻域

4-邻域

N4(p)={rD4(p,r)=1}N_4(p)=\{r|D_4(p,r)=1\}

8-邻域

N8(p)={rD8(p,r)=1}N_8(p)=\{r|D_8(p,r)=1\}

邻域操作

  • 线性:如邻域平均
  • 非线性:如中值滤波
  • 平滑:模糊,消除噪声
  • 锐化:增强被模糊的细节

空域平滑

线性平滑

  • 邻域平均:取邻域内所有像素的平均值
  • 加权平均:对邻域内不同像素采用不同权值
  • 高斯平均:加权平均的特例,根据高斯分布确定系数

非线性平滑

  • 中值滤波:取邻域内所有像素的中间值
  • 最大(小)值滤波:取邻域内所有像素的最大(小)值
  • 中点滤波器:取邻域内所有像素的最大值和最小值的平均值

图像边缘处的处理

  • 省略缺失邻域的像素
  • 补充缺失的像素(全白或全黑)
  • 复制边界像素
  • 允许边界像素循环使用
发布于 2020-04-21地址: GitHub