主要内容

bwdist

二值图像的距离变换

描述

例子

D= bwdist (BW计算二值图像的欧氏距离变换BW.对于中的每个像素BW时,距离变换分配一个数字,该数字是该像素与最近的非零像素之间的距离BW

Didx= bwdist(BW还以索引数组的形式计算最近像素映射,idx.的每个元素idx的最近的非零像素的线性索引BW.最近像素映射也称为特征映射、特征变换或最近邻居变换。

Didx= bwdist(BW方法使用指定的替代距离度量来计算距离变换方法

例子

全部折叠

这个例子展示了如何计算二值图像的欧几里得距离变换,以及图像的最近像素映射。

创建一个二值图像。

Bw = 0 (5,5);Bw (2,2) = 1;Bw (4,4) = 1
bw =5×50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

计算距离变换。

[D,IDX] = bwdist(bw)
D =5x5单矩阵1.4142 1.0000 1.4142 2.2361 3.1623 1.0000 0 1.0000 2.0000 2.2361 1.4142 1.0000 1.4142 2.2361 2.0000 1.0000 0 1.0000 3.1623 2.2361 1.4142 1.0000 1.4142
IDX =5x5 uint32矩阵7 7 7 7 7 7 7 7 7 7 19 7 7 7 19 19 7 7 7 19 19 19 7 19 19 19 19 19

在最近邻矩阵中IDX值7和19表示使用线性矩阵索引的非零元素的位置。如果一个像素包含一个7,它最近的非零邻居在线性位置7。

这个例子展示了如何比较支持的距离方法的2-D距离变换。万博1manbetx在图中,请注意准欧几里得距离变换如何最接近欧几里得距离方法实现的圆形。

Bw = 0 (200,200);Bw (50,50) = 1;Bw (50,150) = 1;Bw (150,100) = 1;D1 = bwdist(bw,“欧几里得”);D2 = bwdist(bw,“cityblock”);D3 = bwdist(bw,“棋盘”);D4 = bwdist(bw,“quasi-euclidean”);RGB1 = repmat(rescale(D1), [1 1 3]);RGB2 = repmat(rescale(D2), [1 1 3]);RGB3 = repmat(rescale(D3), [1 1 3]);RGB4 = repmat(rescale(D4), [1 1 3]);图subplot(2,2,1), imshow(RGB1), title(“欧几里得”)举行、不等高线(D1) subplot(2,2,2)、不等高线(RGB2)、标题(“Cityblock”)举行、imcontour(D2) subplot(2,2,3)、imshow(RGB3)、title(“棋盘”)举行、imcontour(D3) subplot(2,2,4)、imshow(RGB4)、title(“Quasi-Euclidean”)举行imcontour (D4)

图中包含4个轴对象。轴对象1的标题欧几里得包含2个对象类型的图像,轮廓。带有标题Cityblock的坐标轴对象2包含图像、轮廓类型的2个对象。棋盘包含2个对象类型的图像,轮廓。标题为准欧几里得的轴对象4包含图像、轮廓类型的2个对象。

这个例子展示了如何比较中心包含单个非零像素的3-D图像的距离变换的等值面图。

Bw = 0 (50,50,50);Bw (25,25,25) = 1;D1 = bwdist(bw);D2 = bwdist(bw,“cityblock”);D3 = bwdist(bw,“棋盘”);D4 = bwdist(bw,“quasi-euclidean”);图子图(2,2,1),等值面(D1,15),轴平等的(3) camlight,照明灯高洛德、标题(“欧几里得”)子图(2,2,2),等值面(D2,15),轴平等的(3) camlight,照明灯高洛德、标题(“街区”)子图(2,2,3),等值面(D3,15),轴平等的(3) camlight,照明灯高洛德、标题(“棋盘”)子图(2,2,4),等值面(d4,15),轴平等的(3) camlight,照明灯高洛德、标题(“Quasi-Euclidean”

图中包含4个轴对象。标题为Euclidean的坐标轴对象1包含一个patch类型的对象。带有标题City block的坐标轴对象2包含一个patch类型的对象。标题为棋盘的坐标轴对象3包含一个类型为patch的对象。标题为Quasi-Euclidean的Axes对象4包含一个patch类型的对象。

输入参数

全部折叠

二值图像,指定为任意维数的数字或逻辑数组。对于数字输入,任何非零像素都被认为是1真正的).

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑

距离度量,指定为这些值之一。

方法

描述

“棋盘”

在二维中,(x1y1)及(x2y2)是

max(│x1- - - - - -x2,││y1- - - - - -y2│)。

“cityblock”

在二维空间中,(x1y1)及(x2y2)是

x1- - - - - -x2│+│y1- - - - - -y2

“欧几里得”

在二维中,(x1y1)及(x2y2)是

x 1 x 2 2 + y 1 y 2 2

“quasi-euclidean”

在二维中,(x1y1)及(x2y2)是

| x 1 x 2 | + 2 1 | y 1 y 2 | | x 1 x 2 | > | y 1 y 2 |

2 1 | x 1 x 2 | + | y 1 y 2 | 否则

有关更多信息,请参见二值图像的距离变换

数据类型:字符|字符串

输出参数

全部折叠

距离,作为大小相同的数值数组返回BW.每个元素的值是该像素与中最近的非零像素之间的距离BW,由距离度量定义,方法

数据类型:

索引数组,作为大小相同的数值数组返回BW.的每个元素idx的最近的非零像素的线性索引BW.这类人idx取决于输入图像中元素的数量,并确定如下。

范围
“uint32” 元素个数(BW)< = 232−1
“uint64” 元素个数(BW)> = 232

数据类型:uint32|uint64

提示

  • bwdist使用快速算法来计算真正的欧几里得距离变换,特别是在二维情况下。其他方法主要是为了教学目的而提供的。然而,对于多维输入图像,特别是那些有许多非零元素的图像,替代距离变换有时要快得多。

  • 这个函数bwdist在6.4版(R2009b)更改。以前版本的图像处理工具箱使用不同的算法来计算欧几里得距离变换和相关的标签矩阵。如果需要与前面的实现产生相同的结果,请使用该函数bwdist_old

算法

  • 对于欧几里得距离变换,bwdist使用快速算法。[1]

  • 对于城市街区、棋盘和准欧几里得距离变换,bwdist采用两步连续扫描算法。[2]

  • 不同的距离测量是通过在扫描中使用不同的权重集来实现的,如[3]

参考文献

[1] Maurer, Calvin, Rensheng Qi,和Vijay Raghavan,“计算任意维度二值图像的精确欧氏距离变换的线性时间算法,”模式分析与机器智能汇刊, 2003年2月,第25卷第2期,第265-270页。

[2] Rosenfeld, Azriel和John Pfaltz,“数字图像处理中的顺序运算”计算机协会杂志,第13卷第4期,1966年,第471-494页。

[3] Paglieroni, David,“距离变换:属性和机器视觉应用”,计算机视觉,图形学和图像处理:图形模型和图像处理,第54卷第1期,1992年1月,第57-58页。

扩展功能

版本历史

R2006a之前介绍