一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于图表示的单图像三维人体重建方法、系统及存储介质

2022-11-23 17:01:34 来源:中国专利 TAG:
1.本技术涉及计算机图形学和计算机视觉
技术领域
:,更具体地,涉及基于图表示的单图像三维人体重建方法、系统及存储介质。
背景技术
::2.单图像三维人体重建是一种从单张可见光图像中重建三维人体模型的计算机视觉及计算机图形学技术。该技术能够将现实生活中的真实人物进行虚拟化和数字化。三维人体重建是影视制作、动漫制作、虚拟现实、虚拟试衣、元宇宙等新兴科应用的基础,应用前景广阔。然而,大多数现有三维人体模型主要依赖于昂贵的三维扫描仪或多目立体成像系统采集,而且还需要专业的3d模型设计师通过一系列的复杂工具进行后期处理,成本高、效率低。3.近年来,随着深度学习的迅猛发展,陆续出现了一些单图像三维人体重建方法,但都存在一些技术缺陷。hmr(end-to-endrecoveryofhumanshapeandpose,2018)、gcmr(convolutionalmeshregressionforsingle-imagehumanshapereconstruction,2019)、hmd(detailedhumanshapeestimationfromasingleimagebyhierarchicalmeshdeformation,2019)、deephuman(deephuman:3dhumanreconstructionfromasingleimage,2019)等方法采用smpl参数化模型来引导从单张图像重建三维人体模型。这些方法产生的模型都近似裸体,无法重建服装和人体表面等细节。pifu(pifu:pixel-alignedimplicitfunctionforhigh-resolutionclothedhumandigitization,2019)、geopifu(geo-pifu:geometryandpixelalignedimplicitfunctionsforsingle-viewhumanreconstruction,2020)和pifuhd(pifuhd:multi-levelpixel-alignedimplicitfunctionforhigh-resolution3dhumandigitization,2020)等采用隐式曲面函数来从单张图像重建三维人体模型。这类方法虽然能较好地重建服装等表面细节,但由于缺乏约束,重建的三维模型中经常出现伪影现象(破洞、残缺的肢体、多出不属于人体的奇怪部件等)。pamir(pamir:parametricmodel-conditionedimplicitrepresentationforimage-basedhumanreconstruction,2021)、arch(arch:animatablereconstructionofclothedhumans,2020)和hei-human(hei-human:ahybridexplicitandimplicitmethodforsingle-view3dclothedhumanreconstruction,2021)等方法通过融合参数化模型和隐式曲面函数两种方式来重建三维人体模型,以合并两者的优点。这类方法虽然在重建人体表面细节的同时减少了伪影现象,但无论从理论上还是实践上都无法保证完全杜绝伪影的产生。此外,上述所有方法都采用了体素表示三维模型,无法重建具备高分辨率的三维人体模型。技术实现要素:4.针对现有技术的至少一个缺陷或改进需求,本发明提供了一种基于图表示的单图像三维人体重建方法、系统及存储介质,可以从单张可见光图像重建出高分辨率、具有完整结构且无伪影的三维人体模型。5.为实现上述目的,按照本发明的第一个方面,提供了一种基于图表示的单图像三维人体重建方法,包括:6.从输入图像中获取人体图像;7.根据所述人体图像获取三维参数化人体模型参数和对应的相机参数,根据所述三维参数化人体模型参数和对应的相机参数生成第一三维人体模型,所述第一三维人体模型采用基于顶点和边的图表示;8.采用插值法对所述第一三维人体模型插入新的顶点和边,生成第二三维人体模型;9.将所述人体图像输入到已训练的图像编码器,提取所述人体图像的图像特征;10.将所述第二三维人体模型上的顶点投影在所述图像特征的特征向量输入到已训练的位移回归器,获取所述第二三维人体模型中每个顶点的形变向量;11.驱动所述第二三维人体模型按照所述形变向量发生形变,生成第三三维人体模型。12.进一步地,所述采用插值法对所述第一三维人体模型插入新的顶点和边采用基于边的三维网格插值算法和/或基于面的三维网格插值算法;13.所述基于边的三维网格插值算法包括:在所述第一三维人体模型的每个三角片面的三条边上取中点插入三个新顶点,并将三个新顶点连接成一个新三角片面;14.所述基于面的三维网格插值算法包括:在所述第一三维人体模型的每个三角片面的重心处插入一个新顶点,并将原三角片面的三个顶点与新顶点依次连接形成三个新的三角片面。15.进一步地,所述插入新的顶点和边包括:16.重复进行多次插值,调整插值次数,使得所述第二三维人体模型满足预设分辨率;17.设定插值区域,对所述第一三维人体模型的所述插值区域插入新的顶点和边。18.进一步地,所述将所述第二三维人体模型上的顶点投影在所述图像特征的特征向量输入到已训练的位移回归器包括:19.计算所述第二三维人体模型上的每个顶点投影在所述图像特征的坐标值;20.根据投影坐标值从所述图像特征上提取所述第二三维人体模型上的每个顶点的特征向量;21.将所述第二三维人体模型上的每个顶点的特征向量及深度信息输入到已训练的位移回归器。22.进一步地,所述驱动所述第二三维人体模型按照所述形变向量发生形变的计算公式为:[0023][0024]其中,p为所述第二三维人体模型上的顶点,dp为所述形变向量,表示由p形变后的新顶点位置,在形变过程中,所有顶点之间边的连接关系保持不变。[0025]进一步地,将所述图像编码器和所述位移回归器作为整体进行训练,所述训练的训练数据集包括人体图像样本及每个人体图像样本对应的真实三维人体模型,通过训练使得根据所述位移回归器输出形变向量构建的三维人体模型与所述真实三维人体模型的差距最小化。[0026]进一步地,对所述人体图像样本采用与所述人体图像相同的方法进行处理,所述图像编码器和所述位移回归器的训练函数lshift为[0027][0028]其中,dp为所述位移回归器为所述人体图像样本生成的形变向量,表示所述人体图像样本对应的产生形变前的三维人体模型中顶点与真实人体模型之间最近点的形变向量。[0029]进一步地,所述训练还包括:[0030]将根据所述位移回归器输出形变向量构建的三维人体模型通过可微分渲染器得到法线特征图,并利用与所述真实三维人体模型的法线特征图误差来约束顶点的形变,此过程最小化损失函数ln:[0031][0032]其中,表示渲染法线特征图与真实法线特征图的l1距离,lvgg表示图像的vgg损失,λvgg表示权重系数。[0033]按照本发明的第二个方面,还提供了一种基于图表示的单图像三维人体重建系统,包括:[0034]预处理模块,用于从输入图像中获取人体图像;[0035]参数化模型生成模块,用于根据所述人体图像获取三维参数化人体模型参数和对应的相机参数,根据所述三维参数化人体模型参数和对应的相机参数生成第一三维人体模型,所述第一三维人体模型采用基于顶点和边的图表示;[0036]插值模块,用于采用插值法对所述第一三维人体模型插入新的顶点和边,生成第二三维人体模型;[0037]特征提取模块,用于将所述人体图像输入到已训练的图像编码器,提取所述人体图像的图像特征;[0038]形变模块,用于将所述第二三维人体模型上的顶点投影在所述图像特征的特征向量输入到已训练的位移回归器,获取所述第二三维人体模型中每个顶点的形变向量;[0039]重建模块,用于驱动所述第二三维人体模型按照所述形变向量发生形变,生成第三三维人体模型。[0040]按照本发明的第三个方面,还提供了一种存储介质,其存储有可由处理器执行的计算机程序,当所述计算机程序在处理器上运行时,使得处理器执行上述任一项所述方法的步骤。[0041]总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有有益效果:[0042](1)本发明通过图表示三维人体模型。这是一种全新三维人体重建表示形式,相对于基于体素或离散体素坐标相比,利用图重建模型,能完全避免破洞和伪影产生。此外,在整个空间特征提取中直接以参数化人体模型来代替能更大程度减少计算量;从而使得该算法的成本低、效率高,可以实现满足实时化的重建需求,更有利于在大众中进行普及。[0043](2)本发明利用网格插值算法解决了原始参数化人体模型顶点过少而产生精度不足的问题。此外,本发明能根据用户需求自行调整重建三维人体模型的分辨率。[0044](3)本发明由于是基于参数化人体模型通过形变来生成模型,因此这有利于模型的动画生成。基于体素或离散体素坐标方式重建的模型在三角面序列的顺序上不统一,很难直接进行动画生成。此外,也可以将重建的三维人体模型导入unity、maya等3d编辑应用程序中,从而实现动画、虚拟现实等素材的制作。附图说明[0045]为了更清楚地说明本技术实施例中的技术方案,下面将对实施例中所需使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0046]图1是本技术实施例提供的基于图表示的单图像三维人体重建方法的流程图;[0047]图2是本技术实施例提供的一种基于图表示的单图像三维人体重建方法的核心网络框架图;[0048]图3是本技术实施例提供的基于边的三维网格插值算法示意图;[0049]图4是本技术实施例提供的基于面的三维网格插值算法示意图;[0050]图5是本技术实施例提供的图像编码器结构示意图;[0051]图6是本技术实施例提供的图像编码器中hourglass网络结构示意图。具体实施方式[0052]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。[0053]本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或模块的过程、方法、系统、产品或设备没有限定于已列出的步骤或模块,而是可选地还包括没有列出的步骤或模块,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或模块。[0054]如图1和图2所示,本发明实施例提供的一种基于图表示的单图像三维人体重建方法,包括步骤:[0055]s101,从输入图像中获取人体图像。[0056]具体可以是:从输入图像中将人体区域分割出来,分割之后的人体图像记为i。[0057]在一个实施例中,采用human_det算法从输入图像中分割出人体区域图像。不难理解,采用其他相当效果的算法或软件也可以将输入图像中的人体区域分割出来。[0058]s102,根据人体图像获取三维参数化人体模型参数和对应的相机参数,根据三维参数化人体模型参数和对应的相机参数生成第一三维人体模型,第一三维人体模型采用基于顶点和边的图表示。[0059]从s101步分割出来的人体图像估计三维参数化人体模型的参数(β,θ)和对应的相机参数[s,tx,ty],其中,θ为姿态向量、β为体型参数向量,s为缩放因子,tx、ty为平移因子,并根据估计的参数还原初始三维人体模型m0。[0060]优选地,此步骤选用smpl或star作为参数化三维人体模型。[0061]三维人体模型m0以图的形式表示,包含顶点和边。具体地,通过估计的模型参数(β,θ)还原三维人体模型:[0062]m0=w(t(β,θ),j(β),θ,ω)[0063][0064]其中,为标准人体模型,w(·)是融合蒙皮函数,j(β)描述由于体型变化引起的关节点位移,ω∈rn×k为融合权重矩阵,bp(·):rθ→r3n为与姿态相关的体型融合函数,bs(·):rβ→r3n为体型融合函数。[0065]在一个实施例中,采用smpl参数化三维模型,包括步骤:1)将处理好的图片裁剪为224*224像素的大小;2)通过pymaf算法得到smpl参数化模型的姿态向量θ、体型参数向量β,以及相机参数[s,tx,ty]。通过上述公式将姿态向量θ、形态向量β表达为包含6890个顶点坐标的smpl参数化模型m0。[0066]此外,相机参数可以确定smpl参数化模型与输入图像之间的相对映射关系。[0067]s103,采用插值法对第一三维人体模型插入新的顶点和边,生成第二三维人体模型。[0068]利用三维网格插值算法,在s102步得到的初始三维人体模型m0中插入顶点和边,以提升其分辨率。提升分辨率后的三维人体模型记为m1。[0069]进一步地,采用基于边的三维网格插值算法和/或基于面的三维网格插值算法。[0070]s3-v1:基于边的三维网格插值算法:如图3所示,在三维人体模型m0的每个三角片面的三条边上取中点插入三个新顶点,并将三个新顶点连接成一个新三角片面。此插值方法能使得一个三角片面拓展为四个三角片面,以提升三维人体模型的分辨率。[0071]s3-v2:基于面的三维网格插值算法:如图4所示,在三维人体模型m0中每个三角片面的重心处插入一个新顶点,并将原三角片面的三个顶点与新顶点依次连接形成三个新的三角片面。此插值方法能使得一个三角片面拓展为三个三角片面,以提升三维人体模型的分辨率。[0072]原始的步骤s102生成的三维人体模型由于受到顶点个数的限制很难表现出复杂的表面细节与宽松的衣服,因此本发明实施例中将对参数化的三维人体模型m0进行上采样以增加顶点的个数。本发明实施例以基于边的采样为例来说明三维人体模型分辨率的提升。进行一次插值顶点数可以达到20666个,三角面数可达到41328个;进行二次插值顶点数达61994个,三角面数达123984个。[0073]进一步地,还可以重复进行多次插值,调整插值次数,使得第二三维人体模型满足预设分辨率。即控制插值的次数可以将三维人体模型提升符合应用需求的分辨率。[0074]进一步地,还可以设定插值区域,对第一三维人体模型的插值区域插入新的顶点和边。即控制上插值区域,提升不同人体部位的分辨率。例如,可以在面部区域进行更多次的插值,以使得模型能更为精细化地描述面部区域,通过基于面的插值方法也可以提升三维人体模型的分辨率。[0075]s104,将人体图像输入到已训练的图像编码器,提取人体图像的图像特征。[0076]利用图像编码器g从图像i中提取图像特征g(i)。[0077]优选地,图像编码器g(·)为一个深度卷积神经网络。如图5所示,具体地,深度卷积神经网络是一个四层的沙漏网络(hourglassnetwork)堆叠而成。图像编码器g最终输出一个c×d1×d2维的图像特征g(i),其中c为特征通道数,d1×d2为特征图的分辨率。沙漏网络的结构如图6所示。[0078]s5:将第二三维人体模型上的顶点投影在图像特征的特征向量输入到已训练的位移回归器,获取第二三维人体模型中每个顶点的形变向量。[0079]根据图像特征g(i),利用位移回归器f驱动初始三维人体模型m1中每个顶点发生形变,以使得三维模型上的顶点能拟合输入图像中人体的姿态和表面细节。位移回归器的输入为m1模型顶点投影在图像特征g(i)上的特征向量,输出是该顶点对应形变向量。[0080]进一步地,s105步骤包括子步骤:[0081]s1051:图像特征坐标计算:计算三维模型m1中每个顶点投影到二维图像特征g(i)上的坐标值。优选地,利用弱透视变换π(·)将三维空间中m1模型的顶点在s2步估计的相机参数[s,tx,ty]下投影到二维图像特征平面:[0082][0083]其中p为在m1模型上采样的顶点,pproj为p点投影到图像特征g(i)中的坐标。[0084]优选地,采用二维线性插值法从投影坐标pproj周围选取一系列的坐标值,以提取更多特征来增加鲁棒性。选取的一系列坐标值记为p。[0085]p=χ(pproj,k)[0086]其中,χ()为二维线性插值函数,k为插值点的数量。优选地,插值后的系列坐标值p中包含pproj。[0087]s1052:特征向量提取:对于三维人体模型上的每个顶点,依照其投影并插值后的系列坐标值p从二维图像特征图上提取对应的特征系列:[0088][0089]s1053:形变向量计算:根据每个顶点的特征向量f和深度信息pz利用位移回归器f计算每个顶点的形变向量dp。[0090]dp=f(f,pz),dp∈r3[0091]其中,pz为m1模型顶点p的z坐标。优选地,位移回归器f为一个n层的多层感知器。具体地,该感知器每层的神经元个数依次为{mi,i=1...n}。[0092]在一个实施例中,n=6,感知器每层的神经元个数依次为257、1024、512、256、128、3。第一个神经元的个数表示特征向量的维度与z坐标维度之和。位移回归器f的输入为m1模型顶点投影在图像特征g(i)上的特征向量和该点的z坐标,输出是该顶点对应形变向量dp。[0093]通过形变位移可以将三维模型m1中顶点发生形变。从而使三维模型m1变形至三维人体模型,以使得三维模型上的顶点能拟合输入图像中人体的姿态和表面细节。[0094]对于三维模型m1每一个顶点都做上述处理。此时,三维模型m1每一个顶点在都有唯一对应形变向量。[0095]s106:驱动第二三维人体模型按照形变向量发生形变,生成第三三维人体模型。[0096]根据每个顶点的形变向量对驱动初始三维人体模型m1发生形变,得到重建后的三维人体模型m2。[0097][0098]其中,表示由p形变后的新顶点位置。在形变过程中,所有顶点之间边的连接关系保持不变。驱动初始三维人体模型m1上的每个顶点发生形变后,所有的新顶点和其对应的边组成重建后的三维人体模型m2。[0099]进一步地,基于图表示的单图像三维人体重建方法还包括步骤s107:对第三三维人体模型进行表面平滑处理。[0100]具体地,可通过manifold算法(robustwatertightmanifoldsurfacegenerationmethodforshapenetmodels,2018)对重建的三维人体模型m2进行表面平滑得到最终精细模型m3。[0101]进一步地,将图像编码器和位移回归器作为整体进行训练,训练的训练数据集包括人体图像样本及每个人体图像样本对应的真实三维人体模型,通过训练使得根据位移回归器输出形变向量构建的三维人体模型与真实三维人体模型的差距最小化。[0102]图像编码器g与位移回归器f连接为一个完整的深度神经网络。[0103]优选地,该深度神经网络的损失函数为:[0104][0105]其中表示m1模型中顶点与真实人体模型之间最近点的形变向量。[0106]该深度神经网络的参数通过最小化损失函数lloss的训练得到,训练步骤为:[0107]t1:训练集样本准备:训练数据集中每个数据项包含:包含人体图像、真实三维人体模型。执行与步骤s102相同的方法生成参数化三维人体模型,例如参数化smpl模型,执行利用与步骤s103相同的三维网格插值算法对smpl模型进行分辨率提升。设置各个数据项的标签(即上述dp*)为分辨率提升后的smpl模型各个顶点与真实人体模型最近点之间的位置向量差。[0108]t2:深度神经网络训练:迭代执行t21、t22直到模型收敛。[0109]t21:执行上述s104、s105、s106最小化损失函数lshift。[0110]t22:将形变向量变形后的模型通过可微分渲染器得到法线贴图,并通过与真实的法线贴图误差来约束顶点的变形。此过程最小化下面的损失函数:[0111][0112]其中,表示渲染法线贴图与真实法线贴图的l1距离,lvgg表示图像的vgg损失,λvgg表示权重系数。[0113]本发明实施例还提供了一种基于图表示的单图像三维人体重建系统,包括:[0114]预处理模块,用于从输入图像中获取人体图像;[0115]参数化模型生成模块,用于根据人体图像获取三维参数化人体模型参数和对应的相机参数,根据三维参数化人体模型参数和对应的相机参数生成第一三维人体模型,第一三维人体模型采用基于顶点和边的图表示;[0116]插值模块,用于采用插值法对第一三维人体模型插入新的顶点和边,生成第二三维人体模型;[0117]特征提取模块,用于将人体图像输入到已训练的图像编码器,提取人体图像的图像特征;[0118]形变模块,用于将第二三维人体模型上的顶点投影在图像特征的特征向量输入到已训练的位移回归器,获取第二三维人体模型中每个顶点的形变向量;[0119]重建模块,用于驱动第二三维人体模型按照形变向量发生形变,生成第三三维人体模型。[0120]进一步地,单图像三维人体重建系统还包括模型平滑模块,用于对第三三维人体模型的表面进行平滑处理。[0121]本技术还提供一种存储介质,其存储有可由处理器执行的计算机程序,当计算机程序在处理器上运行时,使得处理器执行上述任一项上述基于图表示的单图像三维人体重建方法的步骤。其中,计算机可读存储介质可以包括但不限于任何类型的盘,包括软盘、光盘、dvd、cd-rom、微型驱动器以及磁光盘、rom、ram、eprom、eeprom、dram、vram、闪速存储器设备、磁卡或光卡、纳米系统(包括分子存储器ic),或适合于存储指令和/或数据的任何类型的媒介或设备。[0122]需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本技术并不受所描述的动作顺序的限制,因为依据本技术,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本技术所必须的。[0123]在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。[0124]在本技术所提供的几个实施例中,应该理解到,所揭露的系统,可通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些服务接口,系统或模块的间接耦合或通信连接,可以是电性或其它的形式。[0125]所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。[0126]另外,在本技术各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。[0127]所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储器包括:u盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。[0128]本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通进程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、只读存储器(read-onlymemory,rom)、随机存取器(randomaccessmemory,ram)、磁盘或光盘等。[0129]以上所述者,仅为本公开的示例性实施例,不能以此限定本公开的范围。即但凡依本公开教导所作的等效变化与修饰,皆仍属本公开涵盖的范围内。本领域技术人员在考虑说明书及实践这里的公开后,将容易想到本公开的其实施方案。本技术旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未记载的本
技术领域
:中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的范围和精神由权利要求限定。[0130]以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。[0131]本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献