距离变换提供像素与某个图像的子集(可能是表示物体或某些特征)的距离。所产生的图像在该子集元素位置处的像素值为0,邻近的像素具有较小的值,离他越远的数值就越大。换句话说,一幅二值图像的距离变换提供每个像素到最近非零像素的距离。在图像边界外的假象像素也当做非零像素看待。
作为说明,考虑一幅二值图像,1表示物体,0表示背景。这里,距离变换给图像的每个像素赋予到最近物体或到整个图像边界的距离。物体内部像素的距离变换等于0。输入图像如图1所示,D4距离的距离变换结果如图2所示。
D4距离是城市街区距离,在数字栅格中不允许向对角线方向移动。只允许横向和纵向移动。
D4[(i,j),(h,k)]=|i-h|+|j-k|.(数距离时,可以从当前格开始跳,直到跳到离他最近的物体的格子里,所用的步数就是距离)
距离变换的意义:在二值图像中,距离变换就是将二值图像转换为灰度图像的过程。在二值图像中,通常将图像分为前景图像和背景图像,假设目标图像的像素为1为白色,背景图像的像素为0为黑色。在转换后的灰度图像中每个连通域中的像素的灰度级,与该像素点到其背景像素点的最近距离有关。
假设一个二值图像的包含一个连通区域S,其中有目标O和背景B,距离为D,则距离变换的定义如下:
其中disf()为距离函数,如果用欧拉距离公式表示,如下:
对距离的计算可采用两个模板,分别为向前和向后模板,如下图所示。
计算步骤如下:
1.使用向前模板,对图像从上到下,从左到右进行扫描,模板中心0点对应的像素值如果为0则跳过,如果为1则计算模板中每个元素与其对应的像素值的和,分别为sum1,sum2,sum3,sum4,sum5,而中心像素为这五个值中的最小值。
2.使用向后模板,对图像从下到上,从右到左进行扫描,方法同上。
3.一般我们使用的模板为3*3或5*5,分别如下图所示:
bwdist函数用于计算元素之间的距离。
如果a=,那么[D,L]=bwdist(a);
D=,L=
其中,D表示零元素所在位置靠近非零元素的最短距离。L表示该元素所靠近的非零元素的位置,matlab中,元素所在的位置标号,是按列来计算的。比如a中各元素的索引值如下:
棋盘距离变换的代码,(在二值图像中)
T=bwdist(F,’chessboard’);
%(x1,y1) 和 (x2,y2)的棋盘距离是 (│x1 – x2│,│y1 – y2│)的最大值.