一种改进的帧间差光流场算法

合集下载

光流计算方法

光流计算方法

光流计算方法光流计算是计算机视觉中的一项重要任务,它用于估计图像中物体的运动信息。

通过分析连续帧之间的像素变化,光流计算方法可以推断出物体的速度和方向。

本文将介绍光流计算的基本原理和常用方法。

一、光流计算的原理光流计算的基本原理是利用图像中像素的亮度变化来推断物体的运动。

当物体在图像中移动时,其像素的亮度也会发生变化。

光流计算的目标是通过分析这些亮度变化来估计物体的运动速度和方向。

二、光流计算的方法1. 基于亮度一致性约束的光流计算方法基于亮度一致性约束的光流计算方法假设图像上的亮度在时间上保持不变。

根据这个假设,可以得到一个基本的光流方程。

通过求解这个方程,可以得到物体的运动速度。

2. 基于亮度梯度的光流计算方法基于亮度梯度的光流计算方法利用图像中像素的亮度梯度来推断物体的运动。

通过计算像素的梯度向量,可以得到物体的运动速度和方向。

3. 基于相位相关的光流计算方法基于相位相关的光流计算方法利用图像中像素的相位信息来推断物体的运动。

通过计算像素的相位相关性,可以得到物体的运动速度和方向。

4. 基于稠密光流的光流计算方法基于稠密光流的光流计算方法将光流计算应用到整个图像中的每个像素。

通过计算每个像素的运动速度和方向,可以得到整个图像的光流场。

三、光流计算的应用光流计算在计算机视觉中有着广泛的应用。

其中一些应用包括:1. 视频稳定通过光流计算,可以估计视频中相邻帧之间的运动信息,从而实现视频的稳定。

2. 目标跟踪通过光流计算,可以估计目标在图像中的运动轨迹,从而实现目标的跟踪。

3. 动作识别通过光流计算,可以分析视频中人物的运动信息,从而实现动作的识别。

4. 自动驾驶光流计算在自动驾驶中有着重要的应用。

通过估计道路上物体的运动信息,可以实现车辆的自动驾驶。

四、光流计算的挑战和改进光流计算面临许多挑战,比如图像噪声、运动模糊和遮挡等。

为了提高光流计算的准确性和鲁棒性,研究人员提出了许多改进方法,如基于深度学习的光流估计和基于稠密匹配的光流计算方法。

帧间差分法运动目标检测过程及原理

帧间差分法运动目标检测过程及原理

帧间差分法运动目标检测过程及原理帧间差分法是一种常用的视频运动目标检测技术,它通过比较视频序列中相邻帧之间的差异来检测目标的运动。

该方法常用于视频监控、智能交通系统、视频分析等领域。

本文将介绍帧间差分法的运动目标检测过程及原理,以及其在实际应用中的优势和局限性。

一、帧间差分法的原理帧间差分法的原理基于一个简单的假设:如果某个像素点在相邻两帧之间的亮度发生了变化,那么这个像素点所对应的物体就有可能发生了运动。

根据这个假设,可以通过计算相邻两帧之间的像素点亮度差异来确定目标的运动。

在实际应用中,帧间差分法通常使用以下公式来计算相邻两帧的像素点差异:D(x,y,t) = |I(x,y,t) - I(x,y,t-1)|D(x,y,t)表示在时间t时刻的像素点(x,y)的差分值,I(x,y,t)表示在时间t时刻的像素点(x,y)的亮度值,t-1表示时间t之前的时刻。

通过计算相邻两帧之间的像素点差异,可以得到一副差分图像,该图像中像素点的数值表示了该点在帧间差分中的差异程度。

接着,可以对差分图像进行阈值处理,将高于阈值的像素点标记为目标像素点,从而实现目标的运动检测。

帧间差分法的运动目标检测过程包括以下几个步骤:1. 视频帧获取和预处理首先需要从视频流中获取连续的视频帧,并对每一帧进行预处理,包括灰度化、降噪、边缘检测等操作,以便后续运动目标检测的准确性和鲁棒性。

2. 帧间差分计算对相邻两帧的视频进行帧间差分计算,得到差分图像。

可以使用绝对差值、差分平均值等方式来计算差分图像。

3. 阈值处理对差分图像进行阈值处理,将高于阈值的像素点标记为目标像素点。

阈值的选择是帧间差分法中需要仔细考虑的一个关键问题,合适的阈值能够更好地区分目标和背景,提高检测准确度。

4. 目标区域提取通过连通域分析、形态学处理等方法,将标记为目标像素点的区域进行进一步的提取和分割,得到目标的位置信息。

5. 目标跟踪和输出对提取得到的目标区域进行目标跟踪和输出,可以采用卡尔曼滤波、光流算法等方法来对目标进行跟踪,最终实现目标的运动检测和输出。

光流对齐算法-概述说明以及解释

光流对齐算法-概述说明以及解释

光流对齐算法-概述说明以及解释1.引言1.1 概述光流对齐算法是一种用于计算图像序列中相邻帧之间运动信息的方法。

在计算机视觉领域,光流是指由于物体在连续帧间的相对运动而导致的像素亮度变化模式。

光流对齐算法通过分析图像中像素点的亮度变化,推断出像素点在不同帧间的运动轨迹和速度。

光流对齐算法的基本原理是基于两个关键假设:亮度恒定性和空间一致性。

亮度恒定性指的是在连续帧之间,同一物体的像素点的亮度保持不变;空间一致性则表明光流在相邻像素点之间应具有较高的一致性。

基于这两个假设,光流对齐算法通过优化像素点的亮度变化来估计物体在视频序列中的运动轨迹。

光流对齐算法在许多领域有着广泛的应用。

其中,视频稳定和视频压缩是最为常见的应用之一。

通过光流对齐算法,可以实现视频稳定,即抑制由于相机抖动或运动引起的视频模糊。

在视频压缩中,光流对齐算法可以用于提供更好的运动预测,以减少视频编码中的冗余信息,从而实现更高效的压缩算法。

总结而言,光流对齐算法是一种基于图像亮度变化的运动估计方法,凭借其在视频稳定和视频压缩等领域的广泛应用,成为计算机视觉领域中重要的技术手段。

本文将围绕光流算法的基本概念、光流对齐算法的原理和应用领域展开讨论,总结光流对齐算法的优点,并探讨其改进和未来发展的展望。

1.2 文章结构本文将详细介绍光流对齐算法的原理、应用领域以及相关的改进和展望。

文章的结构如下:第一部分是引言部分,其中包括以下内容:- 概述:介绍光流对齐算法的背景和意义。

探讨光流对齐算法在图像处理和计算机视觉领域的重要性。

- 文章结构:概括介绍本文的整体结构和各个部分的内容。

- 目的:明确论文的目标和意图,阐述本文旨在解决的问题。

第二部分是正文部分,主要包括以下内容:- 光流算法的基本概念:对光流算法的基本原理和概念进行详细解释,包括描述光流的定义、计算光流的方法以及光流场的特点等。

- 光流对齐算法的原理:剖析光流对齐算法的基本原理和实现方法,介绍对齐算法中使用的技术和策略,包括特征点匹配、运动估计和图像对齐等。

光流

光流

视觉心理学认为人与被观察物体发生相对运动时,被观察物体表面带光学特征的部位的移动给人们提供了运动和结构的信息。

当相机与场景目标间有相对运动时所观察到的亮度模式运动称之为光流(optical flow),或者说物体带光学特征部位的移动投影到视网膜平面(也即图像平面)上就形成了光流。

光流场的计算一般分为四类:基于梯度的方法(Horn-Schunck 和Lucas-Kanade 算法都是基于梯度的算法);基于匹配的方法;基于能量的方法;基于相位的方法。

基于梯度的方法利用图像灰度的梯度来计算光流,是研究最多的方法。

基于梯度的方法根据运动前后图像灰度保持不变这个基本假设,导出光流约束方程。

由于光流约束方程并不能唯一的确定光流,因此需要导入其他的约束。

根据引入的约束不同,基于梯度的方法又可以分为全局约束方法和局部约束方法。

全局约束的方法假定光流在整个图像范围内满足一定的约束条件;而局部约束的方法假定在给定点周围的一个小区域内,光流满足一定的约束条件。

基于匹配的方法,这类方法是将速度m v 定义为视差(,)T dx dy =d ,使得两个时刻的图像区域的匹配最佳。

为了找到最佳匹配,我们可以对定义在d 上的相似度量,如规一化的互相关系数,进行最大化,也可以对某一距离度量,如光强度差的平方和,进行最小化。

基于梯度的光流场算法介绍梯度光流法又分为全局约束方法和局部约束方法。

全局约束方法假定光流在整个图像范围内满足一定的约束条件,而局部约束的方法假定在给定点周围的一个小区域内,光流满足于一定的约束条件。

下面先导出光流约束方程。

然后给出两种比较典型的基于梯度的方法。

1、光流约束方程假定图像上点(,)T x y =m 在时刻t 的灰度值为(,,)I x y t ,经过时间间隔dt 后,对应点的灰度为(,,)I x dx y dy t dt +++,当0dt →时,可以认为两点的灰度不变,也就是:(,,)(,,)I x dx y dy t dt I x y t +++= (1)如果图像灰度随,,x y t 缓慢变化,可以将(1)式左边泰勒级数展开:(,,)(,,)I I II x dx y dy t dt I x y t dx dy dt x y tε∂∂∂+++=++++∂∂∂ (2) 其中ε代表二阶无穷小项。

帧间差分法运动目标检测过程及原理

帧间差分法运动目标检测过程及原理

帧间差分法运动目标检测过程及原理帧间差分法是一种常用的视频运动目标检测方法,它广泛应用于视频监控、智能交通、智能车辆等领域。

本文将从帧间差分法的原理和检测过程两个方面进行介绍。

一、帧间差分法的原理帧间差分法是一种基于像素级的运动目标检测方法,它利用相邻视频帧之间的像素差异来提取运动目标。

其原理是通过比较相邻两帧图像的像素值之差,来检测图像中的运动目标。

如果相邻两帧图像中某一像素点的像素值之差超过了一个设定的阈值,那么就认为该像素点处于运动状态。

通过对每个像素点进行类似的处理,就可以提取出视频中的运动目标。

帧间差分法的原理比较简单,但是在实际应用中需要考虑的因素较多,例如光照变化、背景干扰、噪声等问题都会对帧间差分法的检测效果产生影响。

帧间差分法通常需要结合其他方法来解决这些问题,以提高检测的准确性和稳定性。

帧间差分法的检测过程通常可以分为以下几个步骤:1. 视频获取:首先需要获取视频数据,可以通过摄像头、视频文件等方式获取到需要进行运动目标检测的视频数据。

2. 视频预处理:在进行帧间差分之前,通常需要对视频数据进行一定的预处理工作,主要包括去噪、增强、背景建模等操作,以减少噪声干扰、提高图像质量,从而提高运动目标检测的准确性。

3. 帧间差分计算:对于每一帧图像,首先需要与上一帧进行差分计算,得到相邻两帧图像之间的像素值差异。

4. 阈值处理:接下来需要对差分图像进行阈值处理,将像素值差异超过设定阈值的像素点认定为运动目标。

通过调整阈值大小可以控制运动检测的敏感度。

5. 运动目标提取:最后将通过阈值处理得到的二值图像进行连通区域分析,提取出视频中的运动目标区域。

需要注意的是,帧间差分法进行运动目标检测时还需要考虑运动目标的轨迹跟踪、运动目标的特征提取等问题,这些问题通常需要结合其他方法来解决。

yolo结合光流法

yolo结合光流法

yolo结合光流法
YOLO(You Only Look Once)是一种目标检测算法,而光流法
是一种计算图像序列中像素运动的方法。

将YOLO与光流法结合可以
提高目标检测的准确性和鲁棒性。

首先,YOLO算法通过将输入图像划分为网格,并在每个网格上
预测边界框和类别概率,从而实现目标检测。

然而,YOLO在处理运
动模糊或快速移动的目标时可能会出现问题,因为它只考虑单个图
像的静态信息。

这时,光流法可以帮助解决这个问题。

光流法通过分析图像序列中的像素值变化来估计像素的运动方
向和速度。

它基于一个假设,相邻帧之间的像素在时间上是连续的。

通过计算相邻帧之间的光流向量,可以了解目标在图像序列中的运
动情况。

将YOLO与光流法结合的一种方法是,首先使用YOLO算法检测
出目标的初始位置,然后利用光流法跟踪目标在图像序列中的运动。

通过在目标周围的区域计算光流,可以更准确地确定目标的位置和
运动轨迹。

这种结合可以提供更准确的目标位置信息,从而改善目
标检测的准确性和鲁棒性。

此外,光流法还可以用于目标的速度估计。

通过计算目标在图像序列中的光流向量,可以得到目标的运动速度。

这对于一些应用场景,如交通监控和行人跟踪,非常有用。

结合光流法的速度估计和YOLO的目标检测,可以更全面地理解目标的运动行为。

综上所述,将YOLO与光流法结合可以提高目标检测的准确性、鲁棒性和速度估计能力。

这种结合方法可以更全面地分析目标的位置和运动,对于许多计算机视觉任务具有重要的应用价值。

帧间差分法

帧间差分法

帧间差分法
帧间差分法是一种图像处理技术,常被应用于诸如监控系统之类的环境中,用于检测任何可能出现的运动。

它的原理是将视频中的两帧图片进行对比,根据灰度水平对像素点的变化进行计算,看看有没有部分出现变化。

帧间差分法可以有效识别目标,但又能够抑制自然变化,如阳光影响和气温变化等。

它通过比较两帧图像中相同区域的差异,从而可以实现运动检测,并建立生动可靠的描述。

由于有效地识别运动变化,帧间差分法可以用于多种不同的场景,包括无人机定位、火灾检测、偷盗行为检测、交通监控以及多种机器视觉应用等等。

此外,因为它的算法简单,具有节约时间和资源的优势,所以广受欢迎。

总而言之,帧间差分法能够有效地检测目标、运动变化,使用算法简单,效率高,是现今图像处理领域中一种有效而又实用的技术。

光流配准方法

光流配准方法

光流配准是一种计算机视觉中常用的方法,用于在图像序列中估计连续帧之间的运动信息。

光流配准的目标是通过计算每个像素点在不同帧之间的位移来描述运动的模式。

以下是几种常见的光流配准方法:
1. 基于亮度变化的方法:这是最早的光流估计方法之一,假设图像中的亮度在相邻帧之间保持不变。

通过计算相邻帧中像素的亮度差异,并利用亮度变化的梯度来估计光流向量。

2. Lucas-Kanade光流法:这是一种局部光流估计方法,它基于一个重要的假设,即相邻像素点的运动是类似的。

该方法使用小窗口(通常为3x3)来计算每个像素点的光流向量,通过最小二乘法来优化匹配误差。

3. Horn-Schunck光流法:这是一种全局光流估计方法,它假设整个图像区域的运动是平滑和连续的。

该方法通过最小化整个图像区域内像素点的运动误差来估计光流场。

这种方法对于低纹理的区域效果较好,但对于高纹理区域可能存在问题。

4. 基于金字塔的方法:为了解决光流估计中的尺度问题,一种常见的方法是构建图像金字塔,通过在不同尺度上计算光流来提高估计的准确性。

金字塔可以通过对图像进行多次降采样或升采样来实现。

5. 其他方法:除了上述方法外,还有一些其他的光流配准方法,如基于深度学习的方法、稠密光流方法等。

这些方法通过利用深度学习网络或考虑更多约束条件来提高光流估计的精度和鲁棒性。

需要注意的是,不同的光流配准方法适用于不同的场景和应用需求。

选择适合特定任务的光流配准方法需要综合考虑计算效率、准确性、鲁棒性以及对输入数据的要求。

1。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二阶以上项可以得到基本光流约束方程为:
Ixu + I yv + It = 0
(4)
并称
(u, v )
为光流场,式中
Ix
=
∂I ∂x
,I y
=
∂I ∂y
,I t
=
∂I ∂t

写成梯度形式为 (∇I )T U + It = 0 。
由于光流场 U = (u,v)T 有两个变量,而基本约束方程只
有一个,只能求出光流场沿梯度方向的值,因此从基本光流
(6)
尽可能的小,于是将光流场 (u,v) 的计算归结为求如下的变
分问题的解
∫ ∫ ∫ ∫ ⎡⎣Ix ⋅u + I y ⋅ v + It ⎤⎦2 + λ
⎢⎢⎣⎡⎛⎜⎝
∂u ∂x
⎞2 ⎟⎠
+
⎛ ⎜ ⎝
∂u ∂y
⎞2 ⎟ ⎠
+
⎛ ⎜⎝
∂v ∂x
⎞2 ⎟⎠
+
⎛ ⎜ ⎝
∂v ∂y
⎞2 ⎟ ⎠
⎤2 ⎥ ⎥⎦
dxdy
点在 t + d t 时运动到 ( x + d x, y + d y) 时(其中d x = ud t , d y = vd t ),对应的灰度值为 I ( x + d x , y + d y , t + d t ) , 假定它与 I ( x , y , t ) 相等,即:
I (x + ud t, y + vd t,t +d t) = I (x, y,t) (3) 将左边在 (x, y, z) 点用泰勒公式展开,经简化并略去二阶和
3.2 动态图像模型用于光流法改进
由于光流场的不连续性及违反守恒假设条件处光流场 分布是不可靠的,针对差值图中不为零处的像素对应于灰度 梯度较大的点,而这些点处的光流场基本方程近似成立。采 用这种约束措施后,可使得计算出的光流场分布更为可靠和 精确,同时也减少了计算量。因此,通过修正的光流定义来 表示在动态图像中的几何变化和辐射度变化。这个修正的定 义是用三个元素的向量来代替传统的两个元素向量。其中第 三个元素表示这个点的亮度变化,引入通用动态图像模型 (GDIM)[8],用来解决在亮度变化条件下光流估计问题中 的辐射度变化。在 GDIM 中亮度变化描述成为数乘和一个 偏移量。结合在上面公式(2)中得到的运动区域和 GDIM 模 型定义新的约束模型:
∫ ∫ Es =
⎢⎡⎜⎛ ⎢⎣⎝
∂u ∂x
⎟⎞ ⎠
2
+
⎜⎜⎝⎛
∂u ∂y
⎟⎟⎠⎞
2
+
⎜⎛ ⎝
∂v ∂x
⎟⎞2 ⎠
+
⎜⎜⎝⎛
∂v ∂y
⎟⎟⎠⎞Βιβλιοθήκη 2⎤ ⎥ ⎥⎦2
dxdx
(5)
尽可能的小。另一方面,由基本等式,当然要求极小化 Ec
∫∫[ ]2
Ec = I x ⋅ u + I y ⋅ v + It dxdy
(2)
隔帧差分的方法不仅能完整检测到大的目标,而且可 以检测到帧间位移小于 1 个像元而多帧累积位移大于 1 个像 元的运动点目标,因此不仅提高了视频运动目标检测速度, 还提高了检测目标的能力。
3 改进光流场算法的运动目标检测 3.1 光流算法原理
所谓光流指图像中灰度模式运动速度。光流计算进行
像素级运动估计,记 t 时刻图像上的点 (x, y) 处的灰度值为 I (x, y,t) ,如果 u(x, y) 和 v(x, y) 是该点光流的 x 和 y 分量,
方程求解光流场是一个不适定问题,必须引入附加约束条
件。
Horn 和 Schunck[7]使用光流在整个图像上光滑变化的
假设来求解光流,即运动既满足光流约束方程又满足全局平
滑性。Horn 附加约束条件的基本思想是要求光流本身尽可
能平滑,即引入了对光流的平滑性约束使平滑约束项极小
化。即极小化 E s :
=
min
(7)
其中 λ 是一参数,它决定了上述两种误差(一种是偏离 光滑性要求的误差 E s ,另一种是偏离基本等式的误差 Ec ) 之间的相对权重。对此,采用迭代法求解:
u n+1
= un

n
Ixu
+
I
y
n
v
+
It
λ
+
I
2 x
+
I
2 y
⋅Ix
(8a)
v n +1
= vn

I
n
xu
+
I
y
n
v
+
It
λ
小,对快速运动或者大的物体,需要选择较小的时间间隔;
对慢速运动或者弱小的物体,需要选择较大的时间间隔。 计算当前帧与前一帧的前向帧差图像 FDb (x, y) 和下一
帧与当前帧的后向帧差图像 FD f (x, y) ,通过阈函数值 T , 对隔帧差分后的图像进行阈值化处理,得到隔帧差分后的二 值图像,其计算公式如式(1a)、(1b)所示。本文利用文献[6] 介绍的二维 Otsu 阈值化的快速算法,确定阈值 T 。按式(2) 计算帧差图像 FDb (x, y) 和 FD f (x, y) 的交集得到运动目标 的运动区域 E (x, y) 。
网络出版时间:2012-05-21 11:41 网络出版地址:/kcms/detail/11.2127.TP.20120521.1141.024.html
Computer Engineering and Applications 计算机工程与应用
一种改进的帧间差光流场算法*
Abstract: An improved optical flow estimation algorithm based on the frame difference is proposed in this paper, which is used for
detecting the moving target. In the first part, discontinuous frame difference is applied to detect the moving target with the
1 引言
序列图像中的运动目标检测与追踪技术是图像处理与 计算机视觉研究领域一个非常活跃的分支,在国民经济和军 事领域有着广泛的应用。对运动目标的检测是视觉跟踪、目 标分类、行为理解等各种后续处理的基础。目前研究运动目 标检测的方法有背景减除法、帧间差分法和光流场计算法等
多种[1]。
背景减除法能提供完整的特征数据,且算法简单、快 速,但对于如光照、阴影、背景扰动等环境变化特别敏感。 帧间差方法对光照等环境变化的适应性强,但通常只能获得 运动目标的部分信息,难以提取出物体完整的轮廓,同时也 容易受到噪声干扰。光流场方法[2]反应了序列图像中的速度 场,善于在运动场景中捕捉运动对象的运动特征,它对图像 的运动场进行估计,能够直接用于摄像机运动下的目标检测 [3],且不需要预先知道场景的信息,检测结果精确可靠。但 大多数光流算法计算复杂,不适合实时处理。鉴于直接光流 计算算法复杂且耗时太多,本文提出一种结合帧间差的光流
吴振杰,毛晓波
WU Zhen-jie,Mao Xiao-bo
郑州大学 电气工程学院 郑州 450001 School of Electrical Engineering, Zhengzhou University, Zhengzhou 450001, China
Improved optical flow estimation algorithm based on frame difference
(白色)之间的亮度值。
在经过灰度变换后的动态视频图像中,以间隔 n 帧选取 三帧图像,其中前一帧图像 fi−n (x, y) ,当前帧图像 fi (x, y) , 下一帧图像 fi−n (x, y) 。当 n = 1 时,就是传统连续帧差分计 算,当 n = 2 时,为隔 1 帧差分,当 n = 3 时,为隔 2 帧差分, 依次类推。隔帧的时间间隔选择取决于运动目标的速度和大
目标;在光流计算时,引入通用动态图像模型(GDIM)建立新的光流约束条件,克服了亮度变化引起的约束方程不成立问 题。算法仅对帧差法后图像中不为零的像素进行光流场计算,提高了目标检测的准确性和检测速度。仿真实验证明了该算法
的有效性。
关键词:目标跟踪;帧差法;光流法;区域光流检测
文献标识码:A
中图法分类号:TP39
+
I
2 x
+
I
2 y
⋅Iy
(8b)
其中 n 是迭代次数,u0 和 v0 是光流的初始值,一般取为零。
当相邻两次迭代结果的距离小于预定的某一小值时,迭代过
程终止。在以上公式中,如果 Ii, j,k 表示图像在 (x, y,t) 点的 强 度 I (x, y,t) , Ii, j,k +1 表 示 图 像 在 (x, y,t + dt) 点 的 强 度 I (x, y,t + dt) ,那么 I x , I y 和 It 可由下式近似计算:
Keywords: target tracking; frame difference; optical flow; local optical flow 摘 要:结合运动目标检测帧差法运算速度快和光流法活动目标检测准确度高的特点,提出一种改进的帧间差光流场计算的
运动目标检测算法。在帧差部分采用隔帧差分从而可以检测到帧间位移小于 1 个像元而多帧累积位移大于 1 个像元的运动点
计算方法,先对序列图像进行隔帧差分,针对差值图中不为 零处的像素(它们往往对应于灰度梯度较大的点)来计算其 光流,较之计算整个运动物体的光流场更为可靠、精确和快 速。
相关文档
最新文档