Featured image of post 图像处理的数学原理

图像处理的数学原理

似曾相识……

图像的表示

在计算机(实际上是任何电子产品)中,图像的本质是一个分块矩阵。

$$ \bm{Image} = \left[\begin{matrix} \bm{P}_{11} & \bm{P}_{12} & \cdots & \bm{P}_{1n} \\ \bm{P}_{21} & \bm{P}_{22} & \cdots & \bm{P}_{2n} \\ \vdots & \vdots & & \vdots \\ \bm{P}_{m1} & \bm{P}_{m2} & \cdots & \bm{P}_{mn} \end{matrix}\right] $$

其中每个小矩阵 $\bm{P}_{ij}$ 以 $RGB$ 的格式存储了该处的颜色信息。

像素

像素是构成数字图像的最小、最基本的单位。可以把它想象成一块块微小的、带有颜色的“马赛克”或“积木”。

例如,对于这一张图片:

示例图片

当将其放大到一定倍数后,将出现这个情况:

示例图片放大

可以看出,图片变成了一个个排列整齐的色块。我们把这些色块称作像素块。每个像素块对应上述的每个小矩阵 $\bm{P}_{ij}$。它具有以下几个性质:

  1. 像素块是排列整齐、均匀的正方形区域。
  2. 每个像素块只能有一种颜色。

由性质2,像素块还可以看作是:图像中不可再分的最小颜色区域。

我们日常生活中常见的图片是 $n*m$ 像素,就表示图片的长有 $n$ 个像素块,宽(或常称作高)有 $m$ 个像素块。其中 $m$ 和 $n$ 分别代表图像矩阵的行数和列数。

由此可见,当 $n$ 和 $m$ 的数值越大,图片可容纳的像素块就越多,表示的信息就越丰富;相应地,占用的存储空间也就越大。

色值

色值表示了像素块储存的颜色信息,目前最流行的色值表示方法为 $RGB$ 色值。

每个 $RGB$ 色值有3个信息位,分别表示 红色(Red)、绿色(Green)、蓝色(Blue),取值范围均为 $[0,255]$ 的整数。相应的数值越大,表明该颜色在总颜色的占比越高。

例如 $[255,0,0]$ 就表示纯红色,$[255,255,255]$ 表示白色,$[0,0,0]$ 表示黑色。所以,上述的每个小矩阵

$$\bm{P_{ij}} = [R,G,B]$$

其中 $R$,$G$,$B$ 分别是取值 $[0,255]$ 的整数。

红、绿、蓝是光的三基色,因此将此三种颜色按一定比例混合就可以产生我们可见的所有颜色。

在一些图像处理软件中,$RGB$ 的范围被定义成 $[0,1]$。实际上,这就是 $[0,255]$ 到 $[0,1]$ 上的一个压缩映射。这时,$10$ 就表示 $\displaystyle \frac{10}{255}$;$255$ 就表示 $1$。

$RGB$ 色值还有一种表示方法,即通过 # + 6位16进制数 表示。因为10进制的 $[0,255]$ 恰好对应16进制的 $[00,FF]$,所以需要6个数位表示。

例如 $\# 000000$ 对应 $[0,0,0]$,$\# FFFFFF$ 对应 $[255,255,255]$。

图像混合

由图像的表示原理可知,所有图像的操作本质上是对像素块的操作。

正片叠底

正片叠底,简单而言就是将两张图像合并为一张图像的过程。具体操作就是取两个图像对应的像素块,对其 $RGB$ 色值分别相乘,再除以 $255$。

定义新运算 $*$ 称为正片叠底运算:

对任意两个图像矩阵 $\bm{I}_1$,$\bm{I}_2$,取其重叠部分,有

$$\begin{align*} \bm{I_1} * \bm{I_2} &= \left[\begin{matrix} \bm{A}_{11} & \bm{A}_{12} & \cdots & \bm{A}_{1n} \\ \bm{A}_{21} & \bm{A}_{22} & \cdots & \bm{A}_{2n} \\ \vdots & \vdots & & \vdots \\ \bm{A}_{m1} & \bm{A}_{m2} & \cdots & \bm{A}_{mn} \end{matrix}\right] * \left[\begin{matrix} \bm{B}_{11} & \bm{B}_{12} & \cdots & \bm{B}_{1n} \\ \bm{B}_{21} & \bm{B}_{22} & \cdots & \bm{B}_{2n} \\ \vdots & \vdots & & \vdots \\ \bm{B}_{m1} & \bm{B}_{m2} & \cdots & \bm{B}_{mn} \end{matrix}\right] \\ \\ &= \frac{1}{255} \left[\begin{matrix} \bm{A}_{11} \cdot \bm{B}_{11} & \bm{A}_{12} \cdot \bm{B}_{12} & \cdots & \bm{A}_{1n} \cdot \bm{B}_{1n} \\ \bm{A}_{21} \cdot \bm{B}_{21} & \bm{A}_{22} \cdot \bm{B}_{22} & \cdots & \bm{A}_{2n} \cdot \bm{B}_{2n} \\ \vdots & \vdots & & \vdots \\ \bm{A}_{m1} \cdot \bm{B}_{m1} & \bm{A}_{m2} \cdot \bm{B}_{m2} & \cdots & \bm{A}_{mn} \cdot\bm{B}_{mn} \end{matrix}\right] \end{align*}$$

容易知道,对于运算 $*$,满足以下性质:

  1. 封闭性:任何两张图像正片叠底后仍是一张图像(这不废话么……)。
  2. 可结合性:$$(\bm{A}*\bm{B})*\bm{C} = \bm{A}*(\bm{B}*\bm{C})$$ 即多张图像正片叠底,最终效果与正片叠底顺序无关
  3. 可交换性:$$\bm{A}*\bm{B} = \bm{B}*\bm{A}$$ 即两张图像正片叠底,最终效果与哪张图像作为底图无关
  4. 具有零元 $$ \bm{\theta} = \left[\begin{matrix} \bm{O} & \bm{O} & \cdots & \bm{O} \\ \bm{O} & \bm{O} & \cdots & \bm{O} \\ \vdots & \vdots & & \vdots \\ \bm{O} & \bm{O} & \cdots & \bm{O} \end{matrix}\right] $$ 其中 $\bm{O} = [0,0,0]$。
    任何一张图像与纯黑图像正片叠底,都将得到纯黑图像
  5. 具有幺元(单位元)$$ \bm{e} = \left[\begin{matrix} \bm{E} & \bm{E} & \cdots & \bm{E} \\ \bm{E} & \bm{E} & \cdots & \bm{E} \\ \vdots & \vdots & & \vdots \\ \bm{E} & \bm{E} & \cdots & \bm{E} \end{matrix}\right] $$ 其中 $\bm{E} = [255,255,255]$。
    任何一张图像与纯白图像正片叠底,都将得到原图像

因此运算 $*$ 构成一个独异点(雾)。

由性质4和5可知,正片叠底实现了“去白留黑”。

容易看出,图层混合是对图像对应的像素块做相同的操作,定义图层混合运算仅需给出对于像素块的操作。

反色

反色,通俗地讲就是将图像颜色“反转”,也就是每个像素块的颜色都变成 $[255-R,255-G,255-B]$。

定义运算 $!$ 为反色运算,则

$$ !\bm{Image} = \bm{e}-\bm{Image} = [255-R,255-G,255-B] $$

特别地,有:

$$!\bm{e} = \bm{\theta} \\ !\bm{\theta} = \bm{e}$$

经过反色操作,图像的黑色会变成白色,白色会变成黑色。

滤色

滤色计算公式为:$!((!\bm{A}) * (!\bm{B})) = \bm{e}-(\bm{e}-\bm{A})*(\bm{e}-\bm{B})$

特别地,取 $\bm{B} = \bm{e}$,即与纯白图片滤色,则有

$$!((!\bm{A}) * (!\bm{B})) = \bm{e}-\bm{\theta} * (\bm{e}-\bm{A}) = \bm{e}-\bm{\theta} = \bm{e}$$

取 $\bm{B} = \bm{\theta}$,即与纯黑图片滤色,则有

$$!((!\bm{A}) * (!\bm{B})) = \bm{e}-\bm{e} * (\bm{e}-\bm{A}) = \bm{e}-(\bm{e}-\bm{A}) = \bm{A}$$

由上述公式可知,滤色实现了“去黑留白”。

变亮&变暗

定义运算 $\mathrm{MAX}$ 为变亮运算,$\mathrm{MIN}$ 为变暗运算。分析每一个像素块,则:

$$ \begin{align*} \mathrm{MAX}(\bm{A}, \bm{B}) &= [\mathrm{max}(R_1,R_2),\mathrm{max}(G_1,G_2),\mathrm{max}(B_1,B_2)] \\ \\ \mathrm{MIN}(\bm{A}, \bm{B}) &= [\mathrm{min}(R_1,R_2),\mathrm{min}(G_1,G_2),\mathrm{min}(B_1,B_2)] \end{align*}$$
Licensed under CC BY-NC-SA 4.0
网站总访客数:Loading

使用 Hugo 构建
主题 StackJimmy 设计