目录

  • 什么叫距离变换图
  • 算法的实现
  • 效果图



引用请标明出去:



距离变换图图在自动驾驶路径规划中最为基础,同时也至关重要,比如A

算法,以及改进的A(混合A*等)算法。其中距离变换是计算机视觉、图像处理和模式识别中的一个重要工具。

什么叫距离变换图

针对二值图像(只有背景和目标(前景目标))的一种变换,计算一个图像中非零像素点(前景目标,1)到最近的零像素点(背景,0)的距离(即到零像素点的最短距离)。现有的距离变换算法中主要采用欧式距离(EDT)和非欧式距离两种表示方式。(详细参考博客:距离变换图详细介绍

距平变换数据分析_像素点

  1. 计算图像中所有的内部点非内部点(边缘点和孤立点),点集分别为S1,S2;
  2. 对于S1中的每一个内部点(x,y),使用距离公式计算其在S2中的最小距离,这些最小距离构成集合S3;
  3. 计算S3中的最大最小值Max,Min;
  4. 对于每一个内部点,转换后的灰度值G计算如下公式1-(2)所示;
    距平变换数据分析_自动驾驶_02

算法的实现

距离变换图生成(Opencv中有现成的库),在opencv其中的使用代码如下:

Mat imageThin(imageGray.size(),CV_32FC1); //定义保存距离变换结果的Mat矩阵  
distanceTransform(imageGray,imageThin,CV_DIST_L2,3);  //距离变换

具体算法实现主要由三个步骤;

  1. 图像预处理(灰度化和二值化)得到二值化图像,即如图4(a)所示
  2. 第一次扫描:从上至下,即字扫描方式,由于本次扫描只完成上行前列像素点的距离值,因此此时扫面只考虑一个像素点的数据,取其中小值加1便是该点的第一次扫面的距离值,如图4(b)所示
  3. 第二次扫描,从下至上,即反字扫描方式,由于本次扫描只完成下行后列像素点的距离值,因此此时扫描只考虑一个像素点的数据,取其中小值加1便是该点的第二扫描的距离值,如图4(c)所示,比较此像素点第一次和第二次计算的距离值大小,选择其中值小者为该像素点最终的距离值如图4(d)所示

    Fig.2 两遍扫描光栅算法

效果图

距平变换数据分析_自动驾驶_03


Fig.3 原始图像

距平变换数据分析_Max_04



Fig.4 算法效果图

其中,像素值最大的便是该图像的骨架,距离变换图和线性滤波以及形态学变换处于平等位置,都是图像处理的一种方法,均可以通过两遍扫描光栅算法快速计算曲线或点集的距离.