opencv图像处理学习距离变换

2022-08-08 08:38:45

距离变换是计算坐标并识别空间点距离的过程,常用于骨架提取、斜切匹配、图像拼接等领域。距离变换输出与输入图像类似的灰度图像。但灰度值只会出现在前景区域,并且越靠近背景边缘的像素值灰度值越大。

1.距离

图像中的像素反映图像特定位置处的亮度信息,图像中对距离的定义如下:对于像素点p_{1}(x_{1},y_{1}),p_{2}(x_{1},x_{2}),p_{3}(x_{3},y_{3})满足同一性、对称性及三角不等式。

(1)D(p_{1},p_{2})\geq 0当且仅当p_{1}=p_{2}时,D(p_{1},p_{2})=0

(2)D(p_{1},p_{2})=D(p_{2},p_{1})

(3)D(p_{1},p_{3})\leq D(p_{1},p_{2})+D(p_{2},p_{3})

像素点距离度量的常用方法有以下几种:

(1)欧几里得距离

D_{e}[(x_{1},x_{2})]=\sqrt{(x_{1}-x_{2})^{2}+(y_{1}-y_{2})^{2}}

欧式距离的物理意义表示距离小于或等于某一个值的像素形成中心为(x,y)且半径为r的圆平面,但是平方根计算涉及浮点数,计算时间复杂度较大。

(2)棋盘距离

D_{8}[(x_{1},y_{1}),(x_{1},y_{1})]=max(|x_{1}-x_{2}|,|y_{1}-y_{2}|)

棋盘距离是指数字栅格上像素按照对角线方向移动形成的距离,其物理含义表示距离小于或等于某一个像素形成中心在(x,y)的正方形

(3)街区距离(曼哈顿距离)

D_{4}[(x_{1},y_{1}),(x_{2},y_{2})]=|x_{1}-x_{2}|+|y_{1}-y_{2}|

街区距离指的是数字栅格上从起点到终点所需要的最小步数,只允许横向和纵向移动的距离。其物理意义表示距离小于或等于某一个值的像素形成一个中心在(x,y)的菱形。

2.邻接性

如果图像中任意两个像素之间的距离满足D_{4}=1,则称为此为4-邻域,如果图像中任意两个像素之间的距离满足D_{8}=1,则称为此为8-邻域,如果图像中任意两个像素之间的距离满足D_{4}=2D_{8}=1,则称为此为弱4-邻域。相关邻域是像素点中D_{4}=1的集合。

3.区域

区域是指相邻像素点组成的集合,区域的边界至少含有一个背景邻点的像素集合。

连通区域(也称为连通域)一般是指图像中具有相近像素值且由位置相邻的前景像素点组成的图像区域,其分析常用于字符提取分割,运动目标检测与分割、医学图像处理等领域。

在opencv中提供的distanceTransform函数用来计算源图像中每个像素的距离:

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

其中参数src表示源图像;dst表示输出图像;distanceType表示距离的类型,可以设为CV_DIST_L1,CV_DIST_L2,CV_DIST_C;参数maskSize表示掩膜模板,可以设置为3、5或CV_DIST_MASK_PRECISE;参数label表示可选输出二维数组;labelType为输出二维数组类型

  • 作者:光电的一只菜鸡
  • 原文链接:https://blog.csdn.net/qq_35789421/article/details/88930559
    更新时间:2022-08-08 08:38:45