watershed

it2025-01-08  8

文章目录

syntax:Description:Examples输出 分水岭变换

syntax:

L = watershed(A) L = watershed(A,conn)

Description:

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

L = watershed(A)返回一个标签矩阵L,该标签矩阵L标识输入矩阵A的分水岭区域。 L = watershed(A,conn) 指定在分水岭计算中使用的连通性。

Examples

计算分水岭变换并显示结果标签矩阵

clear all close all clc %创建一个包含两个重叠的圆形对象的二进制图像。 显示图像。 center1 = -40; center2 = -center1; dist = sqrt(2*(2*center1)^2); radius = dist/2 * 1.4; lims = [floor(center1-1.2*radius) ceil(center2+1.2*radius)]; [x,y] = meshgrid(lims(1):lims(2)); bw1 = sqrt((x-center1).^2 + (y-center1).^2) <= radius; bw2 = sqrt((x-center2).^2 + (y-center2).^2) <= radius; bw = bw1 | bw2; imshow(bw) title('Binary Image with Overlapping Objects') %计算二进制图像补码的距离变换。 输出图像中每个像素的值是该像素与bw最接近的非零像素之间的距离。 D = bwdist(~bw); imshow(D,[]) title('Distance Transform of Binary Image') %对距离变换后的图像进行补充,以使分水岭变换的亮像素代表高海拔,而暗像素代表低海拔。 D = -D; imshow(D,[]) title('Complement of Distance Transform') %计算分水岭变换。 将ROI以外的像素设置为0。 L = watershed(D); L(~bw) = 0; %将结果标签矩阵显示为RGB图像。 rgb = label2rgb(L,'jet',[.5 .5 .5]); imshow(rgb) title('Watershed Transform')

clear all close all clc %制作包含两个重叠球体的3-D二进制图像 center1 = -10; center2 = -center1; dist = sqrt(3*(2*center1)^2); radius = dist/2 * 1.4; lims = [floor(center1-1.2*radius) ceil(center2+1.2*radius)]; [x,y,z] = meshgrid(lims(1):lims(2)); bw1 = sqrt((x-center1).^2 + (y-center1).^2 + ... (z-center1).^2) <= radius; bw2 = sqrt((x-center2).^2 + (y-center2).^2 + ... (z-center2).^2) <= radius; bw = bw1 | bw2; figure, isosurface(x,y,z,bw,0.5), axis equal, title('BW') xlabel x, ylabel y, zlabel z xlim(lims), ylim(lims), zlim(lims) view(3), camlight, lighting gouraud %计算距离变换。 D = bwdist(~bw); figure, isosurface(x,y,z,D,radius/2), axis equal title('Isosurface of distance transform') xlabel x, ylabel y, zlabel z xlim(lims), ylim(lims), zlim(lims) view(3), camlight, lighting gouraud %补充距离变换,将非对象像素强制为Inf,然后计算分水岭变换。 D = -D; D(~bw) = Inf; L = watershed(D); L(~bw) = 0; figure isosurface(x,y,z,L==1,0.5) isosurface(x,y,z,L==2,0.5) axis equal title('Segmented objects') xlabel x, ylabel y, zlabel z xlim(lims), ylim(lims), zlim(lims) view(3), camlight, lighting gouraud

输出

标签矩阵 标签矩阵,指定为非负整数的数字数组。 标记为0的元素不属于唯一的分水岭区域。 标记为1的元素属于第一分水岭区域,标记为2的元素属于第二分水岭区域,依此类推。

最新回复(0)