文档

bwdist

二值图像的距离变换

语法

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

描述

D = bwdist(BW)计算二值图像的欧氏距离变换BW.中的每个像素BW的最近的非零像素之间的距离,距离变换赋值一个数字BWbwdist默认使用欧氏距离度量。BW可以有任何维度。D是一样的尺寸吗BW

[D,IDX] = bwdist(BW)还以索引数组的形式计算最接近像素的映射,IDX.(最接近像素映射也被称为特征映射、特征变换或最近邻变换。)IDX尺寸和BW而且D.的每个元素IDX的最近的非零像素的线性索引BW

[D]; [D];方法计算距离变换,其中方法指定备用距离度量。方法可以采用下列值中的任何一个。

方法

描述

“棋盘”

在二维中,(之间的棋盘距离)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 | 否则

[gpuarrayD, gpuarrayIDX]= bwdist(gpuarrayBW)计算二值图像的欧氏距离变换gpuarrayBW,在图形处理器上执行该操作。图像必须是2- d的,并且小于2个32-1元素。另外,你只能计算欧氏距离度规。此语法需要并行计算工具箱™。

类的支持金宝app

BW可以是数值的或逻辑的,而且它必须是非稀疏的。D是否一个矩阵的大小与BW.的班级IDX取决于输入图像中元素的数量,并由下表确定。

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

gpuarrayBW可以是二维图形阵列类型uint8uint16uint32int8int16int32逻辑gpuarrayD是一个与?大小相同的gpuArraygpuarrayBW和底层类gpuarrayIDX是一个与?大小相同的gpuArraygpuarrayBW和底层类uint32

例子

全部折叠

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

创建一个二值图像。

Bw = 0 (5,5);Bw (2,2) = 1;Bw (4,4) = 1
bw =0 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×5单矩阵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×5 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 = gpu .zero (5,5);Bw (2,2) = 1;Bw (4,4) = 1;

计算距离变换。

[D,IDX] = bwdist(bw)

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

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(mat2gray(D1), [1 1 3]);RGB2 = repmat(mat2gray(D2), [1 1 3]);RGB3 = repmat(mat2gray(D3), [1 1 3]);RGB4 = repmat(mat2gray(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”

提示

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

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

算法

对于欧氏距离变换,bwdist中描述的快速算法

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

对于城市街区、棋盘和拟欧氏距离变换,bwdist使用中描述的双通道顺序扫描算法

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

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

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

扩展功能

另请参阅

|

主题

R2006a之前介绍过

这个话题有帮助吗?