├── 图像数字化
├── 视觉感知.md
├── 品质与噪声.md
├── 彩色图像
│ ├── README.md
│ └── YUV.md
├── 采样与量化.md
└── README.md
├── 图像分割
└── README.md
├── 开发框架
└── SDL
│ └── README.md
├── 图像数据压缩
├── PNG.md
└── README.md
├── 图像数据结构
└── README.md
├── SVG
├── 动画.md
├── README.md
└── 图形.md
├── README.md
├── 图像预处理
└── README.md
└── FFmpeg
├── 视频加水印.md
├── FFplay.md
└── README.md
/图像数字化/视觉感知.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/图像分割/README.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/图像数字化/品质与噪声.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/开发框架/SDL/README.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/图像数字化/彩色图像/README.md:
--------------------------------------------------------------------------------
1 | # 彩色图像
2 |
--------------------------------------------------------------------------------
/图像数据压缩/PNG.md:
--------------------------------------------------------------------------------
1 | # PNG
2 |
3 | # Links
4 |
5 | - https://mp.weixin.qq.com/s/wxpKVTn-ar3b7aok3CQIBA
6 |
--------------------------------------------------------------------------------
/图像数据结构/README.md:
--------------------------------------------------------------------------------
1 | # 图像数据结构
2 |
3 | 数据和算法是任何程序的两个基本的相关部分。数据的组织通常在很大程度上影响着算法的选择和实现的简洁性,因此,在写程序时数据结构的选择是一个重要问题[Wirth, 1976]。
4 |
--------------------------------------------------------------------------------
/SVG/动画.md:
--------------------------------------------------------------------------------
1 | # Svg 动画
2 |
3 | # Links
4 |
5 | - [SVG 动画精髓](https://parg.co/bNB):本文主要是讲解关于 SVG 的一些高级动画特效,比如 SVG 动画标签,图形渐变,路径动画,线条动画,SVG 裁剪等。
6 |
--------------------------------------------------------------------------------
/图像数字化/采样与量化.md:
--------------------------------------------------------------------------------
1 | # 采样与量化
2 |
3 | 为了用计算机来处理,图像必须用合适的离散数据结构来表达, 例如矩阵。传感器获取的图像是平面上两个坐标的连给函数 $f(x, y)$ 图像数字化是指将 $f(x, y)$ 采样(sampled)为一个 $M$ 行 $N$ 列的矩阵。图像量化(quantization)给每个连续的样本数值一个整数数字,图像函数 $f(x, y)$ 的连续范围被划分为 $K$ 个区间。采样及量化越精细(即,$M, N, K$ 越大),对连续函数 $f(x, y)$ 的近似就越好。
4 |
5 | 图像函数采样有两个问题,其一是确定采样的间隔,即相邻两个采样图像点的距离,其二是设置采样点。
6 |
7 | # 采样
8 |
9 | 一个连续图像在采样点(sampling point)处被数字化。这些采样点是在平面上排列的,称它们的几何关系为栅格(grid)。因此数字图像是一个数据结构,通常是矩阵。在实践中,栅格一般是方的或者是正六边形的。
10 |
11 | 
12 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 图像与媒体
2 |
3 | 图像和信号常用数学模型来描述。信号是一个依赖于具有某种物理意义的变量的函数,它可以是一维的(例如,依赖于时间)、二维的(例如,依赖于面上的两个坐标量)、三维的(例如,描述空间中的一个物体)或高维的。对于单色的图像,一个标量函数可能就足够了,但是对于诸如由三个分量组成的彩色图像就需要使用矢量函数。
4 |
5 | 我们要处理的函数可以分为连续的、离散的或数字的。连续函数具有连续的定义域和值域;如果定义域是离散的,我们得到的是离散函数;而如果值域也是离散的,我们就得到数字函数。
6 |
7 | 图像(Image)这一词我们通常在直观上理解其意义,例如,人类眼睛视网膜上的图像,或者 TV 摄像机抓取的图像。这可以表示为两个变量的一个连续(图像)函数 f(x,y),其中(x,y 是平面的坐标;或者可能是三个变量的连续函数 f(x,y,),其中 t 是时间在绝大多数应用中,包括我们日常生活中遇到的和本书中所要介绍的,这种表示是合理的。尽管如此,值得注意的是一幅“图像”有多种获的方式。我们将会注意到彩色是标准,即便在我们从单色图像的角度介绍算法时也是如此,但是我们也无将自己限定在可见光谱上。工作在红外谱段的摄像机现在已经很普通了(例如,用于夜间监视)。也可以使用其他电磁(EM)谱段部分,例如,可以广泛获得的太赫兹成像。进一步,在电磁(EM)谱段(即,“光)之外的图像获取也已经很普通了:在医学领域,数据集由核磁共振(MR)、计算机断层扫描摄影(CT)超声等形成。所有这些方法都产生大的数据矩阵,需要分析和理解而这些矩阵越来越多的是三维或更高维的。
8 |
9 | # Links
10 |
11 | > - https://zhuanlan.zhihu.com/p/71915244 数字图像处理
12 |
--------------------------------------------------------------------------------
/图像预处理/README.md:
--------------------------------------------------------------------------------
1 | # 图像预处理
2 |
3 | 预处理是指在处于最低抽象层次的图像上所进行的操作,这时处理的输入和输出都是亮度图像。这些图标图像是与传感器抓取到的原始数据同类的,通常是用图像函数值的矩阵表示的亮度图像。
4 |
5 | 预处理并不会增加图像的信息量。如果信息用熵来度量,那么预处理一般都会降低图像的信息量。因此,从信息理论的角度来看,最好的预处理是没有预处理,避免预处理的最好途径是着力于高质量的图像获取。然而,预处理在很多情况下是非常有用的,因为它有助于抑制与特殊的图像处理或分析任务无关的信息。因此,预处理的目的是改善图像数据,抑制不需要的变形或者增强某些对于后续处理重要的图像特征。考虑到图像的几何变换(比如旋转、变尺度、平移)使用类似的技术,这里我们将它看作预处理方法。
6 |
7 | 图像预处理方法按照在计算新像素亮度时所使用的像素邻域的大小分为四类:处理像素亮度变换、几何变换、使用待处理像素一个局部邻域的预处理方法、有关整个图像知识的图像复原技术。另一种角度是将图像预处理分为图像增强(Image Enhancement)、覆盖像素亮度变换以及图像复原(Image Restoration)。多数图像中存在着相当可观的信息冗余,这使得图像预处理方法可以利用图像数据本身来学习一些统计意义上的图像特征。这些特征或者用于抑预料之外的退化如噪声,或者用于图像增强。实际图像中的属于个物体的相邻像素基本上具有相同的或类似的亮度值,因此如果一个失真了的像素可以从图像中被挑出来的话,它一般可以用其邻接像素的平均值来复原。
8 |
9 | 如果图像预处理的目标是矫正图像的某种退化,那么先验信息的性质就很重要:
10 |
11 | - 第一类方法不使用有关退化性质的知识,仅假设退化的非常一般性的特征
12 | - 第二类方法假设具有有关图像获取设备的特性和获取图像时所处条件的知识。噪声的性质(通常是指其频域特征)有时是知道的。
13 | - 第三类方法使用有关图像中待搜索物体的知识,这样可以相当程度地简化预处理。如果事先无法获得有关物体的知识,可以在处理的过程中估计。如下的策略是可能的。首先对图像做粗处理以便减小数据量,找到图像物体。这样得到的图像信息被用于产生对图像物体属性的假设,然后在更高分辨率图像上检验该假设。如此地反复迭代直至出现的知识被证实或被拒绝。这个反馈可能会超出预处理,由于分割也产生有关物体的语义知识,因此反馈可以在物体分割之后启动。
14 |
--------------------------------------------------------------------------------
/图像数据压缩/README.md:
--------------------------------------------------------------------------------
1 | # 图像数据压缩
2 |
3 | 由于用来表示图像的数据数量通常很大,图像处理也往往具有很大难度。在技术上,图像的分辨率(空间上和灰度级别上)在不断增加,谱段(spectral band)的数量也在增加,因而需要限制由此带来的数据屋。我们来伯一个遥感领域的例子,其中图像数据压缩是一个很重要的问题。日本高级地球观测卫星(ADEOS, Advanced Earth Observing Satellite)能够在彩色谱段以 8 米的空问分辨率、在多谱段以 16 米的空间分辨率对地球表面进行观测,它的数据传送速率高达 120Mb/s。因此,这样的遥感数据所需要的存储介质数量是非常大的。
4 |
5 | 有着 3D 和 4D 数据的医学图像处理的情况与此类似。比如,单独一个从头到脚的 64 探测器(64-detector)的 CT 全身拆描可以在 10 秒内完成。这样的 CT 装肯可以传输分辨率高达 $0.5 \mathrm{mm}^{3}$ 的立体图像。在这个分辨率下的一个全身扫描对应 于将近 2GB 的数据 ($512 \times 512 \times 3600 \times 2$ 字节)。用于对小动物做研究的显微 CT (micro-CT ) 扫描也能获得 类似大小的数据文件。有一个可以减少必要的存储介质数量的方法,那就是处理压缩过的图像数据。
6 |
7 | 数据压缩方法可以分为两大主要类别:信息保持压缩能够保证进行无错的数据重建(无损压缩);而有信息丢失( with loss of information)的压缩方法则不能完整地保持信息(有损压缩)。在图像处理中,一个详确的重建实际上不是十分必要的,所以对的需求比较弱,但是图像数据压缩不应造成图像的明显改变。在重建图像中数据压缩的成功性通常以最小均方差(MSE, Mean Square Error)、信噪比等来衡量,尽管这些全局性的误差衡量方法并不总是能反映主观上的图像质量
8 |
9 | 图像数据压缩设计由两部分组成。首先第一部必须确定图像数据的性质;为这一目的服务的通常有灰度直方图、图像熵、各种相关函数等。第二部分相对于量测到的图像性质形成合适的压缩技术设计。有损的信息数据压缩方法在图像处理中非常典型,因此我们要相当详细地讨论这类方法。尽管有损压缩技术也可以提供具有非常好的重建质量的实质性图像压缩,但是出于某些考虑,它们的应用可能会遭到禁止例如,在医疗成像方面,诊断通常是基于可视图像的检查,因此不能容忍任何信息损失,必须使用信息保持技术。
10 |
--------------------------------------------------------------------------------
/图像数字化/README.md:
--------------------------------------------------------------------------------
1 | # 图像数字化
2 |
3 | 图像函数的值对应于图像点的亮度。函数值也可以表示其他物理量(温度、压力分布、离观察者的距离等)。亮度(brightness)集成了不同的光学量,将亮度作为一个基本量使我们得以避免对图像的成像过程进行描述。人类眼睛视网膜或者 TV 摄像传感器上的图像本身是两维的(2D)。我们将这种记录了明亮度信息的 2D 图像称为亮度图像(intensity image)。图像传感器上的 2D 图像通常是三维(3D)场景的投影结果。这一过程的最简单的数学模型就是所谓的针孔摄像机。
4 |
5 | 2D 亮度图像是 3D 场景的透视投影(perspective projection),这一过程由针孔摄像机拍摄的图像来表达。在下图中,图像平面被相对于 XY 平面反折过来了,以便避免使用具有负坐标的镜像图像;x,y,z 的量是世界坐标系中 3D 场景点 X 的坐标,f 是从针孔到图像平面的距离。通常称 f 为焦距,因为在镜头中它具有相似的含义。镜头近似于针孔摄像机而广为应用。投影后的点 u 具有 2D 图像坐标平面中的坐标$(u,v)$,根据相似三角形很容易导出:
6 |
7 | 
8 |
9 | 非线性的透视投影常被近似为线性的平行(parallel)(或正交(orthographic)) 投影(projection), 其 中 $f \rightarrow \infty$ 。隐含地,$z \rightarrow \infty$ 表明正交投影是远处物体透视投影的极限情况。当 3D 物体经透视投影映射到摄像机平面后,由于这样的变换不是一对一的,因而大量的信息消失了通过一幅图像来识别和重构 3D 场景中的体是个病态问题。可以预料,这不是一个简单的任务,涉及到试图建立图像中点的深度( depth)这个中间表达层次。目标是恢复完整的 3D 表达,比如计算机图形学中的表达,即,独立于视点的表达,表示在物体坐标系中而不是在观察者坐标系中。如果这样的表达可以恢复,则物体的任何视角的亮度图像可以用标准的计算机图形学技术合成出来。
10 |
11 | 图像处理通常考虑的是静态(static)图像,时间 t 作为常量。单色的静态图像是用连续的图像函数 f(x,y) 来表示的,其中的变量是平面的两个坐标。本书所考虑的图像除非特别声明大多数是指单色的静态图像。通常把这里所讲的技术推广到多光谱的情况下是显而易见的。计算机化的图像处理使用的数字图像函数通常表示成矩阵的形式,因此其坐标是整数。图像函数的定义域是平面的一个区域 R:
12 |
13 | $$
14 | R=\left\{(x, y), 1 \leqslant x \leqslant x_{n}, 1 \leqslant y \leqslant y_{n}\right\}
15 | $$
16 |
17 | 其中 $x_m$,$y_n$ 表示最大的图像坐标。图像函数具有有限的域由于假定图像函数在域 R 外的值为零,可以使用无限求和或积分的形式。尽管矩阵中使用的(行、列、左上原点)定位方式在数字图像处理中也常用到,但是习惯上采用的图像坐标方向仍然是普通的笛卡尔形式(横轴 x、纵轴 y、左下原点)图像函数的值域也是有限的,按照惯例,在单色图像中最低值对应于黑,而最高值对应于白。在它们之间的亮度值是灰阶(gray-level)。
18 |
19 | 数字图像的品质随着空间、频谱、辐射计量、时间分辨率增长而提高。空间分辨率( spatial resolution)是由图像平面上图像采样点间的接近程度确的,频谱分辨率( spectral resolution)是由传感器获得的光线频率带宽决定的,辐射计量分辨率( radiometrie resolution)对应于可区分的灰阶数量,时间分辨率(timeresolution)取决于图像获取的时间采样间隔。时间分辨率问题在动态图像分析中是重要的,其中处理的是图像的时间序列。图像 f(x,y) 可作为确定的函数或者是随机过程的实现来看待。图像描述中的数学工具根植于线性系统理论、积分变换、离散数学以及随机过程理论中。
20 |
--------------------------------------------------------------------------------
/FFmpeg/视频加水印.md:
--------------------------------------------------------------------------------
1 | 以下是一些使用 FFmpeg 为视频添加文字水印的常用方法和示例:
2 |
3 | ### 1. 基础命令示例
4 |
5 | ```bash
6 | # 添加简单文字水印
7 | ffmpeg -i input.mp4 -vf "drawtext=text='Your Text':x=10:y=10:fontsize=24:fontcolor=white" -codec:a copy output.mp4
8 |
9 | # 添加带背景的文字水印
10 | ffmpeg -i input.mp4 -vf "drawtext=text='Your Text':fontsize=24:fontcolor=white:box=1:boxcolor=black@0.5:boxborderw=5:x=10:y=10" -codec:a copy output.mp4
11 | ```
12 |
13 | ### 2. 常用参数说明
14 |
15 | ```bash
16 | drawtext 参数选项:
17 | fontsize # 字体大小
18 | fontcolor # 字体颜色
19 | fontfile # 字体文件路径
20 | x # X 坐标位置
21 | y # Y 坐标位置
22 | box # 是否显示背景框
23 | boxcolor # 背景框颜色
24 | alpha # 透明度
25 | ```
26 |
27 | ### 3. 实用示例
28 |
29 | 1. **添加时间戳水印**
30 |
31 | ```bash
32 | ffmpeg -i input.mp4 -vf "drawtext=text='%{pts\:hms}':x=10:y=10:fontsize=24:fontcolor=white" -codec:a copy output.mp4
33 | ```
34 |
35 | 2. **添加多行文字**
36 |
37 | ```bash
38 | ffmpeg -i input.mp4 -vf "drawtext=text='Line 1':x=10:y=10:fontsize=24:fontcolor=white,drawtext=text='Line 2':x=10:y=40:fontsize=24:fontcolor=white" -codec:a copy output.mp4
39 | ```
40 |
41 | 3. **居中显示文字**
42 |
43 | ```bash
44 | ffmpeg -i input.mp4 -vf "drawtext=text='Centered Text':fontsize=24:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2" -codec:a copy output.mp4
45 | ```
46 |
47 | ### 4. 相关 GitHub 项目推荐
48 |
49 | 1. [video-watermark](https://github.com/h2non/video-watermark)
50 |
51 | - Node.js 库,支持添加图片和文字水印
52 | - 基于 FFmpeg
53 |
54 | 2. [FFmpeg-video-watermark](https://github.com/leixiaohua1020/FFmpeg-video-watermark)
55 |
56 | - 提供多种水印添加示例
57 | - 包含详细的中文注释
58 |
59 | 3. [ffmpeg-watermark](https://github.com/protyposis/ffmpeg-watermark)
60 |
61 | - 简单的水印添加脚本
62 | - 支持批量处理
63 |
64 | ### 5. 进阶使用示例
65 |
66 | 1. **添加动态移动的文字**
67 |
68 | ```bash
69 | ffmpeg -i input.mp4 -vf "drawtext=text='Moving Text':x='if(gte(t,0), mod(0.5*t\*(w+tw), w+tw)-tw, NAN)':y=50:fontsize=24:fontcolor=white" -codec:a copy output.mp4
70 | ```
71 |
72 | 2. **添加带渐变效果的文字**
73 |
74 | ```bash
75 | ffmpeg -i input.mp4 -vf "drawtext=text='Fading Text':x=10:y=10:fontsize=24:fontcolor=white@0.5:enable='between(t,0,5)'" -codec:a copy output.mp4
76 | ```
77 |
78 | 3. **使用自定义字体**
79 |
80 | ```bash
81 | ffmpeg -i input.mp4 -vf "drawtext=fontfile=/path/to/font.ttf:text='Custom Font':x=10:y=10:fontsize=24:fontcolor=white" -codec:a copy output.mp4
82 | ```
83 |
84 | 这些命令和项目可以帮助你实现各种文字水印效果。记得根据实际需求调整参数,比如字体大小、位置、颜色等。
85 |
--------------------------------------------------------------------------------
/SVG/README.md:
--------------------------------------------------------------------------------
1 | # SVG
2 |
3 | SVG 指可伸缩矢量图形 (Scalable Vector Graphics),用来定义用于网络的基于矢量的图形,它在放大或改变尺寸的情况下其图形质量不会有所损失。Svg 使用 XML 格式定义图形,与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体。
4 |
5 | # 语法定义
6 |
7 | SVG 基础语法如下:
8 |
9 | ```xml
10 |
11 |
13 |
17 | ```
18 |
19 | 第一行包含了 XML 声明。请注意 standalone 属性,该属性规定此 SVG 文件是否是独立的,或含有对外部文件的引用。standalone=”no” 意味着 SVG 文档会引用一个外部文件,这里即是 DTD 文件。第二和第三行引用了这个外部的 SVG DTD。该 DTD 位于 “http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"。该 DTD 位于 W3C,含有所有允许的 SVG 元素。
20 |
21 | SVG 代码以 `