From eddc8f29eb6425601853829b347cbc976bf0174c Mon Sep 17 00:00:00 2001 From: "Y.D.X" <73375426+YDX-2147483647@users.noreply.github.com> Date: Mon, 19 Jun 2023 15:14:29 +0800 Subject: [PATCH] =?UTF-8?q?[course]=20=E6=97=A5=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/assets/DCT-symmetries.svg | 1 + docs/assets/Opening.png | Bin 0 -> 7515 bytes docs/course/digital-image-processing.md | 203 +++++++++++++++++++++++- 3 files changed, 202 insertions(+), 2 deletions(-) create mode 100644 docs/assets/DCT-symmetries.svg create mode 100644 docs/assets/Opening.png diff --git a/docs/assets/DCT-symmetries.svg b/docs/assets/DCT-symmetries.svg new file mode 100644 index 0000000..7ef5cc9 --- /dev/null +++ b/docs/assets/DCT-symmetries.svg @@ -0,0 +1 @@ + N = 11 DCT-I: DCT-II: DCT-III: 0 10 DCT-IV: \ No newline at end of file diff --git a/docs/assets/Opening.png b/docs/assets/Opening.png new file mode 100644 index 0000000000000000000000000000000000000000..f4e995bc644312716f390bd66099a60d7b5a2981 GIT binary patch literal 7515 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 :material-clock-edit-outline: 2023年6月18日。 +> :material-clock-edit-outline: 2023年6月18–19日。 基本步骤如下。 @@ -113,12 +117,207 @@ The multidimensional DFT expresses the input as a superposition of plane waves, 4. 反变换。 5. 时域取结果实部,恢复频域中心化,丢弃之前补零多的部分。 +- 平滑:门(理想,振铃),Butterworth(仅高阶振铃明显),Gaussian。 +- 锐化:平滑滤波器的补,Laplacian(频谱数值数量级可能增大)。增强图像时高频提升(时域加常数)或高频加强(频域加常数),并结合直方图均衡化。 + +### 同态滤波 + +> :material-clock-edit-outline: 2023年6月19日。 + +采用 illumination–reflectance 模型,希望去除照度分量的影响,压缩动态范围,增强对比度。 + +时域取对数,改积为和,再滤波。 + ## §5 复原与重建 +> :material-clock-edit-outline: 2023年6月19日。 + +退化模型:线性位置不变算子、加性噪声。物理上是获取图像时光的波动性、成像时运动、大气湍流等,和传输图像时的干扰。 + +- **空间滤波抑制噪声** + + - **均值**:算术、几何应对 Gaussian 或均匀噪声,几何均值不太模糊,但扩大黑物。反谐波 $g \mapsto \overline{g^{Q+1}} / \overline{g^Q}$ 应对 salt 或 pepper(不可兼)。 + + - **顺序统计量**:中值(重复使用会模糊)、最大(扩散亮部)、最小(扩散暗部)应对脉冲噪声。最值中点应对 Gaussian 或均匀噪声,且毫不模糊。修正α综合,可应对多种噪声混合。 + + - **自适应**:利用局部信息。 + - 均值:用局部方差与噪声方差的比例(大则信号,小则噪声),在原值与局部均值间定比分点。 + - 中值:判断中值是否为脉冲,若是,扩大窗重新计算。可处理更大概率的脉冲噪声。 + +- **频率滤波抑制周期噪声** + + - **带阻、带通**:旋转对称,$x \mapsto \abs{x} - \mu^2 / \abs{x}$,再代入低通或高通滤波器。 + + - **陷波**(notch):中心对称,$x \mapsto \abs{x-\mu} \times \abs{x+\mu}$。所谓“最佳陷波”先带通选出噪声,按一定比例减去,系数由邻域内最小二乘法。 + +- **抵消线性位置不变算子** + + **估计**退化函数:强行观察(后验方法,利用图中点、线),试验点扩散函数,建立模型(大气湍流、运动模糊、光学散焦)。 + + !!! note "匀速运动模糊" + + 设位移为 $2 \gamma (\alpha, \beta)$($\alpha^2 + \beta^2 = 1$,$\gamma > 0$),则 + + $$ + \eval{h}_{x,y} = \eval{\delta}_{\beta x - \alpha y} \eval{G_{2\gamma}}_{\alpha x + \beta y - \gamma}. + $$ + + 于是 + + $$ + \begin{split} + \eval{H}_{u,v} + &= \iint \eval{h}_{x,y} e^{-j (u x + v y)} \dd{x} \dd{y} \\ + &= 2\gamma \sinc(\gamma(\alpha u + \beta v)) \times e^{-j\gamma(\alpha u + \beta v)}. + \end{split} + $$ + + **复原**图像: + + - **逆滤波**:信号弱的频率上,噪声影响不可控,还不如保持原貌或直接抑制。 + - 改进有**Wiener最小均方误差**、约束最小二乘等。 + ## §6 彩色 +### 色彩模型 + +> :material-clock-edit-outline: 2023年6月19日。 + +面向硬件: + +- RGB (red, green, blue) ——加色 +- CMYK (cyan, magenta, yellow; black) ——减色 + +面向应用: + +- HSI (hue, saturation, intensity) ——符合人的视觉,I可当作灰度图像处理 +- Lab ——亮度、色彩更分离 + +### 伪彩色 + +> :material-clock-edit-outline: 2023年6月19日。 + +把灰度信号重映射为色彩,方便人理解。(人约40灰度,而数千色调、亮度) + +- 灰度分层 +- 向量的变换 +- 真彩色重映射 + ## §8 压缩 +### 冗余 + +> :material-clock-edit-outline: 2023年6月19日。 + +- 编码冗余——熵 +- 空间、时间相关——条件熵 +- 无关信息——心理视觉或噪声 + +### 具体编码 + +> :material-clock-edit-outline: 2023年6月19日。 + +- **Huffman** + + 依单个符号的概率分配变长码,低概率的分长码。 + +- **算术** + + 将累积联合概率表示为二进制小数。 + +- **变换** + + 变换集中信号,像素解相关,适应心理视觉。编码步骤为分块、正变换、量化、熵编码,解码反之。 + + DCT(discrete cosine transform)有多种,本课采用图中Ⅱ。 + +
+ ![](../assets/DCT-symmetries.svg) +
DCT 可采用多种对称性|[Wikimedia Commons](https://en.wikipedia.org/wiki/File:DCT-symmetries.svg)
+
+ + $$ + \eval{X}_k = \sum_n \eval{x}_n \cos(\frac{\pi}{N} \qty(n + \frac12) k). + $$ + + > :material-eye-arrow-right: [Discrete cosine transform - Wikipedia](https://en.wikipedia.org/wiki/Discrete_cosine_transform#DCT-II). + + Some authors (including this course) further multiply the $\eval{X}_{0}$ term by $\sqrt{1/N}$ and multiply the rest of the matrix by an overall scale factor of $\sqrt{2/N}$. This makes the DCT-II matrix orthogonal, but breaks the direct correspondence with a real-even DFT of half-shifted input. + ## §9 形态学处理 +> :material-clock-edit-outline: 2023年6月19日。 +> +> :material-eye-arrow-right: [Mathematical morphology - Wikipedia](https://en.wikipedia.org/wiki/Mathematical_morphology). + +形态学是 morphology。 + +The erosion of the binary image A by the structuring element B is defined by $A \ominus B \coloneqq \qty{z | B_z \subset A} = \bigcap_{b \in B} A_{-b}$. Dilation $A \oplus B \coloneqq \bigcup_{b \in B} A_b$. 单独 erosion, dilution 会系统性地缩小或放大图形。 + +
+ ![](../assets/Opening.png) +
The opening of the dark-blue square by a disk, resulting in the light-blue square with round corners | [Wikimedia Commons](https://en.wikipedia.org/wiki/File:Opening.png)
+
+ +Opening $A \circ B \coloneqq (A \ominus B) \oplus B$, closing $A \bullet B \coloneqq (A \oplus B)\ominus B$. + +| 操作 | 作用 | +| :---------------: | :----------------: | +| erosion, opening | 清楚细物,断开窄桥 | +| dilution, closing | 填充孔洞,连接断口 | + +若结构元光滑(如圆盘),则 opening, closing 也会让图形光滑,二者区别在于 opening 只对凸处有效,而 closing 只对凹处有效。(它们对偶) + ## §10 分割 + +### 概念 + +> :material-clock-edit-outline: 2023年6月19日。 + +- 目的:基本预处理。挑出感兴趣的区域,供后续分析属性。 +- 原理:灰度在区域内相似、连通,在边界处突变。 +- 手段:平滑噪声后,检测边缘,连接边缘(通常用形态学手段),划分区域。 + +### 检测边缘 + +> :material-clock-edit-outline: 2023年6月19日。 + +- 一阶 + + - Roberts 四点差分。 + - Prewitt 边界两排差分。 + - Sobel 边界两排加权差分,边界比 Prewitt 略清晰。 + +- 二阶 + + 会出双脉冲,可区分亮暗侧,但定界还要取零交叉点。 + + Laplacian 各向同性(无法检测边缘方向) + + 对噪声很敏感,必须前平滑或等价地采用 Laplacian of Gaussian(Marr–Hildreth),也可用 Difference of Gaussian 近似。 + +- Canny + + > :material-eye-arrow-right: [Canny edge detector - Wikipedia](https://en.wikipedia.org/wiki/Canny_edge_detector). + + 1. Gaussian 平滑。 + 2. 检测梯度幅度、方向,其中方向可以分成几个扇区。 + 3. Non-maximum suppression,在边缘法向上只保留梯度最强的点。(edge thinning technique) + 4. 用两个阈值挑出强、弱边缘点。强边缘点视作真正边缘,弱边缘点下面视情况而定。 + 5. 按滞后阈值(hysteresis)跟踪边缘,将一些弱边缘点划入边缘。具体来说,与已知边缘相连的弱边缘点划入边缘,迭代至收敛。 + +### Hough 变换 + +> :material-clock-edit-outline: 2023年6月19日。 + +这是种整体处理,可用于连接边缘。抗噪声能力较强。 + +寻找参数空间的峰值。参数空间一点对应原空间集合,原空间一点也对应参数空间一集合。 + +### 阈值分割 + +> :material-clock-edit-outline: 2023年6月19日。 + +用于划分区域。 + +在直方图峰之间确定阈值。可利用各区域均值的算术平均迭代自动确定阈值。