赞
踩
距离变换于被广泛应用于图像分析、计算机视觉、模式识别等领域,人们利用它来实现目标细化、骨架提取、形状插值及匹配、粘连物体的分离等。距离变换的图像是二值图像针。二值图像可以做事两个部分组成的前景目标和背景,前景目标的像素值为1,背景的像素值为0;距离变换的结果是一幅灰度级图像,即距离图像,图像中每个像素的灰度值为该像素与距其最近的背景像素间的距离。
距离变换算法主要采用两类距离测度:非欧式距离和欧式距离。
1. 欧式距离:其物理意义表示距离小于等于某一个值得像素中心(x,y)且半径为R的圆平面,r
如上图所示,p1h和p2 ,dist=1.4.14
2. 棋盘距离:是指数字栅格上像素按照对角线方向移动形成的距离。
如上图所示,p1h和p2 ,dist=2
3. 曼哈顿距离:从起点到终点所需要的最小步数,只允许横向移动和纵向移动。
如上图所示,p1h和p2 ,dist=1
例如:如下1表示前景目标,0表示背景,则曼哈顿(城市街区)距离:
- void cv::distanceTransform(
- InputArray src, // cv_8U的单通道的图像
- OutputArray dst, // 输出图像, cv_8U或者CV_32F
- OutputArray labels,// 二维的标签数组(离散Voronoi图),与输入图像具有相同的尺寸,数据类型为CV_32S的单通道数据
- int distanceType, // 计算距离的方法 DIST_USER -1 ,表示用户自定义距离
- CV_DIST_L1, 1, 曼哈顿距离(城市街区距离) 距离的计算是精确的
- CV_DIST_L2, 2, 欧式距离 计算有某些相对误差 (5×5 mask 给出更精确的结果)
- CV_DIST_C 3, 棋盘距离 距离的计算是精确的
- int maskSize,// 掩码大小 :DIST_MASK_3(3×3)和DIST_MASK_5(5×5)
- int labelType = DIST_LABEL_CCOMP //labelType == DIST_LABEL_CCOMP时,该函数会自动在输入图像中找到0像素的连通分量,并用不同的标签标记它们。当labelType == DIST_LABEL_CCOMP时,该函数扫描输入图像并用不同的标签标记所有0像素。
- )
F(p) = min( F(p), F(q)+D(p,q) ), 其中,q属于AL.
Fpp = minF(pF(p, Fqq+Dp,qp,q ), 其中,q属于BR
代码详情请看:距离变换 - 芒果的博客 - 芒果的个人博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。