总结(CFAI,AWB,Denoise2D,Sharpen)
CFAI/Demosaic,AWB,Denoise2D,Sharpen
CFAI (Color Fliter Array Interpolation)/ Demosaic
1.https://www.cnblogs.com/sunny-li/p/8641767.html
2.基于bayer格式的去马赛克算法研究及硬件实现 浙大 丁文
图1. bayer sensor
CMOS或者CCD感光器件只能记录光子的能量,并不能记录光波的波长(即色彩信息),所以,为了得到图像的颜色信息,可以通过在每个感光器前先让光经过某一颜色滤光片,得到该颜色光的强度。根据三基色定理,我们只需要获得RGB三通道的值即可。
设置Color Fliter Array有两种模式,一种是将RGB堆叠,让光依次经过RGB滤光片,每个像素都能获得RGB值,这种模式价格昂贵,且不好制造。另一种模式如图1所示,为bayer色彩滤波阵列,由一半的G(因为人眼对绿色最敏感),1/4的R,1/4的B组成。bayer模式的排列方式多样,RGGB, GBRG,GRBG,BGGR。甚至根据需求可以加入其它通道,如RGBW,RYYB(华为 P30手机)。
bayer sensor每个像素点仅获取了一种通道的值,需要根据相邻像素点通过插值补齐缺失的通道值,这一过程称为Demosaic,即将bayer模式的Raw格式图像转化为Camera Sensor下的RGB图像。
插值的方法多样,最简单的方法如邻近插值,线性邻域插值,这类方法会模糊细节,易产生伪彩色;进一步可以利用空间信息(边缘等)或通道相关性插值。这里演示了双线性插值方法和色比色差方法,色比色差方法包含了基于边缘的方法。
Demosaic一般遵循以下几个原则:
1.先对G分量进行插值,因为G的像素个数是RB的两倍,更能反映图像空间信息。
2.插值时采用方向性插值,即如果是垂直的边缘,则采用上下的像素进行插值,而不选用左右
3.色差恒定,即相邻点的R(i,j)-R(i, j+1) = G(i,j)-G(i, j+1)
双线性插值
算法思路:在3*3大小的邻域内,获得目标通道的平均值,作为中心像素点缺失通道值。
效果图如下(选取图像某一部分),可以看到在边缘处有很明显的伪彩色和拉链效应。
色比色差方法
Adams J E, Hamilton J F. Adaptive color plane interpolation in single color electronic camera[J]. Us Patent No, 1997.
(1) 绿色分量重建
首先恢复红色和蓝色采样点处的绿色分量。根据方向性进行插值,中心红色采样点R(i,j)处水平方向和垂直方向检测算子计算如下:
ΔHi,j=∣Gi,j−1−Gi,j+1∣+∣2Ri,j−Ri,j−2−Ri,j+2∣\Delta H_{i,j}=\vert G_{i,j-1}-G_{i,j+1} \vert +\vert 2R_{i,j}-R_{i,j-2}-R_{i,j+2} \vert ΔHi,j=∣Gi,j−1−Gi,j+1∣+∣2Ri,j−Ri,j−2−Ri,j+2∣ ΔVi,j=∣Gi−1,j−Gi+1,j∣+∣2Ri,j−Ri−2,j−Ri+2,j∣\Delta V_{i,j}=\vert G_{i-1,j}-G_{i+1,j} \vert +\vert 2R_{i,j}-R_{i-2,j}-R_{i+2,j} \vert ΔVi,j=∣Gi−1,j−Gi+1,j∣+∣2Ri,j−Ri−2,j−Ri+2,j∣
绿色分量重建公式如下:
gi,j={Gi,j−1+Gi,j+12+(2Ri,j−Ri,j−2−Ri,j+2)4ΔHi,j<ΔVi,jGi−1,j+Gi+1,j2+(2Ri,j−Ri−2,j−Ri+2,j)4ΔHi,j>ΔVi,jGi−1,j+Gi+1,j+Gi,j−1+Gi,j+14+(4Ri,j−Ri−2,j−Ri+2,j−Ri,j−2−Ri,j+2)8ΔHi,j=ΔVi,jg_{i,j}=\begin{cases} \frac{G_{i,j-1}+G_{i,j+1}}{2}+\frac{(2R_{i,j}-R_{i,j-2}-R_{i,j+2})}{4} & \Delta H_{i,j}< \Delta V_{i,j} \\ \frac{ G_{i-1,j}+G_{i+1,j}}{2}+\frac{(2R_{i,j}-R_{i-2,j}-R_{i+2,j})}{4} & \Delta H_{i,j}> \Delta V_{i,j} \\ \frac{ G_{i-1,j}+G_{i+1,j}+G_{i,j-1}+G_{i,j+1}}{4}+\frac{(4R_{i,j}-R_{i-2,j}-R_{i+2,j}-R_{i,j-2}-R_{i,j+2})}{8} & \Delta H_{i,j}= \Delta V_{i,j} \end{cases}gi,j=⎩⎪⎨⎪⎧2Gi,j−1+Gi,j+1+4(2Ri,j−Ri,j−2−Ri,j+2)2Gi−1,j+Gi+1,j+4(2Ri,j−Ri−2,j−Ri+2,j)4Gi−1,j+Gi+1,j+Gi,j−1+Gi,j+1+8(4Ri,j−Ri−2,j−Ri+2,j−Ri,j−2−Ri,j+2)ΔHi,j<ΔVi,jΔHi,j>ΔVi,jΔHi,j=ΔVi,j
(2) 绿色采样点处的红色和蓝色分量重建
这里与邻域插值类似。
ri,j=Ri−1,j+Ri+1,j2+(2Gi,j−gi−1,j−gi+1,j)2r_{i,j}=\frac{R_{i-1,j}+R_{i+1,j}}{2}+\frac{(2G_{i,j}-g_{i-1,j}-g_{i+1,j})}{2} ri,j=2Ri−1,j+Ri+1,j+2(2Gi,j−gi−1,j−gi+1,j) bi,j=Bi,j−1+Bi,j+12+(2Gi,j−gi,j−1−gi,j+1)2b_{i,j}=\frac{B_{i,j-1}+B_{i,j+1}}{2}+\frac{(2G_{i,j}-g_{i,j-1}-g_{i,j+1})}{2} bi,j=2Bi,j−1+Bi,j+1+2(2Gi,j−gi,j−1−gi,j+1)
(3) 红色(蓝色)采样点处的蓝色(红色)分量的重建
观察R周围最近的蓝色像素点,处于R像素点左上,左下、右上、右下四个位置。为了更好的选择插值方向,保存边缘信息,与绿色分量的恢复类似,需要首先沿两个斜四十五度方向计算像素的梯度,再沿梯度较小的方向插值。
左下右上和左上右下的梯度计算如下:
Di,j45=∣Bi−1,j+1−Bi+1,j−1∣+∣2gi,j−gi−1,j+1−gi+1,j−1∣D_{i,j}^{45}= \vert B_{i-1,j+1}-B_{i+1,j-1} \vert + \vert 2g_{i,j}-g_{i-1,j+1}-g_{i+1,j-1} \vertDi,j45=∣Bi−1,j+1−Bi+1,j−1∣+∣2gi,j−gi−1,j+1−gi+1,j−1∣ Di,j135=∣Bi−1,j−1−Bi+1,j+1∣+∣2gi,j−gi−1,j−1−gi+1,j+1∣D_{i,j}^{135}= \vert B_{i-1,j-1}-B_{i+1,j+1} \vert + \vert 2g_{i,j}-g_{i-1,j-1}-g_{i+1,j+1} \vertDi,j135=∣Bi−1,j−1−Bi+1,j+1∣+∣2gi,j−gi−1,j−1−gi+1,j+1∣
红色采样点处的蓝色分量的重建公式如下:
bi,j={Bi−1,j+1+Bi+1,j−12+(2gi,j−gi−1,j+1−gi+1,j−1)2Di,j45<Di,j135Bi−1,j−1+Bi+1,j+12+(2gi,j−gi−1,j−1−gi+1,j+1)2Di,j45>Di,j135Bi−1,j+1+Bi+1,j−1+Bi−1,j−1+Bi+1,j+14+(4gi,j−gi−1,j+1−gi+1,j−1−gi−1,j−1−gi+1,j+1)4Di,j45=Di,j135b_{i,j}=\begin{cases} \frac{ B_{i-1,j+1}+B_{i+1,j-1}}{2}+\frac{(2g_{i,j}-g_{i-1,j+1}-g_{i+1,j-1})}{2} & D_{i,j}^{45}< D_{i,j}^{135} \\ \frac{ B_{i-1,j-1}+B_{i+1,j+1}}{2}+\frac{(2g_{i,j}-g_{i-1,j-1}-g_{i+1,j+1})}{2} & D_{i,j}^{45}> D_{i,j}^{135} \\ \frac{ B_{i-1,j+1}+B_{i+1,j-1}+B_{i-1,j-1}+B_{i+1,j+1}}{4}+\frac{(4g_{i,j}-g_{i-1,j+1}-g_{i+1,j-1}-g_{i-1,j-1}-g_{i+1,j+1})}{4} & D_{i,j}^{45}= D_{i,j}^{135} \end{cases}bi,j=⎩⎪⎨⎪⎧2Bi−1,j+1+Bi+1,j−1+2(2gi,j−gi−1,j+1−gi+1,j−1)2Bi−1,j−1+Bi+1,j+1+2(2gi,j−gi−1,j−1−gi+1,j+1)4Bi−1,j+1+Bi+1,j−1+Bi−1,j−1+Bi+1,j+1+4(4gi,j−gi−1,j+1−gi+1,j−1−gi−1,j−1−gi+1,j+1)Di,j45<Di,j135Di,j45>Di,j135Di,j45=Di,j135
插值完的效果如下所示,可以看到,相比于线性插值方法,伪彩色明显降低。
AWB(Auto White Balance) / Color Constancy
颜色恒常性是指当照明光源颜色发生变化时人类视觉系统能够对物体的颜色感知保持相对不变的视觉特性。通俗点说,在不同光源环境下,我们都能识别出物体的颜色。这种视觉特性跟我们悠久的演变相关或者说日积月累的经验使得我们人眼和大脑形成了这种特性。相机并不能具备这种特性,为了更好的显示图像或更好的颜色特征提取,我们为数字成像系统嵌入了AWB方法。跟它的名字一样,AWB只能做到白色(中性色)的校准, 对于彩色的校准需要利用ISP中后续CCM模块。
AWB的目的是为了去除图像中光源的影响,具体的操作是:
Step1.估计图像中的照明光源;Step2.将其转换到目标光源(如D65)。
Step2通过一个3x3的对角矩阵就能实现,所以算法上的研究主要针对如何准确的估计图像照明光源。目前的AWB算法可以分为两类:基于统计的方法和基于学习的方法。前者假设自然物体的颜色存在某种,规律,利用图像的统计信息(如颜色分布、空间信息)来估计光源。后者根据先验信息训练模型,建立图像特征与真实光源的映射关系。
,基于统计的方法虽然准确性上不如基于学习的方法,但因其简单、快速的特点,在工业上主要以基于统计的方法为主。下面演示几种经典的基于统计的方法,分别为灰度世界(Gray World),最大响应(White Patch),Shades of Gray。
灰度世界(Gray World)
我们知道灰点能够等比例的反射入射光,当我们不考虑光源的强度信息时,灰块的值即可表示光源的颜色。
灰度世界假设世界上所有颜色的平均值是灰,那么当一张图片场景颜色丰富,那么所有像素的均值即为估计光源。 如果图像场景存在大面积单色,假设不成立,这种方法将失效。
e=1N∑i=1N[R,G,B]e=\frac{1}{N}\sum_{i=1}^{N}[R,G,B]e=N1i=1∑N[R,G,B]
最大响应(White Patch)
最大响应认为场景中存在白块,白块能够很好的表示光源的颜色。为了此方法的泛化,在具体处理时,选取每个通道的最大响应值作为估计光源。这种方法因现实情况下曝光过度、噪声、场景中无白块等问题,效果较差。
e=[maxR,maxG,maxB]e=[max{R},max{G},max{B}]e=[maxR,maxG,maxB]
Shades of Gray
SoG采用闵可夫斯基范式,将几种方法统一在一起,通过不同的参数,加权不同的方法。其中p=1为Gray World,p=∞\infty∞为最大响应。
e=∑(R,G,B)ppe= \sqrt[p]{\sum{(R,G,B)^p}} e=p∑(R,G,B)p
不同白平衡算法的效果图和估计光源的色品坐标如下。
PS:这里讨论一下AWB与CFAI模块的先后顺序?
研究时使用的标准数据集之一:ColorChecker(by shi),由Canon5D和Canon1D两款相机采集,包含568张室内室外图像。为了创建彩色图像,对两个G值进行了平均,但没有进行进一步的去马赛克。所以也是在CFAI前做AWB。
工业上常在CFAI前做AWB处理。如果CFAI后再做AWB,因为CFAI是对像素值进行一种猜测,这时候颜色已经不是准确的了。
左图为插值后AWB,右图为插值前AWB。可以看出两者有一定区别,左图色温相比右图低,偏黄色。
Denoise 2D空域
这里演示了几种滤波方法:
中值滤波
中值滤波法是一种非线性平滑技术,将图像的每个像素用邻域 (以当前像素为中心的正方形区域)像素的中值代替 ,常用于消除图像中的椒盐噪声。
与低通滤波不同的是,中值滤波对脉冲噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊,但它会洗去均匀介质区域中的纹理。这些优良特性是线性滤波方法所不具有的。
均值滤波
均值滤波,是最简单的一种线性滤波操作,算法比较简单,计算速度快,但是均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时,也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。但均值滤波对周期性的干扰噪声有很好的抑制作用。
高斯滤波
高斯滤波(高斯平滑)是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。
通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。
高斯滤波是最有用的滤波器 (尽管不是最快的)。高斯平滑滤波器对于抑制服从正态分布的噪声非常有效。
图像成像时,主要的噪声为高斯噪声和泊松噪声的融合。
双边滤波
双边滤波(Bilateral filter)是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的,具有简单、非迭代、局部的特点。
一般的高斯模糊在进行采样时主要考虑了像素间的空间距离关系,但是却并没有考虑像素值之间的相似程度,因此这样我们得到的模糊结果通常是整张图片一团模糊。
双边滤波的改进就在于在采样时不仅考虑像素在空间距离上的关系,同时加入了像素间的相似程度考虑。但是由于保存了过多的高频信息,对于彩色图像里的高频噪声,双边滤波器不能够干净的滤掉,只能够对于低频信息进行较好的滤波。对于脉冲噪声,双边滤波会把它当成边缘从而不能去除。
gi,j=∑k,jfk,jwi,j,k,l∑k,jwi,j,k,lg_{i,j}=\frac{\sum_{k,j}{f_{k,j}w_{i,j,k,l}}}{\sum_{k,j}{w_{i,j,k,l}}} gi,j=∑k,jwi,j,k,l∑k,jfk,jwi,j,k,l wi,j,k,l=exp(−(i−k)2+(j−l)22δd2−∥fi,j−fk,l∥22δc2)w_{i,j,k,l}=exp(-\frac{(i-k)^2+(j-l)^2}{2\delta_d^2}-\frac{\Vert f_{i,j}-f_{k,l}\Vert^2}{2\delta_c^2}) wi,j,k,l=exp(−2δd2(i−k)2+(j−l)2−2δc2∥fi,j−fk,l∥2)
下图给出了几种滤波方法的对比图(原图、中值、均值、高斯、双边):
Sharpen
锐化就是强化细节,边缘信息。首先要做的就是提取图像的边缘,将边缘与原图相加,即得到锐化图像。
常见的边缘检测算子有Roberts 、Sobel 、Prewitt、Laplacian、Log/DoG、Canny;
Laplacian提取边缘属于使用二阶导提取边缘,而sobel,prewitt,Roberts都是属于一阶导数求边缘。
一阶导数通常会产生较粗的边缘。 二阶导数对精细细节,如细线、孤立点和噪声有较强的响应。
Roberts
Robert算子是第一个边缘检测算子,提出者Lawrence Roberts in 1963。采用对角线方向相邻两象素之差近似梯度幅值检测边缘。对噪声敏感,无法抑制噪声的影响。
1 | 0 |
---|---|
0 | -1 |
or
0 | 1 |
---|---|
-1 | 0 |
Prewitt
prewitt算子对噪声有抑制作用,抑制噪声的原理是通过像素平均,但是像素平均相当于对图像的低通滤波,低通滤波会造成高频的信息丢失,从而使图像模糊,无论这种程度或大或小,这种操作后的结果是存在的,所以Prewitt算子对边缘的定位不如Roberts算子。
横向模板:
-1 | 0 | 1 |
---|---|---|
-1 | 0 | 1 |
-1 | 0 | 1 |
纵向模板 :
1 | 1 | 1 |
---|---|---|
0 | 0 | 0 |
-1 | -1 | -1 |
对角模板 :
0 | 1 | 1 |
---|---|---|
-1 | 0 | 1 |
-1 | -1 | 0 |
-1 | -1 | 0 |
– | – | – |
-1 | 0 | 1 |
0 | 1 | 1 |
Sobel
Sobel算子是典型的基于一阶导数的边缘检测算子,是prewitt算子的改进形式,改进之处在于sobel算子认为邻域的像素对当前像素产生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子结果产生的影响也不同。一般来说,距离越远,产生的影响越小。Sobel算子对像素的位置的影响做了加权,与Prewitt算子、Roberts算子相比因此效果更好。
横向模板 :
-1 | 0 | 1 |
---|---|---|
-2 | 0 | 2 |
-1 | 0 | 1 |
纵向模板 :
1 | 2 | 1 |
---|---|---|
0 | 0 | 0 |
-1 | -2 | -1 |
Laplacian
拉普拉斯提取边缘属于使用二阶导提取边缘,它是一种各向同性的边缘提取算子,使用这一个算子,就能对任何走向的界线和线条进行锐化,无方向性。而像sobel等,它们在提取x、y方向的边缘都是使用不同的算子来实现的。相比较于一阶微分就是对噪声敏感。它对孤立像素的响应要比对边缘或线的响应要更强烈,因此只适用于无噪声图像。
0 | -1 | 0 |
---|---|---|
-1 | 4 | -1 |
0 | -1 | 0 |
Laplacian算子一般不以其原始形式用于边缘检测,因为其作为一个二阶导数,Laplacian算子对噪声具有无法接受的敏感性;同时其幅值产生算边缘,这是复杂的分割不希望有的结果;最后Laplacian算子不能检测边缘的方向;所以Laplacian在分割中所起的作用包括:(1)利用它的零交叉性质进行边缘定位;(2)确定一个像素是在一条边缘暗的一面还是亮的一面;一般使用的是高斯型拉普拉斯算子(Laplacian of a Gaussian,LoG),由于二阶导数是线性运算,利用LoG卷积一幅图像与首先使用高斯型平滑函数卷积改图像,然后计算所得结果的拉普拉斯是一样的。所以在LoG公式中使用高斯函数的目的就是对图像进行平滑处理,使用Laplacian算子的目的是提供一幅用零交叉确定边缘位置的图像;图像的平滑处理减少了噪声的影响并且它的主要作用还是抵消由Laplacian算子的二阶导数引起的逐渐增加的噪声影响。
LoG/DoG
LoG是在使用Laplacian算子提取边缘之前,先使用高斯平滑图像,这一过程就是Laplacian-Gauss(LOG)算子。
DoG即对不同尺度下的高斯函数的差分。DoG算子和LoG算子具有类似的波形,仅仅是幅度不同,不影响极值点的检测,而DoG算子的计算复杂度显然低于LoG,因此一般使用DoG代替LoG算子
Canny
该博文讲的很详细:https://www.cnblogs.com/techyan1990/p/7291771.html
该算子功能比前面几种都要好,但是它实现起来较为麻烦,Canny算子是一个具有滤波,增强,检测的多阶段的优化算子,在进行处理前,Canny算子先利用高斯平滑滤波器来平滑图像以除去噪声,Canny分割算法采用一阶偏导的有限差分来计算梯度幅值和方向,在处理过程中,Canny算子还将经过一个非极大值抑制的过程,最后Canny算子还采用两个阈值来连接边缘。
Canny边缘检测算法
step1: 用高斯滤波器平滑图象;
step2: 用一阶偏导的有限差分来计算梯度的幅值和方向;
step3: 对梯度幅值进行非极大值抑制
step4: 用双阈值算法检测和连接边缘
下图给出了Sobel、Laplacian、LoG/DoG、Canny算子检测边缘结果二值化后的效果图。
总结(CFAI,AWB,Denoise2D,Sharpen)相关推荐
- python使用openCV图像加载(转化为灰度图像)、使用filter2D函数对图像进行锐化(Sharpen Images)
python使用openCV图像加载(转化为灰度图像).使用filter2D函数对图像进行锐化(Sharpen Images) 目录
- 相机上的AE AF AWB AEB都表示的是什么?
相机上的AE AF AWB AEB都表示的是什么? AE 自动曝光:光圈优先AE式是由拍摄者人为选择拍摄时的光圈大小,由相机根据景物亮度.CCD感光度以及人为选择的光圈等信息自动选择合适曝光所要求的快 ...
- awb数据怎么计算_白平衡自己主动(AWB)算法---2,颜色计算
本文说明了白平衡算法估计当前场景的色温过程. 色温计算的原理并不复杂,但要做到,还是一道,认真做好每一步,这需要大量的测试,和算法一直完好. 关于该过程首先简要: 1, 取的图像数据,并划分MxN块, ...
- Delphi 与 DirectX 之 DelphiX(39): TDIB.Sharpen();
本例效果图: 代码文件: unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Contr ...
- 图相处理自学(二):图像处理基本算法Black level / sensor offset/ Shading/ Color Matrix/ AWB(QP值)
1.Black level / sensor offset (1)sensor 输出数据中包含了OB(optical black)或data pedestal 部分,需要去除,以免影响画面暗部表现.去 ...
- Sharpen 的调试步骤
调试步骤: 1.调试 bayerSharpen 增强图像的细节纹理的清晰度,有助于图像的细节纹理的增强. 2.调试 YUVsharpen 的边缘细节和纹理的增强强度,设置图像有方向的边缘和细节的锐度. ...
- AWB——Complementarity-enhanced Mutual Networks for Unsupervised Domain Adaptation in Person Re-ID
论文地址:arXiv:2006.06525 代码地址:Attentive-WaveBlock 1 概述 这是一篇有关UDA Re-ID的文章,方法性能在paper with code上位居榜首,本文可 ...
- 自动白平衡(AWB)算法---1,色温曲线
白平衡算法---色温曲线 本文大体讲解了白平衡的算法流程,适用于想了解和学习白平衡原理的筒子们. 一般情况下要实现AWB算法需要专业的图像和算法基础,本文力图通过多图的方式,深入浅出,降低初学者理解上 ...
- awb入门(1).图像的色彩
awb入门(2):https://blog.csdn.net/tywwwww/article/details/100047079
最新文章
- android 优化启动事件,张绍文android开发高手课读书笔记4-启动优化篇
- C++ Primer 5th笔记(chap 12 动态内存)智能指针概述
- linux 3g 程序,ARM板和Linux上的3G配置详解
- LeetCode 1429. 第一个唯一数字(map+queue)
- 性能监控工具——Cacti安装文档
- 4.算法通关面试 --- 树和图
- python3--环境搭建说明;
- KBQA-Bert学习记录-构建BERT-CRF模型
- 南京大学计算机系副教授名单,2018年度国际“人工智能10大新星”名单公布:南京大学俞扬副教授国内高校入选者...
- php whois查询,php whois查询API制作方法
- android手机deviceowner,Android之解决Gigaset手机不能设置DeviceOwner权限提示already provisioned问题...
- 接入层-汇聚层组网设计配置案例——双归上行-负载
- Seaweed-fs
- 【点分治】的学习笔记和众多例题
- 一句话拍大片,Gen-2震撼发布,科幻日系二次元统统拿捏住了!
- PHP保存微信头像到本地
- java 监控linux服务器cpu使用率、内存使用率、磁盘使用率、java进程是否存活等服务
- mysql命令行集锦
- dnf超时空漩涡副本路线流程图_《DNF》超时空漩涡怎么走 超时空漩涡走图开荒教程攻略...
- ACM-ICPC 2018 南京赛区网络预赛 E. AC Challenge 状压dp