主要内容

分水岭

分水岭变换

描述

分水岭变换将图像处理为一个表面,其中浅色像素代表高海拔,深色像素代表低海拔,从而在图像中找到“流域盆地”或“流域脊线”。分水岭变换可用于将感兴趣的连续区域分割成不同的对象。

例子

l=分水岭(一个返回一个标签矩阵l用来识别输入矩阵的分水岭区域一个

l=分水岭(一个康涅狄格州指定要在分水岭计算中使用的连接。

例子

全部折叠

创建包含两个重叠圆形物体的二值图像。显示图像。

center1 = -40;center2 = -center1;dist =√2 * 2 * center1) ^ 2);半径= dist/2 * 1.4;Lims = [floor(center1-1.2*radius) cei2 (center2+1.2*radius)];(x, y) = meshgrid (lims (1): lims (2));bw1 =√(x-center1)。^ 2 + (y-center1)。^2) <= radius; bw2 = sqrt((x-center2).^2 + (y-center2).^2) <= radius; bw = bw1 | bw2; imshow(bw) title(“带有重叠物体的二值图像”

图中包含一个轴对象。标题为“带有重叠对象的二进制图像”的轴对象包含一个类型为“图像”的对象。

计算二值图像补码的距离变换。输出图像中每个像素的值是该像素与最近的非零像素之间的距离bw

D = bwdist (~ bw);imshow (D,[])标题(“二值图像的距离变换”

图中包含一个轴对象。标题为“二值图像距离变换”的轴对象包含一个类型为图像的对象。

对距离变换后的图像进行补全,使分水岭变换中浅色像素代表高海拔,深色像素代表低海拔。

D = - D;imshow (D,[])标题(“距离变换的补码”

图中包含一个轴对象。标题为“距离变换的补码”的轴对象包含一个类型为image的对象。

计算分水岭变换。将ROI之外的像素设置为0

L =分水岭(D);L (~ bw) = 0;

将结果标签矩阵显示为RGB图像。

rgb = label2rgb (L,“喷气机”,(。5。5。5);imshow (rgb)标题(“分水岭变换”

图中包含一个轴对象。标题为分水岭变换的axis对象包含一个类型为image的对象。

制作一个包含两个重叠球体的三维二值图像。

center1 = -10;center2 = -center1;dist =√3 * 2 * center1) ^ 2);半径= dist/2 * 1.4;Lims = [floor(center1-1.2*radius) cei2 (center2+1.2*radius)];[x, y, z] = meshgrid (lims (1): lims (2));bw1 =√(x-center1)。^ 2 + (y-center1)。^ 2 +...(z-center1)。^ 2)< =半径;bw2 =√(x-center2)。^ 2 + (y-center2)。^ 2 +...(z-center2)。^ 2)< =半径;Bw = bw1 | bw2;图、等值面(x, y, z, bw 0.5),轴平等的、标题(“BW”)包含x, ylabely, zlabelzXlim (lims), ylim(lims), zlim(lims) view(3), camlight, lighting高洛德

图中包含一个轴对象。标题为BW的axes对象包含一个patch类型的对象。

计算距离变换。

D = bwdist (~ bw);图、等值面(x, y, z D / 2)半径、轴平等的标题('距离变换等值面')包含x, ylabely, zlabelzXlim (lims), ylim(lims), zlim(lims) view(3), camlight, lighting高洛德

图中包含一个轴对象。标题为距离变换等值面的轴对象包含一个patch类型的对象。

补充距离变换,强制非对象像素,然后计算分水岭变换。

D = - D;D (~ bw) =正;L =分水岭(D);L (~ bw) = 0;图等值面(x,y,z,L==1,0.5)等值面(x,y,z,L==2,0.5)轴平等的标题(“分段对象”)包含x, ylabely, zlabelzXlim (lims), ylim(lims), zlim(lims) view(3), camlight, lighting高洛德

图中包含一个轴对象。标题为“分割对象”的轴对象包含2个类型为patch的对象。

输入参数

全部折叠

输入图像,指定为任意维度的数字或逻辑数组。

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

像素连接性,指定为该表中的一个值。默认连接是8用于二维图像263 d图像。

价值

意义

二维的连接性

四连接

如果像素的边缘相接触,则它们是连接的。一个像素的邻域是在水平或垂直方向上相邻的像素。

8-connected

如果像素的边缘或角相接触,则它们是连通的。像素的邻域是水平、垂直或对角方向上相邻的像素。

三维的连接性

6-connected

如果它们的脸相接触,像素就会连接起来。一个像素的邻域是:

  • 其中一个方向:进,出,左,右,上,下

18-connected

如果像素的面或边缘相接触,它们就被连接起来。一个像素的邻域是:

  • 其中一个方向:进,出,左,右,上,下

  • 两个方向的组合,如垂直或向上

26-connected

如果像素的面、边或角相接触,则它们是相连的。一个像素的邻域是:

  • 其中一个方向:进,出,左,右,上,下

  • 两个方向的组合,如垂直或向上

  • 三个方向的组合,如右上或左下

更高的维度,分水岭使用默认值conndef(ndims (A),“最大”)

连通性也可以通过指定一个3 × 3 ×…3的矩阵0年代和1年代。1-值元素定义相对于的中心元素的邻域位置康涅狄格州.请注意,康涅狄格州必须对中心元素对称。看到指定自定义连接性为更多的信息。

请注意

如果指定非默认连接,则图像边缘的像素可能不会被认为是边界像素。例如,如果Conn = [0 0 0];1 1 1;0 0 0),第一行和最后一行上的元素不被认为是边界像素,因为根据连接性定义,它们没有连接到图像外部的区域。

数据类型:|逻辑

输出参数

全部折叠

标号矩阵,指定为非负整数的数字数组。元素标签0不属于一个独特的分水岭地区。元素标签1标记为2的元素属于第一个流域区域,以此类推。

提示

  • 此函数使用的分水岭变换算法在图像处理工具箱™软件的5.4 (R2007a)版本中更改。以前的算法偶尔会产生标记的不相邻的流域。如果您需要获得与前面算法相同的结果,请使用该函数watershed_old

  • 为了防止过度分割,使用imhmin函数,然后使用分水岭函数。

算法

分水岭使用Fernand Meyer算法[1]

参考文献

[1] Meyer, Fernand, "地形距离和分水岭线"信号处理,第38卷,1994年7月,113-125页。

扩展功能

之前介绍过的R2006a