Opencv3.3-距离变换distanceTransform

功能说明:

distanceTransform:用于计算图像中每一个非零点距离离自己最近的零点的距离;

distanceTransform的第二个Mat矩阵参数dst保存了每一个点与最近的零点的距离信息,图像上越亮的点,代表了离零点的距离越远。

该函数有两个初始化API:

void distanceTransform(InputArray src, OutputArray dst, int distanceType, int maskSize)
 
void distanceTransform(
InputArray src, 
OutputArray dst, 
OutputArray labels, 
int distanceType, 
int maskSize, 
int labelType=DIST_LABEL_CCOMP )

参数说明:

  • src – 8-bit, 单通道(二值化)输入图片。
  • dst – 输出结果中包含计算的距离,这是一个32-bit  float 单通道的Mat类型数组,大小与输入图片相同。
  • distanceType – 计算距离的类型那个,可以是 CV_DIST_L1、CV_DIST_L2 、CV_DIST_C。
  • maskSize – 距离变换掩码矩阵的大小,可以是:

                 3(CV_DIST_L1、 CV_DIST_L2 、CV_DIST_C)
                 5(CV_DIST_L2 )
                 CV_DIST_MASK_PRECISE (这个只能在有4参数的API中使用)

  • labels – 可选的2D标签输出(离散 Voronoi 图),类型为 CV_32SC1 大小同输入图片。
  • labelType – 输出标签的类型,这里有些两种。
  • labelType==DIST_LABEL_CCOMP 将周围较近的白色像素点作为一个整体计算其到黑色边缘的距离
  • labelType==DIST_LABEL_PIXEL 单独计算每个白色像素点到其黑色边缘的距离.

distanceType参数说明:

distanceType maskSize a \ b \ c     
CV_DIST_C 3(3X3) a = 1, b = 1
CV_DIST_L1 3(3X3) a = 1, b = 2
CV_DIST_L2 3(3X3) a=0.955, b=1.3693
CV_DIST_L2 5(5X5) a=1, b=1.4, c=2.1969


其中 a b c 含义:在这个函数中计算每个白色像素到黑色像素(0值像素)的最短距离,因此需要通过最短的移动方式找到这个点兵计算他们之间的值。通常来说移动有水平方向、竖直方向、对角方向、跳跃式几个移动方法。虽然计算距离的方法都是一些很基础的公式,但是这个这个掩码矩阵必须是对阵的(这里插一句,要求对是式为了卷积计算的过程可以使用加速算法),因此掩码矩阵上所有水平和竖直方向的变化量(原文是must have the same shift cost ),这里用 a 代表;对角方向的变化量用 b 代表;跳跃移动的变化量用 c 代表。CV_DIST_C、CV_DIST_L1、CV_DIST_L2(maskSize=5)的计算结果是精确的,CV_DIST_L2(maskSize=3)是一个快速计算方法。

 

猜你喜欢

转载自blog.csdn.net/zfjBIT/article/details/85062246