文档

bwdist

二值图像的距离变换

语法

D = bwdist (BW)
[D, idx] = bwdist (BW)
[D, idx] = bwdist (BW,方法)
[gpuarrayD, gpuarrayIDX] = bwdist (gpuarrayBW)

描述

D= bwdist (BW计算二值图像的欧氏距离变换BW.中的每个像素BW的最近的非零像素之间的距离,距离变换赋值一个数字BW

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

Didx) = bwdist (BW方法使用指定的备用距离度量值计算距离变换方法

gpuarrayDgpuarrayIDX) = bwdist (gpuarrayBW计算二维二值图像的欧氏距离变换gpuarrayBW,在图形处理器上执行该操作。此语法需要并行计算工具箱™。

例子

全部折叠

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

创建一个二值图像。

bw = 0 (5,5);bw (2, 2) = 1;bw (4, 4) = 1
bw =5×50 0 0 0 0 1 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 0 0 0 0 0 0 0 0 0 0 0 0

计算距离变换。

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

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

创建一个图像。

bw = gpuArray.zeros (5,5);bw (2, 2) = 1;bw (4, 4) = 1;

计算距离变换。

[D, IDX] = bwdist (bw)

这个例子展示了如何比较支持的距离方法的二维距离转换。万博1manbetx在图中,注意准欧几里得距离变换是如何最好地近似于欧几里得距离法所得到的圆形的。

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(“街区”)举行, imcontour(D2) subplot(2,2,3), imshow(RGB3), title(“棋盘”)举行, imcontour(D3) subplot(2,2,4), imshow(RGB4), title(“Quasi-Euclidean”)举行imcontour (D4)

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

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”

输入参数

全部折叠

二值图像,指定为任何维度的实数、非稀疏、数值或逻辑数组。对于数字输入,任何非零像素都被认为是

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

距离度量,指定为以下之一。

方法

描述

“棋盘”

在二维中,(之间的棋盘距离)x1y1)和(x2y2)是

马克斯(abs (x1-x2), abs (y1-y2))

“cityblock”

在二维中,城市街区之间的距离(x1y1)和(x2y2)是

abs (x1-x2) + abs (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 | 否则

数据类型:字符|字符串

在GPU上运行的二进制图像,指定为gpuArray包含小于2的二维图像32像素。图像可以是数据类型的int8uint8int16uint16int32uint32,或逻辑

输出参数

全部折叠

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

数据类型:

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

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

数据类型:uint32|uint64

当在GPU上运行时,返回为gpuArray.输出gpuarrayD和输入的大小一样gpuarrayBW,为数据类型

索引数组,当在GPU上运行时,返回为gpuArray.输出gpuarrayIDX和输入的大小一样gpuarrayBW,为数据类型uint32

提示

  • bwdist使用快速算法来计算真欧氏距离变换,特别是在二维情况下。其他方法主要是出于教学的原因。然而,对于多维输入图像,特别是那些有许多非零元素的图像,可选距离变换有时明显更快。

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

算法

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

  • 对于城市街区、棋盘和拟欧氏距离变换,bwdist使用双通道,顺序扫描算法。[2]

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

参考文献

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

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

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

扩展功能

之前介绍过的R2006a

这个话题有帮助吗?