ORB:SIFT和SURF的一个有效替代方法

摘要特征匹配是很多计算机视觉问题的基本问题,例如物体识别和运动分析的三维结构信息。现有的特征查找和匹配的方法依赖于功耗巨大的特征向量。在本文中,我们提出了一种基于BRIEF算法的快速二值特征向量,称为ORB,它具有旋转不变性和抗噪声的特性。我们通过实验证明了ORB比SIFT速度快两个数量级,并且在很多情况下表现良好,实验是在实际应用程序上进行的,包括手机上的物体识别和图像区块跟踪程序。

1.简介

SIFT特征检测和特征描述[17]虽然已经有十多年历史,并且被证实在很多视觉特征应用中相当成功,包括物体识别[17],图像拼接[28],视觉地图重建[25]等。但是带来了大量计算负担,特别是对于实时应用系统,例如视觉测距或者手机等低频设备。这引发了更低运算消耗的替代品的出现,其中最优异的是SURF[2]。除此以外还有很多旨在运用GPU设备加速SIFT计算的研究[26]。

  在本文中,我们提出了一种计算效率高的SIFT的替代算法,它具有相似的性能,并且更不容易受到图像噪声影响,更加适合应用在实时系统中。我们主要目的是加速很多常规图像匹配应用,例如让没有GPU的低频设备能够运行全景拼接和图像跟踪,缩短普通个人计算机上运行基于特征点的物体识别应用的时间。在这些任务上,我们的特征描述表现得与SIFT一样(优于SURF),并且速度几乎快两个数量级。

图1.使用ORB在具有视点变化的真实世界图像上的典型匹配结果。绿线是有效的匹配; 红色圆圈表示不匹配的点

  我们提出的特征点基于众所周知的FAST特征检测[23]和最近被提出的BRIEF特征描述[6],因此我们称之为ORB(Oriented FAST and Rotated BRIEF)。这两个技术因为功耗低、性能良好,所以很有吸引力。在此文中,我们提出一些这两个技术相较于SIFT的局限性,尤其是BRIEF的不具备的旋转不变性。我们的主要贡献如下:

1、 为FAST增加快速并准确的定向功能;

2、 运算效率高效的定向的BRIEF特征;

3、 旋转的BRIEF特征的方差和相关分析;

4、 在旋转不变的情况下,为BRIEF特征去关联的一种学习方法,可以让其在近邻取样中表现更好。

  为验证ORB,我们对ORB相对于SIFT和SURF在原始数据匹配性能和图像匹配性能做了实验。我们也通过运行智能手机上的图像区块追踪应用验证了ORB的效率。另一个优势就是ORB的使用不会收到SIFT和SURF的许可限制。

2.相关工作

关键点: FAST和它的变形方法[23,24]是用于在实时系统中查找匹配视觉特征点的方法,例如在Parallel Tracking and Mapping[13]中的运用。这个方法尽管必须在金字塔模型上进行尺度增强[14],但是可以高效地查找到有效角关键点,在我们的案例中,一个哈里斯角点过滤[11]去除边缘并且提供了一个合理的数值。

  许多特征检测包括了一个方向算子(例如SIFT和SURF),但是FAST没有。有许多方式可以形容一个特征点的方向,这之中包含梯度计算直方图,例如SIFT[17]或者SURF[2]中块模式的近似。这些方法要么计算力要求太高,要么就像SURF那样精度较差。Rosin的参考文献[22]提出了多种测量角方向的方法,我们借鉴了他的质心技术。不同于SIFT的可能会出现一个特征点有有多个不同值情况的方向算子,质心算子只可能有一个确定结果。

特征描述: BRIEF[6]特征描述是一个最近才被提出的特征描述,它使用平滑图像中像素之间的简单二值测试。在很多方面它的性能与SIFT相近,包括对光线、模糊、视角失真的鲁棒性。但是它不适用于平面旋转。

  BRIEF起源于用二值测试训练树木分类的研究[4]。一旦在500左右的特征点上训练,这些树就可以对任意一个特征点返回一个标记[5]。我们用类似的方法,查找对方向最不敏感的测试。主因分析法是查找不相关测试的经典方法,例如,SIFT的PCA(主因分析法)可以帮助如初大量冗余信息[12]。但是可能二值测试占用的空间太大导致无法使用PCA,所以被替代为穷举搜索。

  视觉字典方法[21,27]运用了离线聚类来查找不相关的可以被用于匹配的样本。这些方法可能在查找不相关二值测试也有用。

  最接近ORB的系统是论文[3],它提供了多尺度的哈里斯关键点和图像方向描述。这个描述用来图像拼接,并且展示了良好的旋转和尺度不变性。但是这个方法的计算效率不如我们的方法。

3.oFAST:FAST关键点方向

  FAST特征点因为计算性能被广泛使用,但是FAST特征点没有方向特性。在这一节中,我们会增加一个计算高效的方向特性。

3.1 FAST特征检测

  我们从检测图像中的FAST点开始。FAST需要一个参数–中心像素和周围一圈之间亮度阈值。我们使用性能良好的FAST-9(圆的半径是9)。

  FAST不产生角点检测,但是我们发现在边上有巨大反应。我们运用一个哈里斯角点检测[11]来规则化FAST特征点。对于目标数量N的特征点,我们先设置一个低到可以得到多余N个特征点的门槛,然后根据哈里斯角点检测来规则化它们以挑出最优的N个点。

  FAST不产生多尺度的特征点,我们运用一个图像金字塔尺度模型,在每一层金字塔上得到FAST特征点(用哈里斯方法筛选)。

3.2、灰度质心方向方法

  我们的方法运用简单但是有效的灰度质心方法[22]来检测角点方向。灰度质心方法假设一个角点的亮度偏离中心,这个矢量可以用于推导出方向。Rosin定义了图像块的矩:

那么我们可以得到质心:

我们可以构建一个从角心O到质心C的向量(OC) 。那么图像区块的方向可以简化为:

其中atan2是arctan象限相关的函数。Rosin认为角是暗是亮是有关系的,但是根据我们的目的,这个可以忽略,因为无论角的种类,角度都是不变的。

  为了加强这种方法的旋转不变性,我们确保计算用的x和y都在半径为r的圆内。我们凭经验选择图像区块大小为r,以便x和y分布在[-r,r]。当|C|逼近0,这个方法变得不稳定,但是用FAST角点,这种情况极少出现。

 图2.旋转度量,与直方图(BIN)和MAX方法相比,强度质心(IC)每形成最好的恢复人工旋转噪声斑块的方向。

我们把质心方法与两个基于梯度的方法,BIN和MAX,进行比较。在后两种方法中,X和Y的梯度是根据平滑图像计算的。MAX选择关键点图像区块的最大梯度;BIN生成一个以10度为间隔的梯度方向直方图,然后选择最大的。尽管BIN只选择了一个方向,但是BIN与SIFT算法很相似。图2展示了加上平面旋转和噪音的集中数据集的方向方差。这两种梯度测量方法都表现不好,但是质心方法能给出一致的正确方向,甚至在巨大图像噪声下也是。

4.rBRIEF:旋转相关的BRIEF

  在这节中,我们首先介绍转向的BRIEF描述,展现如何高效计算它,展示在旋转条件下它为何表现不好。然后我们介绍一个寻找更少关联性的二值测试的学习步骤,以找到更好的特征描述方法,rBRIEF,我们也会把它与SIFT和SURF进行对比。

4.1 BRIEF有效旋转

BRIEF概览 BRIEF特征描述[6]是对由一系列二值灰度测试构成的图像区块的二进制字符串描述。对于平滑图像区块p,一个二值测试τ 是这样定义的:

其中p(x)是点x的灰度值。特征点被定义为n个二值测试的矢量:

论文[6]考虑了许多不同类型的测试分布,这里我们选用其中一个表现最好的,围绕图像区块进行高斯分布,我们选择n=256的矢量。

  在比较测试之前,选择一个平滑图像很重要。在我们的实现中,使用积分图对图像进行平滑处理,每个测试点事在31*31像素的图像区块中的5*5的子窗口。这些数据是从我们自己的实验中得到的,结果在论文[6]中。

图3.特征向量的均值分布:BRIEF(第4.1节)和rBRIEF(第4.3节),X轴是平均值为0.5的距离

转向BRIEF 我们想要BRIEF可以适应平面旋转。对于平面旋转超过几度的情况,BRIEF匹配性能急速下降(见图7)Calonder[6]提出为每个图像区块的一组旋转和透视变形计算一个BRIEF特征描述,但是这个解决方法计算代价太大。一个更加有效的方法是根据关键点的旋转来调整BRIEF方向。对于点(xi,yi)上n个二值测试中任意特征集合,定义一个2*n矩阵,用图像区块的旋转角θ和相应的旋转矩阵Rθ,我们构造一个S的转向的版本Sθ,那么转向BRIEF就变成:

我们将这个角度分散到2π/30(12度)的增量中,再储存一个已经计算好的BRIEF查找表。只要多视角的特征点方向θ一致,就会用正确的点集Sθ计算特征描述。

4.2 方差和相关性

  BRIEF其中一个令人满意的特质是每一个特征位方差很大,均值接近0.5。图3展示了100k样本特征点上256位的典型高斯BRIEF分布。对于一个特征位,0.5的平均值得到最大样本方差为0.25。另一方面,一旦BRIEF根据关键点方向得到转向BRIEF,平均值就会呈现更加分散的形式(亦如图3)。一种理解是有向角特征点在二值测试中体现出更高均衡性。

图4. PCA分解中三个特征向量的100k个关键点的特征值分布:Brief,Steered Brief(4.1节)和rBRIEF(4.3节)

由于输入不同,方差越大特征区别越明显。因为每个测试对结果都有影响,所以另一个期望的特性是结果不关联性。为了分析BRIEF矢量中的关联性和方差,我们观察了100k个特征点的BRIEF和具有方向旋转的BRIEF,结果在图4中。对数据使用PCA算法,我们绘制了40个最高的特征值(这之后两个特征值收敛)。

图5.虚线表示关键点到外部列表的距离,而实线表示仅在三个特征向量的内部匹配之间的距离:Brief,Steered Brief(第4.1节)和rBRIEF(第4.3节)

BRIEF和旋转BRIEF都有很高的初始特征值,表明二值测试有相关性–特别得,所有的信息都在前10或者15个部分里。旋转BRIEF有明显较低的方差,但是由于特征值较低,因此差别不明显。显然BRIEF依赖于特征点的随机旋转来取得更好的性能。另一个旋转BRIEF的效果体现在正常数据和异常数据的距离分布(图5)。对于旋转BRIEF还需要注意到异常数据的平均值向左平移,与正常数据有重影。

4.3 二值特征

  为了恢复旋转BRIEF丢失的方差,并减少二值测试的相关性,我们找到一种方法来选择二值测试中有用子集。一个可能的策略是使用PCA或者其他降维方法,从二值测试的一个大子集开始,定义256个有高方差值并不相关的新特征点。但是由于新的特征点是由大量二值测试产生的,计算旋转BRIEF的效率可能更低。取而代之,我们搜索所有可能的二值测试来找到又有高方差值又有不相关性的那一部分。

  方法如下。我们先设立300k特征点的从PASCAL 2006图像数据集提取出来训练集。我们还列举了从31*31像素的图像区块提取的所有可能的二值测试。每一个测试是一对5*5的图像区块子窗口。如果我们把图像区块的宽度定为wp = 31,子窗口的宽度定为wt = 5,然后我们就有N = (wp − wt)2个可能的子窗口。我们想要从中选择两对,所以我们有 个二值测试。我们去掉重叠的测试,所以最后我们得到M = 205590个二值测试。具体如下:

1. 对所有训练图像区块进行二值测试;

2. 对所有均值为0.5的二值测试排序,得到矢量T;

3. 贪婪算法搜索:

(a) 把第一个测试放到结果矢量R中,并从T中去除;

(b) 去T中的下一个测试,然后把它和R中所有的测试比较,如果绝对相关值大于一个阈值,就抛弃,否则加到R中;

(c) 重复上一步直到R中256个测试。如果不到256个,降低阈值再试一次。

这个算法是对一组不相关性且均值接近0.5的二值测试的贪婪搜索。这个结果叫做rBRIEF。rBRIEF在方差和旋转BRIEF上的相关性有明显提升(见图4).PCA的特征值也更高,并且下降更慢。算法产生了高方差的二值测试(见图6)。在未训练的测试中有明显的垂直趋势(左图),这代表高相关性;训练的测试有更好的多样性和更少的相关性。

4.4 评估

  我们用两个数据集来评估被称为ORB的oFAST和rBRIEF的结合:一个是具有平面组合旋转和高斯噪声的图像集,一个是从不同视角获取的有平面纹理的真实世界图像集。对于每一个参考图像,我们计算oFAST特征点和rBRIEF特征点,每个图像计算500个特征值。对于每一个测试图像(组合旋转或者真实世界视角转变),我们都做一样的操作,然后用暴力匹配找到最好匹配。结果根据正确匹配的百分比而非旋转角度。

 图6.通过考虑方向下的高方差(左)和运行学习算法来减少相关性(右)生成的二进制测试的子集

图7.在高斯噪声为10的合成旋转下,SIFT,SURF,Brief与FAST和ORB(oFAST + rBRIEF)的匹配性能

图7展示了融合10度高斯噪声的组合测试集结果。注意标准BRIEF算法性能在10度以后急剧下降。SIFT优于SURF,由于Haar-wavelet成分,SIFT会在45度角显示量化效应。ORB比百分之七十多的有效数据表现更好。

图8. SIFT和rBRIEF噪声下的匹配行为。 噪音水平分别为0,5,10,15,20和25.SIFT性能迅速下降,而rBRIEF相对不受影响

图9.充满杂志和户外场景的桌子的真实世界数据。 第一列中的图像与第二列中的图像匹配。 最后一列是第一列到第二列的结果扭曲

  对比SIFT,ORB受高斯图像噪声影响较小。如果我们对比有效数据和噪声,SIFT在噪声增加5的情况下性能下降10%。ORB也会降低,但是远远低于SIFT(见图8).

  为了在真实世界图像上测试ORB,我们采用了两个图像集,一个是我们自己的室内桌上纹理明显的杂志,另一个是外景。数据集有尺寸、视角和光线变换。在这个数据集运行一个简单的正常/异常数据测试,我们得到了ORB对比SIFT和SURF的表现结果。测试方法如下:

1. 选择参考视图V0;

2. 对所有视图Vi,找到一个单值映射Hi0,代表Vi-> V0;

3. 现在以Hi0为基准,对比SIFT、SURF和ORB特征描述匹配情况。

图10.两个不同的数据集(来自PASCAL 2009数据集[9]的7818个图像和来自Caltech 101的9144个低分辨率图像[29])用于在Brief,steered BRIEF和rBRIEF描述符上训练LSH

ORB在外景数据集上表现优于SIFT和SURF。与内景数据集一样;论文[6]提到像SIFT这类斑点检测特征点,会在涂鸦类型图像上表现更好。

5.二值特征不同尺度的匹配

  在这节中我们会展示在大量数据集上的近邻搜索匹配,ORB表现优于SIFT/SURF。关于ORB的一个重要的部分是方差恢复,这会让近邻搜索更有效率。

5.1 rBRIEF局部敏感的哈希算法

  由于rBRIEF是一种二值模式,我们选择局部敏感的哈希算法作为近邻搜索算法。在局部敏感哈希算法中,点被存储在几个哈希表中,被哈希到不同的桶中。给定一个查询描述符,查询它匹配的桶,用暴力查询法匹配其中的元素。这个技术的作用是在给定足够数量的哈希表时能够检索到最高可能性的近邻。

  对于二值特征,哈希功能仅仅是个签名位的子集:哈希表中的桶包含了公共子签名的特征描述子,距离是海明距离。

  我们使用多点探测局部敏感哈希算法[18],通过寻找查询描述符所在的相邻桶来改进传统的LSH。虽然这可能导致更多的匹配,但是事实上这允许使用较少数量的表(从而减少RAM使用)以及较长的子签名,可以使用更少的桶。

5.2 相关和平整

  rBRIEF通过让哈希表分布更加均匀来改善LSH的速度:由于比特之间相关性更小,哈希能够更好的划分数据。如图10所示,相较于旋转BRIEF和普通BRIEF,桶平均更小了。

图11.速度与准确度,描述符在他们训练的图像的扭曲版本上进行测试

5.3 评估

  我们用FLANN比较了rBRIEF LSH和SIFT特征点kd-trees的性能。我们在Pascal 2009数据集上训练了不同的特征描述,然后用论文[1]中相同的仿射变换对这些图像的取样变形版本进行测试。

  我们的多点探测LSH使用了位集来加速键值搜索。它还使用SSE 4.2优化来计算两个特征描述的海明距离。

  图11解释了SIFT(SURF同理)和用了LSH的rBRIEF建立kd-trees的速度和准确性之间的相关性。当在正确的数据库图像中找到超过50个描述符时,测试图像就成功匹配上了。我们注意到LSH比kd-trees要快,这很可能是由于它的简单性和距离计算的速度快。LSH在准确性方面也提供更多灵活性,这个在特征袋问题中也有体现[21,27]。我们也注意到,由于桶不均匀也会导致旋转BRIEF速度更慢。

6.应用

6.1 基准

  ORB的一个关键点是在普通CPU上的检测和描述计算效率更高。我们典型的ORB检测器利用了oFAST检测器和rBRIEF检测器,每个都分别在图像的五个尺度上计算,尺度因子是 。我们用基于区域的插值进行高效抽取。

ORB系统把大小为640*480每一帧按照如下时间段分割。代码在Intel i7 2.8GHz处理器的单一线程上运行。

  当在五个尺度的2686张图片的数据集上计算ORB时,在42秒内能够检测并且计算超过2*106个特征点。对比在相同的数据上运行的SIFT和SURF,相同数量的特征(大约1000个),相同的尺度数量,我们得到如下的时间:

这些时间是来自Pascal数据集[9]的24个640*480图像的平均值。ORB比SURF快一个数量级,比SIFT快超过两个数量级。

6.2纹理对象检测

  我们通过实现一个类似于论文[19]的传统对象识别流程来将rBRIEF应用于对象识别:我们首先检测oFAST特征和rBRIEF描述符,将它们匹配到我们的数据库,然后执行PROSAC [7]和EPnP[16]位姿估计。

  我们的数据库包含49个家庭物品,每个物品都在24个视图下使用2D相机和Microsoft的Kinect设备拍摄。 测试数据由不同视点和遮挡下相同对象子集的二维图像组成。 要有一个匹配,我们要求描述符匹配,但也可以计算一个位姿。 最后,我们的管道检索61%的对象,如图12所示。

图12.使用姿态估计的纹理对象识别的两个图像。 蓝色特征是超级强加在查询图像上的训练特征,以指示正确找到对象的姿势。 还会为每个对象显示轴以及粉红色标签。 顶部图像错过了两个对象; 所有都在底部找到

  该算法在200MB处理一个1.2M描述符的数据库,并具有与我们前面所展示的相当的时间(14ms用于检测,17ms用于平均LSH匹配)。由于没有将所有的查询描述符与训练数据进行匹配,所以流水线可能会大大加速,但是我们的目标仅仅是展示用ORB进行对象检测的可行性。

6.3 嵌入式实时特征跟踪

  手机上的跟踪涉及将实时图像帧与先前捕获的关键帧进行匹配。描述符与关键帧存储在一起,假定该关键帧包含纹理明显的平面。我们在每个传入帧上运行ORB,并使用暴力描述符匹配对关键帧进行处理。描述符距离的可能匹配被用于PROSAC最佳拟合单应性H。

  虽然实时功能追踪器可以在手机上运行[15],但它们通常在非常小的图像(如120*160)上运行,而且功能很少。相比之下,我们的图像[30]系统通常需要1秒以上的时间来处理。我们能够以1Hz的ARM芯片和512MB的RAM在手机上以7Hz的频率运行具有640×480分辨率的ORB。Android的实现用到了OpenCV端口。这些是基准每个图像约400点。

7.结论

  在本文中,我们定义了一个新的旋转描述符ORB,并且与其他流行的特征描述对比了它的性能和效率。定向下的方差调查对于构建ORB和解构成分是至关重要的,以便在近邻应用中获得良好的性能。我们还通过OpenCV 2.3向社区贡献了一个BSD许可的ORB实现。

  我们没有充分解决的一个问题是尺度不变性。尽管我们使用一个金字塔模式解决尺度问题,但我们并没有从深度线索,调整八度的数量等方面探索每个关键点的规模。未来的工作还包括GPU/SSE优化,这可以将LSH提高另一个数量级。

[论文学习]ORB: an efficient alternative to SIFT or SURF相关推荐

  1. SLAM学习 | 论文研读《ORB: an efficient alternative to SIFT or SURF》

    SLAM学习 | 论文研读<ORB: an efficient alternative to SIFT or SURF> 1 文章翻译 Abstract(摘要) 1 Introductio ...

  2. 翻译 | ORB: An efficient alternative to SIFT or SURF(ORB:对SIFT或SURF的一种有效选择)

    博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 ORB:对SIFT或SURF的一种 ...

  3. Python+OpenCV:ORB: An efficient alternative to SIFT or SURF

    Python+OpenCV:ORB: An efficient alternative to SIFT or SURF 理论 As an OpenCV enthusiast, the most imp ...

  4. SLAM前端 ---------特征提取之ORB(ORB与SIFT与SURF)

    ORB 论文翻译: 一种特征匹配替代方法:对比SIFT或SURF 1.ORB特征简介  ORB是Oriented FAST and Rotated BRIEF(oFAST and rBRIEF)的简称 ...

  5. 图像特征检测描述(一):SIFT、SURF、ORB、HOG、LBP特征的原理概述及OpenCV代码实现

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 什么叫特征检测?就是检测图像中目标的特征呗,所谓 ...

  6. Opencv实现Sift、Surf、ORB特征提取与匹配

    在opencv3中,这三个算子都转移到一个名为xfeature2d的第三方库中,而在opencv2中这三个算子在nonfree库中. 关于在vs下配置opencv可参考我转载的另外一篇文章.注意版本号 ...

  7. BEBLID Boosted Efficient Binary Local Image Descriptor 论文学习

    Abstract 对局部图像特征做高效率匹配是许多计算机应用的基础任务.但是对于算力有限的设备(如手机或无人机)来说,顶尖的匹配算法会大打折扣.本文介绍了 BEBLID,一个高效的二元图像描述子.它改 ...

  8. 【论文学习】:ICCV 2017-Detect-and-Track: Efficient Pose Estimation in Videos

    项目配置链接:https://blog.csdn.net/m0_37644085/article/details/84338463 ps:不仔细学习RCNN系列→FCN→Mask RCNN是不太可能读 ...

  9. 论文学习笔记(1):Efficient L0 resampling of point sets

    论文学习笔记(1):Efficient L0 resampling of point sets 本文出自2019年"Computer Aided Geometric Design" ...

最新文章

  1. activiti 工作流_activiti工作流引擎入门
  2. C语言socket设置超时的几种方法
  3. 轻松理解—继承成员访问控制机制
  4. 基于XML的AOP配置
  5. bgp通告四原则_华为路由器BGP路由选路和负载均衡
  6. centos7 ftp服务器搭建_CentOS7下搭建Jellyfin个人流媒体服务器
  7. JAVA面向对象OOP、类、属性、方法、样例代码
  8. 有服主传送玩家指令_我的世界:不用指令能够到达边境之地吗?实验证明,根本就不可能...
  9. 如何用一头死驴赚到998元
  10. Oracle索引原理
  11. 哈工大《同义词词林》共享版的若干改进
  12. python就业方向
  13. 《激荡三十年》十八、青春飞扬——互联网的崛起
  14. 计算机软件 硬件的组成部分,计算机软硬件组成.ppt
  15. 基于Python实现的合同管理系统设计
  16. 基于JAVA+SpringMVC+Mybatis+MYSQL的快递代收系统
  17. Gentoo 2005.1 完整的USE参数清单中文详解
  18. 精读《X3D: Expanding Architectures for Efficient Video Recognition》论文
  19. Python3中StringIO
  20. Implement int sqrt(int x).

热门文章

  1. csgo怎么绑定一键跳投_CSGO干货:一键跳投详细教程 学不会我把电脑屏幕吃掉!...
  2. EB tresos 操作视频资料
  3. 网络摄像头无外网情况下,与安卓手机互联查看图像,修改设置方法
  4. python王者战斗_使用Python自动刷王者荣耀金币
  5. 永恒之塔 服务器维护,游戏运行给力永恒之塔更换顶级服务器
  6. 像素游戏的动态图设计01
  7. python判断两个条件同时满足_python不相等的两个字符串的 if 条件判断为True详解...
  8. 古剑奇谭二服务器维护,《古剑奇谭二》11月22日例行维护更新公告
  9. 单片机单口不可用或被占用_KQD:快驱动单片机
  10. ThinkPHP自动化为已经上传的图片添加「 响应式」水印(数据库字段部分)