2018-04-26 22:56:53 qq_31804159 阅读数 7093
  • 【在线公开课】Kubernetes实战系列三——原理篇

    Kubernetes是一个全新的基于容器技术的分布式架构方案,它不局限于任何一种语言,没有限定任何编程接口,是一个完备的分布式系统支撑平台。Kubernetes具有完备的集群管理能力,它是当前被业界广泛认可和看好的Docker分布式系统解决方案,使用它我们可以“轻装上阵”地开发复杂系统,全面拥抱微服务架构,具备超强的横向扩容能力,能够实现资源管理的自动化,以及跨多个数据中心的资源利用率大化.

    5172 人正在学习 去看看 CSDN讲师

我的程序效果:

 

边缘检测算法是图像处理中最为基本的问题。其目的是标志图像出亮度变化明显的点,从而反映出图像中重要变化。

 

先介绍一下Sobel算子

Sobel 算子是像素图像边缘检测中最重要的算子之一,该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如下图,Gx和Gy分别是在横向及纵向的灰度偏导的近似值。(:对于一个彩色图要先把它转换为灰度图)

关于卷积可以看一下这个博客:https://blog.csdn.net/chaipp0607/article/details/72236892?locationNum=9&fps=1

 

对于每一个点我们可以获得两个方向的梯度,我们可以通过下面这个公式算出梯度的估计值。

我们定义一个阈值Gmax(这里定义Gmax = 150),如果G比Gmax大可以认为该点是一个边界值.则设置这个点为白色否则该店为黑色。这样我们就得到了通过边缘检测的图像。

 

代码实现:

1.彩色图转为灰度图


QImage LeadToGrey(const QImage &source)
{

    int w = source.width();
    int h = source.height();
    QImage gray(w,h,QImage::Format_RGB32);

    for( int i = 0; i< h; i++){

        for(int j = 0; j < w; j++){
            QRgb pixel = source.pixel(j,i);

            int grey = qGray(pixel);
            QRgb graypixel = qRgb(grey,grey,grey);
            gray.setPixel(j,i,graypixel);

        }
    }
    return gray;
}


2.边缘检测代码:


Image LeadToEdge(QImage source)
{
    int w = source.width();
    int h = source.height();

    QImage Edge(w,h,QImage::Format_RGB32);

    for( int i = 0; i< h; i++){
   //卷积操作
        for(int j = 0; j < w; j++){
            double Gx =  (-1)* QColor(source.pixel(getIndex(j-1,w),getIndex(i-1,h))).red()
                        +(-2)*QColor(source.pixel(getIndex(j,w),getIndex(i-1,h))).red()
                        +(-1)*QColor(source.pixel(getIndex(j+1,w),getIndex(i-1,h))).red()
                        +QColor(source.pixel(getIndex(j-1,w),getIndex(i+1,h))).red()
                        +2*QColor(source.pixel(getIndex(j,w),getIndex(i+1,h))).red()
                        +QColor(source.pixel(getIndex(j+1,w),getIndex(i+1,h))).red();

            double Gy =  QColor(source.pixel(getIndex(j-1,w),getIndex(i-1,h))).red()
                    +(2)*QColor(source.pixel(getIndex(j-1,w),getIndex(i,h))).red()
                    +(1)*QColor(source.pixel(getIndex(j-1,w),getIndex(i+1,h))).red()
                    +(-1)*QColor(source.pixel(getIndex(j+1,w),getIndex(i-1,h))).red()
                    +(-2)*QColor(source.pixel(getIndex(j+1,w),getIndex(i,h))).red()
                    +(-1)*QColor(source.pixel(getIndex(j+1,w),getIndex(i+1,h))).red();

           double G = sqrt(Gx*Gx+Gy*Gy);

            QRgb pixel;
            if(G>Gmax)
              pixel = qRgb(255,255,255);
            else
              pixel = qRgb(0,0,0);
            Edge.setPixel(j,i,pixel);
        }
    }
    return Edge;
}

 

2016-11-02 14:02:34 guanyuqiu 阅读数 17517
  • 【在线公开课】Kubernetes实战系列三——原理篇

    Kubernetes是一个全新的基于容器技术的分布式架构方案,它不局限于任何一种语言,没有限定任何编程接口,是一个完备的分布式系统支撑平台。Kubernetes具有完备的集群管理能力,它是当前被业界广泛认可和看好的Docker分布式系统解决方案,使用它我们可以“轻装上阵”地开发复杂系统,全面拥抱微服务架构,具备超强的横向扩容能力,能够实现资源管理的自动化,以及跨多个数据中心的资源利用率大化.

    5172 人正在学习 去看看 CSDN讲师

1.Sobel边缘检测算法

sobel边缘算子认不同为邻域的像素对当前像素产生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子结果产生的影响也不同。一般来说,距离越大,产生的影响越小。这两个卷积因子分别对垂直边缘和水平边缘影响最大,两个卷积的最大值做为该点的输出位。


该算子包含两组3*3的矩阵,分别为图像横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像灰度值,其公式如下:


具体计算如下:


其中f(a,b)表示图像(a,b)点的灰度值;

图像的每一个像素的横向及纵向灰度值通过以下公式结合,来计算该点灰度的大小:


通常,为了提高效率,使用不开平方的近似值:


如果梯度G大于某一阈值,则认为改点(x,y)为边缘点。

然后可用以下公式计算梯度方向:


sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常见的边缘检测方法。

代码:

void Sobel(unsigned char *pSource, unsigned char *pDst)
{
	int				i,j,Gx,Gy,nSum;
	unsigned char	*pDs1,*pDs2,*pDs3,*pDs4,*pDst5,*pDst6,*pDst7,*pDst8,*pDst9,*pResut;
	memset(pDst,0,sizeof(unsigned char)*m_nWidth*m_nHeight);
	pDs1 = pSource;
	pDs2 = pDs1+1;
	pDs3 = pDs2+1;
	pDs4 = pSource+m_nWidth;
	pDst5 = pDs4+1;
	pDst6 = pDst5+1;
	pDst7 = pSource+2*m_nWidth;
	pDst8 = pDst7+1;
	pDst9 = pDst8+1;
	pResut = pDst+m_nWidth+1;

	for (i=1;i<m_nHeight-1;i++)
	{
		for (j=1;j<m_nWidth-1;j++)
		{
			Gx = (*pDs3)+2*(*pDst6)+(*pDst9)
				-(*pDst7)-(*pDs1)-2*(*pDs4);
			Gy = (*pDs1)+2*(*pDs2)+(*pDs3)
				-(*pDst7)-2*(*pDst8)-(*pDst9);
			nSum = abs(Gx)+abs(Gy);
			*pResut = nSum>175?255:0;
			pDs1++;
			pDs2++;
			pDs3++;
			pDs4++;
			pDst5++;
			pDst6++;
			pDst7++;
			pDst8++;
			pDst9++;
			pResut++;
		}
		pDs1+=2;
		pDs2+=2;
		pDs3+=2;
		pDs4+=2;
		pDst5+=2;
		pDst6+=2;
		pDst7+=2;
		pDst8+=2;
		pDst9+=2;
		pResut+=2;
	}
}

2.Robert算子——无方向一阶锐化


3.Priwitt算子——无方向一阶锐化

Priwitt算子在一个方向求微分,而在另一个方向求平均,因而对噪声相对不敏感,有抑制噪声的作用,但是像素平均相对于对图像的低通滤,所以Prewitt算子对边缘的定位不如Roberts算子。与Sobel相比,有一定的抗干扰性,图像效果比较干净。


几种方法的效果比较:

  • Sobel算子与Priwitt算法的思路相同,属于同一类型,因此处理效果基本相同;
  • Roberts算子的模板时2*2,提取信息弱;
  • 单方向锐化经过处理之后,也可以对边界进行增强。

4.拉普拉斯算子

二维函数f(x,y)的拉普拉斯是一个二阶的微分,定义为:

最终结果为:



Laplacian算子利用二阶导数信息,具有各向同性,即与坐标轴方向无关,坐标轴旋转后梯度结果不变。使得图像经过二阶微分后,在边缘处产生一个陡峭的零交叉点,根据这个对零交叉点判断边缘。

为了改善锐化效果,可以脱离微分的计算原理,在原有的算子基础上,对模板系数进行改变,获得Laplacian变形算子


Laplacian算子对噪声比较敏感,Laplacian算子有一个缺点是它对图像中的某些边缘产生双重响应。所以图像一般先经过平滑处理,通常把Laplacian算子和平滑算子结合起来生成一个新的模板。





2016-02-26 17:48:13 baimafujinji 阅读数 66321
  • 【在线公开课】Kubernetes实战系列三——原理篇

    Kubernetes是一个全新的基于容器技术的分布式架构方案,它不局限于任何一种语言,没有限定任何编程接口,是一个完备的分布式系统支撑平台。Kubernetes具有完备的集群管理能力,它是当前被业界广泛认可和看好的Docker分布式系统解决方案,使用它我们可以“轻装上阵”地开发复杂系统,全面拥抱微服务架构,具备超强的横向扩容能力,能够实现资源管理的自动化,以及跨多个数据中心的资源利用率大化.

    5172 人正在学习 去看看 CSDN讲师

什么是数字图像处理?历史、以及它所研究的内容。

 

说起图像处理,你会想到什么?你是否真的了解这个领域所研究的内容。纵向来说,数字图像处理研究的历史相当悠久;横向来说,数字图像处理研究的话题相当广泛。

数字图像处理的历史可以追溯到近百年以前,大约在1920年的时候,图像首次通过海底电缆从英国伦敦传送到美国纽约。图像处理的首次应用是为了改善伦敦和纽约之间海底电缆发送的图片质量,那时就应用了图像编码,被编码后的图像通过海底电缆传送至目的地,再通过特殊设备进行输出。这是一次历史性的进步,传送一幅图片的时间从原来的一个多星期减少到了3小时。

1950年,美国的麻省理工学院制造出了第一台配有图形显示器的电子计算机——旋风I号(Whirlwind I)。旋风I号的显示器使用一个类似于示波器的阴极射线管(Cathode Ray Tube,CRT)来显示一些简单的图形。1958年美国Calcomp公司研制出了滚筒式绘图仪,GerBer公司把数控机床发展成为平板式绘图仪。在这一时期,电子计算机都主要应用于科学计算,而为这些计算机配置的图形设备也仅仅是作为一种简单的输出设备。

随着计算机技术的进步,数字图像处理技术也得到了很大的发展。1962年,当时还在麻省理工学院攻读博士学位的伊凡·苏泽兰(Ivan Sutherland)成功开发了具有划时代意义的“画板”(Sketchpad)程式。而这正是有史以来第一个交互式绘图系统,同时这也是交互式电脑绘图的开端。从此计算机和图形图像被更加紧密地联系到了一起。鉴于伊凡·苏泽兰为计算机图形学创立所做出的杰出贡献,他于1988年被授予计算机领域最高奖——图灵奖。

1964年,美国加利福尼亚的喷气推进实验室用计算机对“旅行者七号”太空船发回的大批月球照片进行处理,以校正航天器上摄影机中各种类型的图像畸变,收到了明显的效果。在后来的宇航空间技术中,数字图像处理技术都发挥了巨大的作用。

到了20世纪60年代末期,数字图像处理已经形成了比较完善的学科体系,这套理论在20世纪70年代发展得十分迅速,并开始应用于医学影像和天文学等领域。1972年,美国物理学家阿伦·马克利奥德·柯麦科(Allan MacLeodCormack)和英国电机工程师戈弗雷·纽博尔德·豪恩斯弗尔德(Godfrey Newbold Housfield)发明了轴向断层术,并将其用于头颅诊断。世界第一台X射线计算机轴向断层摄影装置由EMI公司研制成功,这也就是人们通常所说的CT(Computer Tomograph)。CT可通过一些算法用感知到的数据去重建通过物体的“切片”图像。这些图像组成了物体内部的再现图像,也就是根据人的头部截面的投影,经计算机处理来进行图像重建。鉴于CT对于医学诊断技术的发展所起到的巨大推动作用,柯麦科和豪恩斯弗尔德于1979年获得了诺贝尔生理或医学奖。

随后在2003年,诺贝尔生理或医学奖的殊荣再次授予了两位在医疗影像设备研究方面做出杰出贡献的科学家——美国化学家保罗·劳特伯尔(Paul Lauterbur)和英国物理学家彼得·曼斯菲尔(Peter Mansfield)。两位获奖者在利用磁共振成像(Magnetic Resonance Imaging,MRI)显示不同结构方面分别取得了开创性成就。瑞典卡罗林斯卡医学院称,这两位科学家在MRI领域的开创性工作,代表了医学诊疗和研究的重大突破。而事实上,核磁共振的成功同样也离不开数字图像处理方面的发展。即使在今天,诸如MRI图像降噪等问题依然是数字图像处理领域的热门研究方向。

说到数字图像的发展历程,还有一项至关重要的成果不得不提,那就是电荷耦合元件(Charge-coupled Device,CCD)。CCD最初是由美国贝尔实验室的科学家维拉德·波义耳(Willard Sterling Boyle)和乔治·史密斯(George Elwood Smith)于1969年发明的。CCD的作用就像胶片一样,它能够把光学影像转化为数字信号。今天人们所广泛使用的数码照相机、数码摄影机和扫描仪都是以CCD为基础发展而来的。换句话说,我们现在所研究的数字图像主要也都是通过CCD设备获取的。由于波义耳和史密斯在CCD研发上所做出的巨大贡献,他们两人共同荣获了2009年度的诺贝尔物理学奖。

数字图像处理在今天是非常热门的技术之一,生活中无处不存在着它的影子,可以说它是一种每时每刻都在改变着人类生活的技术。但长久以来,很多人对数字图像处理存在着较大的曲解,人们总是不自觉地将图像处理和Photoshop联系在一起。大名鼎鼎的Photoshop无疑是当前使用最为广泛的图像处理工具。类似的软件还有Corel公司生产的CorelDRAW等软件。

尽管Photoshop是一款非常优秀的图像处理软件,但它的存在并不代表数字图像处理的全部理论与方法。它所具有的功能仅仅是数字图像处理中的一部分。总的来说,数字图像处理研究的内容主要包括如下几个方面:

  • 1)图像获取和输出
  • 2)图像编码和压缩
  • 3)图像增强与复原
  • 4)图像的频域变换
  • 5)图像的信息安全
  • 6)图像的区域分割
  • 7)图像目标的识别
  • 8)图像的几何变换

但图像处理的研究内容,又不仅限于上述内容!所以说图像处理的研究话题是相当宽泛的。那现在图像处理都应用在哪些领域呢?或许我们可能熟知的例子有(当然,你应该还能举出更多例子):

  • 1)一些专业图像处理软件:Photoshop、CorelDRAW……
  • 2)一些手机APP应用:美图秀秀、玩图……
  • 3)一些医学图像处理应用:MRI、彩超图像处理……
  • 4)一些制造业上的应用:元器件检测、瑕疵检测……
  • 5)一些摄像头、相机上的应用:夜间照片的质量改善……
  • 6)一些电影工业上是应用:换背景、电影特技……

 

什么样的人会去学(或者需要学)图像处理?

 

1)如果你是我上述那些应用领域的从业者,你当然需要掌握图像方面的理论和技术;2)相关专业的研究人员、大专院校的博士生、研究生。

所谓相关专业又是指什么呢?这个答案也可能相当宽泛,例如(但不仅限于此):Computer Science, Software Engineering, Electronic Engineering, Biomedical Engineering, Automation, Control, Applied Mathematics……

 

如何学好图像处理——我的一些箴言

 

1)对于初级入门者

 

一个扎实的基础和对于图像处理理论的完整的、系统的整体认识对于后续的深入研究和实践应用具有非常非常重要的意义。

我经常喜欢拿武侠小说《天龙八部》中的一段情节来向读者说明此中的道理,相信读者对这部曾经被多次搬上银幕的金庸作品已经耳熟能详了。书中讲到有个名叫鸠摩智的番僧一心想练就绝世武学,而且他也算是个相当勤奋的人了。但是,他错就错在太过于急功近利,甚至使用道家的小无相功来催动少林绝技。看上去威力无比,而且可以在短时间内“速成”,但实则后患无穷。最终鸠摩智走火入魔,前功尽废,方才大彻大悟。这个故事其实就告诉我们打牢基础是非常重要的,特别是要取得更长足的发展,就更是要对基本原理刨根问底,力求甚解,从而做到庖丁解牛,游刃有余。

一些看似高深的算法往往是许多基础算法的组合提升。例如,令很多人望而却步的SIFT特征构建过程中,就用到了图像金字塔、直方图、高斯滤波这些非常非常基础的内容。但是,它所涉及的基础技术显然有好几个,如果缺乏对图像处理理论的系统认识,你可能会感觉事倍功半。因为所有的地方好像都是沟沟坎坎。

关于课程——

在这个阶段其实对于数学的要求并不高,你甚至可以从一些感性的角度去形象化的理解图像处理中很多内容(但不包括频域处理方面的内容)。具体到学习的建议,如果有条件(例如你还在高校里读书)你最好能选一门图像处理方面的课程,系统地完整的地去学习一下。这显然是入门的最好办法。如此一来,在建立一个完整的、系统的认知上相当有帮助。如果你没办法在学校里上一门这样的课,网上的一些公开课也可以试试。但现在中文MOOC上还没有这方面的优质课程推荐。英文的课程则有很多,例如美国加州伦斯勒理工学院Rich教授的数字图像处理公开课——https://www.youtube.com/channel/UCaiJlKxXamoODQtlx486qJA?spfreload=10。

关于教材——

显然,只听课其实还不太够,如果能一并读一本书就最好了。其实不用参考很多书,只要一本,你能从头读到尾就很好了。如果你没有条件去上一门课,那读一本来完整的自学一下就更有必要了。这个阶段,去网上到处找博客、看帖子是不行的。因为你特别需要在这个阶段对这门学问建立一个系统的完整的知识体系。东一块、西一块的胡拼乱凑无疑是坑你自己,你的知识体系就像一个气泡,可能看起来很大,但是又脆弱的不堪一击。

现在很多学校采用冈萨雷斯的《数字图像处理》一书作为教材。这是一本非常非常经典的著作。但是我必须要提醒读者:

1)这是一本专门为Electronic Engineering专业学生所写的书。它需要有信号与系统、数字信号处理这两门课作为基础。如果你没有这两门课的基础,你读这本书要么是看热闹,要么就是看不懂。

下面是冈书中的一张插图。对于EE的学生来说,这当然不是问题。但是如果没有我说的那两门课的基础,其实你很难把握其中的精髓。H和h,一个大小一个小写,冈书中有的地方用H,有的地方用h,这都是有很深刻用意的。原作者并没有特别说明它们二者的区别,因为他已经默认你应该知道二者是不同的。事实上,它们一个表示频域信号,一个表示时域信号,这也导致有时候运算是卷积,有时候运算是乘法(当然这跟卷积定理有关)。所以我并不太建议那些没有这方面基础的学生在自学的时候读这本书。

 

2)冈萨雷斯教授的《数字图像处理》第一版是在1977年出版的,到现在已经快40年了;现在国内广泛使用的第二版是2002年出版的(第三版是2007年但是其实二者差异并不大),到现在也有20年左右的时间了。事实上,冈萨雷斯教授退休也有快30年了。所以这本书的内容已经偏于陈旧。数字图像处理这个领域的发展绝对是日新月异,突飞猛进的。特别在最近二三十年里,很多新思路,新方法不断涌现。如果你看了我前面推荐的Rich教授的公开课(这也是当前美国大学正在教学的内容),你一下子就会发现,原来我们的教育还停留在改革开放之前外国的水平上。这其实特别可怕。所以我觉得冈萨雷斯教授的《数字图像处理》作为学习过程中的一个补充还是不错的,但是如果把它作为主参考,那真的就是:国外都洋枪洋炮了,我们还在大刀长矛。

 

那么现在问题来了,对于图像处理学习者而言到底看什么书好呢?我的意见是你可以选择下面两本书中的任何一本《数字图像处理原理与实践(Matlab版)》,以及《数字图像处理:技术详解与Visual C++实践》,当然选择的标准之一就是到底你更擅长使用MATLAB还是C++。

   

 

 

 

2)对于中级水平者

 

纸上得来终觉浅,绝知此事要躬行。对于一个具有一定基础的,想更进一步的中级水平的人来说,这个阶段最重要的就是增强动手实践的能力。

还是说《天龙八部》里面的一个角色——口述武功、叹为观止的王语嫣。王语嫣的脑袋里都是武功秘籍,但问题是她从来都没练过一招一式。结果是,然并卵。所以光说不练肯定不灵啊。特别是,如果你将来想从事这个行业,结果一点代码都不会写,那几乎是不可想象的。学习阶段,最常被用来进行算法开发的工具是Matlab和OpenCV。你可以把这两个东西都理解为一个相当完善的库。当然,在工业中C++用得更多,所以Matlab的应用还是很有限的。前面我们讲到,图像处理研究内容其实包括:图像的获取和编解码,但使用Matlab和OpenCV就会掩盖这部分内容的细节。你当然永远不会知道,JPEG文件到底是如何被解码的。

如果你的应用永远都不会涉及这些话题,那么你一直用Matlab和OpenCV当然无所谓。例如你的研究领域是SIFT、SURF这种特征匹配,可以不必理会编解码方面的内容。但是如果你的研究话题是降噪或者压缩,可能你就绕不开这些内容。最开始学的时候,如果能把这部分内容也自己写写,可能会加深你的理解。以后做高级应用开发时,再调用那些库。所以具体用什么,要不要自己写,是要视你所处的阶段和自己的实际情况而定的。以我个人的经验,在我自学的时候,我就动手写了Magic House,我觉得这个过程为我奠定了一个非常夯实的基础,对于我后续的深入研究很有帮助。

 

下面这个文中,我给出了一些这方面的资源,代码多多,很值得参考学习:图像处理与机器视觉网络资源收罗

http://blog.csdn.net/baimafujinji/article/details/32332079

 

3)对于高级进阶者

 

到了这个程度的读者,编程实现之类的基本功应该不在话下。但是要往深,往高去学习、研究和开发图像处理应用,你最需要的内容就变成了数学。这个是拦在很多处于这个阶段的人面前的一大难题。如果你的专业是应用数学,当然你不会感觉有问题。但如果是其他专业背景的人就会越发感觉痛苦。

如果你的图像处理是不涉及机器学习内容的,例如用Poisson方程来做图像融合,那你就要有PDE数值解方面的知识;如果你要研究KAZE特征,你就必须要知道AOS方面的内容。如果你研究TV降噪,你又要知道泛函分析中的BV空间内容……这些词你可能很多都没听过。总的来说,这块需要的内容包括:复变函数、泛函分析、偏微分方程、变分法、数学物理方法……

如果你要涉足机器视觉方法的内容,一些机器学习和数据挖掘方法的内容就不可或缺。而这部分内容同样需要很强大的数学基础,例如最大似然方法、梯度下降法、欧拉-拉格朗日方程、最小二乘估计、凸函数与詹森不等式……

当然,走到这一步,你也已经脱胎换骨,从小白到大神啦!路漫漫其修远兮,吾将上下而求索。

 

(全文完)

 

 

2019-09-16 22:44:16 qq_27828281 阅读数 86
  • 【在线公开课】Kubernetes实战系列三——原理篇

    Kubernetes是一个全新的基于容器技术的分布式架构方案,它不局限于任何一种语言,没有限定任何编程接口,是一个完备的分布式系统支撑平台。Kubernetes具有完备的集群管理能力,它是当前被业界广泛认可和看好的Docker分布式系统解决方案,使用它我们可以“轻装上阵”地开发复杂系统,全面拥抱微服务架构,具备超强的横向扩容能力,能够实现资源管理的自动化,以及跨多个数据中心的资源利用率大化.

    5172 人正在学习 去看看 CSDN讲师

1.1 介绍

 在事件响应和威胁捕获(threat hunting)过程,了解攻击者如何在网络中进行移动非常重要。下面介绍在横向移动过程,对使用远程桌面进行横向移动留下的数字证据进行分析。
 分析主要针对远程桌面的源和目的,通过事件日志,注册表,文件系统3个方面进行。
环境
 如无特殊说明,192.168.49.144作为远程桌面的目的端,192.168.49.155作为远程桌面的发起端(源)。

1.2 RDP-源

1.2.1 事件日志

  • security.evtx
    - 4648,使用可选的凭证登录。记录当前登录的用户名,登录时使用的用户名,目标主机名/IP,进程名。
    日志内容如下:
     当前登录的用户为attacker,当前主机名为ATTACKER-PC,登录时使用的用户名为victim,进程为lsass.exe。
    在这里插入图片描述
  • Microsoft-WindowsTerminalServicesRDPClient%4Operational.evtx
    -1024,记录目的主机名,下面日志中记录到的目的IP为192.168.49.144,证明当前主机曾在9月16日 14:26连接过192.168.49.144的远程桌面。
    EventID=1024
    -1102,记录目的主机IP。测试过程使用RDP登录未记录到ID为1102的日志。

1.2.2 注册表

  • 针对每个用户,注册表会对远程桌面目的地址进行追踪
    注册表位置为 NTUSER\Software\Microsoft\Terminal Server Client\Servers,下图记录到当前主机连接过192.168.49.144的远程桌面:
    在这里插入图片描述
    对NTUSER.dat进行分析,也能查看到曾经使用远程桌面连接过的主机IP(使用Registry Explorer时,使用的是美国时区,需要对时间加8小时):
    在这里插入图片描述
  • ShimCache
    - 位于SYSTEM注册表文件中,在win7/8/10中,位置为SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache,可确认mstsc.exe执行过,另外根据AppCompatCache的last write timestamp值,可以确认程序在2019-08-21 15:13:45之前执行(注意由于工具使用美国时区,时间要加8小时):
    在这里插入图片描述
  • BAM/DAM
    - 记录存在于SYSTEM注册表文件,windows 10 系统才存在,位置为SYSTEM\CurrentControlset\Services\bam\UserSettings{SID},记录程序最后的执行时间。下图记录到mstsc.exe的最后执行时间为2019-08-23 14:28:51:
    在这里插入图片描述
  • AmCache.hve
    - 记录程序的第一次执行时间,位于C:\Windows\Appcompat\Programs\Amcache.hve。可用RegRipper工具进行分析,测试过程未记录到mstsc.exe的执行:
    在这里插入图片描述
  • UserAssist
    - 存在于NTUSER.DAT,位置为NTUSER.DAT\Software\Microsoft\Windows\Currentversion\Explorer\UserAssist{GUID}\Count,可记录远程桌面客户端mstsc.exe最后执行时间和执行次数。在下图中,mstsc.exe执行了7次,最后执行时间为2019-08-23 11:14:38(工具使用美国时区,时间加8小时)。
    在这里插入图片描述

1.2.3 文件系统

  • Jumplist
    - 追踪远程桌面连接的目的地址和时间,位于C:\Users<Username>\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\目录。
    首先使用工具kape.exe对数据进行提取:
    kape.exe --tsource C: --target LnkFilesAndJumpLists --tdest "C:\Users\c2261\Desktop\registry\JumpAndJumpLists"
    然后使用JLECmd.exe对提取到的数据进行分析,将生成csv文件:
    JLECmd.exe -d "C:\Users\c2261\Desktop\registry\JumpAndJumpLists\C\Users\c2261\AppData\Roaming\Microsoft\Windows\Recent" -q --csv "C:\Users\c2261\Desktop\registry\JumpAndJumpLists"
    使用Timeline Explorer查看结果(时间须加8小时),可以看到2019-08-23 09:12:31远程桌面客户端进行了连接,目的地址为192.168.49.144:
    在这里插入图片描述
  • Prefetch
    - Windows Prefetch 文件位于C:\Windows\Prefetch\目录,通过分析mstsc.exe-{hash}.pf文件,可以确定mstsc.exe的执行次数,首次执行时间,最后执行时间等。
    使用工具WinPrefetchView进行查看:
    在这里插入图片描述

1.3 RDP-目的

1.3.1 事件日志

  • security.evtx
    - 4624,登录类型为10,表明账号成功登录,类型为7代表重连,记录源IP/登录用户名。在下图中,登录的用户名为victim,源IP为192.168.49.155,登录时间为2019/9/7 10:04:28:
    在这里插入图片描述
    - 4778 会话重连接到Windows工作站,4799 会话与Windows工作站断开连接,这两类日志会记录源IP,客户端名称,登录的用户名信息。
    4778日志内容如下:
    在这里插入图片描述
    4799日志内容如下:
    在这里插入图片描述
  • Microsoft-Windows-RemoteDesktopServices-RdpCoreTS%4Operational.evtx
     对于未记录审核失败的系统,可通过本地安全策略进行配置:
    win+R->secpol.msc,然后配置为如下:
    在这里插入图片描述
    - 131,连接尝试,记录源IP。在下图中源IP为192.168.49.155,连接时间为2019-09-16 14:36:55:
    在这里插入图片描述
    - 98,成功建立TCP连接。
    在这里插入图片描述
  • Microsoft-Windows-TerminalServices-RemoteConnectionManager%4Operational.evtx
    - 1149 用户认证成功,记录源IP/登录的用户名,如果用户名为空白,则表明可能使用sticky Keys。
    Event ID 1149并不代表成功登录到目标系统,只是表明RDP客户端和服务端网络连接成功。
    在这里插入图片描述
  • Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx
    - 21 Remote Desktop Services:Session logon succeeded22 Remote Desktop Services:Shell start notification received25 Remote Desktop Services:Session reconncetion succeeded,会记录源IP/登录的用户名。
     事件ID 25日志内容如下:
    在这里插入图片描述
    - 41,记录登录的用户名。
    在这里插入图片描述

1.3.2 注册表

  • ShimCache
    - 位于SYSTEM注册表文件。可用工具kape.exe对live系统的注册表文件进行提取,命令如下:
    kape --tsource C: --target RegistryHives --tdest .\Registry
    - rdpclip.exe,可以确认该主机被通过远程桌面连接过,由AppCompatCache的last write timestamp值,可以确认连接时间不迟于2019-09-16 09:03:03(注意时间加8):
    在这里插入图片描述
    - tstheme.exe,远程桌面连接时,服务端(目的)也会运行tstheme.exe,同样可以确认连接时间不迟于2019-09-16 09:03:03(注意时间加8):
    在这里插入图片描述

1.3.3 文件系统

  • Prefetch
    - Windows Prefetch文件位于C:\windows\prefetch\目录,.pf文件会记录程序的执行次数,首次执行时间,最后执行时间等。可用WinPrefetchView程序对.pf文件进行分析。
    - rdpclip.exe-{hash}.pf
     在下图中,可以确认rdpclip.exe执行了2次,首次执行(首次使用rdp连接到该系统)时间为2019-09-04 23:33:49,最后执行(最后一次通过rdp连接到该系统)时间为2019-09-16 14:43:38。
    在这里插入图片描述
    - tstheme.exe-{hash}.pf
     在下图中,tstheme.exe执行了6次,首次执行时间为2019-09-04 23:33:42,最后执行时间为2019-09-16 14:43:51:
    在这里插入图片描述

^_^- 感谢阅读 -^_^

2019-10-11 13:08:14 gophae 阅读数 82
  • 【在线公开课】Kubernetes实战系列三——原理篇

    Kubernetes是一个全新的基于容器技术的分布式架构方案,它不局限于任何一种语言,没有限定任何编程接口,是一个完备的分布式系统支撑平台。Kubernetes具有完备的集群管理能力,它是当前被业界广泛认可和看好的Docker分布式系统解决方案,使用它我们可以“轻装上阵”地开发复杂系统,全面拥抱微服务架构,具备超强的横向扩容能力,能够实现资源管理的自动化,以及跨多个数据中心的资源利用率大化.

    5172 人正在学习 去看看 CSDN讲师

本文根据论文Autonomous vehicles control in the VisLab Intercontinental Autonomous Challenge 介绍了自动驾驶中使用的横向运动学模型的原理已经数学物理关系。

横向运动学的细节参考博文:
https://blog.csdn.net/gophae/article/details/100012763

在阿克曼转向系中,转向角和行驶路径的曲率关系是:
在这里插入图片描述
在这里插入图片描述
在图中也可以观察的很明显。这里的delta就是转向角(前轮),L 是车辆的轴距,kappa就是当前行驶路径的曲率了。

当然,如果要仔细区分,这里的前轮左右两轮的转向角还是有一点区别的:
在这里插入图片描述
这里有的B就是半轮距。

这里要分析的一个问题就是如何处理方向盘转角和真是的车轮转角之间的非线性问题,对这个非线性问题的处理直接影响到了寻迹行驶的控制精度,毕竟路径规划模块给出来的reference line 是需要车辆去精确跟随的,如果不能够很好的给出合理的车辆方向盘转角,就没办法很好的实现路径规划模块给出的车辆车轮转角。当然,为了简便,很多人选择了线性化这个关系,直接用一个固定的车辆转角和方形盘转角的传动比来描述这个关系,控制上则牺牲了部分精度,我试过以后效果也还行,但是这里还是介绍一个如何科学的从数学角度解决这个问题。

车辆动力学上面说车辆在转弯过程中,时可能产生离心力的,这个力的效果随车速增加而越发增强,离心力的产生可能会造成车辆的侧向滑移。我们称之为侧偏。我们定义两个侧偏力:
在这里插入图片描述
lf 和 lr 就是前后轮轴距,L 为车长,R 为转弯半径,M 为车重, V 为车速,看的出,这个侧偏力是和车速有直接关系的。

在这里插入图片描述
上图中,可以看出(通过三角形角度关系)
1,车辆的旋转中心不再是后轴中心了,而是发生了前移。
2,这个偏移量被滑移率所决定。在滑移角度,delta_f, delta_r, 以及车轮转向角delta 之间有这样的关系:
在这里插入图片描述
对于小角度的滑移角度,我们认为侧偏力和侧偏角之间还是可以用线性的侧偏刚度还刻画的:
在这里插入图片描述
根据上面的几个equation, 我们通过推导可以获得曲率,车轮转角,车速之间的关系:
在这里插入图片描述
这里Kv的表达式自己推导一下,我不写了。
这个Kv的另一个用处就是用来表示转向过度问题,K 小于0就是转向过度,否则就是转向不足。

很明显,车辆的方向盘转角角度phi, 和路径曲率是非线性的,我们通过泰勒级数展开,更准确的表达这两者之间的关系应该是这样的:

在这里插入图片描述
这就给出了理论关系表达式,自变量是车速V,和方向盘转角phi, 因变量就是曲率。最后通过系统辨识的方法,或者非线性回归的方法,把这里的P,Q 参数找出来,就可以通过一个非线性的表达式精准刻画这三个变量之间的关系,为车辆的横向控制提供更精确的控制指令。

没有更多推荐了,返回首页