主要内容

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 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0

计算距离变换。

[D, IDX] = bwdist (bw)
D =5 x5单一矩阵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 1.0000 1.4142 1.0000 1.4142 1.0000 1.4142 1.0000 1.4142 1.0000 1.4142 1.0000 1.4142 1.0000
IDX =5 x5 uint32矩阵7 7 7 7 7 7 7 7 7 19 7 7 7 19 19 7 7 19 19 19 19 19 19 19 19

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

这个示例演示了如何比较支持的距离方法的2-D距离变换。金宝app在图中,注意准欧几里得距离变换如何最好地近似由欧几里得距离方法得到的圆形。

bw = 0 (200200);bw (50,50) = 1;bw (50150) = 1;bw (150100) = 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(“欧几里得”)举行, imcontour(D1) subplot(2,2,2), imshow(RGB2), title(“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个类型为image, contour的对象。标题为棋盘的坐标轴物体3包含2个类型为图像,轮廓的物体。标题为拟欧几里得的坐标轴对象4包含两个类型为图像、轮廓的对象。

这个例子演示了如何比较一个中心包含一个非零像素的三维图像的距离变换的等值线图。

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”);figure subplot(2,2,1),等值面(D1,15),轴平等的(3)灯光、照明高洛德、标题(“欧几里得”)子图(2,2,2),等值面(D2,15),轴平等的(3)灯光、照明高洛德、标题(“街区”)子图(2,2,3),等值面(D3,15),轴平等的(3)灯光、照明高洛德、标题(“棋盘”)子图(2,2,4),等值面(D4,15),轴平等的(3)灯光、照明高洛德、标题(“Quasi-Euclidean”

图中包含4个轴对象。标题为欧几里得的坐标轴对象1包含一个patch类型的对象。标题为City block的对象2包含一个patch类型的对象。标题为棋盘的坐标轴对象3包含一个补丁类型的对象。标题为“准欧几里得”的轴对象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,“计算任意维二值图像精确欧氏距离变换的线性时间算法”,模式分析与机器智能学报,第25卷,第2期,2003年2月,265-270页。

[2] Rosenfeld, Azriel and John Pfaltz,《数字图像处理中的顺序操作》计算机协会学报,第13卷第4期,1966年,第471-494页。

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

扩展功能

之前介绍过的R2006a